Wie filtere ich Domains unter Linux?


12

Am liebsten etwas ähnliches iptables. Grundsätzlich möchte ich Domain Filtering / Whitelisting / Blacklisting durchführen, wie ich es mit IPs tun würde iptables. Gibt es Empfehlungen dazu?


was / warum versuchst du zu blocken Versuchen Sie, ausgehendes / eingehendes HTTP oder SMTP oder NTP zu filtern? Für verschiedene Szenarien können verschiedene Tools verwendet werden.
Creek

1
Einige Vorschläge, die Ihnen helfen könnten, sind denyhosts.sourceforge.net/faq.html und fail2ban.org/wiki/index.php/Main_Page .
Ramesh

1
@josten Idealerweise würden Sie einen HTTP-Proxy wie Squid verwenden . Das Blockieren von Domain-Namen in iptableskann erfolgen , aber es kann schwierig sein
Creek

Antworten:


8

Wenn Sie den Datenverkehr mithilfe der Namensauflösung mit iptables-Regeln löschen, werden die Namen beim Erstellen dieser Regel aufgelöst. Wenn sich etwas ändert, ist Ihre Regel nicht mehr gültig. Dies könnte eine Lösung sein (keine schöne ...):

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

Von einem anderen Host im LAN:

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

Grundsätzlich sagen Sie zu jedem DNS-Paket ( udp/53), dass die hexadezimale Zeichenfolge www.facebook.com togelöscht werden soll. Beachten Sie, dass dadurch die Namensauflösung und nicht der HTTP-Datenverkehr selbst gelöscht wird.

Die mit Pipes ( |03|www|08|facebook|03|com) getrennten Hex-Zahlen sind die Darstellung des .Punktsymbols bei DNS-Abfragen. Es wird angegeben, wie viele der folgenden Zeichen die einzelnen Teile eines FQDN darstellen (Host, Domain, Top-Level-Domain). Beispiel:

Wirt: mail.google.com

Hex-Darstellung: 04 6d 61 69 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d

"visuelle Darstellung: 04mail06google03com

Das Paket mit tcpdump bekommen:

# 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.....

Aber erinnere dich:

  • Wenn Sie versuchen, spezifischere Traffigs wie smtp, ftp oder http zu filtern, sollte ein Proxy dieses Protokolls besser sein.
  • Sie "hijacken" DNS-Anfragen und blockieren die Domain nicht. Benutzer sind nicht so dumm;)

Quellen: Hier und hier


warum ist algo type bm?
Gaurav Kansal

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

4

Vielleicht ist die Antwort auf Ihre Frage zu spät, aber kürzlich musste ich ein ähnliches Problem lösen und Google bringt mich hierher

Nach erfolglosen Suchen habe ich ein kleines Hilfsprogramm in C geschrieben, das DNS-Antworten abfängt, den darin enthaltenen Domainnamen mit der angegebenen Regex vergleicht und übereinstimmende IP-Adressen auflistet. Hier ist es: https://github.com/vmxdev/sidmat/

Sie müssen keinen eigenen DNS-Server einrichten. Das Dienstprogramm kann DNS-Antworten von jedem Server abrufen

Wenn Sie beispielsweise die IP-Adressen von facebook.com (und Subdomains) anzeigen möchten, die gerade aufgelöst werden, können Sie sie ausführen

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

Wobei eth0 die Netzwerkschnittstelle auf dem Router ist (oder wo DNS-Antworten weitergeleitet werden)

Sie können es problemlos in iptables (oder iptables mit ipset) integrieren.

Aber:

  • Dienstprogramm ist wirklich einfach. Es werden nicht viele Überprüfungen durchgeführt, sodass der Angreifer es betrügen kann
  • Diese Technik ist nutzlos, wenn Benutzer DNS nicht für die Namensauflösung verwenden

3

Für das Blacklisting ist es wahrscheinlich am einfachsten, dnsmasq zu verwenden

Installieren dnsmasq

$ sudo apt-get install dnsmasq

und füge diese Zeile hinzu zu /etc/dnsmasq.conf

address=/facebook.com/127.0.0.1

Dies blockiert facebook.com und alle seine Subdomains.

Hinweis: Für Ubuntu finden Sie in diesem Beitrag .


1

Wenn ein lokaler Caching-Bind9 ausgeführt wird, wird dies häufig durch a realisiert dummy-block

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

und die dummy-blockDatei:

$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   

Siehe auch:

Ausführen von BIND9 und ISC-DHCP mit facebook.comBeispiel.

Ein einfacher DNS-basierter Ansatz zum Blockieren von Webwerbung

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.