Моя сеть полностью заблокирована, за исключением нескольких сайтов, занесенных в белый список. Все это делается через iptables, который выглядит примерно так:
# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...
Очевидно, что эти адреса являются гипотетическими, но идею вы поняли. Мой брандмауэр становится огромным. Было бы намного проще поддерживать, если бы я мог просто сделать это:
# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT
Я считаю, что это возможно, поскольку man iptables
говорит:
Адрес может быть либо сетевым именем, имя хоста (обратите внимание, что указывать любое имя, которое должно быть разрешено с помощью удаленного запроса, например DNS, является действительно плохой идеей), сетевой IP-адрес (с / mask) или простой IP-адрес.
Но что меня беспокоит, так это часть, в которой говорится «указание любого имени, которое будет разрешено с помощью ... DNS - действительно плохая идея». Почему это плохая идея? Он просто все тормозит?
Если мне действительно не следует использовать имена хостов в правилах iptables, что мне делать, чтобы упростить свой брандмауэр?
Если ваша цель - заблокировать доступ по протоколу HTTP, то вам, как правило, гораздо лучше настроить программу, предназначенную для фильтрации на этом уровне (например, squid + squidquard).
Если вы используете имена хостов в брандмауэре, ваш брандмауэр теперь зависит от DNS. Это открывает брандмауэр для ряда проблем:
Если вы используете имена хостов и не контролируете DNS, то кто-то другой эффективно контролирует ваши правила IPtables. Ошибки, ошибки или проблемы с безопасностью со своей стороны становятся для вас проблемами.
Единственный раз, когда я видел, как хорошо используются имена хостов, это для внутренних операций. Я работал в офисе, где IP-адреса и имена хостов назначались через DHCP. Брандмауэры использовали имена хостов для создания барьеров между различными группами. Поскольку все это находилось под внутренним контролем, все работало хорошо.
Вы можете использовать оболочку вокруг iptables, например shorewall, чтобы упростить управление вашими правилами.
Я лично назначаю имя хоста ip вручную в / etc / hosts а затем используйте его в iptables.
Таким образом вы
Как уже говорили другие, вы не должны использовать разрешаемые имена DNS в правилах iptables. Они неточные, контролируются третьей стороной и, как правило, являются Плохой вещью (tm). Я также хотел бы добавить, что ваш DNS может выйти из строя или может быть недоступен во время запуска службы iptables. В этом случае правило не будет добавлено вообще, и могут возникнуть проблемы совершенно нового типа (например, потеря доступа по ssh после перезапуска).
Что вы можете сделать:
ipset
s чтобы адреса были сгруппированы и отделены от правилТакже никто не сказал ничего плохого о именах хостов, которые не разрешены DNS (т.е. указаны в hosts
. Вы можете использовать их, если вам действительно нужно.