Wie funktioniert die Domänenfilterung in Linux?

Wie funktioniert die Domänenfilterung in Linux?

Am besten etwas Ähnliches wie iptables. Grundsätzlich möchte ich Domänenfilterung/Whitelisting/Blacklisting durchführen, wie ich es mit IPs in tun würde iptables. Gibt es Empfehlungen dazu?

Antwort1

Wenn Sie den Datenverkehr mithilfe der Namensauflösung mit iptables-Regeln unterbrechen, werden die Namen während der Erstellung 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

Im Grunde sagen Sie jedem DNS-Paket ( udp/53), das die hexadezimale Zeichenfolge enthält, dass www.facebook.com toes gelöscht werden soll. Beachten Sie, dass dadurch die Namensauflösung gelöscht wird, nicht aber der HTTP-Verkehr selbst.

Die durch Pipes ( |03|www|08|facebook|03|com) getrennten Hex-Zahlen stellen die Darstellung des Punktsymbols .bei DNS-Abfragen dar. Es wird angegeben, wie viele der folgenden Zeichen jeden Teil einesVollqualifizierter Domänenname(Host, Domäne, Top-Level-Domäne) Beispiel:

Gastgeber:mail.google.com

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

"visuelle Darstellung:04mail06google03com

Abrufen des Pakets mit 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.@[email protected]
        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, spezifischeren Datenverkehr wie SMTP, FTP oder HTTP zu filtern, sollte ein Proxy dieses Protokolls besser sein.
  • Sie „kapern“ DNS-Anfragen und blockieren die Domain nicht. So dumm sind die Benutzer nicht ;)

Quellen:HierUndHier

Antwort2

Vielleicht kommt die Antwort auf deine Frage zu spät, aber vor kurzem musste ich ein ähnliches Problem lösen und Google bringt mich hierher

Nach erfolglosen Suchen habe ich ein kleines Dienstprogramm in C geschrieben, das DNS-Antworten abfängt, den darin enthaltenen Domänennamen mit dem angegebenen regulären Ausdruck 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 abfangen

Um beispielsweise die IP-Adressen von facebook.com (und Subdomains) anzuzeigen, die gerade aufgelöst werden, können Sie Folgendes ausführen:

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

wobei eth0 die Netzwerkschnittstelle am Router ist (oder wo DNS-Antworten passieren)

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

Aber:

  • Das Dienstprogramm ist wirklich einfach. Es führt nicht viele Prüfungen durch, so dass Angreifer es austricksen können
  • Diese Technik ist nutzlos, wenn Benutzer DNS nicht zur Namensauflösung verwenden

Antwort3

Für die Blacklisting ist der einfachste Weg wahrscheinlich die VerwendungDNS-MASQ

Installierendnsmasq

$ sudo apt-get install dnsmasq

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

address=/facebook.com/127.0.0.1

Dies blockiertfacebook.comund alle seine Subdomänen.

Hinweis: Für Ubuntu siehedieser Beitrag.

Antwort4

Beim lokalen Caching von bind9 wird dies häufig durch einendummy-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-DHCPmit facebook.comBeispiel.

Ein einfacher DNS-basierter Ansatz zum Blockieren von Webwerbung

verwandte Informationen