Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Android - DNS-Problem
Als ich am Wochenende die Firewall Verstöße auf meinem Gateway/Router überprüfte, viel mir auf, dass mein Mobiltelefon ständig versuchte die DNS-Namensauflösung gegen die DNS-Server von Google
8.8.8.8
8.8.4.4
durchzuführen, und nicht gegen meinen eignen im heimischen Netzwerk befindlichen DNS-Server (ISC BIND).
Firewall Verstöße aus /var/log/messages
- (nur relevanter Ausschnitt):
... Jan 3 22:10:14 rechner01 kernel: FORWARD Defend IN=eth0 OUT=eth0 SRC=192.168.0.12 DST=8.8.8.8 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=38163 DPT=53 LEN=40 Jan 3 22:10:14 rechner01 kernel: FORWARD Defend IN=eth0 OUT=eth0 SRC=192.168.0.12 DST=8.8.4.4 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=UDP SPT=34705 DPT=53 LEN=40 ...
Obwohl ich meinem Mobiltelefon mit meinem eigenen DHCP-Server beim beziehen einer IP-Adresse auch den DNS-Server-Eintrag übermittle. (Auszug aus meiner ISC DHCP-Konfiguration):
... subnet 192.168.0.0 netmask 255.255.255.0 { option broadcast-address 192.168.0.255; option domain-name "tachtler.net"; option domain-name-servers 192.168.0.1; option domain-search "tachtler.net"; ...
Aufgrund dieser vielleicht gewollten oder auch ungewollten Ignoranz meines Mobiltelefons, wollte ich die Firewall Verstöße nicht länger sehen und auch mein Mobiltelefon im heimischen Netzwerk, meinen eigenen DNS-Server ISC BIND ausschließlich nutzen lassen.
Die möglichen Lösungen für dieses Problem sind
- Transparenter DNS-Server, realisiert durch NAT auf meinem Gateway/Router via
iptables
! - Transparenter DNS-Server, realisiert durch NAT auf einen DNS-Server via
iptables
!
iptables: NAT-Gateway/Router
HINWEIS - Beispiel mit DNS-Server auf dem Gateway/Router!
Im folgendem Beispiel sind nachfolgendem Ergänzungen im Regelsatz von iptables
durchzuführen, um
- Alle DNS-Anfragen TCP/UDP auf Port 53 umzuleiten
- Dies transparent (unsichtbar) für das jeweilige Endgerät
- Auf einen auf dem Gateway/Router laufenden DNS-Server
durchzuführen.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk ab der Position 1 hinzu, ohne das der Paketfilter angehalten werden muss:
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.0.1:53
-A PREROUTING -s 192.168.0.0/24 -i eth0 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.0.1:53
und hier die Befehle:
# iptables -A PREROUTING -s 192.168.0.0/24 -i eth0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 192.168.0.1:53 # iptables -A PREROUTING -s 192.168.0.0/24 -i eth0 -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.0.1:53
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.1:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.1:53 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 1 und Postition 2 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.1:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.1:53 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
iptables: DNS-Server
HINWEIS - Beispiel mit DNS-Server Weiterleitung!
Im folgendem Beispiel sind nachfolgendem Ergänzungen im Regelsatz von iptables
durchzuführen, um
- Alle DNS-Anfragen TCP/UDP auf Port 53 umzuleiten
- Dies transparent (unsichtbar) für das jeweilige Endgerät
- Auf einen beliebigen DNS-Server - HIER –> 192.168.0.20 !!!
durchzuführen.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
UND
# iptables -L FORWARD -nv --line-numbers Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- + * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 DROP all -- + * 0.0.0.0/0 0.0.0.0/0 state INVALID 3 0 0 ACCEPT icmp -- + * 0.0.0.0/0 0.0.0.0/0 icmp type 255
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk ab der Position 1 hinzu, ohne das der Paketfilter angehalten werden muss:
-A FORWARD -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p udp -m udp --dport 53- m state --state NEW -j ACCEPT
und hier die Befehle:
# iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p tcp -m tcp --dport 53 -m state --state NEW -j ACCEPT # iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.0.20/32 -i eth0 -p udp -m udp --dport 53- m state --state NEW -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -t nat -L -nv --line-numbers Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.20:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.20:53 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination
UND
# iptables -L FORWARD -nv --line-numbers Chain FORWARD (policy DROP 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- + * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 DROP all -- + * 0.0.0.0/0 0.0.0.0/0 state INVALID 3 0 0 ACCEPT icmp -- + * 0.0.0.0/0 0.0.0.0/0 icmp type 255 4 0 0 ACCEPT tcp -- eth0 * 192.168.0.0/24 192.168.0.20 tcp dpt:53 state NEW 5 0 0 ACCEPT udp -- eth0 * 192.168.0.0/24 192.168.0.20 udp dpt:53 state NEW
Die neuen Zeilen sind an Position 1 und Postition 2 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 1 0 0 DNAT tcp -- eth0 * 192.168.0.0/24 0.0.0.0/0 tcp dpt:53 to:192.168.0.20:53 2 0 0 DNAT udp -- eth0 * 192.168.0.0/24 0.0.0.0/0 udp dpt:53 to:192.168.0.20:53 ...
UND
an Position 4 und Postition 5 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 4 0 0 ACCEPT tcp -- eth0 * 192.168.0.0/24 192.168.0.20 tcp dpt:53 state NEW 5 0 0 ACCEPT udp -- eth0 * 192.168.0.0/24 192.168.0.20 udp dpt:53 state NEW ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]