iptables использует политику по умолчанию, даже если правило соответствует

iptables использует политику по умолчанию, даже если правило соответствует

Я сейчас пытаюсь узнать, как iptablesэто работает. Я прочитал следующее:

Когда пакет приходит (или уходит, в зависимости от цепочки), iptables сопоставляет его с правилами в этих цепочках одно за другим. Когда он находит совпадение, он переходит к цели и выполняет действие, связанное с ней. Если он не находит совпадения ни с одним из правил, он просто делает то, что ему говорит политика по умолчанию цепочки. Политика по умолчанию также является целью.1

Теперь я настроил свою цепочку INPUT в таблице фильтров следующим образом:

$ iptables -S INPUT
-P INPUT ACCEPT
-A INPUT -i wg0 -j ACCEPT

Теперь работает пинг машины (10.0.0.1) с другой машины (10.0.0.2) с использованием интерфейса wg0.

Используя iptables -S INPUT -v, я также вижу, что правило срабатывает, поскольку счетчики пакетов и байтов увеличиваются.

Добавление цели журнала с iptables -I INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "дальнейшим подтверждает это. Теперь я могу видеть пакеты, используя dmesg -w.

Однако если теперь установить политику по умолчанию на DROP, пакеты больше не регистрируются и пингование становится невозможным:

$ iptables -S INPUT
-P INPUT DROP
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT

Я этого не понимаю. Я думал, что будет использоваться цель первого совпадающего правила? (Цель LOG, похоже, является исключением)

Правила совпадали и раньше, и поэтому должны совпадать даже после изменения политики по умолчанию, верно?

Я был бы очень рад, если бы кто-нибудь мог это объяснить.ссылкиповедение по отношению ко мне.

Вывод iptables-saveпри работе пинга:

# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*mangle
:PREROUTING ACCEPT [31842:2917695]
:INPUT ACCEPT [28740:2664375]
:FORWARD ACCEPT [3102:253320]
:OUTPUT ACCEPT [23607:5802958]
:POSTROUTING ACCEPT [26366:6035482]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*raw
:PREROUTING ACCEPT [217327:66651913]
:OUTPUT ACCEPT [102949:46884985]
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*nat
:PREROUTING ACCEPT [115:6688]
:INPUT ACCEPT [49:2632]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [62:3720]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:18:42 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:18:42 2022
*filter
:INPUT ACCEPT [974:119665]
:FORWARD ACCEPT [474:28440]
:OUTPUT ACCEPT [558:81105]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:18:42 2022

Вывод iptables-saveпосле изменения политики по умолчанию цепочки INPUT на DROP и прекращения работы пинга:

# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*mangle
:PREROUTING ACCEPT [32468:2982249]
:INPUT ACCEPT [29284:2723905]
:FORWARD ACCEPT [3184:258344]
:OUTPUT ACCEPT [23854:5839963]
:POSTROUTING ACCEPT [26695:6077511]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*raw
:PREROUTING ACCEPT [217953:66716467]
:OUTPUT ACCEPT [103193:46921614]
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*nat
:PREROUTING ACCEPT [165:9268]
:INPUT ACCEPT [73:3868]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [71:4260]
-A POSTROUTING -s 10.0.0.0/24 -o wg0 -j MASQUERADE
COMMIT
# Completed on Fri Dec 23 06:22:19 2022
# Generated by iptables-save v1.8.8 on Fri Dec 23 06:22:19 2022
*filter
:INPUT DROP [205:26532]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26:9060]
-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT
COMMIT
# Completed on Fri Dec 23 06:22:19 2022

(Есть некоторые дополнительные правила, связанные с моей настройкой Wireguard VPN, о которых я не упоминал, но они, похоже, не имеют отношения к моему вопросу о политике по умолчанию)

решение1

Как упоминалось в комментарии кэтот ответ, решение состояло в том, чтобы также разрешить пакеты на интерфейсе eth0. Это имеет смысл, поскольку интерфейс wg0 является только виртуальным, а интерфейс eth0 требуется для установления туннеля.

решение2

Правила обрабатываются построчно. Таким образом, если есть совпадение с правилом, никакие другие правила не будут обрабатываться для этого IP-пакета. Если правило указывает цель ACCEPT для совпадающего пакета, пакет пропускает оставшиеся проверки правил и ему разрешается продолжить путь к месту назначения. Если правило указывает цель DROP, этому пакету отказывается в доступе к системе, и ничего не отправляется обратно на хост, отправивший пакет.

Как вы указали, в следующем наборе правил сначала выполняется команда Drop, и нет никакого дальнейшего процесса перехода к следующей строке для регистрации ваших пакетов.

iptables -S INPUT
-P INPUT DROP   ***Matched Line***
-A INPUT -i wg0 -j LOG --log-prefix "INPUT-wg0: "
-A INPUT -i wg0 -j ACCEPT

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

iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
iptables -A LOGGING -j DROP

Более подробную информацию можно найти по ссылке ниже. Как записать в файл журнала отброшенные пакеты брандмауэра Linux IPTables

Связанный контент