Proftpd et Passive mode

Bonsoir tout le monde,

Voila j’esseye de me configurer un server ftp personnel auquel je peux accéder en LAN et les utilisateurs part le net! Mon ancien PC sous linux Debian assure le server.

Donc: j’ai un soucis; j’arrive a me connecter en LAN, pas de souci! Par contre les users “exterieurs” restent bloqués a “LIST”! En me renseignant j’ai vus que c’etait dut au mod passive (pas bien compris a quoi ça sert)

J’ai suivis un tuto pour le configurer mais ça ne marche pas…

j’ai ouvert les ports TCP 21 et 5000 a 5300

et voici mon .conf

désolé il est peut etre un peu brouillon mais j’ai pioché a droite et a gauche ce que j’ai trouvé:

#
# /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file.
# To really apply changes reload proftpd after modifications.
# 

# Includes DSO modules
Include /etc/proftpd/modules.conf

# Set off to disable IPv6 support which is annoying on IPv4 only boxes.
UseIPv6				off

ServerName			"Server FTP Sick"
ServerType			standalone
DeferWelcome			on

MultilineRFC2228		on
DefaultServer			on
ShowSymlinks			on

TimeoutNoTransfer		600
TimeoutStalled		600
TimeoutIdle			1200

DisplayLogin                    welcome.msg
DisplayFirstChdir               .message
ListOptions                	"-l"

DenyFilter			\*.*/

# Port 21 is the standard FTP port.
Port				21

# In some cases you have to specify passive ports range to by-pass
# firewall limitations. Ephemeral ports can be used for that, but
# feel free to use a more narrow range.
# PassivePorts                    49152 65534

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd)
MaxInstances			50

# Set the user and group that the server normally runs at.
User				proftpd
Group				nogroup

# Umask 022 is a good standard umask to prevent new files and dirs
# (second parm) from being group and world writable.
Umask				022  022
# Normally, we want files to be overwriteable.
AllowOverwrite			on

# Uncomment this if you are using NIS or LDAP to retrieve passwords:
# PersistentPasswd		off

# Be warned: use of this directive impacts CPU average load!
#
# Uncomment this if you like to see progress and transfer rate with ftpwho
# in downloads. That is not needed for uploads rates.
# UseSendFile			off

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

<IfModule mod_tls.c>
TLSEngine on
</IfModule>

<IfModule mod_quota.c>
QuotaEngine on
</IfModule>

<IfModule mod_ratio.c>
Ratios on
</IfModule>

PassivePorts 5000 5300
AccessGrantMsg "Bienvenue %u sur mon Server"
DefaultRoot /mnt/datas
IdentLookups off
UseReverseDNS off

MaxClients              30		"Désolé mais il y a trop de monde sur le server (%m user)! Esseyes une autre fois Merci"

# Delay engine reduces impact of the so-called Timing Attack described in
# http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
# It is on by default. 
<IfModule mod_delay.c>
DelayEngine off
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine        on
ControlsMaxClients    2		
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine on
</IfModule>


<VirtualHost 192.168.1.2>
	ServerAdmin		Sickman
	ServerName		"Sick server"
	# Port mode PASSV 
        PassivePorts 5000 5300
        MasqueradeAddress  "Mon IP Public"
	Port			21
	
</VirtualHost>

<VirtualHost 192.168.2.2>
	ServerName "FTP Local"
	Port			80
	MasqueradeAddress  192.168.1.2
</VirtualHost>

Voila j’ai pas bien compris l’ensemble c’est un peu vague alors si ça marche et en plus que je comprend pourquoi; c’est magnifique :slightly_smiling:
Tite question bonus:
Le UseUPV6 sert a quoi ? en on J’ai un message d’erreur

Ce que j’ai compris (vous me dites si je me plante totalement ^^)
Pour que le passive mod marche, il faut que le server renvoie au client l’adresse public du server. ?

Peut on desactiver ce passive mod ?

Merci de vos reponses
J’adore linux a la moindre install ou configuration on en apprends une tonne ^^

