Permitindo FTP com IPTables

26

Meu cenário atual envolve permitir várias regras, mas eu preciso que o ftp esteja acessível de qualquer lugar. O sistema operacional é o Cent 5 e estou usando o VSFTPD. Não consigo entender a sintaxe correta. 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 eu 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
IOTAMAN
fonte
11
corrigiu sua formatação para que fique legível.
Avery Payne
estou assumindo que você está usando o Rackspace? o tutorial tem essa falha. Basta seguir as instruções de @Evan Anderson.
Andres SK

Respostas:

41

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

  • Para executar o FTP no modo ativo, é necessário permitir conexões de entrada à porta TCP 21 e conexões de saída da porta 20.
  • Para executar o FTP no modo passivo, é necessário permitir conexões de entrada à porta TCP 21 e conexões de entrada a uma porta gerada aleatoriamente no computador servidor (exigindo o uso de um módulo conntrack no netfilter)

Você não tem nada re: sua cadeia de SAÍDA em sua postagem, por isso vou incluí-la aqui também. Se a sua cadeia OUTPUT for drop-default, isso será importante.

Adicione estas regras à sua configuração do iptables:

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

Para oferecer suporte ao FTP no modo passivo, é necessário 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 um problema, pare o VSFTPD, verifique se ele não está escutando na porta 21 com um "netstat -a" e execute:

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 servidor e verifique se você obtém uma conexão TCP e se vê saída no shell ao digitar a conexão TELNET.

Por fim, traga o VSFTPD de volta, verifique se está escutando na porta 21 e tente conectar-se novamente. Se a conexão com o netcat funcionou, as regras do iptables estão corretas. Se a conexão com o VSFTPD não funcionar após o netcat, então algo está errado com sua configuração do VSFTPD.

Evan Anderson
fonte
Obrigado pela ajuda, as sugestões que você descreveu para o modo passivo corrigiram meu problema. Agradeço a ajuda.
IOTAMAN 09/07/09
Reiniciar o iptables apagará todas as alterações feitas se você não tiver o IPTABLES_SAVE_ON_STOP definido como "yes".
Kevin M
@ Kevin: Absolutamente, totalmente um bom ponto! > smile <Vou fazer uma edição disso agora.
Evan Anderson
@ GLB03: Sem problemas. Eu vivo para o servidor falha ...> Sorriso <
Evan Anderson
Esta resposta não funcionou para mim; portanto, para qualquer outra pessoa com esse problema, vou apontar que isso (e também a abertura / entrada da porta 21) funcionou para mim: linuxquestions.org/questions/linux-security-4 /… -
ehsanul 13/10/10
0

Tente 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
Matt
fonte
0

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 em / etc / modules para que funcione após a reinicialização

Kornel
fonte