Обходит ли tcpdump iptables?

48

Я по ошибке настроил DNS-сервер с открытым разрешением, который вскоре был использован для множества DDoS-атак, происходящих из России или в Россию. По этой причине я полностью заблокировал порт 53 на обоих DNS-серверах для всех, кроме доверенных IP-адресов. Это работает, я больше не могу подключаться к ним, но мне кажется странным, что когда я запускаю tcpdump на eth1 (это интерфейс на сервере с общедоступным Интернетом), я вижу множество входящих пакетов от атакующего на порт 53.

Это нормально, что tcpdump отображает эти пакеты, даже если iptables их отбрасывает? Или я неправильно настроил iptables?

С другой стороны, я не вижу никаких исходящих пакетов с моего сервера, что я делал раньше, поэтому я предполагаю, что брандмауэр работает. Меня просто удивляет, что ядро ​​не отбрасывает пакеты полностью? Или tcpdumpподключен к ядру таким образом, что он видит пакеты еще до того, как они попадают в iptables?

Petr
источник

Ответы:

61

Это хороший вопрос.

В самом деле, ТСРйитр является первым программным обеспечением найден после того, как провода (и NIC, если вы будете) на пути IN , а последний на пути OUT .

Wire -> NIC -> tcpdump -> netfilter/iptables

iptables -> tcpdump -> NIC -> Wire

Таким образом он видит все пакеты, достигающие вашего интерфейса, и все пакеты, покидающие ваш интерфейс. Поскольку пакеты на порт 53 не получают ответа, как это видно из tcpdump, вы успешно убедились, что ваши правила iptables были правильно настроены.

РЕДАКТИРОВАТЬ

Возможно, я должен добавить несколько деталей. tcpdump основан на libpcap , библиотеке, которая создает сокет пакета . Когда в сетевой стек поступает обычный пакет, ядро сначала проверяет, есть ли сокет пакета, заинтересованный во вновь поступившем пакете, и, если он есть, пересылает пакет в этот сокет пакета. Если выбрана опция ETH_P_ALL , то все протоколы проходят через сокет пакета.

libpcap реализует один такой сокет пакета с активированной опцией, сохраняет копию для собственного использования и дублирует пакет обратно в сетевой стек, где он обрабатывается ядром обычным способом, включая его передачу сначала в netfilter , ядро космический аналог iptables . То же самое, в обратном порядке ( т. Е. Сначала сетевой фильтр, а затем последний проход через сокет пакета) при выходе.

Это склонно к взлому? Но конечно. Несомненно, существуют руткиты с проверкой концепции, использующие libpcap для перехвата сообщений, предназначенных для руткита, прежде чем брандмауэр сможет их использовать. Но даже это меркнет по сравнению с тем фактом, что простой запрос Google обнаруживает работающий код, скрывающий трафик даже из libpcap . Тем не менее, большинство специалистов считают, что преимущества отладки фильтров сетевых пакетов значительно перевешивают недостатки.

MariusMatutiae
источник
Есть ли способ отобразить его, чтобы я мог видеть, какие пакеты были разрешены, а какие были отброшены?
Петр
2
@Petr вы можете регистрировать пакеты, которые были сброшены iptables, thegeekstuff.com/2012/08/iptables-log-packets
MariusMatutiae