Microblog #02: UFW verstehen und einrichten
Kurzbeitrag rund um nützliche UFW Commands.

Vorwort
Mir geht es nicht darum UFW bis ins Detail abzubilden, vielmehr ein Nachschlagewerk zu erstellen in dem man bei Bedenken schnell und übersichtlich suchen kann.
Konfiguration
Dienste erlauben
Mit dem Command ufw app list können installierte Anwendungen gelistet werden, die ein Profil für UFW mitbringen.
Alternativ kann der Port (mit entsprechendem Protokoll) ebenso per Hand freigegeben werden.
Nachfolgende Commands erlauben beispielhaft SSH Traffic auf Port 22 via TCP.
sudo ufw allow ssh comment 'SSH Server'
sudo ufw allow 22/tcp comment 'SSH Server'
UFW Defaults
Standardmäßig allen eingehenden Traffic blockieren
sudo ufw default deny
UFW starten, bitte stellt sicher, dass ihr euch nicht selbst aussperrt, SSH Zugang sollte als Regel bereits angelegt sein!
sudo ufw enable
IP's sperren
Mit nachstehendem Command kann eine IP, aber auch ein ganzes Subnet gesperrt werden:
sudo ufw deny from 123.123.123.123 comment 'Reason'
IP's erlauben
Mit nachstehendem Command kann eine IP oder ein Subnet zum Zugriff berechtigt werden:
sudo ufw allow from 123.123.123.123 comment 'Reason'
Portranges erlauben
Natürlich ist es auch möglich eine Reihe an Ports auf einmal zu öffnen, wenn es eine Anwendung erfordert:
# Ports 8000 bis 9000 mit TCP erlauben
sudo ufw allow 8000:9000/tcp comment 'Application XY'
# Ports 8000 bis 9000 mit UDP erlauben
sudo ufw allow 8000:9000/udp comment 'Application XY'
Status der UFW ausgeben
Der Output könnte dann wie folgt aussehen:
sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
51820/udp ALLOW Anywhere
80,443/tcp ALLOW 173.245.48.0/20 # Cloudflare IP
80,443/tcp ALLOW 103.21.244.0/22 # Cloudflare IP
80,443/tcp ALLOW 103.22.200.0/22 # Cloudflare IP
80,443/tcp ALLOW 103.31.4.0/22 # Cloudflare IP
80,443/tcp ALLOW 141.101.64.0/18 # Cloudflare IP
80,443/tcp ALLOW 108.162.192.0/18 # Cloudflare IP
80,443/tcp ALLOW 190.93.240.0/20 # Cloudflare IP
80,443/tcp ALLOW 188.114.96.0/20 # Cloudflare IP
80,443/tcp ALLOW 197.234.240.0/22 # Cloudflare IP
80,443/tcp ALLOW 198.41.128.0/17 # Cloudflare IP
80,443/tcp ALLOW 162.158.0.0/15 # Cloudflare IP
80,443/tcp ALLOW 172.64.0.0/13 # Cloudflare IP
80,443/tcp ALLOW 131.0.72.0/22 # Cloudflare IP
80,443/tcp ALLOW 104.16.0.0/13 # Cloudflare IP
80,443/tcp ALLOW 104.24.0.0/14 # Cloudflare IP
80,443/tcp ALLOW 12.34.56.78 # Prometheus Server
22/tcp (v6) ALLOW Anywhere (v6)
51820/udp (v6) ALLOW Anywhere (v6)
80,443/tcp ALLOW 2400:cb00::/32 # Cloudflare IP
80,443/tcp ALLOW 2606:4700::/32 # Cloudflare IP
80,443/tcp ALLOW 2803:f800::/32 # Cloudflare IP
80,443/tcp ALLOW 2405:b500::/32 # Cloudflare IP
80,443/tcp ALLOW 2405:8100::/32 # Cloudflare IP
80,443/tcp ALLOW 2a06:98c0::/29 # Cloudflare IP
80,443/tcp ALLOW 2c0f:f248::/32 # Cloudflare IP
Regeln löschen
Zuerst bestehende Regeln nummeriert ausgeben:
sudo ufw status numbered
Anschließend die passende Nummer notieren und im Folgecommand ersetzen:
sudo ufw delete <Nummer>
Webserver
Webserver laufen für gewöhnlich auf den Ports 80 und 443 jeweils via TCP. Dieser Traffic kann über folgende Commands erlaubt werden:
Webtraffic von allen IPs zulassen
sudo ufw allow proto tcp from any to any port 80,443 comment 'Webserver'
Webtraffic nur von bestimmten IPs zulassen
sudo ufw allow proto tcp from 123.123.123.123 to any port 80,443 comment 'Restricted Access'
MySQL / MariaDB
Zugang zum lokalen Datenbankserver vom LAN erlauben, hierbei habe ich das gesamte 10.0.0.0/8 Subnet angegeben, dies kann enstprechend eingegrenzt werden.
sudo ufw allow from 10.0.0.0/8 to any port 3306 comment 'Datenbankserver XY'
Verkehr auf bestimmte Interfaces beschränken
Port 22 / TCP auf Interface eth0 erlauben:
sudo ufw allow in on eth0 to any port 22
Firewall Einstellungen
Starten / Stoppen / Status von UFW ausgeben lassen
sudo ufw {start|stop|status}
Firewall neu laden - Nützlich nach dem Hinzufügen / Editieren von Regeln
sudo ufw reload
UFW zurücksetzen
sudo ufw reset
Bildquelle: https://images.unsplash.com/photo-1606606767399-01e271823a2e