IPTables Regeln verkehrt?

Hallo,

über die Suchfunktion habe ich leider nichts passendes gefunden, vielleicht habe ich aber auch nur falsch gesucht :thinking:

Ich habe anhand des Tutorials ein PiHole und OpenVPN auf einer DigitalOcean Instanz aufgesetzt (Ubuntu 18.04).

Anfangs waren in meinen IPTable Regeln noch ein paar Überreste der UFW enthalten. Ein kurzer Check mit https://openresolver.com zeigte, dass ich da wohl etwas verkehrt gemacht habe...
Also habe ich zuerst die UFW deaktiviert:

sudo ufw disable

anschließend habe ich sämtliche IPTable Regeln gelöscht:

sudo iptables -F

und erstmal festgestellt, dass ich mich damit erfolgreich von meinem Server ausgesperrt hatte (Lernen durch Schmerzen...).

Nachdem ich meinen Zugriff wieder hergestellt hatte, habe ich die IPTable Regeln aus dem Tutorial angewandt:

  • SSH Zugang funktioniert wieder
  • VPN kann ich leider erst heute Abend testen.

Nun zu meinen Problemen:

  1. Ich habe festgestellt, dass ich nicht mehr auf den Web-Admin zugreifen kann.
    Geht das nur wenn ich über den VPN verbunden bin (Das wäre ideal)? Oder habe ich irgendwas in den Regeln vermasselt?
  2. Seit dem die neuen Regeln gelten kann ich keine Pakete mehr installieren oder updaten.
Err:1 http://mirrors.digitalocean.com/ubuntu bionic InRelease
  Temporary failure resolving 'mirrors.digitalocean.com'
Err:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
  Temporary failure resolving 'security.ubuntu.com'
Err:3 https://repos.sonar.digitalocean.com/apt main InRelease
  Temporary failure resolving 'repos.sonar.digitalocean.com'
Err:4 http://mirrors.digitalocean.com/ubuntu bionic-updates InRelease
  Temporary failure resolving 'mirrors.digitalocean.com'
Err:5 http://mirrors.digitalocean.com/ubuntu bionic-backports InRelease
  Temporary failure resolving 'mirrors.digitalocean.com'
Reading package lists... Done
Building dependency tree
Reading state information... Done
6 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: Failed to fetch http://mirrors.digitalocean.com/ubuntu/dists/bionic/InRelease  Temporary failure resolving 'mirrors.digitalocean.com'
W: Failed to fetch http://mirrors.digitalocean.com/ubuntu/dists/bionic-updates/InRelease  Temporary failure resolving 'mirrors.digitalocean.com'
W: Failed to fetch http://mirrors.digitalocean.com/ubuntu/dists/bionic-backports/InRelease  Temporary failure resolving 'mirrors.digitalocean.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/bionic-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Failed to fetch https://repos.sonar.digitalocean.com/apt/dists/main/InRelease  Temporary failure resolving 'repos.sonar.digitalocean.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

IPTable Regeln:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere
2    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:openvpn
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
5    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
6    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
7    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
8    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:openvpn
9    ACCEPT     udp  --  anywhere             anywhere             udp dpt:openvpn
10   REJECT     udp  --  anywhere             anywhere             udp dpt:80 reject-with icmp-port-unreachable
11   REJECT     tcp  --  anywhere             anywhere             tcp dpt:https reject-with tcp-reset
12   REJECT     udp  --  anywhere             anywhere             udp dpt:443 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  10.8.0.0/24          anywhere
2    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

UFW Status:

Status: inactive

Vielen Dank im Voraus!

Ja, Firewalls sind immer ein delikates Thema wenn man damit keine Erfahrungen hat. iptables ist definitiv ein Paket im besten Sinne von "Von großer Macht kommt große Verantwortung".

Das Problem ist hier Temporary failure resolving [...]

Was geben die folgenden Befehle aus?

dig google.de
dig google.de @127.0.0.1
dig google.de @8.8.8.8

Deine Regeln besagen eigentlich dass TCP/HTTP durchgelassen werden sollte. Welche Netzwerkkarten ("Interfaces") gibt es auf dem Server? Passt das zu den konfigurierten Firewall-Regeln?
(iptables -vL zeigt auch die konfigurierten Interfaces).

1 Like

Danke für die schnelle Antwort!

Deine Regeln besagen eigentlich dass TCP/HTTP durchgelassen werden sollte.

So hatte ich das auch verstanden, war mir nur mit den extra Spalten nicht wirklich sicher was diese bedeuten.

dig google.de

dig google.de

; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> google.de
;; global options: +cmd
;; connection timed out; no servers could be reached

dig google.de @127.0.0.1

dig google.de @127.0.0.1

; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> google.de @127.0.0.1
;; global options: +cmd
;; connection timed out; no servers could be reached

dig google.de @8.8.8.8

dig google.de @8.8.8.8

; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> google.de @8.8.8.8
;; global options: +cmd
;; connection timed out; no servers could be reached

iptables -vL

