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 .