Le Forum Non Officiel de la DEDIBOX
Vous n'êtes pas identifié.
Ola !
J'ai trouvé un article très interessant ici:
http://www.generation-linux.net/article … _article=1
Mais j'ai un soucis...
Impossible de passer l'étape [R] LIST -al dans mon client ftp...
[R] Connecting to Mon_IP -> IP=Mon_IP PORT=21 [R] Connected to Mon_IP [R] 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- [R] 220-You are user number 2 of 50 allowed. [R] 220-Local time is now 22:54. Server port: 21. [R] 220-This is a private system - No anonymous login [R] 220 You will be disconnected after 15 minutes of inactivity. [R] USER Mon_USER [R] 331 User Mon_USER OK. Password required [R] PASS (hidden) [R] 230-User Mon_USER has group access to: monuser plugdev video audio [R] 230- floppy cdrom dialout [R] 230 OK. Current directory is /home/Mon_USER [R] SYST [R] 215 UNIX Type: L8 [R] FEAT [R] 211-Extensions supported: [R] EPRT [R] IDLE [R] MDTM [R] SIZE [R] REST STREAM [R] MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*; [R] MLSD [R] TVFS [R] ESTP [R] PASV [R] EPSV [R] SPSV [R] ESTA [R] AUTH TLS [R] PBSZ [R] PROT [R] 211 End. [R] CWD /home/Mon_USER/ [R] 250 OK. Current directory is /home/Mon_USER [R] PWD [R] 257 "/home/Mon_USER" is your current location [R] TYPE A [R] 200 TYPE is now ASCII [R] PORT 192,168,1,168,8,254 [R] 200 PORT command successful [R] LIST -al
Ca reste pendant des plombes sur le LIST -al puis Connection lost...
J'ai pourtant désactiver le mode passif dans mon client FTP, et voici les confs de mon firewall:
Chain INPUT (policy DROP 11 packets, 3044 bytes)
pkts bytes target prot opt in out source destination
1197 85748 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
17814 16M ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp-data
11 528 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp
30 1588 ACCEPT tcp -- any any anywhere anywhere tcp dpt:8000
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:8001
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:webcache
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:8080
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:2030
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 41 packets, 2440 bytes)
pkts bytes target prot opt in out source destination
18645 5019K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp-data
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp
4 240 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www
4 261 ACCEPT udp -- any any anywhere anywhere udp dpt:domain
0 0 ACCEPT all -- any lo anywhere anywherePourriez vous m'éclairer ?
Merci
Dernière modification par Flying Jack (2006-08-30 20:52:00)
Hors ligne
PORT 192,168,1,168,8,254
Connecte toi en passif. Parce que là, en actif, à moins de bien configurer ton client+ton routeur, ou d'avoir un routeur NAT qui fait de l'analyse de paquets, ca va pas passer.
Hors ligne
J'ai fixé mon ftp passif entre 5000 et 5030...
MonServeur:/etc/pure-ftpd/conf# more PassivePortRange 5000 5030
J'ai configuré mon iptables:
Chain INPUT (policy DROP 19 packets, 942 bytes)
pkts bytes target prot opt in out source destination
9131 6239K ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
1790 3470K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
1 60 ACCEPT all -- lo any anywhere anywhere
0 0 ACCEPT icmp -- any any anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp-data
5 240 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spts:5000:5030 dpts:5000:5030 state RELATED,ESTABLISHED
1 48 ACCEPT tcp -- any any anywhere anywhere tcp dpt:8000
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:8001
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:webcache
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:8080
0 0 ACCEPT udp -- any any anywhere anywhere udp dpt:2030
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
7748 7150K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp-data
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ftp
0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:www
1 73 ACCEPT udp -- any any anywhere anywhere udp dpt:domain
1 60 ACCEPT all -- any lo anywhere anywhere
0 0 ACCEPT tcp -- any any anywhere anywhere tcp spts:5000:5030 dpts:5000:5030 state RELATED,ESTABLISHEDMais j'arrive toujours pas à me connecter..![]()
[R] PWD [R] 257 "/" is your current location [R] TYPE A [R] 200 TYPE is now ASCII [R] PASV [R] 227 Entering Passive Mode (ip,de,mon,serveur,19,136) [R] Opening data connection IP: ip.de.mon.serveur PORT: 5000 [R] Data Socket Error: Connection timed out [R] List Error
Je précise que l'ip du Entering Passive Mode est bien l'ip de mon serveur et mon ip wan de chez wam ^^
Merci pour votre patience...
Dernière modification par Flying Jack (2006-08-30 21:50:48)
Hors ligne
Tes règles de firewall me semblent foireuses.
Pour commencer, une règle du genre: INPUT, port destination 5000-5030, state:NEW, ESTABLISHED
Autre solution, vu qu'en INPUT tu as une règle "générique":
1790 3470K ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
tu devrais pouvoir te contenter de faire un "modprobe ip_conntrack_ftp" qui va analyser le trafic des connexions de controle FTP à la recherche des commandes "PASV...<leport>" et qui va ouvrir les ports à la volée en conséquence.
Hors ligne
T'es trop fort ^^
iptables -t filter -A INPUT -p tcp --dport 5000:5030 -m state --state NEW,RELATED -j ACCEPT
Merci ![]()
J'avoue que j'ai pas encore l'iptables bien ancré en tete... mais j'y travaille...
Pourquoi NEW et pas RELATED ? Quelle est la différence ?
Oui, j'aime bien m'interesser à la théorie autant, si ce n'est plus, qu'a la pratique...
Merci en tout cas ![]()
Hors ligne
Il suffit de comprendre les deux modes de fonctionnement du FTP pour que les règles iptables deviennent plus claires.
S = Serveur / ip 1.2.3.4
C = Client / ip 5.6.7.8
Actif:
C établit la connexion de contrôle vers S:21
C veut un listing de répertoire ou un fichier. Ces informations seront échangées par une connexion éphémère pour les données (une fois établie, les données sont envoyées par le serveur puis la connexion est fermée). Il s'agit donc de "négocier" la suite des opérations. En actif, c'est le serveur qui va se connecter vers le client. Le client annonce alors le port sur lequel il écoute et envoie via la connexion de controle:
PORT 5,6,7,8,250,100
5,6,7,8 correspond à l'IP.
250,100 correspond au port: 250*256+100 = 64100
Bref, le client a dit "Renvoie moi les données sur 5.6.7.8:64100".
Ensuite, le client demande les données et envoie par exemple:
LIST
Le serveur va se connecter sur l'IP et le port spécifiés précédemment et envoyer le listing du répertoire. C'est le même process à chaque listing/transfert de fichier.
Passif:
C établit la connexion de contrôle vers S:21
C veut un listing de répertoire ou un fichier. En passif, c'est le client qui va ouvrir une nouvelle connexion vers le sereur. Le serveur doit donc fournir le port sur lequel le client doit se connecter.
Dans un premier temps, C annonce qu'il veut travailler en passif et demande le port:
PASV
Le serveur se bind à un port et le fournit au client:
227 Entering Passive Mode (1,2,3,4,234,144)
Même principe que plus haut: 1.2.3.4 c'est l'IP et 234,144 c'est le port (c'est à dire 60048).
Bref, maintenant que le client sait où il doit se connecter, il demande les données qu'il veut:
LIST
Puis se connecte à l'IP/port fournis juste au-dessus pour avoir les données.
On voit donc qu'en ftp passif, le client établit la connexion ftp de controle sur le port 21 (classique) puis des connexions successives pour les données, sur les "ports passifs".
Pour iptables, tu as alors 2 approches pour le passif:
- autoriser toutes les connexions entrantes à destination des port passifs (en se foutant de l'état, de manière statique), genre:
iptables -A INPUT --protocol tcp --destination 1.2.3.4 --destination-port 21 -j ACCEPT iptables -A INPUT --protocol tcp --destination 1.2.3.4 --destination-port 60000:60100 -j ACCEPT
- utiliser le module ip_conntrack_ftp qui va faire de l'analyse à la volée du trafic sur le port 21 et ouvre les ports à la volée:
modprobe ip_conntrack_ftp iptables -A INPUT --protocol tcp --destination 1.2.3.4 --destination-port 21 -j ACCEPT iptables -A INPUT --destination 1.2.3.4 -m state --state ESTABLISHED,RELATED -j ACCEPT
C'est là la magie du RELATED. Grace au module ip_conntrack_ftp qui va analyser à la volée les commandes du style "227 Entering Passive Mode (1,2,3,4,234,144)", tu vas pouvoir dire que tel ou tel paquet est "RELATED" à une autre connexion et que du coup, la dernière règle ci-dessus va laisser passer les paquets.
Hors ligne
Merci beaucoup en effet !!!
Pour ma part, j'ai mis ça :
modprobe ip_conntrack_ftp iptables -A INPUT --protocol tcp --destination-port 21 -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
C'est bon ? Bon ça marche en tout cas... mais j'ai viré les "--destination xxx.xxx.xxx.xxx".
Hors ligne
Un très bon "manuel" sinon : http://www.coagul.org/article.php3?id_article=485
Hors ligne
Quelle est la différence entre
--protocol tcp --destination-port 21
et
-p tcp --dport 21
?
Hors ligne
Vi, c'est pareil. C'est juste que dans les scripts, j'ai pris l'habitude de mettre les noms d'option longs, plus explicites.
Hors ligne
Ok ok
...
Hors ligne
thread très interessant !
j'essaye de faire pareil, mais avec un autre port que le 21...
en ouvrant tous les ports pas de pb, ça marche ![]()
mais avec le module ip_conntrack_ftp (en mettant la ligne "standart") ça ne fonctionne pas...
j'ai bien dans mon script de firewall :
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp
j'y ai rajouté "ports!,3000" à la fin (/sbin/modprobe ip_nat_ftp ports!,3000) j'ai trouvé ça dans une doc mais ça ne change rien...
qu'est ce que je dois mettre à la place pour qu'il tente l'oreille sur le port 3000, qui est le port de connection de mon ftp ?
merci à tous !
Hors ligne