Chain INPUT (policy DROP 616 packets, 32021 bytes)
 pkts bytes target     prot opt in     out     source               destination
 7912  682K ACCEPT     all  --  lo     any     anywhere             anywhere
 1999  179K ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
  179 20406 ACCEPT     udp  --  any    any     anywhere             anywhere             udp dpt:openvpn
    0     0 ACCEPT     tcp  --  tun0   any     anywhere             anywhere             tcp dpt:domain
    0     0 ACCEPT     udp  --  tun0   any     anywhere             anywhere             udp dpt:domain
    0     0 ACCEPT     tcp  --  tun0   any     anywhere             anywhere             tcp dpt:http
   56  3260 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:ssh
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:openvpn
    0     0 ACCEPT     udp  --  any    any     anywhere             anywhere             udp dpt:openvpn
    0     0 REJECT     udp  --  any    any     anywhere             anywhere             udp dpt:80 reject-with icmp-port-unreachable
    1    40 REJECT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https reject-with tcp-reset
    1    42 REJECT     udp  --  any    any     anywhere             anywhere             udp dpt:443 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  any    any     10.8.0.0/24          anywhere
    0     0 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 16577 packets, 1468K bytes)
 pkts bytes target     prot opt in     out     source               destination

Okay, die ausführlicher dargestellten iptables Regeln sehen soweit korrekt aus und sollten genau das tun (http/domain nur über VPN erlauben).

Die Rückgaben von dig sind seltsam, Dein Server kann also keine externen DNS Server erreichen, bzw. deren Antworten kommen nicht durch Deine Firewall nicht wieder rein. Eigentlich sollte die zweite INPUT Regel (state RELATED,ESTABLISHED) genau das sicherstellen, nämlich dass Antworten auf ausgehende Verbindungsanfragen wieder herein gelassen werden.

Funktioniert die dig Kommandos wenn Du vorübergehend

iptables -P INPUT ACCEPT

ausführst? Achtung, damit wird die Firewall natürlich überwiegend wirkungslos, Du kommst mit

iptables -P INPUT DROP

wieder zurück in den jetzigen Zustand.

Aktuell kommen da genau die selben Meldungen zurück wie vorher auch. Allerdings bin ich gerade auch wieder aus der SSH Session geflogen und kann aktuell nur über die DigitalOcean Web-Console auf den Server zugreifen. Diesmal allerdings ohne dass ich Änderungen an der Firewall vorgenommen hätte :smile:

Bei DO kam gerade noch eine Meldung dass sie Probleme im Bereich NYC3 haben, mein Server ist im NYC1 Bereich. Vielleicht läuft da ja auch etwas bei DO schief?

Nicht unmöglich, wieso hast Du den Server nicht in FRA?

Das war eher aus Prinzip ... ich dachte mir wenn ich schon einen VPN mache, dann kann ich ihn auch gleich wo anders stationieren :smile:

Eventuell setz ich mir noch einen in FRA als Rückfallebene und zum Testen auf.
Ich denke ich warte mal bis heute Abend ab, da kann ich auch besser Testen und melde mich dann nochmal :slight_smile:

Update

Gestern Abend habe ich noch mit dem DO Support hin und her geschrieben. Sie konnten keine Ursache und Lösung für die Verbindungsprobleme finden und haben vorgeschlagen über die recovery Iso zu booten um die Dateien zu retten. Da es allerdings nicht viele Dateien zu retten gab, habe ich kurzerhand die Kiste plattgemacht und ein neues Droplet in SF2 erstellt.

Soweit ich das beurteilen kann funktioniert jetzt alles wie angedacht.

:white_check_mark: VPN funktioniert
:white_check_mark: Web-Admin ist nur erreichbar wenn man im VPN Tunnel ist
:white_check_mark: PiHole blockt erfolgreich Queries
:white_check_mark: https://openresolver.com sagt:

Recursive resolver is not detected on x.x.x.x
IP address x.x.x.x is not vulnerable to DNS Amplification attacks.

Die aktuellen iptables Regeln sehen wie folgt aus:

Chain INPUT (policy DROP)
num  target     prot opt source               destination
1    ACCEPT     all  --  anywhere             anywhere
2    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
3    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
4    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
5    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
6    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
7    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:openvpn
8    ACCEPT     udp  --  anywhere             anywhere             udp dpt:openvpn
9    REJECT     udp  --  anywhere             anywhere             udp dpt:80 reject-with icmp-port-unreachable
10   REJECT     tcp  --  anywhere             anywhere             tcp dpt:https reject-with tcp-reset
11   REJECT     udp  --  anywhere             anywhere             udp dpt:443 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Jetzt muss ich das Ganze nur noch am PC und nicht nur am Handy zum laufen bringen aber das ist eine andere Geschichte :slight_smile:

Vielen Dank für deine Hilfe @DL6ER

EDIT

Einen Fehler den ich bei der ersten Instanz begangen habe war es bei der PiHole Installation PiHole die Server IP statt 10.8.0.1/24 wie im Guide beschrieben zu verpassen. War das vielleicht der Grund wieso der Server als Open Resolver erkannt wurde?

Wenn auch noch die Firewall die Anfragen an Port 53 irgendwie rein- und rausgelassen hat, dann ja.