DNSMASQ-Captive-Portal mit IPSET/NFT-„Erlaubtliste“

DNSMASQ-Captive-Portal mit IPSET/NFT-„Erlaubtliste“

Ich spiele mit dnsmasq, um eine Art Captive Portal zu erstellen.

Die Idee ist: dnsmasqStandardmäßig werden alle DNS-Anfragen an die lokale IP ( address=/#/123.123.123.123) umgeschrieben, und nginxhier ist bereits die Anzeige der „Seite mit eingeschränktem Zugriff“ eingerichtet.

Aber ich möchte eine Art Ausschlussliste hinzufügen:

ipset create captive-allowed hash:ip
ipset add captive-allowed 222.222.222.222

Dies enthält die IP-Adressen der Clients, die nicht umgeschrieben werden sollten, /#/und verwendet dnsmasq als Proxy, um 1.1.1.1/1.0.0.1echte IPs zu übergeben.

So wie ich es verstanden habe, dnsmasqfunktionieren die IPset-Einstellungen nur für jede Domäne. Also muss ich Folgendes tun:

ipset=/google.com/captive-allowed/go.ogle.real.ip
ipset=/amazon.com/captive-allowed/ama.zon.real.ip
... billion records more ...

Ist meine Annahme richtig? Oder übersehe ich vielleicht etwas?

Antwort1

Tun Sie das bloß nicht über dnsmasq – die Einbeziehung von DNS führt nur zu unnötiger Komplexität (Caching, DNSSEC-Fehler, leichte Umgehung auch versehentlich usw.). Verwenden Sie stattdessen nur iptables/nft, um alle HTTP-Pakete auf IP-Ebene umzuleiten (mit DNAT über -j DNAToder -j REDIRECT). Beispiel:

-A FORWARD_CAPTIVE -m set --match-set AllowedClientsMAC src -j ACCEPT
-A FORWARD_CAPTIVE -j REJECT
<...>
-A PREROUTING_CAPTIVE -m set --match-set AllowedClientsMAC src -j ACCEPT
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.1.53
-A PREROUTING_CAPTIVE -p tcp -m udp --dport 53 -j DNAT --to-destination 192.168.1.53
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 80 -j REDIRECT
-A PREROUTING_CAPTIVE -p tcp -m tcp --dport 443 -j REDIRECT

verwandte Informationen