Illumos Firewall Kurzanleitung
In illumos wird IP Filter als Firewall genutzt:
- IP Filter nutzt last match, d.h. die letzte passende Regel gilt. Es sei denn man nutzt das
quick
Schlüsselwort. Ist das in einer Regel vorhanden, wird die Verarbeitung bei der Regel abgebrochen. - IP Filter gibt es auch für FreeBSD, wird dort aber wohl nicht mehr weiterentwickelt.
Firewall aktivieren
Die Firewall muss aktiviert werden:
svcadm enable network/ipfilter
Ohne weitere Konfiguration ist der Traffic In und Out erlaubt.
Regeln
Die Standarddatei für die Firewallregeln liegt unter /etc/ipf/ipf.conf
:
#
# ipf.conf
#
# IP Filter rules to be loaded during startup
#
# See ipf(5) manpage for more information on
# IP Filter rules syntax.
Diese wird beim Start des Services eingelesen.
Wenn Änderungen an der Datei gemacht wurden, können die neuen Regeln folgendermaßen neu eingelesen werden:
ipf -Fa -f /etc/ipf/ipf.conf
Dabei löscht -Fa
die aktiven Regeln (Flush) und -f
gibt die Datei an, aus der Regeln geladen werden sollen.
Regeln im Betrieb hinzufügen
Sollen Regeln im laufenden Betrieb hinzugefügt werden, dann geht das folgendermaßen:
echo "block in quick from 1.2.3.4 to any" | ipf -f -
Die hinzugefügten Regeln sind nicht persistent!
Aktive Regeln anzeigen
Die aktiven Regeln lassen sich anzeigen:
# ipfstat -io
empty list for ipfilter(out)
block in quick from 1.2.3.4/32 to any
Berechtigungen
Einem Standardbenutzer können Berechtigungen erteilt werden, die Regeln zu ändern. Dazu wird RBAC benutzt:
usermod -P "IP Filter Management" user1
Der Benutzer kann dann via pfexec
die Regeln ändern, z.B. pfexec ipf -Fa -f /etc/ipf/ipf.conf
Beispiel-Regeln
Hier ein paar Beispielregeln für einen Webserver:
# block all incoming traffic and watch further, pass all outgoing traffic
block in all
pass out quick all keep state
# no restrictions on loopback interface
pass in quick on lo0 all
pass out quick on lo0 all
# block fragments and too short tcp packets
block in quick with frags
block in quick proto tcp from any to any with short
# block source routed packets
block in quick with opt lsrr
block in quick with opt ssrr
# block anything with special options
block in quick with ipopts
# block OS fingerprint attempts and log first occurrence
block in log first quick proto tcp from any to any flags FPU
# allow connections to sshd on interface e1000g
pass in on e1000g0 proto tcp from any to any port = ssh flags S keep state
# allow connections to web server
pass in proto tcp from any to any port = http flags S keep state
pass in proto tcp from any to any port = https flags S keep state
pass in proto udp from any to any port = https keep state
Zones
Für jede non-global zone gibt es zwei Regelsätze:
- in-zone
- Global Zone-controlled (GZ-controlled)
Aus der ipf man page:
Each non-global zone has two ipfilter instances: the in-zone ipfilter, which can be controlled from both the zone itself and the global zone, and the Global Zone-controlled (GZ-controlled) instance, which can only be controlled from the Global Zone. The non-global zone is not able to observe or control the GZ-controlled ipfilter.
ipf optionally takes a zone name as an argument, which will change the ipfilter settings for that zone, rather than the current one. The zonename option is only available in the Global Zone. Using it in any other zone will return an error. If the -G option is specified with this argument, the Global Zone-controlled ipfilter is operated on. If -G is not specified, the in-zone ipfilter is operated on. Note that ipf differs from the other ipfilter tools in how the zone name is specified. It takes the zone name as the last argument, while all of the other tools take the zone name as an argument to the -G and -z options.
- Eingehende Pakete passieren erst die GZ-controlled Firewall, dann die in-zone Firewall.
- Ausgehende Pakete passieren erst die in-zone Firewall, dann die GZ-controlled Firewall.
Die Zone kann die GZ-controlled Firewall weder ändern, noch auslesen.
in-zone Regeln
Die in-zone Regeln können also innerhalb der Zone verwaltet werden oder aus der Global Zone. Voraussetzung ist allerdings, dass in der Zone auch der Firewall-Service mit svcadm enable network/ipfilter
aktiviert wurde.
Von der Global Zone aus, können die in-zone Regeln z.B. folgendermaßen geändert werden:
ipf -Fa -f /etc/ipf/ipf.conf <zonename>
echo "block in quick from 1.2.3.4 to any" | ipf -f - <zonename>
Falls man einen Fehler 1:ioctl(add/insert rule): I/O error
beim Ändern der Regeln bekommt, dann muss IP Filter aktiviert werden. Dies kann der Fall sein, wenn man zwar den Firewall-Service in der Zone aktiviert hat, dort aber keine Firewallregeln unter /etc/ipf/ipf.conf
abgelegt hat:
ipf -E <zonename>
Die in-zone Regeln anzeigen:
# ipfstat -z <zonename> -ioh
empty list for ipfilter(out)
0 block in quick from 1.2.3.4/32 to any
Global Zone-controlled (GZ-controlled) Regeln
Die GZ-controlled Regeln müssen ebenfalls erst aktiviert werden und werden dann folgendermaßen geändert:
ipf -GE <zonename>
ipf -G -Fa -f /etc/ipf/ipf.conf <zonename>
echo "block in quick from 1.2.3.4 to any" | ipf -G -f - <zonename>
ipfstat -G <zonename> -ioh
Wenn GZ-controlled Regeln automatisch beim Start der Zone erstellt werden sollen, dann werden sie unter /zones/<zonename>/etc/ipf.conf
oder /zones/<zonename>/conf/ipf.conf
abgespeichert.