Autorisation de FTP avec IPTables

26

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
IOTAMAN
la source
1
corrigé votre mise en forme afin qu'elle soit lisible.
Avery Payne
je suppose que vous utilisez Rackspace? le tutoriel a cette faille. Suivez simplement les instructions de @Evan Anderson.
Andres SK

Réponses:

41

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 le port TCP 21 et les connexions sortantes depuis le port 20.
  • Pour faire du FTP en mode passif, vous devez autoriser les connexions entrantes au port TCP 21 et les connexions entrantes à 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 FTP passif, 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.

Evan Anderson
la source
Merci pour l'aide, les suggestions que vous avez décrites pour le mode passif ont résolu mon problème. J'apprécie l'aide.
IOTAMAN
Le redémarrage d'iptables effacera toutes les modifications que vous avez apportées si IPTABLES_SAVE_ON_STOP n'est pas défini sur "oui".
Kevin M
@Kevin: Absolument, totalement un bon point! > sourire <je vais déposer une modification là-dessus maintenant.
Evan Anderson
@ GLB03: Pas de problème. J'habite à Server Fault ...> smile <
Evan Anderson
Cette réponse n'a pas fonctionné pour moi, donc pour toute autre personne ayant ce problème, je soulignerai que cela (et également l'ouverture du port 21 d'entrée / sortie) a fonctionné pour moi: linuxquestions.org/questions/linux-security-4 /… -
ehsanul
0

Essayez cette règle. Remarque: $EXTIPest 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
Mat
la source
0

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

Kornel
la source