IPFW dodávaný s FreeBSD je systém paketového filtrování a účtování, který je volitelně součástí jádra. Ovládá se pomocí uživatelského příkazu ipfw. IPFW se skládá ze dvou částí, kde vedle filtrovacího mechanismu obsahuje i monitorovací systém, který umožňuje získávat přehled o provozních podmínkách routeru. Dále ve spojení s částí jádra dummynet zprostředkuje vyvažování zátěže a je možné jej podobným způsobem použít i pro stanice nesloužící jako routery. Mezi jeho významné vlastnosti lze zařadit podporu pro jiné úrovně síťové komunikace než TCP/IP, schopnost přesměrovávat požadavky na jiné porty (divert), podpora “stateful” módu, kde filtrovací pravidla vznikají dynamicky za běhu systému. Je možné (byť nedoporučované) nastavit jej natvrdo na otevřený a pak jej omezovat.
IPFW lze celkem jednoduše použít hned po instalaci systému, protože je již zkompilován jako modul:
kldload ipfw
Nastavený je implicitně na zakázat vše. Konfigurace se standardně načítá ze souboru /etc/rc.firewall. Tento soubor obsahuje seznamy pravidel pro firewall ve spustitelném tvaru (spouští klientský program ipfw – viz. dále).
Takto lze načíst otevřenou konfiguraci:
sh /etc/rc.firewall open
Další parametry firewall uzavírají nebo nastavují různé skupiny pravidel. Tyto parametry je možné specifikovat ve startovacím souboru /etc/rc.conf pomocí příkazu:
firewall_type=”typ”
kde pak startovací /etc/rc vyvolá právě /etc/rc.firewall s příslušným parametrem. Startovací /etc/rc.conf musí dále obsahovat:
firewall_enable=”yes”
Pro běh firewallu jako součást kernelu, je potřeba zadat do konfiguračního souboru pro kompilaci kernelu následující řádky:
options IPFIREWALL Přidává podporu pro firewall
options IPFIREWALL_VERBOSE Přidává kód pro logování pomocí syslog
options IPFIREWALL_VERBOSE_LIMIT=10 Nastaví maximum položek záznamů o pro jedno pravidlo
options IPDIVERT umožní přesměrovávat pakety na jiné porty pro NAT
options DUMMYNET balancování zátěže
Takto zkompilovaný kernel po spuštění systému automaticky spustí firewall, a nastaví jej podle /etc/rc.conf a /etc/rc.firewall.
Pro konfiguraci firewallu se používá vedle konfiguračního souboru i klientský program ipfw. Jeho fungování lze shrnout do má čtyř oblastí: přidávání (add) /mazání (delete) pravidel, vypisování pravidel (show) a jejich skupin /chains – řetězců/ a čítačů paketů (list), smazání všech pravidel (flush) a resetování čítačů (clear). Následující příklady jsou poměrně srozumitelné:
ipfw add deny tcp from evil.crackers.org to nice.people.org 23 via ed0
zakazuje komunikaci protokolem TCP od evil.crackers.org do portu 23 stanice nice.people.org jdoucí přes rozhraní ed0
ipfw add deny log tcp from evil.crackers.org/24 to nice.people.org
zakazuje a loguje komunikaci protokolem TCP ze sítě crackers.org a 24-bitovou maskou na jakýkoliv port stroje nice.people.org
Implicitně nastavený řetězec po instalaci, který zakazuje jakýkoliv přístup zvenčí:
allow 100 ip from any to any via lo0
deny 200 ip from any to 127.0.0.0/8
deny 65535 ip from any to any
Čísla označují pořadí v jakém se budou pakety porovnávat s pravidly řetězce, číslem 65535 je označené implicitní pravidlo, které nelze změnit, a které určuje implicitní chování firewallu.
Další příklady:
ipfw flush
smaže všechny řetězce a ponechá pouze implicitní pravidlo 'deny 65535 ip from any to any', tedy úplně uzavře síťovou komunikaci.
ipfw add fwd localhost,23 log tcp from evil.crackers.org to evil.crackers.org 23
přesměruje pakety jdoucí z evil.crackers.org na lokální počítač na port 23 na fbi.gov port 23.
Syntaxe příkazu ipfw:
ipfw [rule_number] [set set_number] [prob match_probability] action [log [logamount number]] body rule_number .............. vzestupné číslo pravidla (implicitní a neměnné 65535). udává pořadí zpracování set set_number ........... číslo množiny pravidel (1-30); lze takto seskupovat pravidla a manipulovat s nimy prob match_probability ... float od 0 do 1; používá se s dummynet (například simulace cest paketů) action ................... viz výše uvedené příklady a reference log [logamount number] ... zda logovat uvedené pakety pomocí syslog a jejich počet body ..................... viz výše uvedené příklady a reference