Iptables, um eingehende FTP-Zugriffe zuzulassen

Iptables, um eingehende FTP-Zugriffe zuzulassen

Ich möchte eingehenden FTP-Verkehr zulassen.

CentOS 5.4:

Dies ist meine /etc/sysconfig/iptablesDatei.

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

Außerdem wird standardmäßig das Modul ip_conntrack_netbios_n geladen.

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

Das Problem liegt jedoch nicht bei diesem Modul, da ich versucht habe, es zu entladen, aber trotzdem kein Glück hatte.

Wenn ich iptables deaktiviere, kann ich mein Backup von einem anderen Rechner auf FTP übertragen. Wenn iptables dies erzwingt, schlägt die Übertragung fehl.

Antwort1

Ihr FTP-Server benötigt einen Kanal, um Daten zu übertragen. Der Port 21wird zum Herstellen der Verbindung verwendet. Um die Datenübertragung zu ermöglichen, müssen Sie also 20auch den Port aktivieren. Siehe die folgende Konfiguration

Laden Sie zunächst das folgende Modul, um sicherzustellen, dass passive FTP-Verbindungen nicht abgelehnt werden

modprobe ip_conntrack_ftp

Erlaube FTP-Verbindungen auf Port 21ein- und ausgehend

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

20FTP-Port für aktive eingehende und ausgehende Verbindungen zulassen

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

Endlich passiven eingehenden FTP-Verkehr zulassen

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

Weitere Informationen zu FTP- und Firewall-Problemen finden Sie unter:http://slacksite.com/other/ftp.html#active

Bearbeiten:NEWZur Eingaberegel für Port 21 hinzugefügt .

Antwort2

Ich habe solche umfangreichen Regeln bereits in mehreren Blogs usw. gesehen und mich gefragt, warum nicht einfach

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

zusammen mit dem nf_conntrack_ftpModul. Dies ist prägnanter und lesbarer, was im Allgemeinen eine gute Sache ist, insbesondere bei Firewalls ...

FWIW, es scheint, dass es eine Änderung im Kernel 4.7 gab, so dass Sie entweder net.netfilter.nf_conntrack_helper=1via setzen müssen sysctl(z. B. setzen Sie es in /etc/sysctl.d/conntrack.conf) oder verwenden

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp

(sehenHierfür mehr Details)

Antwort3

FTP-Client:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

FTP-SERVER:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

So wechseln Sie clientseitig zwischen passivem und aktivem Modus

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.

Antwort4

Wenn Sie sowohl aktive als auch passive Verbindungen benötigen und bereits ESTABLISHEDVerbindungen akzeptieren, wie zum Beispiel:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Dann müssen Sie nur noch Port 21 öffnen und eine spezielle Regel für passive Ports hinzufügen. Für Port 20 ist keine Regel erforderlich, da dieser bereits von der ESTABLISHEDobigen Regel akzeptiert wird.

Akzeptieren Sie neue Verbindungen zunächst am port 21:

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

Fügen Sie dann den CT-Helfer für passive Ports hinzu 1024::

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

Siehe auch:

Notiz:Sie müssen dies in Ihrem FTP-Server wie folgt einstellen 1024:: Suchen Sie in Ihrer FTP-Konfiguration nach den standardmäßigen passiven Ports. Andernfalls würden Sie zu viele Ports öffnen, die möglicherweise nicht FTP-relativ sind.

Wichtiger Hinweis:Ich habe keine OUTPUTRegeln hinzugefügt, da meine Standardeinstellungen so sind iptables -P OUTPUT ACCEPT. Das bedeutet, dass ich dem vertraue, was aus meiner Box kommt. Das ist möglicherweise keine gute Option, insbesondere in einem NAT-Setup.

Ganz wichtiger Hinweis:FTPS funktioniert mit einem solchen Setup nicht, da der passive Port versteckt (verschlüsselt) ist und es daher keine Möglichkeit gibt, iptablesden richtigen Port zu erraten. SieheÄndern von IPTables, um FTP über TLS unter Verwendung passiver Ports zuzulassenUndhttps://serverfault.com/questions/811431/sind-meine-iptables-für-ftps-mit-tls-ok

verwandte Informationen