5 votes

FTP Commande PORT illégale

J'ai configuré proftpd pour utiliser ssl/tls. En essayant de se connecter, j'obtiens un 'Illegal PORT command' (commande de port illégale)

Finding Host xxx.nl ...
Connecting to xxx.xxx.xxx.xxx:21
Connected to xxx.xxx.xxx.xxx:21 in 0.018001 seconds, Waiting for Server 
Response
Initializing SSL Session ...
220 FTP Server ready.
AUTH TLS
234 AUTH TLS successful
SSL session NOT set for reuse
SSL Session Started.
Host type (1): AUTO
USER xxx
331 Password required for xxx
PASS (hidden)
230 User xxx logged in
SYST
215 UNIX Type: L8
Host type (2): Unix (Standard)
PBSZ 0
200 PBSZ 0 successful
PROT P
200 Protection set to Private
PWD
257 "/" is the current directory
CWD /var/www/html/
250 CWD command successful
PWD257 "/var/www/html/" is the current directory
TYPE A
200 Type set to A
PORT 192,168,192,14,211,181
500 Illegal PORT command
Port failed 500 Illegal PORT command
PASV
227 Entering Passive Mode (xxx,xxx,xxx,xxx,160,151).
connecting data channel to xxx.xxx.xxx.xxx:160,151(41111)
Failed to connect data channel to xxx.xxx.xxx.xxx:160,151(41111)

iptables :

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     icmp --  anywhere             anywhere            /* 000 accept all icmp */
ACCEPT     all  --  anywhere             anywhere            /* 001 accept all to lo interface */
REJECT     all  --  anywhere             loopback/8          /* 002 reject local traffic not on loopback interface */ reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere            /* 003 accept all to eth1 interface */
ACCEPT     all  --  anywhere             anywhere            /* 004 accept related established rules */ state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            multiport ports ftp /* 021 allow ftp. */
ACCEPT     tcp  --  anywhere             anywhere            multiport ports ssh /* 022 allow ssh. */
ACCEPT     tcp  --  anywhere             anywhere            multiport ports smtp /* 025 allow smtp. */
ACCEPT     tcp  --  anywhere             anywhere            multiport ports pharos /* 051 allow rundeck. */
ACCEPT     tcp  --  anywhere             anywhere            multiport ports 8140 /* 814 allow puppetserver. */
ACCEPT     tcp  --  anywhere             anywhere            multiport ports http /* 080 allow http. */
ACCEPT     tcp  --  anywhere             anywhere            multiport ports https /* 443 allow https. */
DROP       all  --  anywhere             anywhere            /* 999 drop all */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

La connexion par ftp normal fonctionne parfaitement...

J'utilise WS_FTP avec ftp-authssl//xxx.nl/.... J'ai essayé plusieurs autres options de connexion, ports, etc. Mais tous donnent la même erreur. Cependant, il semble qu'une première liste de répertoires soit parfois affichée (mais cela peut être dû à la mise en cache de WS_FTP).

9voto

James Mertz Points 390

Notez tout d'abord que les deux commandes finales, PORT et PASV, n'ont rien à voir l'une avec l'autre. Ce sont deux indépendant tentatives de connexion (une pour le FTP actif, une pour le FTP passif).


La défaillance de votre PORT est donc attendue.

Le chemin PORT (le mode "FTP actif") consiste à ce que le client envoie sa propre adresse au serveur - le serveur se connecte en retour à vous pour le transfert de données.

D'après les journaux, votre ordinateur client se trouve derrière un NAT et possède une adresse IP "privée". C'est la seule adresse qu'il connaît, et c'est donc celle qu'il envoie avec la commande PORT.

Normalement, votre routeur reconnaît une connexion FTP et s'en sert comme d'une arme. éditer la commande PORT, remplaçant votre adresse privée par l'adresse publique du routeur. (Ou, si vous n'avez pas de chance, il la remplacera par une adresse vide).

Cependant, comme votre connexion de contrôle est maintenant cryptée à l'aide de TLS, le routeur ne peut pas effectue cette correction (il ne voit que des données cryptées), et le serveur reçoit exactement ce que votre client envoie : votre adresse privée.

Comme le serveur se trouve sur un autre réseau, il ne peut pas atteindre une adresse privée (c'est là tout l'intérêt de la NAT). Même s'il ne se donne pas la peine d'essayer - pour des raisons de sécurité, la plupart des serveurs refusent immédiatement toute adresse qui ne correspond pas exactement à l'endroit d'où provient la connexion de contrôle.

tl;dr Passez votre client FTP en mode passif. Oui, vos logs montrent que le mode passif (PASV) ne fonctionne pas non plus. Mais au moins, c'est en quelque sorte Il est possible d'y remédier si votre serveur dispose d'une adresse IP publique dédiée, ce qui n'est pas le cas du mode actif.


Qu'en est-il du PASV ? Le problème est similaire.

En général, le pare-feu de votre serveur espionne la connexion de contrôle FTP, extrait le port temporaire de la réponse "Entering passive mode (x,y,z )" et le marque comme appartenant à une connexion "RELATED". Votre règle n°004 l'autoriserait alors.

Cependant, iptables ne peut pas voir à travers TLS (tout ce qu'il voit, ce sont des données cryptées) et ne peut plus reconnaître vos connexions de données FTP comme étant liées. Votre connexion se heurte donc à la règle #999 et est abandonnée.

Pour que PASV fonctionne, vous devez configurer ProFTPd de manière à ce qu'il utilise un gamme de ports passifs (peu importe la plage exacte), et indiquer à iptables d'autoriser les connexions vers ces ports.

4voto

Chris Lercher Points 22134
PORT 192,168,192,14,211,181

Cette commande signifie que le client écoute l'adresse IP 192.168.192.14 port 54197 pour la connexion de données du serveur. 192.168.*.* sont des adresses IP privées qui ne peuvent pas être acheminées sur l'internet. Cela signifie que cette adresse IP ne peut pas être atteinte à partir d'un serveur sur l'internet. C'est pourquoi le serveur considère que la commande PORT n'est pas valide.

0voto

Patrick Points 51

J'ai également posé la question sur SuperUser et j'y ai obtenu la réponse : J'ai ajouté ce qui suit au fichier proftpd.conf :

PassivePorts 49152 65534
TLSOptions NoSessionReuseRequired

Pour les ports passifs, voir http://proftpd.org/docs/directives/linked/config_ref_PassivePorts.html

Pour les options TLSO, voir http://www.proftpd.org/docs/howto/TLS.html (sur la base de certains messages de WS_FTP, j'ai compris que NoSessionReuseRequired devrait aider).

0voto

albert Points 1

Cela a fonctionné pour moi : Vous devez ajouter les lignes suivantes à vsftpd.conf . J'ai passé des jours à essayer de trouver cette réponse

listen=YES
#listen_ipv6=YES

Ci-dessous tous les éléments non commentés dans vsftpd.conf

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
pasv_enable=YES
pasv_min_port=1024
pasv_max_port=1048
port_enable=YES
pasv_address=PUT YOUR PUBLIC IP ADDRESS HERE (e.g. 18.236.105.3)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X