iptables allow dns traffic

  • Hallo,


    ich nutze folgende Befehle um die iptables Regeln für DNS zu erstellen:

    Code
    1. # allow traffic for dns
    2. DNS_SERVERS="84.200.69.80 84.200.70.40 46.38.225.230 46.38.252.230"
    3. for DNS_IP in $DNS_SERVERS
    4. do
    5. sudo iptables --append OUTPUT --destination $DNS_IP --protocol udp --destination-port 53 --jump ACCEPT
    6. sudo iptables --append INPUT --source $DNS_IP --protocol udp --source-port 53 --jump ACCEPT
    7. sudo iptables --append OUTPUT --destination $DNS_IP --protocol tcp --destination-port 53 --jump ACCEPT
    8. sudo iptables --append INPUT --source $DNS_IP --protocol tcp --source-port 53 --jump ACCEPT
    9. done

    Leider funktioniert die Namensauflösung anschließend nicht.


    Die Namensauflösung funktioniert mit folgenden Regeln, wenn ich --source und --destination weg lasse:

    Code
    1. sudo iptables --append OUTPUT --protocol udp --destination-port 53 --jump ACCEPT
    2. sudo iptables --append INPUT --protocol udp --source-port 53 --jump ACCEPT
    3. sudo iptables --append OUTPUT --protocol tcp --destination-port 53 --jump ACCEPT
    4. sudo iptables --append INPUT --protocol tcp --source-port 53 --jump ACCEPT


    Weiß jemand warum erstere Befehle nicht das gewünschte Ergebnis liefern?


    Vielen Dank und viele Grüße

  • Ja, für mich ist das logisch.

    Code: Output
    1. sudo iptables --append OUTPUT --destination $DNS_IP --protocol udp --destination-port 53 --jump ACCEPT

    Grund: Bei Destination ist nicht die IP Adresse vom Server gemeint, sondern die Zieladresse (Entfernte IP aus dem Internet)


    Code: Input
    1. sudo iptables --append INPUT --source $DNS_IP --protocol udp --source-port 53 --jump ACCEPT

    Grund: Bei Source ist auch nicht IP Adresse vom Server gemeint, sondern die Quelladresse (Enfernte IP aus dem Internet)

  • `systemd-resolve --status` gibt folgende Ausgabe:

  • Folgende Ausgaben wären ganz hilfreich, um das eingrenzen zu können:

    Code
    1. iptables -n -v --list
    2. ip6tables -n -v --list
    3. cat /etc/resolv.conf
    4. dig A example.net
  • Ich nutze Ubuntu 18 LTS. Die nameserver werden wie hier beschrieben via netplan konfiguriert:


    Code
    1. network:
    2. ethernets:
    3. ens3:
    4. nameservers:
    5. addresses:
    6. # according to https://dns.watch/
    7. - 84.200.69.80
    8. - 84.200.70.40
    9. /etc/netplan/60-nameserver.yaml (END)


    Die anderen beiden nameserver werden wohl über DHCP von netcup eingebunden.


    Code
    1. network:
    2. ethernets:
    3. ens3:
    4. dhcp4: true
    5. version: 2
    6. /etc/netplan/50-cloud-init.yaml (END)
  • ok .. sorry, die Ausgabe von `iptables --list` oben ist nicht korrekt. Das war von einem anderen Test. Hier die korrekte Ausgabe: (leider kann ich den Beitrag nicht editieren :cursing:)


  • ich konnte das Problem lösen :)


    folgende Zeile hat gefehlt:

    Code
    1. sudo iptables --append OUTPUT --out-interface lo --jump ACCEPT

    Herausgefunden hab ichs, indem ich eine LOG Zeile eingefügt habe und das Log beobachtet habe. Anleitung:


    Log für ankommende udp Pakete auf Port 53 aktivieren mit:

    Code
    1. sudo iptables --append OUTPUT --protocol udp --destination-port 53 --jump LOG

    in einem anderen Terminal Fenster das Log beobachten mit:

    Code
    1. tail --follow /var/log/kern.log

    ein DNS Lookup ausführen mit zum Beispiel:

    Code
    1. dig ecosia.org

    Wer sich für die aktuell funktionierende Konfiguration interessiert, kann mich gerne anschreiben.


    Vielen Dank und liebe Grüße und schöne Feiertage euch allen

  • Wer sich für die aktuell funktionierende Konfiguration interessiert, kann mich gerne anschreiben.

    Mach die Lösung Bitte ganz Öffentlich, weil das Forum bei Netcup schon einigen geholfen hat und dadurch keine neuen Formbeiträge mehr entstehen.

    Wünsche auch Frohe Weihnachten.