NFS und iptables unter Gentoo Linux

Wer einen Linux-Server, auf dem ein NFS-Server läuft, mit iptables absichern möchte, der hat es nicht leicht. In der Standard-Konfiguration verwenden die an NFS beteiligten Dienste nämlich ständig andere Ports. Aber es gibt hierfür Abhilfe. Am Beispiel von Gentoo Linux unter einem 2.6.32er Kernel mit NFS möchte ich das einmal kurz skizzieren, wie es doch einfach geht.

Zunächst muß die Datei /etc/conf.d/nfs bearbeitet werden, so dass folgendes Zeilen hinzugefügt bzw. geändert werden müssen:

OPTS_RPC_MOUNTD="-p 32767"
OPTS_RPC_STATD="-p 32765 -o 32766"
OPTS_RPC_RQUOTAD="-p 32764"

Danach hängt es davon ab, ob man ein Kernel-Modul für lockd verwendet oder dieses in den Kernel kompiliert wurde. Bei mir ist es in den Kernel integriert, so dass ich in /boot/grub/grub.conf folgendes an meinen Kernel anhängen muß:

lockd.nlm_udpport=4001 lockd.nlm_tcpport=4001

Jetzt kann man nach einem Neustart die Regeln für die Firewall ändern. Ich mache die immer, indem ich per /etc/init.d/iptables stop die Regeln speichere, dann die /var/lib/iptables/rules-save bzw. /var/lib/ip6tables/rules-save bearbeite und dann per /etc/init.d/iptables start die Firewall wieder mit den neuen Regeln aktiviere. Allerdings ist man dann natürlich während dieses kurzen Momentes ungeschützt! Hier einmal ein Beispiel meiner rules-save für die filter-Bereich:

# Generated by iptables-save v1.4.3.2 on Tue Apr 27 15:21:02 2010
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
[0:0] -A INPUT -i lo -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 161 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -p tcp -m tcp --dport 873 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 111 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 111 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 2049 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 2049 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 4001 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 4001 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 32764 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 32764 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 32765 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 32765 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 32766 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 32766 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p tcp -m tcp --dport 32767 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -i eth0 -p udp -m udp --dport 32767 -m state --state NEW -j ACCEPT
[0:0] -A INPUT -p icmp -j ACCEPT
[0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
[0:0] -A OUTPUT -o lo -j ACCEPT
[0:0] -A OUTPUT -m state --state NEW -j ACCEPT
[0:0] -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Tue Apr 27 15:21:02 2010

Übrigens kann man die aktuell von den RPC-Diensten verwendeten Ports mittels rpcinfo -p herausfinden.

Hier gibt es auch noch einen ausführlicheren Artikel zu dem Thema in Englisch.

Autor:
Datum: Dienstag, 27. April 2010 15:43
Trackback: Trackback-URL Themengebiet: Linux

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

2 Kommentare

  1. 1

    Tolles Howto, was mir bei dieser Problematik weitergeholfen hat, auch wenn es bei mir etwas anders aussieht (Fileserver = NFS-Server, Router mit IPTables = NFS-Client). Ein paar Anregungen habe ich noch:
    – so wie ich es verstanden habe, reichen Portangaben für rpc.lockd in /etc/sysctl aus, die Einträge in der grub.conf würden damit wegfallen
    – deine iptables-Regeln kann man mit der multiport-Option schön zusammenfassen:
    iptables -A INPUT -i eth0 -p tcp -m multiport –dports 111,2049,4001,32764:32767 -j ACCEPT
    iptables -A INPUT -i eth0 -p udp -m multiport –dports 111,2049,4001,32764:32767 -j ACCEPT
    (wenn ich jetzt nichts übersehen habe)

    MfG Yann

  2. 2

    Hallo Yann,

    danke für das Feedback! Ob es in die grub.conf oder in /etc/sysctl gehört hängt meines Wissens nach davon ab, ob Du NFS als Kernel-Modul laufen hast oder direkt in den Kernel kompiliert hast. Wenns direkt im Kernel ist, wie bei mir, dann gehörts in die grub.conf.
    Das Zusammenfassen ist ne schöne Sache beim Einrichten, da hast Du Recht!

    Gruß
    Dennis

Kommentar abgeben

*