Как использовать FQDN в правилах брандмауэра для GNU / Linux?

6488
Neil Santos

Я пытаюсь настроить брандмауэр для одной из систем GNU / Linux. AFAIK iptablesи его аналог не могут использовать полные доменные имена в своей конфигурации, поскольку ожидается, что они будут работать до настройки сетевого интерфейса и до того, как доступ к DNS станет доступным.

Тем не менее, из моего опыта с CentOS, я знаю, по крайней мере, одно решение: apf. Тем не менее, я не могу заставить его работать должным образом под Arch Linux. ( iptables -nvLдает чистый результат; ничего похожего на то, что я получаю при выполнении той же команды на наших серверах разработки.)

Мне интересно, есть ли здесь кто-нибудь, кому удалось apfпоработать над Arch Linux, или он знает о другом интерфейсе брандмауэра или другом брандмауэре, который может работать с полными доменными именами в своих правилах.

Обратите внимание, что целевые полные доменные имена принадлежат динамическим службам DNS, таким как DynDNS . Я хотел бы знать, есть ли способ заставить брандмауэр выполнять поиск DNS, как я думаю apf.

Обратный поиск DNS (который, AFAIK, это то, что происходит, когда полное доменное имя помещено, /etc/hosts.allowи оно не может быть найдено /etc/hosts) в этом случае не работает, потому что, например, мой IP не будет преобразован в мое полное доменное имя DynDNS.

(Также, пожалуйста, скажите мне, если это лучше спросить на ServerFault.)

0

2 ответа на вопрос

2
Darren Hall

В вашем /etc/nsswitch.conf определите порядок разрешения хоста.

Если ваша линия хостов

хосты: файлы днс

Затем он проверит ваш файл / etc / hosts перед DNS.

Поместите полное доменное имя в ваш файл / etc / hosts.

Другой вариант - перейти от блокировки брандмауэра к использованию tcp_wrappers, который может совпадать с помощью поиска DNS. Поиск DNS в брандмауэрах может быть проблематичным и противоречит концепции безопасности. Другой вариант - запустить демон, который запрашивает имя DynDNS, определяет, изменилось ли оно, а затем применяет это изменение к вашему iptable.

Хм ... это интересно. Есть ли существующий демон, который делает это? Или я должен написать свой собственный? Я полагаю, это не составит большого труда, если мне нужно будет написать это самому, но я не хочу дублировать усилия, если они уже существуют. Neil Santos 14 лет назад 0
У меня был Perl-скрипт, который запускался из cron каждые 5 минут. Он выполнит поиск DNS, сохранит сопряжение имени <> IP-адреса в файле / var, а затем сравнит его с существующими правилами iptables. Я не выглядел слишком усердно, чтобы увидеть, что там уже что-то написано, потому что мне нужно было довольно просто. Darren Hall 14 лет назад 0
Милая! Спасибо за чаевые! Я собираюсь попробовать и реализовать это так же. :) Neil Santos 14 лет назад 0
Я предупрежу одну вещь: всякий раз, когда любой процесс в стиле демона запускается через cron, используйте некоторую форму блокировки, чтобы он не удваивался. Это особенно верно, когда вы зависите от внешних источников, таких как поиск DNS. Darren Hall 14 лет назад 0
1
Neil Santos

Согласно предложению Даррена, я написал сценарий оболочки, который просматривает IP-адрес, затем настраивает правила брандмауэра по мере необходимости (и, по необходимости, я имел в виду удалить все с более ранних версий и заменить на правильный IP-адрес). Вот сценарий:

#!/bin/bash  target_hosts="dynhost.does-not-exist.com another-host.does-not-exist.com"  if [ -f "/root/dynblock-curr" ]; then mv /root/dynblock-curr /root/dynblock-prev fi  touch /root/dynblock-curr  if [ -f "/root/dynblock-prev" ]; then # Remove previously set firewall allows for prev_ip in `cat /root/dynblock-prev`; do ufw delete allow from $prev_ip to any app OpenSSH > /dev/null done fi  for target_host in $target_hosts; do # Look up IP per host # echo "Looking up IP for host:" $target_host target_ip=`host $target_host | cut -d ' ' -f 4` if [ $? -eq 0 ]; then echo $target_ip >> /root/dynblock-curr ufw allow from $target_ip to any app OpenSSH > /dev/null fi done 

Очевидно, я не собирался тратить на это больше необходимого количества клеток мозга. Это было проверено и гарантировано работает для меня (тм). Это выполняется через cronкаждые 15 минут.

Еще одно (столь же очевидное) замечание: в итоге я использовал ufwдля управления iptablesправилами для себя (как я уже говорил, минимальное количество клеток мозга).