Bedienung
Beschreibung:
Wie schon erwähnt ist die Firewall so eingestellt das Sie alles blockt was eingehend ist. Alles was ausgehend ist wird zugelassen, würde man sie schon einschalten, wäre gar keine Kommunikation rein mehr möglich. Ohne ein ipmi, ausgesperrt
Gott sei Dank ist die Firewall direkt nach der Installation noch nicht aktiv.
Hier kommen einige Fallbeispiele wie man die Firewall konfigurieren kann.
Ist man fertig mit der Konfiguration durch, kann durch ein simples
ufw enable
die Firewall eingeschaltet werden.
Werkseinstellungen:
Sollte man nicht mehr sicher sein, was alles vergeben wurde oder man die Firewall einfach nur zurücksetzten will, Firewall ausschalten die Standard regeln wiederherstellen, eigene Regeln neu setzten, Firewall wieder aktivieren
Firewall ausschalten:
ufw disable
Nun die Standard Regens setzten:
ufw default deny incoming
ufw default allow outgoing
Jetzt noch eigene definieren, weil alles eingehende geblockt wird, also auch kein ssh möglich.
Dieses müssen wir freischalten, bevor wir aktivieren und noch viele andere Dienste die wir vielleicht nutzen.
Wenn wir sie nicht nutzen, brauchen diese logischerweise auch nicht freigeschaltet werden.
Status anzeigen:
ufw status verbose
Ausgabe:
Status: inactive
Wenn die Firewall an ist werden hier die Regeln aufgelistet, so kann man auch schnell Prüfen ist die Firewall an oder aus.
Zulassen von ssh Verbindungen:
ufw allow ssh
Ausgabe, hier sieht man das die für ipv6 und ipv4 angewandt wurden::
Rules updated
Rules updated (v6)
Dadurch werden Firewall-Regeln erstellt, die alle Verbindungen an Port 22 zulassen; das ist der Port, an dem der SSH-Daemon standardmäßig lauscht. UFW weiß, was Port allow ssh bedeutet, da dies in der Datei /etc/services als Dienst aufgeführt wird.
Wir können die äquivalente Regel jedoch auch schreiben, indem wir den Port anstelle des Dienstnamens angeben. Dieser Befehl funktioniert zum Beispiel genauso wie oben
ufw allow 22
Ausgabe, hier sieht man das die für ipv6 und ipv4 angewandt wurden:
fw allow 22
Rules updated
Rules updated (v6)
Nun die Firewall anschalten:
ufw enable
Ausgabe, Frage:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Da wir gerade die Ausnahme für ssh hinzugefügt haben, sollten wir nicht getrennt werden und kann mit y bestätigt werden
Nun können wir uns die Regelns anzeigen lassen
ufw status verbose
Ausgabe, wie wir sehen default deny incoming, allow outgoing, hier explicit 22 enabled für incoming:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22 ALLOW IN Anywhere
22/tcp ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
22/tcp (v6) ALLOW IN Anywhere (v6)
Zulassen Portbereiche und Protokolltyp UDP/TCP:
ufw allow 6000:6007/tcp
ufw allow 6000:6007/udp
Zulassen eingehender Verbindung von einer bestimmten IP (Source):
ufw allow from 203.0.113.4
Man kann aber auch festlegen das diese ip auch nur zu einem Bestimmten Port darf und somit nicht alles darf wie im Beisiel darüber. Somit darf die ip ssh nutzen, aber zum beispiel kein http. Beim oberen Beispiel hätte auch http funktioniert, weil für diese ip alles offen wäre. Jetzt da wir den Port mit angeben haben. Kann die IP auch nur mit Port 22 verbinden
ufw allow from 203.0.113.4 to any port 22
Zulassen von Subnetzen:
ufw allow from 203.0.113.0/24
Auch hier wieder mit to any port kann explizit der Port festgelegt werden.
ufw allow from 203.0.113.0/24 to any port 22
Verschiedenen Netzwerkschnittstellen:
Man hat zwei Netzwerkkarten, möchte aber nur auf Netzwerkkarte eth0 ssh erlauben auf eth1 nicht. Das machen wir mit allow in on gefolgt von der Netzwerkkarte und dann to any port Portnummer
ufw allow in on eth0 to any port 22
Ablehnen von Verbindungen:
ufw deny 80
Oder wenn alle eingehenden Verbindungen von einer IP geblockt werden sollen
ufw deny from 203.0.113.4
Oder diese ip nur auf diesen Port nicht zugreifen darf.
ufw deny from 203.0.113.4 to any port 80
Regeln löschen
Zu wissen, wie man Firewall-Regeln löscht, ist genauso wichtig wie zu wissen, wie man sie erstellt. Es gibt zwei Wege, um anzugeben, welche Regeln gelöscht werden sollen: anhand der Regelnummer oder der tatsächlichen Regel (ähnlich wie beim Angeben der Regeln im Rahmen der Erstellung). Wir beginnen mit der Methode Löschen anhand von Regelnummer, da sie einfacher ist.
Nach Regelnummer:
Wenn Sie die Regelnummer verwenden, um Firewall-Regeln zu löschen, wird eine Liste Ihrer Firewall-Regeln angezeigt. Der UFW-Statusbefehl hat eine Option, um neben jeder Regel eine Nummer anzuzeigen, wie hier gezeigt:
ufw status numbered
Ausgabe:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 22/tcp ALLOW IN Anywhere
[ 3] 22 (v6) ALLOW IN Anywhere (v6)
[ 4] 22/tcp (v6) ALLOW IN Anywhere (v6)
Nun können wir die regel mit der Nummer die wir nicht mehr haben wollen löschen, als Beispiel Nr 2
ufw delete 2
Nach tatsächlicher regel, kann ich persönlich nur empfehlen
ufw delete allow 80
Wir löschen die regel genauso wie sie angelegt wurde nur eben mit delete davor.
Dies löscht alle ipv4 und ipv6 regeln auf diesen Port.
Zurücksetzten, wenn Standardrichtlinien nicht geändert wurden.:
Es gibt auch einen Schnellbefehl, alle regeln zu löschen und die Firewall zu deaktivieren um neu anzufangen:
ufw reset
Ausgehende Verbindungen blocken:
Erstmal auch die Standardregel alle ausgehenden Verbindungen blocken anwenden:
ufw default deny outgoing
Nun die Verbindung zum Beispiel zu einer IP erlauben, indem diese freigeschaltet wird.
ufw allow out to 11.22.33.44
Nun können einzelne Ports ausgehend erlaubt werden:
ufw allow out to any port 80
Oder auf eine einzelne Netzwerkkarte bezogen
ufw allow out on eth0 to any port 80
Um das ganze schnell wieder rückgängig zu machen und alle ausgehenden Verbindungen wieder zuzulassen
ufw default allow outgoing
Gerouteter
Besonderheit Docker:
Da Docker auch regeln in die iptbales ballert, allerdings diese vorrang for der ufw haben, müssen wir hier ein bisschen nachhelfen:
wir müssen dazu folgendende Datei editieren und am ende einfügen. (weiter unten gibst eins Script)
/etc/ufw/after.rules
Inhalt :
# BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward
-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16
-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12
-A DOCKER-USER -j RETURN
-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW DOCKER BLOCK] "
-A ufw-docker-logging-deny -j DROP
COMMIT
# END UFW AND DOCKER
Mit einem kleinen script kann man erledigen lassen
cd /root
wget -O /usr/local/bin/ufw-docker https://github.com/chaifeng/ufw-docker/raw/master/ufw-docker
chmod +x /usr/local/bin/ufw-docker
ufw-docker install
systemctl restart ufw
Nun muss man auch für Docker explizit die Ports/Routing freigeben, da das aber gerouteter traffic ist, sehen die Befehle ein bisschen anders aus.
Vorallem gillt hier der lokale Port also der im Container.
Beispiel Port 8080:80
Der Port 8080 ist sowieso offen. Die regeln blocken den internen Traffic.
Also um den Traffic zumauf Beispielintern wireguardim interface:Container Port 80 zu öffnen/routen
ufw route allow 80
WennAllerdings einekann denyvon regelallen aufInterfaces wie eth1 für public und eth0 für privates Netz zugegriffen werden.
Hinter Port 8080:80 verbirgt sich ein wg0phpmyadmin.
Wir (Wireguardwollen interfaceaber gelegtnicht wird,das wirddieser dieim RegelPublic trotzdemnetzt durchgelassen.eth1 Daalso sieInternet zumsichtbar eth0 geroutet wird.Hier muss explizit gerouteter Traffice allows or deny gewerden
Gesamzter traffic von wg0 auf eth0 durchlassenist
ufw route allow in on wg0eht0 outto onany eth0port 80
OderDamit komplettenerlauben trafiicwir deniynur Port 80 routing ins docker Netz über die eth0 Netzwerkkarte
ufw route
deny in
on wg0 out on eth0
Logging:
Die log Datei liegt unter
/var/log/ufw.log