Quero permitir o tráfego FTP de entrada.
CentOS 5.4:
Este é o meu /etc/sysconfig/iptables
arquivo.
# 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, pois tentei descarregá-lo e ainda sem sorte.
Se eu desabilitar o iptables, poderei transferir meu backup de outra máquina para FTP. Se o iptables estiver sendo aplicado, a transferência falhou.
Responder1
Seu servidor FTP precisa de um canal para transferir dados. A porta 21
é usada para estabelecer a conexão. Portanto, para tornar possível a transferência de dados, você 20
também precisará ativar a porta . 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
de 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 de 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 obter mais informações sobre problemas de FTP e firewall, consulte:http://slacksite.com/other/ftp.html#active
Editar:Adicionado NEW
à regra de entrada da porta 21.
Responder2
Já vi regras tão extensas em vários Blogs etc. e me perguntei por que não simplesmente usar
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
junto com o nf_conntrack_ftp
módulo. Isso é mais conciso e legível, o que geralmente é bom, especialmente com firewalls...
FWIW, parece que houve uma mudança no kernel 4.7, então você precisa configurar net.netfilter.nf_conntrack_helper=1
via sysctl
(por exemplo, colocá-lo em /etc/sysctl.d/conntrack.conf
) ou usar
iptables -A PREROUTING -t raw -p tcp --dport 21 -j CT --helper ftp
(veraquipara mais detalhes)
Responder3
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.
Responder4
Se você precisa de conexões ativas e passivas e já aceita ESTABLISHED
conexões, como:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
Então você só precisa abrir a porta 21 e adicionar uma regra especial para portas passivas. Nenhuma regra é necessária para a porta 20, pois já é aceita pela ESTABLISHED
regra acima.
Primeiro aceite novas conexões em port 21
:
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
Em seguida, adicione o auxiliar 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:
- https://github.com/rtsisyk/linux-iptables-contrack-exploit
- http://home.regit.org/wp-content/uploads/2011/11/secure-conntrack-helpers.html
Observação:você deve definir 1024:
como em seu servidor FTP: procure as portas passivas padrão em sua configuração de FTP. Caso contrário, você abriria muitas portas que podem não ser relativas ao FTP.
Nota importante:Eu não adicionei OUTPUT
regras, pois meus padrões são iptables -P OUTPUT ACCEPT
. O que significa que confio no que sai da minha caixa. Essa pode não ser uma boa opção, especialmente em uma configuração NAT.
Nota muito importante:O FTPS não funcionará com essa configuração, pois a porta passiva está oculta (criptografada), portanto, não há como iptables
adivinhar a porta correta. VerAlterando IPTables para permitir FTP sobre TLS usando portas passivasehttps://serverfault.com/questions/811431/are-my-iptables-for-ftps-with-tls-ok