Quais módulos do kernel são necessários para a conexão relacionada ao FTP funcionar com o iptables?

1

Estou configurando o firewall restritivo no meu PC, que está executando Gentoo com o kernel 4.8.17 . Desejo ativar o modo FTP PASSV para conexões de saída usando esta regra:

iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate RELATED -j ACCEPT

O PASSV FTP funciona bem com NEW adicionado à regra acima, o que é muito permissivo para as minhas necessidades. Também minha configuração funciona bem em outra caixa (com kernel antigo). Eu comparei as opções do kernel de ambas as configurações, mas não consigo descobrir o que está faltando. Então, quais módulos são necessários para que RELATED conexões trabalhem com iptables ?

Meu kernel está configurado com as seguintes opções:

host ~ # zcat /proc/config.gz | grep 'NETFILTER\|_XT_\|_NF_' | grep -v "^#"
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_NETFILTER_INGRESS=y
CONFIG_NETFILTER_NETLINK=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_LOG_COMMON=m
CONFIG_NF_CONNTRACK_PROCFS=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CONNTRACK_FTP=m
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_TARGET_LOG=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NF_DEFRAG_IPV4=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_NF_CONNTRACK_PROC_COMPAT=y
CONFIG_NF_LOG_IPV4=m
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_FILTER=y
CONFIG_NF_LOG_IPV6=m

Eu tenho os seguintes módulos carregados:

host ~ # lsmod 
Module                  Size  Used by
xt_state                1543  0
xt_helper               1619  0
nf_conntrack_ftp        7270  0

Meus iptables são assim:

host ~ # iptables -nvL --line-numbers
Chain INPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
2        0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
3        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22 ctstate NEW

Chain FORWARD (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
2        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp spts:1024:65535 dpts:1:1024 ctstate NEW
3        0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
4        0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp spts:1024:65535 dpt:53 ctstate NEW
5        0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp spts:1024:65535 dpts:1024:65535 ctstate RELATED
6        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 255
    
por bezet 17.09.2017 / 21:32

2 respostas

2

Desde o kernel 4.7 (aplica-se ao kernel 4.8.17):

link

nf_conntrack_helper - BOOLEAN  
    0 - disabled (default)
    not 0 - enabled

    Enable automatic conntrack helper assignment.
    If disabled it is required to set up iptables rules to assign
    helpers to connections.  See the CT target description in the
    iptables-extensions(8) man page for further information.'

Então, fazendo:

echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper

deve reverter para o pré-kernel 4.7 default e fazê-lo funcionar.

Agora, o novo (e mais seguro) método é descrito neste blog: link

    
por 15.10.2017 / 01:03
0

Já usei o módulo do kernel ip_conntrack_ftp , mas seu módulo nf_conntrack_ftp parece ser a versão nftable. Então pode ficar bem.

No entanto, para permitir conexões de saída passivas, você pode tentar:

iptables -A INPUT  -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 
iptables -A OUTPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED -j ACCEPT

você também deve dizer ao iptables que ele deve primeiro rastrear o canal de comando FTP (portas não-privilegiadas são apenas para transferência de dados)

iptables -A INPUT  -p tcp -m tcp --sport 21 -m conntrack --ctstate ESTABLISHED -j ACCEPT 
iptables -A OUTPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate ESTABLISHED,NEW -j ACCEPT

Crédito: aqui , relacionado a conexão passiva no inboud (ou seja, as regras do iptables são adicionadas em um servidor)

    
por 18.09.2017 / 09:25