Úvod
"Firewall" v angličtině znamená "protipožární přepážka" V
počítačové terminologii se jedná o zařízení (zpravidla počítač), který
od sebe odděluje vnitřní síť (LAN) a vnější síť (Internet). Tato
koncepce bezpečnosti vychází z myšlenky, že je jednodušší chránit jeden
bod přístupu než více různých bodů. Firewall má chránit počítače v LAN
od potenciálních útočníků přistupujících z Internetu nebo naopak má
zabraňovat uživatelům nacházejících se v LAN k neoprávněnemu přístupu na
Internet.
Paketové filtry
Filtrování paketů je zabudováno v jádře (buď jako modul nebo přímo
zakompilované).
Filtrování pracuje na sťové úrovni. Data smí opustit systém, jen když
to dovolují pravidla firewallu. Příchozí pakety jsou filtrovány
například podle jejich typu, zdrojové adresy, cílové adresy a čísla
portu. Filtrování paketů se dá považovat za jakési směrování. Protože se
pro analýzu paketu používají informace z IP hlavičky paketu, tak tato
operace nezatěžuje příliš CPU a nějak výrazně nezpomaluje provoz na
síti.
Firewally s filtrováním paketů neposkytují autentizaci uživatele
například pomocí hesla. Identifikace probíhá jedině podle IP adresy
uživatelova počítače. Toto může být problém pokud v síti používáme
dynamické přidělování adres (DHCP).
Firewally s filtrováním paketů jsou pro uživatele v podstatě
transparentní. Uživatel nemusí nastavovat pravidla ve svých aplikacích
pracujících s Internetem.
Proxy servry
Viz
dřívější referát
Proxy servry se obvykle používají k monitorování provozu a řízení
přístupu k vnější síti. Některé aplikační proxy servry umožňují
uchovávat (cache) požadovaná data. Toto snižuje počet vnějších dotazů a
umožňuje evidenci dotazů.
Spojení přes proxy server obvykle není pro uživatele transparentní.
Musí u aplikací nastavit, aby k přístupu do vnější sítě používaly proxy
server.
Proxy servry umožňují autentizaci uživatele například pomocí hesla.
NAT - Network Address Translation
Definováno v RFC 1631
Důvody:
Paketové filtry pro Linux
Verze paketových filtrů pro Linux
Netfilter a iptables
Linux s jádrem 2.4 umožuje filtrování paketů (packet filtering) a
překlad adres (Network
Address Translation - NAT).
Netfilter je sada "pravidel" na síťovém zásobníku uvnitř
linuxového jádra, která umožňuke modulům jádra, aby si registrovali
funkce pro ošetření paketů. Tyto funkce jsou pak aplikovány na paket
procházející jádrem, pokud vyhoví definovaným podmínkám.
iptables je základní tabulková struktura, ve které jsou
definovány sady pravidel. Každé pravidlo se skládá z několika výběrových
kritérií (matches) a příslušné akce (target/jump).
Balík iptables je možné stáhnou z Netfilter homepage
Pro používání iptables je potřeba nastavit
jádro. Pokud použijete make config, je potřeba zapnout
CONFIG_PACKET (není zcela nutné, ale doporučené)
CONFIG_NETFILTER
CONFIG_IP_NF_CONNTRACK (potřebné pro NAT potažmo masquerading)
CONFIG_IP_NF_IPTABLES
CONFIG_IP_NF_FILTER
CONFIG_IP_NF_NAT
Zkompilování iptables
Většina distribucí Linuxu už ale poskytuje balík pro práci s iptables.
Pro práci s iptables se používá služba iptables. Pro uložení
nakonfigurované tabulky se používá příkaz iptables-save, který
implicitně zapisuje na standartní výstup. Pro opětovné načtení
konfigurace se používá iptables-restore, který implicitně
načítá konfiguraci ze standartního vstupu.
Při práci s iptables se používají následující pojmy:
Jak vypadá průchod tabulkami a řetězy
Platí základní pravidla pro prohlédávání:
Jednotlivé tabulky mají následující význam:
Při volání iptables se obvykle zadává výběr tabulky,
příkaz, výběrová kritéria a akce (target/jump).
Skok (jump) je akce, která se má vykonat s paketem, pokud vyhoví
definovaným kritériím.
Příkazy
pro iptables
Implicitně se přidává do tabulky filter, toto můžeme změnit
přepínačem -t
Přidání pravidla na konec -A
Přidání pravidla na začátek -I
Smazání pravidla -I
Vypsání pravidel pro daný řetěz -L
Nastavení
výběrových kritérií (matches) v pravidlech
Zdroj -s
Cíl -d
Protokol -p
Vstupní rozhraní -i
Výstupní rozhraní -o
Zdrojový port --sport
Cílový port --dport
Skok
se definuje pomocí -j
Příklad:
Přesměrování TCP paketů z 1.2.3.4, port 8080 na 192.168.1.1, port 80
# Připoj pravidlo před směrováním (-A PREROUTING) do NAT tabulky
(-t nat), že
# TCP pakety (-p tcp) z 1.2.3.4 (-d 1.2.3.4) port 8080 (--dport 8080)
# mají cíl mapován (-j DNAT) na 192.168.1.1, port 80
# (--to 192.168.1.1:80).
iptables -A PREROUTING -t nat -p tcp -d 1.2.3.4 --dport 8080 -j DNAT
--to 192.168.1.1:80
Pokud je lokální síť připojená přes telefonní vytáčení (IP adresa je
tedy přidělována) dynamicky, nemusí se při masquerading explicitně
určovat zdrojová adresa: použije se zdrojová adresa rozhraní, ze kterého
odchází paket. Důležitější je ovšem fakt, že když spadne linka, tak jsou
spojení (která jsou tak jako tak stejně ztracena) zapomenuta, což
znamená méně rušivých změn jakmile je spojení opět nahozeno s novou IP
adresou.
# Prováděj masquerading na všem, co odchází z ppp0
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE