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


Я пытаюсь настроить брандмауэр для одной из систем GNU / Linux. НАСКОЛЬКО МНЕ ИЗВЕСТНО, iptables и его ilk не может использовать FQDN в своей конфигурации, поскольку ожидается, что они будут работать до сетевой интерфейс настроен и до того, как доступ к DNS-серверам будет доступен.

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

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

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

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

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


0
2017-12-07 14:36


Источник




Ответы:


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

Если ваша строка хостов

хосты: файлы dns

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

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

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


2
2017-12-07 15:16



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


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

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

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


1
2017-12-18 13:35