FTP PORT ilegal

3

Eu configurei o proftpd para usar ssl / tls. Tentando se conectar, recebo um 'comando de porta ilegal'

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

Conectar via FTP normal funciona bem ...

Estou usando o WS_FTP com ftp-authssl // xxx.nl / .... Eu tentei várias outras opções de conexão, portas, etc. Mas todos deram o mesmo erro. Althoiugh parece que, às vezes, uma primeira listagem de diretório é mostrada (mas isso pode ser o armazenamento em cache do WS_FTP)

    
por Patrick 21.12.2017 / 14:05

4 respostas

0

Postei a pergunta também no SuperUser e obtive a resposta: adicionei o seguinte ao proftpd.conf:

PassivePorts 49152 65534
TLSOptions NoSessionReuseRequired

Para o PassivePorts, consulte o link

Para TLSOptions, veja link (com base em algumas mensagens de log do WS_FTP, descobri que NoSessionReuseRequired deveria ajudar ).

    
por 09.01.2018 / 11:00
6

Primeiro, note que os dois comandos finais, PORT e PASV, não têm nada a ver um com o outro. São duas tentativas de conexão independentes (uma para FTP ativo, uma para FTP passivo).

Assim, a sua falha PORT é esperada.

O modo PORT funciona (o modo "FTP ativo") é fazer com que o cliente envie seu próprio endereço para o servidor - o servidor se conecta de volta a você para transferência de dados.

De acordo com os registros, o seu computador cliente está atrás de um NAT e tem um endereço IP "privado". Esse é o único endereço que ele conhece, e é isso que ele envia com o comando PORT.

Normalmente, seu roteador reconheceria uma conexão FTP e edita o comando PORT, substituindo seu endereço privado pelo próprio público do roteador. (Ou, se você tiver azar, ele o substituirá por lixo.)

No entanto, como sua conexão de controle agora é criptografada usando TLS, o roteador não pode executar esse ajuste (tudo o que ele vê são dados criptografados) e o servidor recebe exatamente o que seu cliente envia: seu endereço particular .

Como o servidor está em outra rede, não é possível acessar um endereço particular (esse é o objetivo do NAT). Embora nem se incomode em tentar - por razões de segurança, a maioria dos servidores simplesmente recusa imediatamente qualquer endereço que não corresponda exatamente de onde veio a conexão de controle.

tl; dr Altere seu cliente de FTP para o modo passivo. Sim, seus logs mostram o modo passivo (PASV) sendo quebrado também. Mas pelo menos é um pouco solucionável se o seu servidor tiver um endereço IP público dedicado, enquanto o modo ativo não é.

E o PASV? Bem, o problema é semelhante.

Normalmente, o firewall do seu servidor iria espionar a conexão de controle FTP, extrair a porta temporária da resposta "Entrando no modo passivo (x, y, z…)" e marcá-la como pertencente a uma conexão "RELACIONADA". Então sua regra # 004 permitiria isso.

No entanto, mais uma vez, o iptables não pode ver através de TLS (tudo o que ele vê são dados criptografados) e não pode mais reconhecer suas conexões de dados FTP como relacionadas. Então sua conexão apenas atinge a regra # 999 e é descartada.

Para fazer o PASV funcionar, você precisará configurar o ProFTPd para usar um intervalo de portas passivas específico. (não importa qual faixa exatamente), e diga ao iptables para permitir conexões com essas portas.

    
por 21.12.2017 / 14:18
2
PORT 192,168,192,14,211,181

Esse comando significa que o cliente está escutando na porta 54197 do endereço IP 192.168.192.14 a conexão de dados do servidor. 192.168. *. * São endereços IP privados que não podem ser roteados pela Internet. Isso significa que esse endereço IP não pode ser acessado por um servidor na Internet. E é por isso que o servidor considera o comando PORT inválido.

    
por 19.12.2017 / 19:04
0

Isso funcionou para mim: Você precisa adicionar as linhas abaixo a vsftpd.conf . Passei dias tentando encontrar essa resposta

listen=YES
#listen_ipv6=YES

Abaixo todos os itens não comentados em 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)
    
por 20.06.2018 / 19:13

Tags