[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: iptables et ftp (2/2)



Eric LeBlanc wrote:
On Thu, 18 Dec 2003, Lehmann Guillaume wrote:


Pour un firewall ne filtrant que le ftp, voici un script écrit
*rapidement* pour proposer un filtrage plus fin (smpt, http, et
autre sont beaucoup plus simples à mettre en place, donc non
indiqués ici)...

# Attention, ne pas confondre nouvelle connexion, avec connexion
#"non encore intégrée" dans la table d'états.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

# Quel que soit le mode ftp utilisé,
#la connexion s'établie sur le port 21,
iptables -A INPUT -p tcp --sport 21 --dport 1024: -m state
--state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 21 -j ACCEPT


Ce ne serait pas l'inverse? le clietn veut se connecter au serveur ftp,
donc le port destination est 21, et le port source est random...
Effectivement, je considèrais que la machine sur laquelle on appliquait ces règles était le client. Je le précisais d'ailleurs ci-dessous (==> "client qui est ici la machine locale").



# ensuite elle se poursuit avec le transfert des données
#sur le port 20 du serveur (!= client qui
#est ici la machine locale).
iptables -A INPUT -p tcp --sport 20 --dport 1024: -m state
--state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUPUT -p tcp --sport 1024: --dport 20 -m state
--state ESTABLISHED,RELATED -j ACCEPT


Contraire... et on prend pas 1024, mais tout port entre 1024 a 65535, ou
idealement, utiliser le module qui se contente de "tracker" la connexion
correspondante et d'ouvrir le port qui l'interesse uniquement
(ip_conntrack_ftp)
On s'est mal compris, la simplification faite ici peut induire en erreur (tout est dans le ":") :
1024:
veut dire 1024:65535
On est donc bien d'accord :)



# En revanche, pour l'autre type de ftp (actif), c'est
#différent.
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state
--state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state
--state ESTABLISHED,RELATED -j ACCEPT

Il suffit de rajouter les @IP et je pense que l'on atteint un
niveau de filtrage beaucoup plus fin.


le FTP n'a pas juste les port 1024... c'est des randoms comme dit ci-haud.
Voir ma remarque précédente.


Bien que ce soit totalement en dehors du sujet de Debian, je me permet de
corriger ici, pour eviter d'induire en erreur les debutants:

Pour le mode Actif, il est IMPOSSIBLE d'ecrire juste des regles
d'iptables, il *FAUT* absolment un module (kernel land (comme ip_nat_ftp)
ou userland (comme ftp-proxy d'openbsd) pour re-ecrire l'adresse ip.
Je suis d'accord aussi :) Comme cela était dit dans les précédents emails, je ne l'ai pas repris ici.


Je m'explique:

SERVEUR FTP (1.2.3.4) -- GATWEAY/NAT (1.2.3.5) -- CLIENT INTERNE
(192.168.1.2)

A titre de rappel, le 192.168.1.2 n'est PAS ROUTABLE sur internet.  Si le
client est en mode actif, donc c'est le serveur qui se connecte au client
lrosqu'il envoie la commande PORT.

Le HIC: il envoie la commande port avec son ip locale, du genre:

PORT 192,168,1,2,3,24

(le 3,24 c'est pour designer le port).  Le serveur va donc se brancher au
192.168.1.2.. ce qui ne marchera _pas du tout_.  Il faudra donc re-ecrire
cette adresse dans le header ftp (et non dans le header ip).

Solutions possibles:
 - inserer le module ip_nat_ftp
 - coder/installer un proxy ftp
 - oublier le mode actif, et prendre le passif uniquement
J'avais cru comprendre qu'il était question d'un serveur qui se synchronisait sur un autre serveur, et donc qu'il se comportait comme un client au final ... j'aurais du mieux lire :-/

Bonne soirée
Guillaume



Reply to: