hokaido
Goto Top

Verständnisfrage zu ufw, iptable und Skripten

Hallo,

ich setzte auf einem Ubuntu Server ufw ein. Funktioniert auch soweit alles.

Ich habe nicht viele Regeln angelegt, nur diese hier:
ufw default deny incoming
ufw default allow outgoing
ufw allow xx/tcp comment 'SSH'  
ufw allow http
ufw allow https
ufw limit xx

UFW ist ja quasi ein Frontend, welches dann letztendlich iptables anlegt.

Durch Installation von UFW wird ja ein Standardregelwerk von iptables erstellt, welches ich auch mit iptables -L sehen kann.

Und jetzt zum Hintergrund:
Ich möchte eine IP Block Lösung umsetzen: https://github.com/trick77/ipset-blacklist

Hierzu muss eine bestimmte Regel zu iptables hinzugefügt werden. UFW Regeln bleiben beim Reboot erhalten. iptables Regeln meines Wissens nicht.
Ufw möchte ich aber weiter nutzen.

Ich dachte ich mach das folgendermaßen. Würde das so Sinn machen und funktionieren?

Lt. Punkt 6 der oben verlinkten Anleitung soll man dies zu einem Firewall Script hinzufügen:
# Enable blacklists
ipset restore < /etc/ipset-blacklist/ip-blacklist.restore
iptables -I INPUT 1 -m set --match-set blacklist src -j DROP

Ich will in dem Script aber keine anderen Regeln definieren, die hab ich ja schon mit ufw erstellt.
- Hab ich das richtig verstanden, dass so ein Script per see erstmal die bestehenden Regeln nicht antastet und nur die Regeln hinzufügt, die ich ihm eben reinschreibe, alles andere aber so lässt wie es ist?

Ich hab also dieses Firewall script angelegt und mit chmod 755 anusführbar gemacht:

/etc/init.d/firewall.sh:
#!/bin/bash

# Enable blacklists
ipset restore < /etc/ipset-blacklist/ip-blacklist.restore
iptables -I INPUT 1 -m set --match-set blacklist src -j DROP

# Exit gracefully.
#------------------------------------------------------------------------------
 
    exit 0

Dann noch der /etc/crontab eine Zeile hinzugefügt:
@reboot root /etc/init.d/firewall.sh

Frage:
Geht das so, damit die Regel immer wieder geladen wird und wie oben geschrieben, bestehende Regeln nicht verändert oder gelöscht werden?


2. Frage:
Ich habe mit
ufw default allow outgoing
erst mal allen ausgehenden Verkehr zugelassen.

Nachdem ich mich jetzt tiefer eingelesen habe, bin ich der Meinung, dass ich das gar nicht brauche und lieber ufw default deny outgoing nehme und dann die Ports freischalte, die ich brauche.

Welche Ports brauche ich denn unbedingt outgoing? Es läuft nur eine Nextcloud drauf und Daten vom Server werden mit Rsync over SSH auf einen anderen Sever gesichert. Kann ich irgendwie rausfinden, welche Ports ich alles brauche?

Wäre klasse, wenn die Experten hierzu eine Rückmledung hätten.

Danke

Content-ID: 1888219842

Url: https://administrator.de/contentid/1888219842

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

150345
150345 11.02.2022 aktualisiert um 09:42:50 Uhr
Goto Top
Guten Morgen,

Hab ich das richtig verstanden, dass so ein Script per see erstmal die bestehenden Regeln nicht antastet und nur die Regeln hinzufügt, die ich ihm eben reinschreibe, alles andere aber so lässt wie es ist?

Das kommt auf die Befehle im Script an. In deinem Fall hast du ja ein iptables Befehl mit dem Parameter -I (Insert). Dieser fügt dir diese Firewall Regel den iptables hinzu. Also ja, so wie du das gemacht hast, passt das so.

Geht das so, damit die Regel immer wieder geladen wird und wie oben geschrieben, bestehende Regeln nicht verändert oder gelöscht werden?

Jup. Vollkommen richtig gemacht. Alternativ gebe es noch das Tool iptables-save, wenn du das nicht per Skript und Cronjob erledigen möchtest.

Welche Ports brauche ich denn unbedingt outgoing?

Willst du das wirklich so einschränken? Nun gut, dann überlege doch mal, welche Ports du brauchst.
Du brauchst doch DNS für die Namensauflösung, HTTP für Updates und selbstverständlich die Ports für die Antworten an die Clients. (Dynamically Allocated Ports). Für letzteres kannst du bei Iptables auch das Connection Tracking verwenden.

MfG
hokaido
hokaido 11.02.2022 um 09:49:44 Uhr
Goto Top
Danke für die Rückmeldung.

Mir ging es nur darum, dass das Script nicht " ich setz jetzt mal alles zurück, und mach nur was im Script steht" gemacht wird. Klar gibt es auch Regeln, die alles löschen, aber die nehme ich ja nicht. Ging nur darum, ob sich da was beißt, wenn ich nur Teile mit dem Script mache. Denn es gibt ja viele Scripte im Internet, da steht jede einzelne Regel drin.

Bezgl. Outgoing einschränken:
Naja, ich dachte es könnte nicht schaden. Verbindungsversuche, wie sie z.B. bei der Log4j Lücke auf externe Rechner versucht werden, würden damit z.B. eingechränkt werden, wenn die Gegenstelle nicht 80, oder 443 wäre.
Pjordorf
Pjordorf 11.02.2022 um 18:39:23 Uhr
Goto Top
Hallo,

Zitat von @hokaido:
Welche Ports brauche ich denn unbedingt outgoing? Es läuft nur eine Nextcloud drauf und Daten vom Server werden mit Rsync over SSH auf einen anderen Sever gesichert. Kann ich irgendwie rausfinden, welche Ports ich alles brauche?
Schau dir mit Wireshark doch einfach an was dein(e) Rechner so brauchen/benötigen. https://www.wireshark.org/

Gruß,
Peter
hokaido
hokaido 16.02.2022 um 21:12:09 Uhr
Goto Top
Danke noch mal für die Hilfe / Tipps
Ich hatte ja noch der /etc/crontab eine Zeile hinzugefügt:
@reboot root /etc/init.d/firewall.sh

Das hat auch auf dem Testserver funktioniert. Auf dem Hauptserver auf dem ich es heute eingerichtet habe, wird die Zeile gnadenlos ignoriert.

Woran kann das denn liegen?

Danke
150345
150345 18.02.2022 um 10:07:44 Uhr
Goto Top
Skript ist auf dem Hauptserver vorhanden und Berechtigungen passen?
Ansonsten bau mal ein Logger in das Script ein und schau nach was passiert, wenn der Cronjob das Skript ausführt.
hokaido
hokaido 19.02.2022 um 00:20:28 Uhr
Goto Top
Ja Skript vorhanden, Berechtigungen passen auch