Мы можем маркировать пакеты на основе 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
utitlity получает IP-адрес google.co.in
из DNS и добавляет запись в таблицу mangle. Как отметить все пакеты из google.co.in
И не только с одного сервера Google. Так как серверов тысячи, вручную добавить все IP-адреса также невозможно.
Есть ли способ прочитать пакет, получить имя хоста и отметить его?
Спасибо.
Правила брандмауэра не работают на уровне DNS. В некоторых случаях iptables выполнит разрешение DNS за вас, но результат будет не тем, что вы ищете, и не будет следить за изменениями IP в имени DNS.
Вместо этого вам понадобится HTTP-прокси, такой как Squid и его метка исходящего пакета (http://www.squid-cache.org/Doc/config/tcp_outgoing_mark/) для обработки такого поведения.
Что касается входящего трафика, если вас особенно интересует GoogleBot, вы можете посмотреть неофициальные списки диапазонов IP-адресов, такие как https://evert.meulie.net/faqwd/googlebot-ip-ranges/ и настройте для этого свои iptables.
«Так как серверов тысячи, ручное добавление всех IP-адресов также невозможно».
Вы можете создать и поддерживать небольшой список всех Google AS, а затем добавлять правила брандмауэра на основе этих сетевых диапазонов.
Может быть, вы даже сможете найти все Google AS в Интернете.
(посмотри на