Das Einrichten von vsftpd hängt vom Listenbefehl ab


7

Ich habe vsftpd installiert und konfiguriert. Wenn ich versuche, über Transmit eine Verbindung zum FTP-Server herzustellen, kann eine Verbindung hergestellt werden, hängt jedoch an Listing "/".

Dann erhalte ich die Meldung: Die Dateiliste für "/" konnte nicht abgerufen werden. Zeitüberschreitung bei der Steuerverbindung.

Hat es etwas mit meinen iptables zu tun? Meine Regeln sind wie folgt:

*filter


#  Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT


#  Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


#  Allows all outbound traffic
#  You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT


# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT


#  Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT


# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT


# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7


# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

Antworten:


5

Ihre Server-Iptables-Konfiguration ist nicht (direkt) das Problem. Höchstwahrscheinlich wird die FTP-Datenverbindung des Servers daran gehindert, Ihren Client-Computer zu erreichen. Standardmäßig verwendet FTP den sogenannten "aktiven" Modus, bei dem der Server tatsächlich versucht, die Datenverbindung zum Client wiederherzustellen. Consumer-NAT-Router blockieren dies normalerweise, was zu dem von Ihnen angegebenen Verbindungszeitlimit führt.

Stellen Sie Ihren FTP-Client so ein, dass er den "passiven" Modus verwendet, und er sollte funktionieren. Wenn dies nicht der Fall ist, überprüfen Sie, ob das nf_conntrack_ftpKernelmodul (ältere Kernel nennen es ip_conntrack_ftp) auf dem Server geladen ist:

sudo lsmod | grep conntrack_ftp

Wenn der obige Befehl nichts zurückgibt, wird das Modul nicht geladen und Sie müssen es wie folgt laden:

sudo modprobe nf_conntrack_ftp

Auch Sie wollen sicherstellen , dass das Modul beim Booten geladen wird, indem sie nf_conntrack_ftpin /etc/modules.

Das nf_conntrack_ftpKernelmodul verfolgt den Status der FTP-Verbindungen auf dem Server. Dadurch kann die Verbindung im "passiven" Modus von Ihrem Client-Computer von der Statusregel RELATED in Ihrer INPUT-Kette akzeptiert werden.


2

Stellen Sie zunächst sicher, dass vsftpd für den aktiven und den passiven Modus auf eindeutige Ports beschränkt ist:

ftp_data_port=20
listen_port=21
pasv_min_port=64000
pasv_max_port=64321

Ändern Sie nun Ihre iptables, um sicherzustellen, dass diese Ports die Regeln durchlaufen können und Sie festgelegt werden sollten. Standardmäßig sind die passiven Ports zufällig. Indem Sie die oben genannten Einstellungen vornehmen und Ihre iptables reparieren, lösen Sie das "Double Firewall-Problem", sodass Clients von überall aus arbeiten können.


Ich denke, das ist ziemlich nah, aber um dies zu verdeutlichen, müssen Sie diese Einträge zu Ihrer /etc/vsftpd.config-Datei sowie zu einigen anderen hinzufügen: pasv_enable = YES pasv_max_port = 64000 pasv_min_port = 64321 port_enable = YES pasv_address = <your-static -ip-höchstwahrscheinlich-von-elastischen-ips> pasv_addr_resolve = NO
longda

1

Ich mache keine Iptables, aber aus dem Regelsatz, den Sie zeigen, geht hervor, dass Sie ein wenig mehr über die Funktionsweise von FTP lernen müssen.

FTP ist insofern ein "ungerader" Dienst, als es einen Steuerport und einen Datenport hat. Es reicht nicht aus, nur Port 21 zu öffnen, das ist nur der Steuerport. Datenports hängen davon ab, ob Sie eine aktive oder passive FTP-Übertragung verwenden.

Ich weiß nicht, wie iptables funktioniert, aber Sie müssen den Regelsatz so erweitern, dass er auch Datenverkehr auf Port 20 für FTP-Daten akzeptieren kann (wenn Sie Standard-FTP-Portübertragungen verwenden möchten).

Andernfalls müssen Sie den Paketfilter für die passive Datenübertragung konfigurieren und Ihren Client anweisen, diese Form der Kommunikation / Datenübertragung ebenfalls zu verwenden.

Sie finden diese Site nützlich: http://www.mdjnet.dk/ftp.html


0

Ohne die Regel für die Ausgabe von ESTABLISHED, RELATED kann der Port 20 ftp-data die Daten nicht zurückgeben.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.