Iptables para permitir FTP de entrada

29

Eu quero permitir o tráfego FTP de entrada.

CentOS 5.4:

Este é o meu arquivo /etc/sysconfig/iptables .

# Generated by iptables-save v1.3.5 on Thu Oct  3 21:23:07 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [133:14837]
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --sport 20 -j ACCEPT
COMMIT
# Completed on Thu Oct  3 21:23:07 2013

Além disso, por padrão, o módulo ip_conntrack_netbios_n está sendo carregado.

#service iptables restart

Flushing firewall rules:                                   [  OK  ]
Setting chains to policy ACCEPT: filter                    [  OK  ]
Unloading iptables modules:                                [  OK  ]
Applying iptables firewall rules:                          [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_n[  OK  ]

Mas o problema não é com esse módulo, já que tentei descarregá-lo e ainda assim não tive sorte.

Se eu desativar o iptables, poderei transferir meu backup de outro computador para o FTP. Se o iptables estiver impondo, a transferência falhou.

    
por Being Gokul 04.10.2013 / 13:42

5 respostas

5

Adicionando o NEW fixou, acredito.

Agora, meu arquivo iptables tem essa aparência ...

# Generated by iptables-save v1.3.5 on Thu Oct  3 22:25:54 2013
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [824:72492]

-A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 1024:65535 --dport 20:65535 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Thu Oct  3 22:25:54 2013

Digitando-o como resposta, uma vez que muitos caracteres não são permitidos no comentário. Muito obrigado pela sua ajuda.

    
por 04.10.2013 / 15:05
25

Seu servidor ftp precisa de um canal para transferir dados. A porta 21 é usada para estabelecer a conexão. Então, para tornar possível a transferência de dados, você precisa ativar também a porta 20 . Veja a seguinte configuração

Primeiro carregue o seguinte módulo para garantir que as conexões ftp passivas não sejam rejeitadas

modprobe ip_conntrack_ftp

Permitir conexões FTP na porta 21 entrada e saída

iptables -A INPUT  -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT -m comment --comment "Allow ftp connections on port 21"
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 21"

Permitir porta FTP 20 para conexões ativas de entrada e saída

iptables -A INPUT  -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"
iptables -A OUTPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow ftp connections on port 20"

Finalmente, permita o tráfego de entrada passivo FTP

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT -m comment --comment "Allow passive inbound connections"
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment "Allow passive inbound connections"

Para mais informações sobre problemas de FTP e firewall, consulte: link

Editar: Adicionou NEW à regra de entrada da porta 21.

    
por 04.10.2013 / 14:03
13

Vi regras tão extensas em vários Blogs, etc. e perguntei por que não usar simplesmente

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

junto com o módulo nf_conntrack_ftp . Isso é mais conciso e legível, o que geralmente é uma coisa boa, especialmente com firewalls ...

FWIW, parece que houve uma mudança no kernel 4.7, então você precisa definir net.netfilter.nf_conntrack_helper=1 via sysctl (por exemplo, colocar em /etc/sysctl.d/conntrack.conf ) ou usar

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

(veja aqui para mais detalhes)

    
por 07.09.2016 / 08:47
5

Cliente FTP:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

SERVIDOR FTP:

lsmod | grep ftp
modprobe nf_conntrack_ftp
lsmod | grep ftp
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 20 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m tcp --sport 1024:65535 --dport 1024:65535 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Para alternar entre o modo passivo e ativo no lado do cliente

ftp> passive
Passive mode on.
ftp> passive
Passive mode off.
    
por 08.12.2014 / 09:00
0

Se você precisar de conexões ativas e passivas e já aceitar ESTABLISHED conexões, como:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

Você só precisa abrir a porta 21 e adicionar uma regra especial para as portas passivas. Nenhuma regra é necessária para a porta 20, pois ela já é aceita pela regra ESTABLISHED acima.

Primeiro, aceite novas conexões em port 21 :

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

Em seguida, adicione o auxiliar de CT para portas passivas 1024: :

iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
iptables -A INPUT -p tcp -m conntrack --ctstate RELATED -m helper --helper ftp --dport 1024: -j ACCEPT

Veja também:

Nota: você deve definir o 1024: como em seu servidor FTP: procure as portas passivas padrão na sua configuração de FTP. Senão você abriria muitas portas que podem não ser relativas a FTP.

Nota importante: não adicionei as regras OUTPUT , uma vez que os meus padrões vão com iptables -P OUTPUT ACCEPT . Significa que confio no que está saindo da minha caixa. Isso pode não ser uma boa opção, especialmente em uma configuração NAT.

Observação importante: FTPS não funciona com essa configuração, pois a porta passiva está oculta (criptografada), portanto, não há como iptables adivinhar a porta boa. Consulte Como alterar o IPTables para permitir o FTP por TLS usando o Passive Portas e link

    
por 16.02.2018 / 20:46