Ermöglichen von FTP mit IPTables

26

Mein aktuelles Szenario beinhaltet das Zulassen verschiedener Regeln, aber ich brauche FTP, um von überall aus erreichbar zu sein. Das Betriebssystem ist Cent 5 und ich verwende VSFTPD. Die Syntax scheint nicht korrekt zu sein. Alle anderen Regeln funktionieren korrekt.

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

Die folgenden Regeln habe ich ausprobiert.

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
IOTAMAN
quelle
1
Die Formatierung wurde so korrigiert, dass sie lesbar ist.
Avery Payne
Ich gehe davon aus, dass Sie Rackspace verwenden? Das Tutorial hat diesen Fehler. Folgen Sie einfach den Anweisungen von @Evan Anderson.
Andres SK

Antworten:

41

Hier ist das Dokument, auf das ich die Leute verweise, damit sie dem FTP-Protokoll folgen können: http://slacksite.com/other/ftp.html

  • Für FTP im aktiven Modus müssen Sie eingehende Verbindungen zu TCP-Port 21 und ausgehende Verbindungen zu Port 20 zulassen.
  • Um im passiven FTP-Modus zu arbeiten, müssen Sie eingehende Verbindungen zu TCP-Port 21 und eingehende Verbindungen zu einem zufällig generierten Port auf dem Server-Computer zulassen (die Verwendung eines Conntrack-Moduls in Netfilter erforderlich).

Sie haben nichts bezüglich Ihrer OUTPUT-Kette in Ihrem Post, also werde ich das auch hier aufnehmen. Wenn Ihre OUTPUT-Kette default-drop ist, ist dies von Bedeutung.

Fügen Sie diese Regeln zu Ihrer iptables-Konfiguration hinzu:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

Um den passiven FTP-Modus zu unterstützen, müssen Sie das ip_conntrack_ftp-Modul beim Booten laden. Kommentieren Sie die Zeile IPTABLES_MODULES in der Datei / etc / sysconfig / iptables-config aus und ändern Sie sie, um Folgendes zu lesen:

IPTABLES_MODULES="ip_conntrack_ftp"

Speichern Sie die iptables-Konfiguration und starten Sie iptables neu.

service iptables save
service iptables restart

Um ein Problem mit VSFTPD vollständig auszuschließen, stoppen Sie VSFTPD, vergewissern Sie sich, dass es nicht mit "netstat -a" auf Port 21 wartet, und führen Sie dann Folgendes aus:

nc -l 21

Dadurch wird Netcat gestartet, das Port 21 abhört, und es wird eine Echoeingabe an Ihre Shell gesendet. TELNET von einem anderen Host zu Port 21 Ihres Servers und stellen Sie sicher, dass Sie eine TCP-Verbindung erhalten und die Ausgabe in der Shell angezeigt wird, wenn Sie die TELNET-Verbindung eingeben.

Zum Schluss bringen Sie VSFTPD wieder in Betrieb, vergewissern sich, dass es Port 21 überwacht, und versuchen Sie erneut, eine Verbindung herzustellen. Wenn die Verbindung zu Netcat funktioniert hat, sind Ihre Iptables-Regeln in Ordnung. Wenn die Verbindung zu VSFTPD nicht funktioniert, nachdem Netcat dies getan hat, stimmt etwas mit Ihrer VSFTPD-Konfiguration nicht.

Evan Anderson
quelle
Vielen Dank für die Hilfe, die Vorschläge, die Sie für den passiven Modus umrissen haben, haben mein Problem behoben. Ich schätze die Hilfe.
IOTAMAN
Wenn Sie iptables neu starten, werden alle Änderungen gelöscht, die Sie vorgenommen haben, wenn IPTABLES_SAVE_ON_STOP nicht auf "yes" gesetzt ist.
Kevin M
@ Kevin: Absolut, absolut ein guter Punkt! > smile <Ich werde das jetzt bearbeiten.
Evan Anderson
@ GLB03: Kein Problem. Ich lebe Serverfehler ...> Lächeln <
Evan Anderson
Diese Antwort hat bei mir nicht funktioniert. Daher möchte ich darauf hinweisen, dass dies (und auch das Öffnen der Eingabe / Ausgabe von Port 21) bei mir funktioniert hat: linuxquestions.org/questions/linux-security-4 /… -
ehsanul
0

Probieren Sie diese Regel aus. Hinweis: $EXTIPist Ihre externe IP-Adresse für den FTP-Server.

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT
Matt
quelle
0

In meinem Fall fehlte mir das Kernelmodul ip_conntrack_ftp. Es muss geladen werden. So können Sie dies versuchen:

modprobe ip_conntrack_ftp

Fügen Sie außerdem ip_conntrack_ftp zu / etc / modules hinzu, damit es nach dem Neustart funktioniert

Kornel
quelle