Salut,
tu as activé iptables ?
si oui, j’ai eu le meme problème que toi et un modprobe ip_conntrack_ftp à réglé le problème.

Merci de ta reponse,

j’ai jouté la ligne dans le .conf mais proftpd ne veut plus redemarrer a cause de cette ligne “Unknown configuration directive ‘modprod’”*

Je vais esseyer autrement je vous tiens au courant… N’ésitez pas a decortiqué mon .conf.

Merci

“modprobe ip_conntrack_ftp” est une commande a exécuter dans bash (ou autre shell) et non une directive de proftpd.conf !

La directive UseIPv6 sert probablement à autoriser ou interdire les connexions en IPv6, à condition que le système d’exploitation le supporte.

Disons qu’il faut que la réponse du serveur contienne l’adresse “apparente” de celui-ci lorsqu’elle arrive au client, ce qui ne veut pas dire que c’est le serveur qui l’a mise. :slightly_smiling: En effet il y a des dispositifs NAT qui sont capables de remettre la bonne adresse.

Je n’ai pas vu d’option pour interdire le mode passif. De toute façon ce n’est pas forcément une bonne idée car certains clients FTP comme les navigateurs ne fonctionnent qu’en mode passif.

Quelques questions :
Dans les blocs virtualhost, proftpd.conf mentionne une adresse publique et deux adresses IP privées, 192.168.1.2 et 192.168.2.2. A quoi correspondent ces deux adresses IP privées ?

Le serveur est-il sur un réseau local privé derrière un routeur NAT avec une redirection du port 21 vers le serveur ?
Si oui, les ports 5000-5300 sont-ils redirigés vers le serveur ? Le routeur est-il une machine sous Linux ?

Le serveur a-t-il un pare-feu, des règles iptables ?

OK merci pour tes reponses alors a mon tour de repondre ^^

-Alors l’adresse IP publique c’est l’adresse IP de chez moi sur le net
-l’adresse: 192.168.2.2 est une erreur (merci j’avais pas vus)
-L’adresse: 192.168.1.2 et l’IP local de mon server sur mon reseau local.

Donc oui le server est sur un reseau local privé qui est geré par un routeur netgearWG614v6 je ne sais pas si c’est un routeur NAT :s
redirection tout ça je maitrise pas comme vocabulaire :s
Un routeur une machine avec OS ? heu c’est pas le cas pour moi!

Le server est installé avec l’install de base debian je n’ai installé aucun parfeu ni creer des iptables donc si ça n’y est pas par default alors non!

Voila désolé pour mon manque de vicabulaire

Merci

petite EDIT: voici le message d’erreur des users exterieurs ! moi local ça marche!

Etat :	Récupération de la liste de répertoires...
Commande :	PWD
Réponse :	257 "/mnt/datas/hashve" is current directory.
Commande :	TYPE A
Réponse :	200 Type set to A
Commande :	PASV
Réponse :	227 Entering Passive Mode (89,2,79,104,196,137)
Commande :	LIST

Erreur :	Le canal de transfert n'a pas pu être ouvert. Raison : Une tentative de connexion a échoué car le parti connecté n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car l'hôte de connexion n'a pas répondu.
Erreur :	N'a pas pu récupérer la liste du répertoire
Commande :	REST 0
Erreur :	Inactivité détectée !

re alors voila aprés une intention (un veritable flash, une revelation) j’ai trouvé qu’il y avait un truc qui cloché…

<VirtualHost 192.168.1.2>
j’avais mis ça dans le host du server, alors j’ai remplacé cette IP par mon IP public et ça marche je ne sais pas exactement pourquoi ni comment mais tout a l’air de marché :slightly_smiling:

Merci a vous !

Bon bah c’est pas resolus! Toujours le meme soucis
-Les utilisateurs (pas en LAN) sont bloqué au LIST avec ça dans la console:

