Iptables: 'nf_conntrack_ftp' não funciona sob debian

2

Eu instalei o debian (no meu framboesa, mas a questão é bem genérica):

Linux raspberrypi 4.9.28+ #998 Mon May 15 16:50:35 BST 2017 armv6l GNU/Linux

Estou tentando configurar um FTP simples, anônimo e de texto simples (sem SSL) servidor nele (vsftpd). A porta TCP é a porta regular de 21 FTP, e eu sou vai permitir apenas o modo passivo.

Eu gostaria de ter uma configuração rígida de firewall, então estou permitindo apenas o ssh e o servidor FTP acima mencionado.

Para este propósito, estou usando o módulo conntrack para permitir apenas legit conexões de entrada. Por esse motivo eu carreguei com modprobe o nf_conntrack_ftp module:

modprobe nf_conntrack_ftp

Minha configuração do iptables:

# Generated by iptables-save v1.4.21 on Sat Aug 12 15:50:44 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [108:11273]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 15:50:44 2017

Com essa configuração, não consigo obter a conexão de dados passiva para trabalhe corretamente.

Eu configurei um tcpdump e adicionei uma regra -A INPUT j LOG antes do -A INPUT -j DROP : posso ver claramente os pacotes de entrada para o Iptablespassive conexão de dados a ser registrada e rejeitada.

Algum tempo atrás eu fiz praticamente a mesma configuração em uma máquina Centos7, onde funcionou corretamente. Estou perdendo algo importante?

Obrigado por qualquer ajuda :)

    
por Dacav 12.08.2017 / 18:02

1 resposta

3

Como sugerido por @meuh em um comentário, examinei a documentação hospedada em link .

O parágrafo "Usando o alvo CT para refinar a segurança" explica:

One classic problem with helpers is the fact that helpers listen on predefined ports. If a service does not run on standard port, it is necessary to declare it. Before 2.6.34, the only method to do so was to use a module option. This was resulting in having a systematic parsing of the added port by the chosen helper. This was clearly suboptimal and the CT target has been introduced in 2.6.34. It allows to specify what helper to use for a specific flow. For example, let’s say we have a FTP server on IP address 1.2.3.4 running on port 2121.

To declare it, we can simply do

iptables -A PREROUTING -t raw -p tcp --dport 2121 \
       -d 1.2.3.4 -j CT --helper ftp

Não é meu caso (já que estou usando uma porta regular 21 para ele) mas ainda assim parece funcionar se alguém quiser habilitar o auxiliar de ftp para conexões de entrada.

iptables -A PREROUTING -t raw -p tcp -m tcp --dport 21 -j CT --helper ftp

Minha configuração (de trabalho) é agora:

# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*raw
:PREROUTING ACCEPT [445:37346]
:OUTPUT ACCEPT [375:44051]
-A PREROUTING -p tcp -m tcp --dport 21 -j CT --helper ftp
COMMIT
# Completed on Sat Aug 12 17:39:53 2017
# Generated by iptables-save v1.4.21 on Sat Aug 12 17:39:53 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [169:17775]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Sat Aug 12 17:39:53 2017

Provavelmente vale a pena observar como o documento sugere ser cauteloso com esse tipo de configuração, já que o comportamento do firewall depende da entrada do usuário.

Eu estou querendo saber se há riscos ao enfrentar um servidor FTP na Internet Aberta desta maneira. Em geral, o FTP é conhecido por não ser o melhor protocolo em termos de segurança ...

    
por 12.08.2017 / 19:42