Вопрос или проблема
Игра с ip6tables
.
sudo ip6tables -A INPUT -d fe80::xxxx:xxxx:xxxx:xxxx -j DROP
Затем я пытаюсь пинговать адрес и вижу tcpdump
следующим образом
$ ping fe80::xxxx:xxxx:xxxx:xxxx%eth0
$ sudo tcpdump icmp6 -i eth0 -n -vvv
Ping не показывает передачу данных, но tcpdump
успешно сообщает о прибытии пакета:
11:02:32.832443 IP6 (flowlabel 0xff034, hlim 64, next-header ICMPv6 (58) payload length: 64)
fe80::xxxx:xxxx:xxxx:xxxx > fe80::yyyy:yyyy:yyyy:yyyy: [icmp6 sum ok] ICMP6, echo reply, id 78, seq 7
Я ожидал, что цепочка INPUT
таблицы filter
не позволит пакету даже быть увиденным tcpdump
и отбросит его раньше. На каком уровне tcpdump
фактически работает по сравнению с iptables
?
Ответ или решение
Ваша ситуация связана с тем, как работают сетевые фильтры и утилита tcpdump на разных уровнях системы. Для понимания этого процесса важно рассмотреть несколько аспектов работы ip6tables и tcpdump.
### Работа ip6tables
ip6tables — это инструмент для установки правил фильтрации трафика на уровне сетевого стека. Правило, которое вы добавили, касается цепочки INPUT и устанавливает DROP для трафика, направленного на определённый IPv6-адрес. Однако важно помнить, что ip6tables действует на уровне ядра Linux, обрабатывая пакеты после их получения сетевым интерфейсом, но до этапа их передачи приложениям и другим внутренним обработчикам.
### Уровень работы tcpdump
Tcpdump — это инструмент для сниффинга пакетов, который работает на уровне сетевого интерфейса, используя библиотеку libpcap. Он перехватывает пакеты на самом раннем этапе их движения через сетевой стек — ещё до того, как они достигнут ip6tables. Это означает, что tcpdump может видеть все входящие и исходящие пакеты вне зависимости от правил фильтрации, настроенных в ip6tables.
### Почему Вы видите пакеты, которые должны быть отброшены?
Когда вы выполняете tcpdump, он мониторит сетевой интерфейс (в вашем случае — eth0) и фиксирует все проходящие через него пакеты, включая те, которые ip6tables позже может отбросить. Следовательно, даже если пакет настроен на DROP в ip6tables, он уже был зарегистрирован tcpdump’ом на уровне интерфейса, прежде чем дошёл до правил фильтрации.
### Подведение итогов
Чтобы убрать недоразумения, важно понять, что ip6tables и tcpdump работают на разных этапах обработки пакетов. Tcpdump фактически фиксирует «сырые» пакеты сразу на уровне сетевой карты, опережая любую фильтрацию, которая может быть включена на более высоких уровнях сетевого стека.
Это различие в уровнях работы объясняет, почему вы можете видеть в tcpdump пакеты, которые впоследствии ip6tables отбрасывает: процесс сниффинга и процесс фильтрации не взаимодействуют напрямую, что позволяет утилите tcpdump фиксировать все проходящие через интерфейс данные.
В случае, если у вас возникли дополнительные вопросы или вы хотите более детально разобраться в аспектах сетевой безопасности и фильтрации, рекомендую рассмотреть учебные материалы по настройке Linux-сервисов и сетевой безопасности, которые предоставят больше практических примеров и углублённое понимание работы сетевых инструментов.