Maneira correta de lidar com FTP sobre SSL com regras de firewall restritivas?

5

Sem SSL, o FTP funciona bem em um Firewall estável, como o netfilter ( iptables ) + o módulo do kernel nf_conntrack_ftp como este:

# modprobe nf_conntrack_ftp
# iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT

O problema é que, quando o SSL é usado, o módulo de rastreamento de conexão FTP não pode funcionar porque não consegue espionar a sessão para descobrir a porta de sessão escolhida para troca de dados. Portanto, é incapaz de abrir essa porta dinamicamente.

Existe uma maneira correta de fazer funcionar um servidor FTP com SSL, sem desabilitar o firewall?

Para obter informações, uso vsftpd com a opção de configuração ssl_enable=YES .

    
por Totor 15.08.2014 / 17:34

1 resposta

7

Existem vários modos com SSL e FTP:

  • SSL implícito, que é SSL desde o início (geralmente porta 990) e nunca texto simples. Nesse caso, você não obtém informações de texto claro no firewall sobre as portas de dados dinâmicas e, portanto, não pode restringir a comunicação apenas a essas portas.
  • SSL explícito com o comando "AUTH TLS" antes do login para ativar o SSL, mas sem o CCC após o login para desativar o SSL. Aqui você tem o mesmo problema que com o SSL implícito, ou seja, você não pode ler quais portas de dados estão em uso.
  • SSL explícito como antes, mas com o comando CCC após o login. Nesse caso, o login é protegido por SSL, mas o restante da conexão de controle usa texto simples. A transferência de dados ainda pode ser protegida por SSL. Você deve ativar este modo no cliente, como com ftp:ssl-use-ccc with lftp . Não há como impor este modo no servidor ftp.

Se você não conseguir as portas de dados exatas porque os comandos relevantes são criptografados, você pode pelo menos tornar o firewall um pouco menos restritivo:

  • No modo ativo ftp o servidor irá originar as conexões de dados da porta 20 para que você possa ter uma regra iptables permitindo essas conexões, ou seja, algo como iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT e adicionalmente aceitar conexões estabelecidas.
  • No ftp do modo passivo, você pode restringir o intervalo de portas oferecido pelas configurações vsftpd com pasv_max_port e pasv_min_port e adicionar uma regra correspondente como iptables -A INPUT -p tcp --dport min_port:max_port -j ACCEPT . Isso não é muito restritivo, mas pelo menos mais restritivo do que desativar o firewall.
por 15.08.2014 / 19:26