Я пытаюсь настроить брандмауэр для одной из систем 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 FQDN.

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

2 ответа2

2

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

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

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

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

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

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

1

Согласно предложению Даррена, я написал сценарий оболочки, который просматривает 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 для меня (как я уже говорил, минимальное количество клеток мозга).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .