Firewalls kann man auf die verschiedensten Arten implementieren . Hier wird OPNsense verwendet.
Seit langer Zeit betreibe ich meine Firewall (Definition von Wikipedia) auf einem handgeklöppelten OpenBSD-System. So wild ist die Formulierung der PF-Regeln nicht und es ändert sich auch nicht dauernd etwas. Genau das ist das Problem. Die Firewall läuft so vor sich hin und das OpenBSD reift vor sich hin. Es gibt allerdings alle sechs Monate eine neue Version von OpenBSD. Der Wechsel benötigt ab und an keine Anpassungen an den Konfigurationsdateien. Das Update ist also immer eine kleines Projekt – nicht gut! Da meine Firewall in der letzten Zeit ab und an so träge reagiert, dass Verbindungen abreißen. Zeit für etwas Neues.
Die Alternativen
Die Anforderungen an meine Firewall sind:
- sicher (natürlich, aber ich wollte es noch einmal sagen, sonst pfeift mein Aluhut),
- einfach administrierbar und aktualisierbar (möglichst automatisch),
- Energie sparend (DNS- und DHCP-Server integriert),
- ausreichend Durchsatz,
- VPN (IPsec und OpenVPN),
- DMZ,
- Reverse-Proxy und
- Zertifikate von Let’s Encrypt
Mit OpenBSD geht das alles, aber VPN ist nicht so leicht einzurichten und einfach aktualisieren (siehe oben) ist es auch nicht. Die OpenBSD-Lösung befriedigt auch meine Sicherheitsparanoia. Ob die Firewall energiesparend ist und ausreichend Durchsatz hat, hängt größtenteils von der Hardware ab, da sich die Basissysteme OpenBSD, FreeBSD oder Linux nicht viel geben. Ich will hier keine proprietären Appliances betrachten und andere Open-Source-Basissystem sind mir nicht bekannt.
Es bieten sich folgende, aktuell gepflegte Varianten von Firewall-Distributionen an:
- IPFire – Linux-basiert
- Openwall – Linux-basiert
- OpenWrt – Linux-basiert
- OPNsense – FreeBSD-basiert
- pfSense – FreeBSD-basiert
Auf Wikipedia gibt es eine Liste der Router- und Firewall-Distributionen (in Englisch). Hier findet man noch weitere Distributionen für Firewalls. Meine Auswahl oben reicht mir allerdings.
Da ich gerne einen Mix von Betriebssystemen in meiner Infrastruktur haben möchte, haben die BSD-basierten Firewalls hohe Priorität bei meinen Experimenten. OPNsense ist ein BSD-lizenzierter Abkömmling von pfSense. Also sehe ich mir einmal OPNsense an.
Grundinstallation
Als “Hardware” bieten sich die Alix-Rechner von PC Engines oder eine Virtuelle Maschine an. Beides habe ich schon eingesetzt. Man könnte natürlich auch einen der ARM-basierten Single-Board-Computer (SBC), zum Beispiel Raspberry Pi 4, einsetzen. Hier fehlen aber oft die getrennten Netzwerkschnittstellen. Ich verwende erst einmal das APU2D2.
Die Anleitung zur Installation in Englisch von der OPNsense-Seite ist leicht nachvollziehbar. Die folgenden Abschnitte beschreiben meine Vorgehensweise.
Download und Schreiben des Abbilds auf den USB-Stick
Auf der Download-Seite muss man die Architektur (i386
oder amd64
) wählen. Für das APU2D2 und auch meine Virtuellen Maschinen ist die 64-Bit-Architektur (amd64
) richtig. Für das APU2D2 ist serial
der korrekte Abbildtyp. Er funktioniert auch mit Virtuellen Maschinen. Der Spiegelserver ist eigentlich Wurst, nehmt einfach einen in eurer Nähe.
Nach dem Download bietet sich die Überprüfung der Prüfsumme an, wie das geht steht auch in der OPNsense-Anleitung. Ist meiner Meinung für viele etwas knapp beschrieben. Ich bin wie folgt vorgegangen:
- Abbild mit den Drop-Down-Menus (
amd64
,serial
,RageNetwork
– wie gesagt sucht euch etwas aus) auswählen. - Mit einem Rechtsklick auf den Download-Knopf den Link kopieren. Bei mir war das: https://mirror.ragenetwork.de/opnsense/releases/19.7/OPNsense-19.7-OpenSSL-serial-amd64.img.bz2
- Folgende Kommandosequenz in der Bash ausführen:
wget https://mirror.ragenetwork.de/opnsense/releases/19.7/OPNsense-19.7-OpenSSL-serial-amd64.img.bz2 wget https://mirror.ragenetwork.de/opnsense/releases/19.7/OPNsense-19.7-OpenSSL-serial-amd64.img.bz2.sig wget https://mirror.ragenetwork.de/opnsense/releases/19.7/OPNsense-19.7-OpenSSL-checksums-amd64.sha256 wget https://mirror.ragenetwork.de/opnsense/releases/19.7/OPNsense-19.7.pub
- Den heruntergeladenen öffentlichen Schlüssel (.pub) mit dem Schlüssel aus einer anderen Quelle (zum Beispiel) vergleichen. Wenn die beiden Schlüssel identisch, geht es weiter mit der folgenden Kommandosequenz:
sha256sum -c --ignore-missing OPNsense-19.7-OpenSSL-checksums-amd64.sha256 openssl base64 -d -in OPNsense-19.7-OpenSSL-serial-amd64.img.bz2.sig -out tmp-image.sig openssl dgst -sha256 -verify OPNsense-19.7.pub -signature tmp-image.sig OPNsense-19.7-OpenSSL-serial-amd64.img.bz2 rm tmp-image.sig bunzip2 OPNsense-19.7-OpenSSL-serial-amd64.img.bz2
Das Kommando spuckt bei mir OK
(SHA256) und Verified OK
(Signatur) aus. Ich bin von der Integrität des Abbilds hinreichend überzeugt. Das Schreiben auf den USB-Stick führe ich mit Disks (wie habe ich hier beschrieben) durch.
Booten vom USB-Stick
Das APU2D2 kann vom USB-Stick booten. Es gibt allerdings kann man keinen Monitor anschließen. Für die Auswahl im Boot-Menü benötigt man eine serielle Konsole. Ich verwende meinen Linux-Rechner mit einem USB-RS232-Konverter (das Teil habe ich schon vor Jahren gekauft, es wird von Linux direkt erkannt), einem Null-Modem-Kabel und screen /dev/ttyUSB0 115200
(ttyUSB0
war in diesem Fall der USB-RS232-Konverter, könnte auch ein anderes Gerät sein und 115200
ist die Bitrate der seriellen Schnittstelle).
Der APU2D2 meldet sich mit:
Mit F10 wählt man den USB-Stick aus und bootet das OPNsense.
Schnittstellenzuweisung
Beim ersten Starten ist es sinnvoll, wie ein Luchs aufzupassen. Nach einer Weile sollte man die Schnittstellen zuordnen. Dazu muss man innerhalb von fünf Sekunden ein Taste drücken, sonst bootet OPNsense weiter. Ein Beinbruch ist das wahrscheinlich nicht, man kann das später auch auf der Konsole nachholen, oder man lebt mit der automatischen Zuordnung.
Jetzt schnell eine Taste drücken! Danach folgt etwas in der folgenden Form. Wer mehr oder weniger von FreeBSD erkannte Netzwerkschnittstellen hat bekommt mehr oder weniger Zeilen angezeigt. Mein APU2D2 hat drei Intel PRO/1000, deshalb bekomme ich folgendes angezeigt (Die MACs habe ich allerdings verfälscht):
Danach wird man gefragt, ob man schon die VLANs (Wikipedia) einrichten will. Ich will nicht.
Danach folgt die Zuordnung. Man kann die passenden Buchsen automatisch zuordnen lassen. Die Idee ist gut. Alle Ethernet-Kabel abziehen ‘a’ drücken, das Kabel in die gefragt Schnittstelle einstecken und die ‘Return’-Taste drücken. Ich bin mir nicht sicher, ob ich mich zu blöde angestellt habe oder es nicht immer funktioniert. Jedenfalls musste ich die Schnittstellen manuell zuordnen.
Jetzt bootet OPNsense ohne weitere Nachfragen fertig.
Erstanmeldung
Jetzt melde ich mich zum ersten Mal (Benutzer: root, Passwort: opnsense) an der Firewall an. Hier wird man von einem Menü begrüßt.
Als Erstes mit ‘3’ das Root-Passwort setzen.
Jetzt noch den internen DHCP-Server einschalten. Dazu wählt man mit ‘2’ dieZuweisung einer IP-Adresse aus. Den weiteren Ablauf könnte wie folgt aussehen
Zum Abschluss boote ich das System mit “6’ und ‘y’ neu. Sollte nicht notwendig sein, die Änderungen werden direkt übernommen, aber ich will sehen, ob das System sauber bootet.
Es bootet sauber. Das APU2D2 arbeitet jetzt als Firewall, die Zugriffe von außen auf die WAN-Schnittstelle blockiert und alle Anfragen über die LAN-Schnittstelle nach außen erlaubt. Die Firewall vergibt auch IP-Adressen über DHCP und löst Domainnamen auf. Das reicht in manchen Szenarien schon aus. Ich werde aber noch mehr konfigurieren und in den folgenden Artikeln beschreiben.