User Tools

Site Tools


pf

Packet Filter

Indítása

OpenBSD alatt

OpenBSD 4.6-os előtti verziók esetén a /etc/rc.conf.local fájlba vegyük fel a következőt:

pf=

A rendszer a szabályokat a /etc/pf.conf fájlból tölti be.

4.6 verziótól kezdve a csomagszűrő alapértelmezetten be van kapcsolva, így nincs más dolgunk, mint a /etc/pf.conf fájlt nekünk tetsző módon beállítani. Amennyiben ki szereténk kapcsolni a csomagszűrőt, a következőt vegyük fel a /etc/rc.conf.local fájlba:

pf=NO

FreeBSD alatt

FreeBSD esetén a következő beállításokat kell elvégezni:
Az /etc/rc.conf fájlba írjuk be a következő sorokat:

pf_enable="YES"                 # a PF engedélyezése (a modul betöltése, ha kell)
pf_rules="/etc/pf.conf"         # a pf szabályait tartalmazó állomány
pf_flags=""                     # a pfctl indításához szükséges további paraméterek
pflog_enable="YES"              # a pflogd elindítása
pflog_logfile="/var/log/pflog"  # hol tartsa a pflogd az naplóit
pflog_flags=""                  # a pflogd indításához szükséges paraméterek

Ezzel nagyjából készen is lennénk, hacsak nem akarunk ALTQ-t használni. Ha igen új kernelt kell forgatnunk, amiben a következőket kell bedrótozni:

options         ALTQ
options         ALTQ_CBQ        # osztályozás alapú besorolás (Class Bases Queuing, CBQ)
options         ALTQ_RED        # véletlen korai észlelés (Random Early Detection, RED)
options         ALTQ_RIO        # RED befele/kifele
options         ALTQ_HFSC       # hiearchikus csomagütemező (Hierarchical Packet Scheduler, HFSC)
options         ALTQ_PRIQ       # prioritásos besorolás (Priority Queuing, PRIQ)
options         ALTQ_NOPCC      # az SMP esetén kell

Üzemeltetés

Naplózás

A log fájlt a következő módon tudjuk interaktív módon olvasni:

% tcpdump -n -e -ttt -i pflog0

Ha csak lepörgetni szeretnénk a fájlt használjuk következő parancsot:

% tcpdump -n -e -ttt -r /var/log/pflog

Szabálybetöltés

Az eddigi szabályok törlése és újak beolvasása az /etc/pf.conf.proba fájlból:

% pfctl -F all -f /etc/pf.conf.proba

Az /etc/pf.conf állomány ellenőrzése a benne levő szabályok betöltése nélkül:

% pfctl -vnf /etc/pf.conf

A pftop nevű programmal pedig top-szerűen figyelhetjük az aktuális kapcsolatokat. A ports fából könnyen telepíthető.

% pftop -s1

Forgalomfigyelés

Az aktuális szabályok és az csomagok száma amire alkalmazták őket:

% pfctl -v -s rules

Ezt szűrhetjük az alkalmazott szabályokra is:

% pfctl -v -s rules | grep -B 1 "Packets: [1-9]"

Szabályalkotás

Trükkök

fail2ban

A GNU/Linuxos körökben elterjedt és igen kedvelt, illetve hasznos script, a fail2ban funkcionalitása igen könnyen megvalósítható a PF segítségével. Először is létre kell hoznunk egy táblát, amiben a kizárt IP címeket tárolja a csomagszűrő.

table <ssh_bruteforce> persist

A persist kapcsoló azt jelenti, hogy a tábla akkor is létrejön, ha nem tartalmaz IP címet, így menet közben fel lehet tölteni. Másodszor felvesszük azt a tiltó szabályt, ami a táblában szereplő IP címeket teljesen kizárja.

block in log quick from <ssh_bruteforce>

A quick kapcsoló segítségével érjük el azt, hogy a szabály további elemeit ne vizsgálja azokra az IP-kre, amik a táblában vannak, így mindenképpen tiltásra kerülnek. Harmadszor összeállítjuk a szabályt, ami a figyelendő portot engedélyezi és a meghatározott csatlakozások esetén tiltja a bejövő IP címet.

pass in quick on $ext_if inet proto tcp from any to $ext_if port 22 flags S/SA synproxy state (max-src-conn-rate 3/60, overload <ssh_bruteforce> flush global)

Ez a szabály 60 másodpercenként 3 kapcsolódást engedélyez a 22-es tcp portra. Amelyik IP ezt meghaladja az bekerül az ssh_bruteforce táblába. A flush global opció a táblába töltéskor törli az összes olyan elő kapcsolatot, amelyiknek köze van az imént kitiltott IP címhez, így biztosítva azt, hogy nem marad kiskapu a támadónak.

A tiltott IP címeket az alábbi paranccsal tudod kilistázni.

pfctl -t ssh_bruteforce -vTshow

Kitiltott IP címet az alábbi paranccsal tudsz törölni.

pfctl -t ssh_bruteforce -vTdelete [IP]

Hibák

FreeBSD alatt előfordulhat, hogy még sem indul el rendszerindításkor a PF tűzfal. Ennek egyik oka lehet, hogy a sysctrl-ban az IPFW van beállítva indítandó tűzfalként. Ha ez így van az /etc/sysctl.conf-fájba írjuk be:

net.inet.ip.fw.enable=0

Minta beállítás

pf.txt · Utolsó módosítás: 2010/04/19 13:35 szerkesztette: scout3r