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é.
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.
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.
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)
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.
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