Usando FTPS (FTP sobre TLS / SSL explícito) com ftp ativo?

5

Estou usando o vsftpd com ftp ativo. Eu tenho o módulo "ip_conntrack_ftp" (em / etc / sysconfig / iptables-config) e a porta 21 está aberta. Conectar-se com o FTP funciona, mas o FTPS não. Eu consigo fazer o login, mas não consigo listar:

227 Entering Passive Mode
LIST -a

Ao parar o firewall, funciona (quero dizer iptables no próprio servidor ftp). Eu li no link que não é possível usar FTPS com FTP ativo. Isso é verdade?

Minha configuração do iptables:

*filter
:INPUT DROP [15:2752]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [132:159725]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/255.0.0.0 -i ! lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 990 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 989 -j ACCEPT
COMMIT
    
por user74952 21.02.2012 / 15:15

3 respostas

5

Corri para esta questão. Parece que você precisa abrir o intervalo de transferência de dados FTP ao usar FTP com TLS / SSL explícito. Tente o seguinte:

iptables -A INPUT -p tcp --sport 1024: --dport 64000:65535 -m state --state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 64000:65535 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
    
por 21.02.2012 / 15:40
5

Você precisa permitir explicitamente o acesso ao intervalo de portas de entrada ftp-data . A resposta de Nic recomenda a abertura estática do intervalo completo, mas isso pode ser muito aberto. Além disso, RELATED é inútil neste caso porque conntrack_ftp não pode bisbilhotar uma conexão de controle criptografada.

Minha recomendação é usar a correspondência recente . Tente o seguinte:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state NEW -j in_new
iptables -A in_new -p tcp --sport 1024: --syn --dport 64000:65535 -m recent --name ftpdata --update --seconds 1800 --reap -j ACCEPT
iptables -A in_new -p tcp               --syn --dport ftp         -m recent --name ftpdata --set -j ACCEPT

A regra --set será correspondida pela conexão de controle e adicionará o ip de origem à lista ftpdata recent. A regra --update fará a maior parte do trabalho interessante:

  • Corresponderá se o endereço de origem do pacote estiver na lista ftpdata ( --update ) e os endereços de origem tiverem sido vistos nos últimos 1800 segundos ( --seconds 1800 ).
  • Se corresponder, o carimbo de data / hora "last seen" do endereço de origem será atualizado ( --update ).
  • As entradas na lista ftpdata não vistas nos últimos 1800 serão removidas ( --reap ).

Assim, depois que a conexão de controle foi ACCEPT ed, você tem 1800 segundos para iniciar as conexões de dados. Após esse período, você precisará reabrir a conexão de controle para obter o endereço de origem adicionado novamente à lista ftpdata .

Uma inconveniência desta solução se os clientes ftp não puderem iniciar as conexões de dados após 1800 segundos do último tempo de estabelecimento da conexão de controle. Você pode usar 24h se quiser, ele será menos aberto de qualquer maneira do que ter o intervalo de portas completo permanentemente aberto. Você também pode ter uma sequência como:

iptables -A INPUT -m state --state ESTABLISHED -p tcp --dport ftp -m recent --set
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

para atualizar o endereço de origem sempre que um pacote de conexão de controle estabelecido entrar, mas prefiro ter a regra --state RELATED,ESTABLISHED perto do topo.

Verifique também accept_timeout , data_connection_timeout e idle_session_timeout params de vsftpd.conf .

    
por 12.09.2012 / 23:46
0

Adicione a linha abaixo em /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p 
                                            tcp --dport 64000:65535 -j ACCEPT

Reinicie o iptables

    
por 19.03.2012 / 03:51