Firewally

Jan Měkota, xmekota@fi.muni.cz


Obsah


Ú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.

Typy firewallů

  1. paketové filtry
  2. proxy servry
    1. aplikační proxy servry
    2. SOCKS proxy servry

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:

SNAT

Překlad zdrojové adresy.
Zdrojový NAT je vždy prováděn až po dokončení směrování, těsně předtím než je paket vyslán po drátech. Masquerading je speciální forma SNAT.

DNAT

Překlad cílové adresy.
Cílový NAT je vždy prováděn před započetím směrování, těsně po přijetí paketu z drátů. Port-forwarding (přesměrování portu), load-sharing (rozložení zátěže) a transparentní proxy jsou speciální formou DNAT.

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

Poznámky na závěr

Odkazy