Permitindo FTP com IPTables

Permitindo FTP com IPTables

Meu cenário atual envolve permitir várias regras, mas preciso que o FTP esteja acessível de qualquer lugar. O sistema operacional é Cent 5 e estou usando VSFTPD. Não consigo acertar a sintaxe. Todas as outras regras funcionam corretamente.

## Filter all previous rules
*filter

## Loopback address
-A INPUT -i lo -j ACCEPT

## Established inbound rule
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Management ports
-A INPUT -s x.x.x.x/24 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -s x.x.x.x/23 -p icmp -m icmp --icmp-type any -j ACCEPT
-A INPUT -s x.x.x.x/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT

## Allow NRPE port (Nagios)
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT
-A INPUT -s x.x.x.x -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT

##Allow FTP

## Default rules
:INPUT DROP [0:0]
:FORWARD DROP
:OUTPUT ACCEPT [0:0]
COMMIT

A seguir estão as regras que tentei.

##Allow FTP
-A INPUT --dport 21 any -j ACCEPT
-A INPUT --dport 20 any -j ACCEPT

-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT


-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT
-A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT

-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT

Responder1

Aqui está o documento que indico às pessoas para que possam seguir o protocolo FTP:http://slacksite.com/other/ftp.html

  • Para fazer FTP em modo ativo, você precisa permitir conexões de entrada na porta TCP 21 e conexões de saída na porta 20.
  • Para fazer FTP em modo passivo, você precisa permitir conexões de entrada para a porta TCP 21 e conexões de entrada para uma porta gerada aleatoriamente no computador servidor (necessitando usar um módulo conntrack no netfilter)

Você não tem nada relacionado à sua cadeia OUTPUT em sua postagem, então incluirei isso aqui também. Se sua cadeia OUTPUT for padrão, isso é importante.

Adicione estas regras à configuração do iptables:

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT

Para suportar FTP em modo passivo, então, você precisa carregar o módulo ip_conntrack_ftp na inicialização. Remova o comentário e modifique a linha IPTABLES_MODULES no arquivo /etc/sysconfig/iptables-config para ler:

IPTABLES_MODULES="ip_conntrack_ftp"

Salve a configuração do iptables e reinicie o iptables.

service iptables save
service iptables restart

Para descartar completamente o VSFTPD como sendo um problema, pare o VSFTPD, verifique se ele não está escutando na porta 21 com um "netstat -a" e execute um:

nc -l 21

Isso iniciará a escuta do netcat na porta 21 e ecoará a entrada no seu shell. De outro host, TELNET para a porta 21 do seu servidor e verifique se você obtém uma conexão TCP e se vê a saída no shell ao digitar a conexão TELNET.

Por fim, faça backup do VSFTPD, verifique se ele está escutando na porta 21 e tente conectar-se novamente. Se a conexão com o netcat funcionou, então suas regras de iptables estão corretas. Se a conexão com o VSFTPD não funcionar depois do netcat, então algo está errado com sua configuração do VSFTPD.

Responder2

Experimente esta regra. Nota: $EXTIPé o seu endereço IP externo para o servidor FTP.

-A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT

Responder3

No meu caso, estava faltando o módulo do kernel ip_conntrack_ftp. Ele precisa ser carregado. Então você pode tentar isso:

modprobe ip_conntrack_ftp

E também adicione ip_conntrack_ftp a /etc/modules para que funcione após reiniciar

informação relacionada