Назад | Перейти на главную страницу

iptables: установленный трафик отбрасывается

У меня iptables настроен так:

# iptables -L -nv
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
13925 8291K ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 8153 2431K ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 22,25,53,80,443
  482 98621 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0

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

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 5057 3382K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0

Но я не могу делать запросы с этой машины. DNS, HTTP, все, что я инициирую с этой машины, терпит неудачу. Входящий трафик все еще в порядке, SSH и веб-сервер по-прежнему доступны извне. Если я изменю свою политику ввода на ACCEPT (и удалю это последнее правило DROP, которое существует только для тестирования), все будет работать. Похоже, что входящий трафик ESTABLISHED / RELATED не проходит, обратите внимание на нули в начале этой строки. Что я сделал не так?

Отслеживание подключений не работает для вас по какой-то причине (о чем свидетельствует тот факт, что ни один пакет не был удален вашим правилом на основе conntrack на входе). Это потому, что вы где-то установили NOTRACK (единственное место, где это разрешено, это необработанная таблица, так что сделайте iptables -t raw -nvL), или потому, что у вас в ядре не загружен модуль conntrack, или вы отключили его каким-либо другим способом. Вы можете проверить это, установив такое правило:

iptables -t filter -I INPUT 1 -m conntrack --ctstate UNTRACKED -j LOG

Это даст вам счетчики пакетов для всех пакетов, которые вообще не отслеживаются conntrack (не влияя ни на что другое). Не оставляйте его включенным слишком долго, поскольку он отправляет данные в системный журнал (но в данном случае это лучший выбор для недиспозитивного правила).

Я не верю, что iptables позволит вам указать правила на основе conntrack без загрузки conntrack, но вы все равно можете проверить это, выполнив lsmod | grep conntrack и ищем эти модули:

nf_conntrack_ipv4
nf_conntrack

В противном случае у вас может быть ошибка ядра или что-то в этом роде.

Также стоит упомянуть, что обычно DNS-запросы выполняются через udp / 53, а не через tcp / 53. Однако ваше правило принять related,established входящие пакеты должны заботиться о ваших запросах DNS.