Nachdem meine Allsky-Kamera über Apache, abgesichert mit Let’s Encrypt und einer eigenen Subdomain öffentlich verfügbar ist, wollte ich den Raspberry Pi auch auf Netzwerkebene etwas härten – ohne riskante Experimente oder unnötige Komplexität. NAT schützt bei IPv4 zwar grundsätzlich, aber gerade die Ports 80 und 443 sind öffentlich erreichbar. Zusätzlich erzeugen Bots, Scanner und automatisierte Anfragen unnötigen Traffic.
Mein Ziel: eine pragmatische Firewall, die echte Zugriffe zulässt, Bot-Lärm reduziert und Let’s Encrypt nicht beeinträchtigt. Hier ist zunächst der IPv4-Teil – einen zusätzlichen Post zum Thema IPv6 findet ihr hier!
IPv4: Minimal-Firewall mit Rate-Limiting
Die Ausgangslage bei IPv4 ist einfach: der Raspberry steht hinter der Fritz!Box und wird per Portfreigabe für HTTP/HTTPS erreichbar gemacht. Trotzdem lohnt es sich, eine kleine lokale Firewall einzurichten, um unnötige Anfragen auszubremsen. Dafür nutze ich iptables und ein Rate-Limiting, das Bots effektiv einschränkt, Let’s Encrypt aber nicht trifft.
Schritte zur Einrichtung (XXXX bei SSH ist durch euren SSH-Port zu ersetzen!):
# Loopback erlauben
sudo iptables -A INPUT -i lo -j ACCEPT
# Bereits etablierte Verbindungen erlauben
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SSH erlauben (Port bei Bedarf anpassen)
sudo iptables -A INPUT -p tcp --dport XXXX -j ACCEPT
# Rate-Limiting für Port 80 (HTTP)
sudo iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW \
-m limit --limit 25/minute --limit-burst 100 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
# Rate-Limiting für Port 443 (HTTPS)
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW \
-g limit --limit 50/minute --limit-burst 200 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j DROP
# Optional: Standard-Policy auf DROP setzen
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
Damit sind nur noch die wirklich benötigten Ports offen. Angreifer, Bots und aggressive Scanner laufen direkt ins Limit oder in die DROP-Regel. Let’s Encrypt ist davon nicht betroffen, da nur einzelne HTTP-Anfragen pro Zertifikat nötig sind.
Regeln dauerhaft speichern per iptables:
sudo apt install iptables-persistent sudo netfilter-persistent save
Warum IPv6 ebenfalls wichtig ist:
Während IPv4 durch NAT strukturell geschützt ist, ist IPv6 ohne Firewall immer global erreichbar – ganz ohne Portfreigaben. Genau deshalb ist eine IPv6-Firewall kein „nice to have“, sondern Pflicht. Alle Infos dazu findet ihr hier!