Etat :	Connexion à 89.2.79.104 ...
Etat :	Connecté à 89.2.79.104. Attente du message d'accueil...
Réponse :	220 ProFTP Sick's Server Ready
Commande :	USER arkesis
Réponse :	331 Password required for arkesis.
Commande :	PASS ******
Réponse :	230 Bienvenue arkesis sur mon Server
Commande :	SYST
Réponse :	215 UNIX Type: L8
Commande :	FEAT
Réponse :	211-Features:
Réponse :	 MDTM
Réponse :	 REST STREAM
Réponse :	 SIZE
Réponse :	 AUTH TLS
Réponse :	 PBSZ
Réponse :	 PROT
Réponse :	211 End
Etat :	Connecté
Etat :	Récupération de la liste de répertoires...
Commande :	PWD
Réponse :	257 "/mnt/datas/arkesis" is current directory.
Commande :	TYPE A
Réponse :	200 Type set to A
Commande :	PASV
Réponse :	227 Entering Passive Mode (89,2,79,104,197,219)
Commande :	LIST

-Moi en LAN aucun soucis

J’ai ouvert les ports 21, 5000 et 5300

Svp aidez sur ce coup je suis perdus :frowning:
Si vous voulez mon .conf esitez pas !
Merci

Un bon point, le client reçoit la bonne adresse IP :
89,2,79,104 = 89.2.79.104
Par contre le port n’est visiblement pas entre 5000 et 5300 :
197,219 = (197*256)+219 = 50651
A comparer avec les ports locaux alloués dynamiquement au même moment, par exemple lors d’une connexion TCP sortante (visible dans netstat -nt), pour vérifier si ce ne serait pas le routeur qui a fait une translation de port implicite.

[quote]J’ai ouvert les ports 21, 5000 et 5300
Si vous voulez mon .conf esitez pas ![/quote]
Ouverts dans quoi ? Le routeur ? Ce ne sont pas juste les ports 5000 et 5300 mais tout l’intervalle 5000 à 5300 qu’il faudrait ouvrir et rediriger vers le serveur. A condition bien sûr que le port passif utilisé par le serveur et indiqué au client soit bien dans cet intervalle.
Et oui, je veux bien ton proftpd.conf à jour, apparemment tu l’as pas mal trafiqué.

Merci de ta reponse!

Heu oui j’ai bien ouvert l’intervalle 5000 à 5300 pour 192.168.1.2 (le server) sur mon routeur Netgear WG614V6.

Je ne comprend pas tout mais je vais faire de mon mieux pour verifier !

Voici mon .conf

[code]#

/etc/proftpd/proftpd.conf – This is a basic ProFTPD configuration file.

To really apply changes reload proftpd after modifications.

Includes DSO modules

Include /etc/proftpd/modules.conf

Set off to disable IPv6 support which is annoying on IPv4 only boxes.

UseIPv6 off

ServerName "Server de Sick"
ServerType standalone
DeferWelcome off

MultilineRFC2228 on
DefaultServer on
ShowSymlinks on

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin welcome.msg
DisplayFirstChdir .message
ListOptions “-l”

DenyFilter *.*/

MaxInstances 30

User proftpd
Group nogroup

Umask 022 022

AllowOverwrite on
AllowStoreRestart on

IdentLookups off
UseReverseDNS off

MaxClients 15 “Désolé mais il y a trop de monde sur le server (%m user)! Esseyes une autre fois Merci”

TransferLog /var/log/proftpd/xferlog
SystemLog /var/log/proftpd/proftpd.log

TLSEngine off QuotaEngine on Ratios on DelayEngine on ControlsEngine on ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock AdminControlsEngine on

<VirtualHost 89.2.79.104>
ServerAdmin Sickman
ServerName "Sick server"
DefaultRoot /mnt/datas
PassivePorts 5000 5300
MasqueradeAddress 89.2.79.104
Port 21

<VirtualHost 192.168.1.2>
ServerName "FTP Local"
DefaultRoot /mnt/datas
PassivePorts 5000 5300
Port 80
MasqueradeAddress 192.168.1.2

[/code]

Voila merci de ton aide :wink:

