1

Я устанавливаю ограничительный брандмауэр на моем ПК, на котором установлен Gentoo с ядром 4.8.17 . Я хочу включить режим FTP PASSV для исходящих соединений, используя это правило:

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

PASSV FTP отлично работает с NEW добавленным к вышеупомянутому правилу, что слишком допустимо для моих нужд. Также мой конфиг работает нормально на другой коробке (со старым ядром). Я сравнил параметры ядра обеих конфигураций, но не могу понять, чего не хватает. Итак, какие модули необходимы для RELATED соединений для работы с iptables?

Мое ядро настроено со следующими параметрами:

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

У меня загружены следующие модули:

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

Мой iptables выглядит так:

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

2 ответа2

2

Начиная с ядра 4.7 (так относится к ядру 4.8.17):

https://www.kernel.org/doc/Documentation/networking/nf_conntrack-sysctl.txt

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.`

Так делаем:

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

должен вернуться к предустановленному ядру 4.7 по умолчанию и заставить его работать.

Теперь новый (и более безопасный) метод описан в этом блоге:https://home.regit.org/netfilter-en/secure-use-of-helpers/

0

Я уже использовал модуль ядра ip_conntrack_ftp , но ваш модуль nf_conntrack_ftp кажется версией nftable. Тогда может быть хорошо.

Однако, чтобы разрешить пассивные исходящие соединения, вы можете попробовать:

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

вы также должны сказать iptables, что он должен сначала отслеживать канал команд FTP (непривилегированные порты предназначены только для передачи данных)

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

Кредит: здесь относится к пассивному подключению inboud (т.е. на сервере добавлены правила iptables)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .