Мы можем маркировать пакеты на основе IP-адресов следующим образом -
iptables -A FORWARD -t mangle -s 123.2.3.4 -j MARK --set-mark 1
Как маркировать пакеты в зависимости от имени хоста? Я пробовал это -
iptables -A FORWARD -t mangle -s google.co.in -j MARK --set-mark 1
Но утилита iptables
получает IP-адрес google.co. в
из DNS и добавляет запись в таблицу mangle. Как пометить все пакеты из google.co.in
, а не только с одного сервера Google. Так как серверов тысячи, вручную добавить все IP-адреса также невозможно.
Есть ли способ прочитать пакет, получить имя хоста и отметить его?
Спасибо.
«Так как серверов тысячи, ручное добавление всех IP-адресов также невозможно».
Вы можете создать и поддерживать небольшой список всех Google AS, а затем добавить правила брандмауэра на основе этих сетевых диапазонов.
Может быть, вы даже сможете найти все AS Google в Интернете.
(посмотрите
Правила брандмауэра не работают на уровне DNS. В некоторых случаях iptables выполнит разрешение DNS за вас, но результат будет не тем, что вы ищете, и не будет отслеживать изменения IP в имени DNS.
Вместо этого вам понадобится HTTP-прокси, такой как Squid и его исходящий Функция Packet Mark ( http://www.squid-cache.org/Doc/config/tcp_outgoing_mark/ ) для обработки такого поведения.
Для входящего трафика, если вас особенно интересует GoogleBot вы можете посмотреть неофициальные списки диапазонов IP-адресов, например https://evert.meulie.net/faqwd/googlebot-ip-ranges/ , и настроить для этого свои iptables.