EDIT:
J’ai esseyer netstat -nt et voila ce que ça me marque rien concernant le ftp (il est open)

Connexions Internet actives (sans serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat tcp6 0 0 ::ffff:192.168.1.2:22 ::ffff:192.168.1.3:3116 ESTABLISHED tcp6 0 0 ::ffff:192.168.1.2:22 ::ffff:192.168.1.3:3121 ESTABLISHED
j’ai esseyée avec netsat -t

Connexions Internet actives (sans serveurs)
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat
tcp        0      0 192.168.1.2:ftp         plouf.fr.eu.org:4570    TIME_WAIT
tcp6       0      0 ::ffff:192.168.1.2:ssh  ::ffff:192.168.1.3:3116 ESTABLISHED
tcp6       0      0 ::ffff:192.168.1.2:ssh  ::ffff:192.168.1.3:3121 ESTABLISHED

Ca vient d’ou ce plouf.fr.eu.org ? Oo ^^

Je ne comprend pas tout mais je vais faire de mon mieux pour verifier ![/quote]
Ok, j’explique. Quand un programme client (telnet, ftp, ssh, navigateur…) s’exécutant sur la machine établit une connexion à un serveur (qui peut être sur la même machine ou pas, peu importe), généralement le système lui attribue dynamiquement un port local, choisi dans une plage définie par /proc/sys/net/ipv4/ip_local_port_range. Toujours généralement, les ports sont alloués séquentiellement. Donc, si le port passif que proftpd indique au client est dans la plage de /proc/sys/net/ipv4/ip_local_port_range et voisin du port source utilisé par un client local pour établir une connexion, ça veut dire que proftpd ignore la directive “PassivePorts 5000 5300”.

Hélas, dans tes netstat il n’y a que des connexions entrantes vers des services locaux (sshd, proftpd). Il faudrait une connexion sortante. Un bête “telnet localhost 21” suffirait.
(Accessoirement, si tu veux te débarrasser de ces ::ffff: tout moches devant les adresses des connexions SSH, je sais comment faire)

C’est moi, je voulais voir le message d’accueil de ton serveur pour vérifier quel VirtualHost est utilisé. Le voici :

Ce message correspond à la directive ServerName par défaut, et non à l’une des sections VirtualHost. Cela peut s’expliquer :

  • le premier VirtualHost écoute sur l’adresse publique du routeur, or le routeur fait une translation d’adresse et le serveur reçoit les connexions sur son adresse privée ;
  • le second VirtualHost écoute sur le port 80, or le routeur redirige le port 21.

La section par défaut ne contenant pas de directive PassivePorts, cela explique pourquoi le serveur utilise un port passif en dehors de l’intervalle 5000-5300.

Bizarrement, la section par défaut ne contient pas de directive MasqueradeAddress, et pourtant le client voit la bonne adresse. Cela pourrait indiquer que le routeur prend en charge le protocole FTP et modifie la réponse du serveur à la commande PASV. Mais alors, il serait logique qu’il fasse aussi la redirection automatique du port indiqué dans la réponse vers le serveur. Or cela ne semble pas être le cas puisque la connexion de donnée en mode passif pour la commande LIST échoue.

Je suggèrerais de dupliquer la directive PassivePorts dans la section par défaut, et de corriger les adresse et port des VirtualHost.

Dans ton vhost tu as mi ça :

<VirtualHost 192.168.1.2> ServerName "FTP Local" DefaultRoot /mnt/datas PassivePorts 5000 5300 Port 80 MasqueradeAddress 192.168.1.2 </VirtualHost>

le port 80 est pour le service http et non pas pour le service ftp

Ok merci de vos reponses.

Voici la plage de ports que j’ai dans mon ip_local_port_range: 32768 61000

J’ai modifier le port du second host par: 19
J’ai ajouté (si j’ai bien suivis ton raisonnement)
-Port 21 et PassivePorts 5000 5300 dans la conf par default

Oo si les gens n’etait pas connecté par le premier host ça veut dire qu’il n’etait pas soumis a la regle: DefaultRoot /mnt/datas (oulalala la cata)

J’ai suprimé le premier host qui ne sert a rien vus que les gens peuvent très bien se connecter au server avec la configuration par default j’ai donc en lever le premier host et ajouté: MasqueradeAddress 89.2.79.104 dans la conf par default.

Merci de votre aide Linux est bien mais pour les jeunes qui decouvrent faut s’accrocher.

EDIT: Le second host marche pas de soucis par contre toujours le meme soucis pour l’accés a distance le passiv port est dans les alentour des 50000.

Et voici le log d’un netstat -nt aprés avoir fait un telnet localhost 21

tcp        0      0 127.0.0.1:35912         127.0.0.1:21            TIME_WAIT
tcp        1      0 192.168.1.2:21          82.66.138.45:50135      CLOSE_WAIT
tcp6       0      0 ::ffff:192.168.1.2:22   ::ffff:192.168.1.3:1435 ESTABLISHED

le deuxieme tcp est un ami qui s’est co au ftp, on voit 50135 c’est le passiv port ? qui devrais etre entre 5000 et 5300?

Les numéros de port passif indiqués par le serveur dans les deux tentatives de connexion que tu as citées sont bien dans cette plage.

[quote]J’ai modifié le port du second host par: 19
J’ai ajouté (si j’ai bien suivi ton raisonnement)
-Port 21 et PassivePorts 5000 5300 dans la conf par default[/quote]
Le second host est bien pour les connexions depuis le local ?
Note qu’utiliser un port autre que 21 pour faire du FTP peut poser des problèmes avec certains pare-feux (et routeurs NAT).

C’est peut-être pour cela que l’adresse contenue dans le message d’accueil a changé :

Vraiment 50000, pas plutôt autour de 35000 comme le port local de ta connexion avec telnet montré plus bas ?

[quote]Et voici le log d’un netstat -nt aprés avoir fait un telnet localhost 21

tcp        0      0 127.0.0.1:35912         127.0.0.1:21            TIME_WAIT
tcp        1      0 192.168.1.2:21          82.66.138.45:50135      CLOSE_WAIT

le deuxieme tcp est un ami qui s’est co au ftp, on voit 50135 c’est le passive port ? qui devrait etre entre 5000 et 5300?[/quote][/quote]
Non, c’est le port source utilisé par le client FTP pour se connecter au port 21 du serveur. Comme le 35912 dans ta connexion avec telnet, qui est dans l’intervalle défini par ip_local_port_range. Tu as redémarré la machine depuis hier ?

Ça pourrait être intéressant d’examiner le contenu de la connexion de commande FTP sur le port 21 avec ethereal/wireshark, et les logs détaillés de proftpd s’il en a.

j’ai reboot que dois je faire maintenant ?

Je ne t’ai pas demandé de rebooter la machine mais si tu l’avais rebootée depuis les essais d’hier. :confused: En effet hier le serveur utilisait des ports passifs ~50000 et aujourd’hui netstat montre que telnet a utilisé un port ~35000. Pour que ça ait diminué, il faut soit avoir redémarré soit avoir atteint la limite haute de l’intervalle (61000), mais ça implique que la machine ait créé beaucoup de connexions pendant ce laps de temps.

Question : quand tu te connectes localement au serveur, quelles valeurs de port passif utilise-t-il ?

Comme déjà dit à la fin de mon message précédent, tu peux lancer wireshark pour analyser le trafic sur le port 21 et demander à ton pote de se connecter et d’essayer de faire un LIST (ls).
Pour vérifier le port passif local utilisé par le serveur lors des connexions depuis l’extérieur, tu peux aussi exécuter “netstat -ntlp |grep ftp” en root pendant que le client essaie de faire un LIST ou de transférer un fichier…

A oups j’ete pressé et j’ai survolé ton message, heu oui le server a ete reboot depuis hier!

Le port passiv en local: 5113

Bon j’y comprend plus rien: Ca marche.
voici la commande pour le passiv port

debian:~# netstat -ntlp | grep ftp
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     2838/proftpd: (acce

Pas grands chose :s pourtant mon ami envoyer un fichier sur le ftp et avait reussi a se connecter!

je lui ai demander sont log et il avait le passiv port: 50713 Oo je comprends plus rien

pour le wareshark il faut le CD pour l’install et je l’ai pomé dans tous mon bardas -_-’(ou une interphasse graphique ce que je n’ai pas)

[quote=“Sickman”]Le port passiv en local: 5113

Bon j’y comprend plus rien: Ca marche.
voici la commande pour le passiv port

debian:~# netstat -ntlp | grep ftp
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     2838/proftpd: (acce

Pas grands chose :s pourtant mon ami envoyer un fichier sur le ftp et avait reussi a se connecter![/quote]

Ce n’est pas le port passif pour la connexion de données mais le port de commande (21). Comme la connexion de données pour le transfert a marché, le port passif a été fermé et n’est plus visible. Il faut faire le test avec un plus gros fichier pour avoir le temps de regarder ! :slightly_smiling:

[quote]je lui ai demander sont log et il avait le passiv port: 50713 Oo je comprends plus rien

[/quote]
Peut-être que c’est le routeur qui fait une translation automatique du port passif. Si ça marche en l’absence de redirection explicite de ce port, c’est la seule explication que je vois.

Tiens, tu as encore changé quelque chose, maintenant dans le message d’accueil je vois :

Apparemment c’est le virtualhost local qui reçoit ma connexion. Tu as changé le port en 21 ?

Et tshark, la version console ? Eventuellement tcpdump, mais ma version (de sarge) ne semble pas décoder le protocole FTP. Sinon, tu sais que tu peux installer des paquetages depuis internet, n’est-ce pas ?

[quote]Tiens, tu as encore changé quelque chose, maintenant dans le message d’accueil je vois :

220 ProFTPD 1.3.0 Server (FTP Local) [192.168.1.2][/quote]
Oui une erreur de ma part c’est retablis! J’avais mis le port du host en 21

Ui ui je sais que je peux installer des packet via le net avec apt-get install? mais pour wireshark il demander le CD d’install je vais esseyer la version console !

Merci de ton aide :smiley:

EDIT: J’ai remarqué quelque chose d’etrange en regardant le log de mon ami:
voici le nom du server auqel il s’est connecté:220 ProFTPD 1.3.0 Server (FTP Local) [192.168.1.2]
Ce qui correspond au Host pour le Local dut a mon erreur de port.
Et voila la commande quand il entre en passiv mod: 227 Entering Passive Mode (89,2,79,104,198,25)
Alors que dans le host MasqueradeAddress vaut 192.168.1.2!!! Oo c’est pas contradictoire ça ? Peut etre devrais je laisser Comme ça ?

Tu peux commenter les lignes qui commencent par “deb cdrom:” dans /etc/apt/sources.list pour que les CD sources soient ignorés et que tous les paquets soient téléchargés.

[quote]EDIT: J’ai remarqué quelque chose d’etrange en regardant le log de mon ami:
voici le nom du server auqel il s’est connecté:220 ProFTPD 1.3.0 Server (FTP Local) [192.168.1.2]
Ce qui correspond au Host pour le Local dut a mon erreur de port.
Et voila la commande quand il entre en passiv mod: 227 Entering Passive Mode (89,2,79,104,198,25)
Alors que dans le host MasqueradeAddress vaut 192.168.1.2!!! Oo c’est pas contradictoire ça ? Peut etre devrais je laisser Comme ça ?[/quote]
Cela peut s’expliquer si le routeur prend en charge le NAT du protocole FTP en mode passif : c’est lui qui modifie l’adresse et les ports, et il n’y a rien de spécial à configurer dans proftpd. Donc si ça marche comme ça, moi je ne toucherais plus à rien.

OK bah merci de ton aide je vais voir sur le long terme ce que ça donne :slightly_smiling: