Gebe ich damit nicht den Port 53 für alle frei? Also als public DNS? Ziel der Übung war ja gerade, den Zugang zum DNS auf den VPN zu beschränken.
Na ja, damit nimmt dein Server alle UDP- und TCP-Pakete an, die von Port 53 aus gesendet wurden. Wenn der (gefälschte) Quellport 53 und der Zielport auch 53 ist, dann nimmt der Server auch diese Pakete an. Dann ist dein Server darüber angreifbar. Nicht manipulierte DNS-Anfragen kommen aber nicht von einem Quellport 53.
Bzw. Verstehe ich den Kommentar mit dem Rumgewusel nicht. Macht es eine großen Unterschied?
-A hängt eine Regel an die bestehenden Regeln an, während -I (ohne Regelnummer) eine Regel ganz an den Anfang setzt und alle bestehenden Regeln nach hinten verschiebt. So steht bei dir "-m state" am Ende und dennoch ist es die erste Regel. Also benutze bitte entweder nur -A (das ist der Standard, siehe Ausgabe von iptables-save) oder nur -I (die Regeln muss man dann von unten nach oben lesen).
-m state unterscheide ich, ob die Verbindung neu aufgebaut wird, bereits besteht, etc.... ?
Bei einer zustandslosen Firewall gibt es keine Verbindungsverfolgung. Durch "-j NOTRACK" besitzen sämtliche Pakete den Zustand UNTRACKED. RTFM
Würde es nicht reichen Port 53 auf dem tun interface zu erlauben?
Ja, aber nur, wenn der Server nicht mit externen DNS-Servern kommunizieren muss. Antworten vom externen DNS-Server z. B. 8.8.8.8 werden oben in der ersten Konfiguration durch "iptables -P INPUT DROP" verworfen.
Bzw. kann ich das nicht für das ganze interface freigeben, also tun0?
Wie bitte? tun0 ist doch bereits freigegeben.
# Allow everything from within the VPNiptables -I INPUT -i tun0 -j ACCEPTiptables -I OUTPUT -o tun0 -j ACCEPT
Du kannst über VPN mit dem Server kommunizieren. Dein Problem ist, dass der Server nicht mit externen DNS-Servern kommunizieren kann.
Was für eine Konfiguration macht auf nem VPS sinn?
Eine zustandslose Firewall bedeutet mehr Aufwand. Entweder lässt du
# Stateless firewalliptables -t raw -I PREROUTING -j NOTRACKiptables -t raw -I OUTPUT -j NOTRACK
ganz weg oder du verfolgst ausnahmsweise Verbindungen über Port 53
#Stateless firewall, but not for DNSiptables -t raw -A PREROUTING -p udp -m udp --sport 53 -j ACCEPTiptables -t raw -A PREROUTING -p tcp -m tcp --sport 53 -j ACCEPTiptables -t raw -A PREROUTING -j NOTRACKiptables -t raw -A OUTPUT -p udp -m udp --dport 53 -j ACCEPTiptables -t raw -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPTiptables -t raw -A OUTPUT -j NOTRACK
, dann funktioniert die "-m state"-Regel für die Verbindungen mit externen DNS-Servern.
Wenn du aus welchen Gründen auch immer auf eine zustandslose Firewall (-j NOTRACK) bestehst, kannst du die Verbindungen mit externen DNS-Servern etwas umständlich mit "-m recent" verfolgen.
# Allow outbound DNS requests with tracking
iptables -A OUTPUT -p udp --dport 53 -m recent --name DNSudp --rdest --set
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m recent --name DNStcp --rdest --set
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
# Allow inbound DNS replies with tracking
iptables -A INPUT -p udp --sport 53 -m recent --name DNSudp --rsource --seconds 60 --rcheck -j ACCEPT
iptables -A INPUT -p tcp --sport 53 -m recent --name DNStcp --rsource --seconds 60 --rcheck -j ACCEPT
Alles anzeigen