IPFilter in Solaris
What is …?
IP-Filter ist ein Softwarepaket mit dem es möglich ist NAT und Firewalling Lösungen auf einem sehr einfachen Weg zu verwirklichen. Es werden lediglich die Filterregeln festgelegt. Keine weitere Reboots, ifconfig & “pfil” Frickeleien mehr.
IP-Filter wird direkt auf FreeBSD, NetBSD & Solaris 10 ausgeliefert.
Die Syntax
Die Regelsyntax in IP-Filter ist recht einfach, sie erinnert nahezu an natürliche Sprache & Grammatik.
Für jede Regel kann das Interface bestimmt werden oder wir sagen einfach “all”
pass out on all …
pass out on igb0 …
Was soll passieren?
Wer ist beteiligt?
Wie sind die Umstände?
pass in quick on igb0 proto tcp from 192.168.68.0/22 to any port = 22 keep state
Keywords
* quick
Quick überschreibt alle vorher getroffenen Einstellungen zu der speziellen Regel. Wir benutzen es nur um absolut sicherzugehen das die gesetzte Regel auch angewendet wird.
* proto
Richtig!! Proto legt das Protokoll fest. In unserem Beispiel wird proto immer von tcp gefolgt, da wir uns hier nur auf TCP beziehen.
* port
Das Keyword port bezieht die Regel auf eine spezielle Portnummer oder den Portnamen aus der /etc/services
* keep state
Hier wird die Filterung aller Pakete in der Firewall forciert. Da wir “quick” verwenden könnte es sein (sehr unwahrscheinlich), das ohne “keep state” Pakete ungefiltert durch die Firewall gelangen.
Anwendung
Starten und Stoppen
IP-Filter ist als SMF Service schon fest im System verankert und liegt als svc:/network/ipfilter:default vor.
Somit ergibt sich:
- START svcadm -v enable svc:/network/ipfilter:default
- STOP svcadm -v disable svc:/network/ipfilter:default
Um zu überprüfen on nach dem Start die Regeln auch geladen wurden reicht es ein ipf -Fa -f /etc/ipf/ipf.conf abzusetzen.
Um sicherzugehen das die Regeln aktuell angewendet werden: ipfstat -ioh
Hier werden alle angewendeten Regeln aufgelistet, diese sollten mit der /etc/ipf/ipf.conf übereinstimmen.
Config File
Die IP-Filter Regeln liegen in /etc/ipf/ipf.conf Hier werdet ihr in einer Grundkonfiguration nur die leere ipf.conf finden.
/etc/ipf/ipf.conf
root@dbmysql:~> cat /etc/ipf/ipf.conf
#
# ipf.conf
#
# IP Filter rules to be loaded during startup
#
# See ipf(4) manpage for more information on
Grundlegende Regeln
Alles blocken
Die wohl globalste Form an Regeln in IP-Filter sind die
block in all
block out all
Hier wird WIRKLICH ALLES geblockt. Diese Regeln sind ideal um exepts zu definieren, also “Blocke alles bis auf $Ports”
Beispiel hierzu: blocke alles bis auf SSH
block in all
pass in on igb0 proto tcp from 192.168.68.0/22 to any port = 22 keep state
Alles rein lassen
Parallel hierzu existieren
pass in all
pass out all
Hier wird WIRKLICH ALLES zugelassen. Mit diesen Regeln ist es einfach ein Set nach dem Motto “Lass alles rein, bis auf $Ports” zu erstellen.
Beispiel hierzu: lass alles rein, aber Telnet nicht
pass in all
block in on igb0 proto tcp from 192.168.68.0/22 to any port = 23 keep state
Erstellen eigener Regeln
Wenn die Datei ipf.conf leer sein sollte verhält sich ein gestarteter IP-Filter wie eine Regelliste mit folgendem Inhalt:
pass in all
pass out all
In allen folgenden Beispielen wird auf einem IP-Filter Host der NIC igb0 verwendet.
Um den SSH-Zugriff nur aus dem eignen Netzwerk zu erlauben reicht die folgende Config aus:
- mit ipcalc schnell das eigene Netz erschnüffeln:
hdi@silbensaat:~/Desktop$ ipcalc 192.168.68.35
Address: 192.168.68.35 10101100.00010001.01000100. 00100011
Netmask: 255.255.255.0 = 24 11111111.11111111.11111111. 00000000
Wildcard: 0.0.0.255 00000000.00000000.00000000. 11111111
=>
Network: 192.168.68.0/24 10101100.00010001.01000100. 00000000
HostMin: 192.168.68.1 10101100.00010001.01000100. 00000001
HostMax: 192.168.68.254 10101100.00010001.01000100. 11111110
Broadcast: 192.168.68.255 10101100.00010001.01000100. 11111111
Hosts/Net: 254 Class B, Private Internet
Somit ergibt sich, um das komplette Heimnetz per SSH zugreifen zu lassen, folgende Zeile:
pass in on ibg0 proto tcp from 192.168.68.0/24 to any port = 22 keep state
Beispielhafte, laufende und getestete Config:
# IP-Filter Config
# Rules for IO-Filter to be loaded during startup
#
# default block all traffic
#
block in all
####################
# allow only port 22
#### Heimnetz
pass in on igb0 proto tcp from 192.168.68.0/24 to any port = 22 keep state
#### Andere Maschinen
pass in on igb0 proto tcp from 192.168.117.128/32 to any port = 22 keep state
pass in on igb0 proto tcp from 192.168.111.28/32 to any port = 22 keep state
############################
# allow machine to receive a ping
#### Heimnetz
pass in quick proto icmp from 192.168.68.0/24 to any keep state
#
#### Andere Maschinen
pass in quick proto icmp from 192.168.117.128/32 to any keep state
pass in quick proto icmp from 192.168.111.28/32 to any keep state
#############################
# allow nagios NRPE Port 5666
#
pass in on igb0 proto tcp from 192.168.111.28/32 to any port = 5666 keep state
pass in on igb0 proto tcp from 192.168.117.128/32 to any port = 5666 keep state
Troubleshooting
Wenn kein Zugriff mehr von Außen auf die Maschine möglich ist wird per iLOM eine serielle Konsole geöffnet und quasi lokal IP-Filter gestoppt. (!!!Gilt nur für SUN Geräte mit iLOM!!!)
- Anmeldung am iLOM-Device ssh root@hostname-des-iLOM
-> start SP/console
Are you sure you want to start /SP/console (y/n)? y
Serial console started. To stop, type ESC (
- Anmeldung am Solaris-System als root
- Den IP-Filter ausschalten svcadm -v disable svc:/network/ipfilter:default
- ggf. die Config so verschieben das in einem versehentlichen Neustart von IPFilter man nicht erneut ausgesperrt wird mv /etc/ipf/ipf.conf /etc/ipf/ipf.conf.old