Jak przeprowadzić filtrowanie domen w systemie Linux?


12

Najlepiej coś podobnego do iptables. Zasadniczo chcę filtrować domeny / umieszczać na białej liście / czarną listę, tak jak w przypadku adresów IP iptables. Czy są jakieś zalecenia, jak to zrobić?


co / dlaczego próbujesz zablokować? Czy próbujesz filtrować wychodzące / przychodzące HTTP, SMTP lub NTP? Do różnych scenariuszy można użyć różnych narzędzi.
Creek

1
Kilka sugestii, które mogą ci pomóc, to denyhosts.sourceforge.net/faq.html i fail2ban.org/wiki/index.php/Main_Page .
Ramesh

1
@josten idealnie byłoby użyć serwera proxy HTTP, takiego jak Squid . Blokowanie nazw domen iptablesmożna wykonać, ale może to być trudne
Creek

Odpowiedzi:


8

Jeśli zmniejszysz ruch przy użyciu rozpoznawania nazw z regułami iptables, nazwy zostaną rozwiązane podczas tworzenia tej reguły. Jeśli coś się zmieni, twoja reguła przestanie być ważna. To może być rozwiązanie (nie piękne ...):

# iptables -I FORWARD -p udp --dport 53 -m string --hex-string "|03|www|08|facebook|03|com" --algo bm -j DROP

Z innego hosta w sieci LAN:

# host www.facebook.com
www.facebook.com A record not found, try again

Zasadniczo mówisz do każdego pakietu dns ( udp/53), który ma szesnastkowy ciąg znaków, który www.facebook.com tonależy usunąć. Pamiętaj, że spowoduje to zmniejszenie rozpoznawania nazw, a nie samego ruchu HTTP.

Liczby szesnastkowe oddzielone potokami ( |03|www|08|facebook|03|com) reprezentują .symbol kropki w zapytaniach dns. Powie, ile spośród następujących znaków będzie reprezentowało każdą część nazwy FQDN (host, domena, domena najwyższego poziomu). Przykład:

gospodarz: mail.google.com

reprezentacja szesnastkowa: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

przedstawienie „wizualne”: 04mail06google03com

Pobieranie pakietu za pomocą tcpdump:

# tcpdump -i eth0 -X dst port 53

15:50:11.643672 IP xxx.xxx.xxx.xxx:xxx > ns4.google.com.domain: 16530 A? mail.google.com. (33)
        0x0000:  4500 003d 779a 4000 4011 b390 c949 4742  E..=w.@.@....IGB
        0x0010:  d8ef 260a 8424 0035 0029 0fc0 4092 0000  ..&..$.5.)..@...
        0x0020:  0001 0000 0000 0000 046d 6169 6c06 676f  .........mail.go
        0x0030:  6f67 6c65 0363 6f6d 0000 0100 01         ogle.com.....

Ale pamiętaj:

  • Jeśli próbujesz filtrować bardziej szczegółowy ruch, taki jak smtp, ftp lub http, serwer proxy tego protokołu powinien być lepszy.
  • „Przechwytujesz” zapytania DNS i nie blokujesz domeny. Użytkownicy nie są tacy głupi;)

Źródła: tu i tutaj


dlaczego typ algo to bm?
Gaurav Kansal

Algorytm Boyer-Moore - en.wikipedia.org/wiki/…

4

Być może odpowiedź na twoje pytanie jest za późna, ale ostatnio musiałem rozwiązać podobny problem i Google mnie tu sprowadza

Po nieudanych poszukiwaniach napisałem małe narzędzie w C, które przechwytuje odpowiedzi DNS, porównuje w nim nazwę domeny z podanym wyrażeniem regularnym i wyświetla dopasowane adresy IP. Oto on: https://github.com/vmxdev/sidmat/

Nie musisz konfigurować własnego serwera DNS, narzędzie może przechwytywać odpowiedzi DNS z dowolnego serwera

Na przykład, aby zobaczyć adresy IP facebook.com (i subdomeny), które są teraz rozwiązane, możesz uruchomić

# ./sidmat eth0 "^facebook\.com$|\.facebook\.com$"
173.252.120.6
...

gdzie eth0 to interfejs sieciowy routera (lub gdzie przechodzą odpowiedzi DNS)

Możesz łatwo zintegrować go z iptables (lub iptables z ipset)

Ale:

  • narzędzie jest bardzo proste. Nie wykonuje wielu kontroli, więc atakujący może go oszukać
  • ta technika jest bezużyteczna, jeśli użytkownicy nie używają DNS do rozpoznawania nazw

3

Do czarnej listy najłatwiej jest użyć dnsmasq

zainstalować dnsmasq

$ sudo apt-get install dnsmasq

i dodaj tę linię do /etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

Spowoduje to zablokowanie facebook.com i wszystkich jego subdomen.

Uwaga: dla ubuntu zobacz ten post .


1

Jeśli uruchamiane jest lokalne powiązanie buforowania9, często jest to realizowane przez dummy-block

zone "facebook.com" { type master; file "dummy-block"; };

i dummy-blockplik:

$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                          2         ; Serial
                     604800         ; Refresh
                      86400         ; Retry
                    2419200         ; Expire
                     604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
*       IN      A       127.0.0.1   

Zobacz też:

Uruchamianie BIND9 i ISC-DHCP z facebook.comprzykładem.

Proste, oparte na DNS, podejście do blokowania reklam internetowych

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.