IPFW Firewall unter FreeBSD einrichten
Die IPFIREWALL (IPFW) ist eine von FreeBSD gesponserte Firewall-Anwendung. Es handelt sich um eine Stateful-Firewall, die für das FreeBSD-System geschrieben wurde und sowohl IPv4 als auch IPv6 unterstützt. Die IPFW ist in der Grundinstallation von FreeBSD enthalten; du musst das Modul nur über die Datei „/etc/rc.conf“ laden, um es zu aktivieren.
Diese Anleitung zeigt dir, wie du die Basic IPFW Firewall unter FreeBSD 12.0 einrichtest. Zuerst werden wir die Firewall mit den Standardregeln von FreeBSD einrichten und dann mit einer eigenen Regel.
Was wir tun werden:
- Grundlegende Einrichtung der IPFW
- IPFW mit benutzerdefinierter Regel einrichten
- Logging einschalten
1. Grundlegende Einrichtung der IPFW
Als Erstes richten wir die grundlegende ipfw-Firewall ein. Wir aktivieren die ipfw mit den Standard-Firewalltypen von FreeBSD.
Im Folgenden sind die Standard-Firewall-Typen von FreeBSD aufgeführt:
- open: lässt den gesamten Datenverkehr durch.
- client: schützt nur diesen Rechner.
- simple: Schützt das gesamte Netzwerk.
- closed: Schaltet den IP-Verkehr bis auf die Loopback-Schnittstelle komplett ab.
- workstation: Schützt nur diesen Rechner mit zustandsabhängigen Regeln.
- UNKNOWN: Deaktiviert das Laden von Firewall-Regeln.
- Dateiname: vollständiger Pfad der Datei, die den Firewall-Regelsatz enthält.
In diesem Abschnitt verwenden wir den Standardtyp „Workstation“ und legen dann den Port für die Dienste fest, der geöffnet werden soll.
Um die ipfw-Firewall zu aktivieren, kannst du in der Datei „/etc/rc.conf“ den Eintrag „firewall_enable=“YES“ hinzufügen.
Bearbeite die Datei „/etc/rc.conf“ mit dem Editor vim.
vim /etc/rc.conf
Aktiviere die ipfw-Firewall.
# enable firewall firewall_enable="YES"
Lege den Standard-Firewall-Typ fest, der verwendet werden soll.
# set the default rule and services firewall_type="workstation"
Lege nun die Ports fest, die du für deine Dienste öffnen willst.
# services port firewall_myservices="22 80 443 67 10000" firewall_allowservices="any" firewall_logdeny="YES"
Aktiviere die Protokollierung für die Firewall. Du kannst die Protokollierung über die Datei oder die Protokollierung auf der Schnittstelle „ipfw0“ verwenden.
# enable logging #firewall_logging="YES" firewall_logif="YES"
Speichere und schließe.
Als Nächstes startest du den ipfw-Dienst mit dem unten stehenden Dienstbefehl.
service ipfw start
Dann wird die Verbindung zum Server getrennt und du musst dich erneut anmelden.
Nachdem du dich am Server angemeldet hast, überprüfe die Firewall-Regeln mit dem folgenden Befehl.
ipfw list
Du erhältst das unten stehende Ergebnis.
Das Ergebnis ist, dass die ipfw-Firewall auf dem FreeBSD 12.0-System mit dem Standardtyp „Workstation“ aktiviert wurde. Und die definierten Ports sind in der Liste aufgeführt.
2. IPFW mit eigenen Regeln einrichten
In diesem Schritt richten wir die ipfw-Firewall mit einer benutzerdefinierten Konfiguration ein.
Bearbeite die Datei „/etc/rc.conf“ mit dem Editor vim.
vim /etc/rc.conf
Aktiviere nun die ipfw-Firewall.
# enable firewall firewall_enable="YES"
Definiere das Firewall-Skript, das du verwenden willst.
# custom rule script firewall_script="/usr/local/etc/ipfw.rules"
Aktiviere die Protokollierung für die Firewall auf der Schnittstelle „ipfw0“.
# enable logging firewall_logif="YES"
Speichere und schließe.
Als nächstes müssen wir die ipfw-Regelkonfiguration „/usr/local/etc/ipfw.rules“ erstellen.
Die Konfigurationsdatei ist ein Bash-Skript, das die Syntax der ipfw-Regeln enthält. Sie enthält den ipfw-Befehl zum Hinzufügen der Regel und die Regel selbst.
Im Folgenden findest du die grundlegende Regelsyntax der ipfw-Firewall.
CMD RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT OPTIONS
Gehe nun in das Verzeichnis „/usr/local/etc/“ und erstelle die Datei „ipfw.rules“ mit dem Editor vim.
cd /usr/local/etc/ vim ipfw.rules
Lege die erste Regel der Firewall fest und definiere die Umgebungsvariable zum Hinzufügen der Firewall-Regel und die externe Netzwerkschnittstelle.
#!/bin/sh # Flush out the list before we begin. ipfw -q -f flush
# Set rules command prefix
cmd=“ipfw -q add“
pif=“vtnet0″
Erlaube alles auf der Schnittstelle localhost ‚lo0‘.
# Disable Restriction on localhost $cmd 0010 allow all from any to any via lo0
Erlaube alle ausgehenden Internetverbindungen, DHCP und ICMP-Ping aus dem Internet.
# Allow Outgoing, DHCP, Ping $cmd 0011 allow all from any to any out keep-state $cmd 0012 allow log udp from any to any 67 out via $pif keep-state $cmd 0013 allow log icmp from any to me icmptype 0,8 in via $pif keep-state
Jetzt wird das Paket mit der dynamischen Statustabelle abgeglichen.
# Allows the packet through if it matches an existing entry $cmd check-state
Erlaube den Port für Basisdienste, den du öffnen willst.
# Allow Services FTP, SSH, MAIL, DNS, HTTP, HTTPS $cmd 110 allow tcp from any to any 21 in $cmd 120 allow log tcp from any to any 22 in $cmd 130 allow tcp from any to any 25 in $cmd 140 allow udp from any to any 53 in $cmd 150 allow tcp from any to any 80 in $cmd 160 allow tcp from any to any 443 in
Verweigere nun alles und protokolliere alles.
# deny everything else and log it $cmd 001000 deny log ip from any to any in via $pif
Speichere und schließe.
Starte nun den ipfw-Dienst mit dem folgenden Befehl.
service ipfw start
Dadurch wird die Verbindung zum Server unterbrochen.
Logge dich jetzt wieder auf dem Server ein und überprüfe die ipfw-Regeln.
ipfw list
Das Ergebnis wird dir wie folgt angezeigt.
Die ipfw-Firewall wurde also mit den in der Konfiguration „/usr/local/etc/ipfw.rules“ definierten Zollregeln aktiviert.
3. Aktiviere die IPFW-Firewall-Logs
Die ipfw-Firewall unterstützt zwei Arten von Protokollen, das Ereignisprotokoll und das Pseudo-Protokoll über die Schnittstelle ‚ipfw0‘. Sie können in der Datei „/etc/rc.conf“ aktiviert werden.
Für das normale Ereignisprotokoll kannst du die folgende Konfiguration verwenden.
https://www.howtoforge.com/images/how_to_setup_ipfw_firewall_on_freebsd_120/1.pngfirewall_logging="YES"
Und für das Pseudo-Logging über die Schnittstelle „ipfw0“ kannst du die folgende Konfiguration verwenden.
firewall_logif="YES"
Danach müssen wir die Protokollierung über den Kernel-Parameter „/etc/sysctl.conf“ einschränken.
Führe den folgenden Befehl aus.
echo "net.inet.ip.fw.verbose_limit=5" >> /etc/sysctl.conf
Starte nun den Server neu.
sudo reboot
Die ipfw-Firewallprotokollierung wurde aktiviert und alle Regeln, die die Option „log“ enthalten, werden protokolliert.
Wenn du die Ereignisprotokollierung verwendest, kannst du das Protokoll in der Protokolldatei „/var/log/security“ überprüfen.
tail -f /var/log/security
Du erhältst dann das unten stehende Ergebnis.
Wenn du die Pseudo-Log-Schnittstelle „ipfw0“ verwendest, kannst du die Protokolle mit dem Befehl tcpdump überprüfen.
tcpdump -t -n -i ipfw0
Du erhältst dann das unten stehende Ergebnis.
Die Grundkonfiguration der ipfw-Firewall unter FreeBSD 12.0 ist nun erfolgreich abgeschlossen.