Jak używać nazwy FQDN w regułach zapory sieciowej dla systemu GNU / Linux?

0

Próbuję skonfigurować zaporę ogniową dla jednego z systemów GNU / Linux. AFAIK iptablesi jego podobni użytkownicy nie mogą używać nazw FQDN w swojej konfiguracji, ponieważ oczekuje się, że będą działać przed skonfigurowaniem interfejsu sieciowego i przed uzyskaniem dostępu do DNS.

Jednak z mojego doświadczenia z CentOS, znam przynajmniej jednego rozwiązania: apf. Nie mogę jednak sprawić, by działał poprawnie pod Arch Linux. ( iptables -nvLdaje czysty wynik; nic podobnego do tego, co otrzymuję, wykonując to samo polecenie na naszych serwerach programistycznych).

Zastanawiam się, czy jest tu ktoś, kto zdążył apfpracować na Arch Linux, albo zna inny frontend zapory lub inną zaporę ogniową, która może współpracować z FQDN w swoich regułach.

Należy pamiętać, że docelowe nazwy FQDN pochodzą z dynamicznych usług DNS, takich jak DynDNS . Chciałbym wiedzieć, czy istnieje sposób, aby zapora firewall przeprowadzała wyszukiwanie DNS, w sposób (tak myślę) apf.

Odwrotne wyszukiwania DNS (które, AFAIK, dzieje się, gdy umieszczona jest nazwa FQDN /etc/hosts.allowi nie można jej znaleźć /etc/hosts) nie działają w tym przypadku, ponieważ na przykład mój adres IP nie zostanie rozstrzygnięty na nazwę FQDN DynDNS.

(Proszę również powiedzieć, czy lepiej jest to zadać na ServerFault).

Neil Santos
źródło

Odpowiedzi:

2

W pliku /etc/nsswitch.conf określ kolejność rozpoznawania hosta.

Jeśli twoja linia hostów to

hosts: pliki dns

Następnie sprawdzi najpierw plik / etc / hosts przed DNS.

Umieść nazwę FQDN w pliku / etc / hosts.

Inną opcją jest przejście z blokowania zapory ogniowej na używanie tcp_wrappers, które można dopasować poprzez wyszukiwanie DNS. Wyszukiwanie DNS w zaporach może być problematyczne i działa wbrew koncepcjom bezpieczeństwa. Inną opcją jest uruchomienie demona, który wysyła zapytanie do nazwy DynDNS, określa, czy się zmieniła, a następnie stosuje zmianę do iptable.

Darren Hall
źródło
Hrm ... To interesujące. Czy istnieje istniejący demon, który to robi? A może musiałbym pisać własne? Przypuszczam, że nie będzie to kłopotliwe, jeśli będę musiał napisać to sam, ale nie chcę powielać wysiłku, jeśli już istnieje.
Neil Santos,
Miałem skrypt perla uruchamiany z crona co 5 minut. Spowoduje to wyszukiwanie DNS, zapisanie parowania adresu IP nazwa> w pliku / var, a następnie porównanie go z istniejącymi regułami iptables. Nie wyglądałem zbyt ciężko, aby zobaczyć, czy coś już napisano, ponieważ to, czego potrzebowałem, było dość proste.
Darren Hall,
Słodkie! Dzięki za wskazówkę! Spróbuję to zaimplementować w ten sam sposób. :)
Neil Santos
Jedną rzecz, na którą będę uważał, za każdym razem, gdy uruchomię jakikolwiek proces w stylu demona za pomocą crona, użyj jakiejś formy blokowania, aby zapobiec jego podwojeniu. Jest to szczególnie prawdziwe, gdy jesteś zależny od zewnętrznych źródeł, takich jak wyszukiwanie DNS.
Darren Hall,
1

Zgodnie z sugestią Darrena, napisałem skrypt powłoki, który wyszukuje adres IP, a następnie dostosowuje reguły zapory w razie potrzeby (i, w razie potrzeby, miałem na myśli usunięcie wszystkiego z wcześniejszego i zastąpienie właściwym adresem IP). Oto skrypt:

#!/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

Oczywiście nie zamierzałem wydawać na to więcej niż wymagana liczba komórek mózgowych. Zostało to przetestowane i gwarantuje działanie dla mnie (tm). Odbywa się to cronco 15 minut.

Kolejna (równie oczywista) uwaga: skończyłem ufwz zarządzaniem iptablesregułami (jak powiedziałem, minimalną liczbą komórek mózgowych).

Neil Santos
źródło