web-dev-qa-db-fra.com

Autorisation de FTP avec IPTables

Mon scénario actuel implique d'autoriser diverses règles, mais j'ai besoin que ftp soit accessible de n'importe où. Le système d'exploitation est Cent 5 et j'utilise VSFTPD. Je n'arrive pas à obtenir la syntaxe correcte. Toutes les autres règles fonctionnent correctement.

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

Voici les règles que j'ai essayées.

##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
26
IOTAMAN

Voici le document auquel je réfère les gens pour qu'ils puissent suivre le protocole FTP: http://slacksite.com/other/ftp.html

  • Pour effectuer un FTP en mode actif, vous devez autoriser les connexions entrantes vers TCP port 21 et les connexions sortantes depuis le port 20.
  • Pour faire du FTP en mode passif, vous devez autoriser les connexions entrantes vers TCP port 21 et les connexions entrantes vers un port généré de façon aléatoire sur l'ordinateur serveur (nécessitant l'utilisation d'un module conntrack dans netfilter)

Vous n'avez rien à propos de votre chaîne de SORTIE dans votre message, je vais donc l'inclure ici aussi. Si votre chaîne de SORTIE est par défaut-drop alors cela importe.

Ajoutez ces règles à votre configuration iptables:

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

Pour prendre en charge le mode passif FTP, vous devez alors charger le module ip_conntrack_ftp au démarrage. Décommentez et modifiez la ligne IPTABLES_MODULES dans le fichier/etc/sysconfig/iptables-config pour lire:

IPTABLES_MODULES="ip_conntrack_ftp"

Enregistrez la configuration d'iptables et redémarrez iptables.

service iptables save
service iptables restart

Pour exclure complètement VSFTPD comme étant un problème, arrêtez VSFTPD, vérifiez qu'il n'écoute pas sur le port 21 avec un "netstat -a", puis exécutez a:

nc -l 21

Cela démarrera l'écoute de netcat sur le port 21 et fera écho à l'entrée de votre Shell. À partir d'un autre hôte, TELNET vers le port 21 de votre serveur et vérifiez que vous obtenez une connexion TCP et que vous voyez la sortie dans le shell lorsque vous tapez la connexion TELNET.

Enfin, ramenez VSFTPD, vérifiez qu'il écoute sur le port 21 et essayez de vous reconnecter. Si la connexion à netcat a fonctionné, vos règles iptables sont correctes. Si la connexion à VSFTPD ne fonctionne pas après le netcat, alors quelque chose ne va pas avec votre configuration VSFTPD.

41
Evan Anderson

Essayez cette règle. Remarque: $EXTIP est votre adresse IP externe pour le serveur FTP.

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

Dans mon cas, il me manquait le module du noyau ip_conntrack_ftp. Il doit être chargé. Vous pouvez donc essayer ceci:

modprobe ip_conntrack_ftp

Et ajoutez également ip_conntrack_ftp à/etc/modules pour que cela fonctionne après le redémarrage

0
Kornel