web-dev-qa-db-fra.com

Iptables pour autoriser le FTP entrant

Je souhaite autoriser le trafic FTP entrant.

CentOS 5.4:

C'est mon /etc/sysconfig/iptables fichier.

# 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

De plus, par défaut, le module ip_conntrack_netbios_n est chargé.

#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  ]

Mais le problème n'est pas avec ce module, car j'ai essayé de le décharger et toujours pas de chance.

Si je désactive iptables, je peux transférer ma sauvegarde d'une autre machine vers FTP. Si iptables est en vigueur, le transfert a échoué.

33
Being Gokul

L'ajout de NEW l'a corrigé, je crois.

Maintenant, mon fichier iptables ressemble à ceci ..

# Generated by iptables-save v1.3.5 on Thu Oct  3 22:25:54 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [824:72492]

-A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -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 --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Oct  3 22:25:54 2013

Le taper comme réponse, car trop de caractères ne sont pas autorisés dans les commentaires. Merci beaucoup pour votre aide.

5
Being Gokul

Votre serveur ftp a besoin d'un canal pour transférer des données. Port 21 est utilisé pour établir la connexion. Pour rendre le transfert de données possible, vous devez activer le port 20 ainsi que. Voir la configuration suivante

Chargez d'abord le module suivant pour vous assurer que les connexions ftp passives ne sont pas rejetées

modprobe ip_conntrack_ftp

Autoriser les connexions FTP sur le port 21 entrants et sortants

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"

Autoriser le port FTP 20 pour les connexions actives entrantes et sortantes

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"

Enfin, autorisez le trafic entrant passif FTP

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"

Pour plus d'informations sur les problèmes de FTP et de pare-feu, voir: http://slacksite.com/other/ftp.html#active

Modifier: Ajout de NEW à la règle d'entrée du port 21.

27
Valentin Bajrami

J'ai déjà vu des règles aussi complètes dans plusieurs blogs, etc. et je me suis demandé pourquoi ne pas simplement utiliser

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

avec la nf_conntrack_ftp module. C'est plus concis et lisible, ce qui est généralement une bonne chose, surtout avec les pare-feu ...

FWIW, il semble qu'il y ait eu un changement dans le noyau 4.7, de sorte que vous devez soit définir net.netfilter.nf_conntrack_helper=1 via sysctl (par exemple, mettez-le dans /etc/sysctl.d/conntrack.conf) Ou utiliser

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

(voir ici pour plus de détails)

15
Jakob

Client FTP:

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

SERVEUR FTP:

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

Pour basculer entre le mode passif et le mode actif côté client

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

Si vous avez besoin de connexions actives et passives et acceptez déjà les connexions ESTABLISHED, telles que:

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

Il vous suffit ensuite d'ouvrir le port 21 et d'ajouter une règle spéciale pour les ports passifs. Aucune règle n'est nécessaire pour le port 20 car elle est déjà acceptée par la règle ESTABLISHED ci-dessus.

Acceptez d'abord les nouvelles connexions sur port 21:

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

Ajoutez ensuite l'assistant CT pour les ports passifs 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

Voir également:

Remarque: vous devez définir le 1024: comme sur votre serveur FTP: recherchez les ports passifs par défaut dans votre configuration FTP. Sinon, vous ouvririez trop de ports qui ne sont peut-être pas relatifs à FTP.

Remarque importante: Je n'ai pas ajouté de règles OUTPUT car mes valeurs par défaut vont avec iptables -P OUTPUT ACCEPT. Ce qui signifie que je fais confiance à ce qui sort de ma boîte. Ce n'est peut-être pas une bonne option, en particulier dans une configuration NAT.

Note très importante: FTPS ne fonctionnera pas avec une telle configuration, car le port passif est caché (crypté), donc il n'y a aucun moyen pour iptables pour deviner le bon port. Voir Modification des IPTables pour autoriser FTP sur TLS à l'aide de ports passifs et https://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok

0
Yvan