У меня 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.