NFS bändigen
Ich betreibe eine Firewall, die zwei lokale Netze voneinander trennen soll. Jetzt muss ich aber den Rechnern im Netz A (192.168.1.0/24) den Zugriff auf einen NFS-Server in Netz B (192.168.2.2) gestatten. Ich habe bereits alles probiert, aber es kommt immer wieder zu Hängern. Wie kann ich Zugriffe auf NFS-Freigaben ermöglichen, ohne gleich das ganze Netz aufzumachen.
Ich betreibe eine Firewall, die zwei lokale Netze voneinander trennen soll. Jetzt muss ich aber den Rechnern im Netz A (192.168.1.0/24) den Zugriff auf einen NFS-Server in Netz B (192.168.2.2) gestatten. Ich habe bereits alles probiert, aber es kommt immer wieder zu Hängern. Wie kann ich Zugriffe auf NFS-Freigaben ermöglichen, ohne gleich das ganze Netz aufzumachen.
Das Network File System (NFS) ist tatsächlich nicht leicht mit festen Regeln zu fassen. Das Problem dabei ist, dass einige der NFS-Dienste als Remote Procedure Calls (RPC) realisiert sind und auf nahezu beliebigen Ports laufen. NFS-Clients erfragen zunächst über den so genannten Portmapper (TCP/UDP-Port 111), auf welchem Port der Dienst läuft. Dazu gehören statd, lockd und mountd. Die aktuellen Ports verrät der Aufruf von
rpcinfo -p
auf dem NFS-Server. Sie ändern sich jedoch schon bei einem Neustart des Servers.
Im Prinzip könnte man ein Netfilter-Modul bauen, das die Portmapper-Antworten ausliest und dann ad hoc die benötigten Ports freischaltet. Da sich jedoch noch niemand diese Arbeit gemacht hat, nageln Sie am besten die einzelnen Dienste auf bestimmten Ports fest, um das alles sauber durch eine Firewall zu bekommen. Wie das zu geschehen hat, ist distributionsspezifisch. Das Folgende schildert die notwendigen Modifikationen an einem Debian-System und sollte sich auf andere Distributionen übertragen lassen.
rpc.statd akzeptiert beim Start die Option „--port 4001“, die Sie in der Datei /etc/default/nfs-common als STATDOPTS eintragen können. Der Lock-Daemon wird auf modernen Systemen als Kernel-Modul geladen und lässt sich über
options lockd nlm_udpport=4002 nlm_tcpport=4002
in /etc/modules.conf auf den Port 4002 festlegen (ab Kernel 2.4.12). Diesen Eintrag erhält man durch Anlegen der Datei /etc/modutils/lockd und anschließenden Aufruf von update-modules. Schließlich können Sie durch RPCMOUNTDOPTS=“-p 4003“ in /etc/default/nfs-kernel-server den rpc.mountd auf Port 4003 fixieren.
Nach einem Neustart von nfs-common und nfs-kernel-server sollte rpcinfo die Dienste auf den spezifizierten Ports anzeigen. Für Quota-Beschränkungen müssen Sie das Paket „quota“ ab Version 3.08 einsetzen und in /etc/services
rquotad 4004/tcp
rquotad 4004/udp
eintragen.
Auf der Firewall sind folglich die Ports 111 (portmapper), 2049 (nfsd), 4001 bis 4003 und eventuell 4004 durchzuleiten. Die portmapper-Regeln lauten dafĂĽr beispielsweise
iptables -A FORWARD -p tcp -s 192.168.1.0/24 -d 192.168.2.2/24 --dport 111 -j ACCEPT
iptables -A FORWARD -p udp -s 192.168.1.0/24 -d 192.168.2.2/24 --dport 111 -j ACCEPT
Behalten Sie jedoch im Hinterkopf, dass man dies nur in leidlich vertrauenswürdigen Umgebungen in Erwägung ziehen sollte. NFS ist ein inhärent unsicheres Protokoll und sollte keinesfalls für das Internet freigegeben werden. (ju)