Hlavní navigace

OpenWRT: naklikáváme firewall

7. 1. 2011
Doba čtení: 7 minut

Sdílet

Od doby co jsme si naposledy povídali o OpenWRT, uplynula dlouhá doba, a tak trochu záměrně jsem se vyhýbal tématu s firewallem. Sice vám nic nebrání použít klasické iptables a všechno si nakonfigurovat ručně, ale OpenWRT nabízí k iptables frontend, a i přesto, že to není láska na první pohled, svoji práci udělá.

Článek je psán pro aktuální verzi 10.03.1-rc4 i pro vývojovou, kde je webové rozhraní značně pozměněno k lepšímu. Pokud nevíte, co je OpenWRT nebo jak se instaluje, podívejte se na starší díly tohoto seriálu a také stránky projektu a teď už i kvalitní a obsáhlou dokumentaci.

Firewall je velmi důležitou součástí sítě a dobré nástroje na jeho konfiguraci se promítají i do jeho konečné kvality. Té ovšem nedosáhnete, pokud nebudete vědět, jak daný nástroj funguje. OpenWRT tuto oblast hodně zjednodušuje, takže tolik toho zase vědět nemusíte, základní znalost sítí a firewallů postačí. S webovým rozhraním a trochou nápovědy v tomto článku nastaví firewall v OpenWRT a i začínající uživatel.

Určitě víte, že firewall je základním kamenem bezpečnosti sítě a je určen k tomu, aby se útočník nedostal ke službám z jiných míst, než mu určíte. To znamená, například jinak nezabezpečený webový server určený jen pro stanice uvnitř sítě apod. V domácím prostředí se priority posunují a nejčastěji budete firewall používat k ochraně před různými útoky na majoritní operační systémy, jejichž chyby se zneužívají k nejrůznějším účelům. I tam, kde je NAT, se může kdeco prokousat až k počítači za námi a jelikož nastavení firewallu nezabere zas tolik času, vyplatí se mu ho trochu věnovat.

Firewall v Linuxu stojí nad iptables, které komunikuje přímo s jádrem a říká mu, co všechno má s procházejícími pakety dělat. V tomto procesu je spousta modulů sloužících hlavně pro identifikaci spojení, a když se podíváte na kterýkoli náš seriál o iptables, zjistíte, že to není nic pro uživatele, který tomu chce věnovat čtvrt hodiny. Proto i v OpenWRT vznikl frontend pro iptables, který dodržuje jeho konvence a je možné ho naklikat ve webovém rozhraní.

OpenWRT je dobře vymyšlené a má konfiguraci sjednocenou pro všechny služby, které ve výchozím stavu používá. To jde ale trochu proti flexibilitě, takže třeba nahrazení dnsmasq (DNS a DHCP server v jednom) za dhcp3 a unbound nebude bráno v potaz při spouštění init skriptů. Ve výsledku pak při změně sítě přestane DHCP fungovat, což znamená řešit problémy navíc. I když vám to může být ze začátku proti srsti, je lepší se držet toho, co vývojáři připravili a zbytečně nechodit proti proudu.

Jak to tedy funguje

Základem firewallu v OpenWRT jsou tzv. zóny. Zónou se myslí oblast sítě, pokrývající jedno či více rozhraní. V domácím prostředí to je dobře známé lan (lokální síť) a wan (internet), ale na názvech vcelku nezáleží, jsou nastavitelné, stejně jako rozhraní, přes která mají svoji působnost. K těmto zónám se ještě přidává lokální provoz, pro který se používá název device, tedy zařízení, kde je firewall. U všech zón lze nastavit výchozí chování pro provozy INPUT, OUTPUT a FORWARD. Význam je stejný, jako když pracujete přímo v iptables, takže INPUTem se myslí provoz ze zóny k lokálnímu zařízení, OUTPUTem provoz přesně opačný a FORWARDem předávání paketů do jiné zóny. Princip je naznačen v následujícím obrázku:

Zóny jsou základním stavebním prvkem a jejich pochopení je klíčové pro nastavení firewallu v OpenWRT. Pokud nastavíte dobře zóny a doplníte jedno pravidlo pro forwarding mezi nimi, dostanete základní firewall, na kterém pro bezpečnost už nemusíte nic dělat.

Základní firewall

Nejdříve na konfiguraci použijeme webové rozhraní. I když v něm najdeme občas nějaký ten designérský prohřešek, tak se v něm firewall konfiguruje lépe než přes konfigurační soubor /etc/config/fi­rewall. Pokud máte stejně jako teď já připravený obraz pro RouterStation, je webové rozhraní součástí instalace. U jiných obrazů to tak být nemusí a to z důvodu malého množství flash paměti v některých zařízeních. Ta většinou nepřekračuje hranici 4 MB, což je pro OpenWRT tak akorát, ale další služby už tam nastrkáte jen s obtížemi.

Ve verzi 10.03.1-rc4 klikneme na Network → Firewall v režimu Administration a pak na Add entry nebo upravíme již existující zóny. V této verzi je nastavení zón k dispozici na jedné stránce. Na obrázku níže jsou už nakonfigurované zóny wan a lan, kde wan je pro internet a lan pro lokální drátovou i bezdrátovou síť. Na této stránce se také nastavují výchozí politiky pro INPUT, OUTPUT a FORWARD. Ty by nás také měly zajímat, protože se budou uplatňovat na všech rozhraních, které nejsou v žádné zóně.

Konfigurace zón ve starém rozhraní

Problém „starého“ webového rozhraní je oddělení konfigurace pravidel, zón a přesměrování, proto mám raději to co se chystá ve vývojové větvi. Tam je vše přehledně na jedné stránce a navíc konečně zmizel mód pro začátečníky a pokročilé. Posuďte sami.

Firewall v novém rozhraní

Pravidla a přesměrování

Nejbezpečnější firewall je ten, který nepustí nic a takový už v jistém smyslu máme. Měli bychom vědět, že firewall v OpenWRT propustí všechno co souvisí už s probíhající komunikací. Zóny také můžeme nastavit tak, aby všechno co jde z vnitřní sítě do vnější mělo zelenou, což nám odstraní mnoho starostí s pravidly směrem ven. Pokud k tomu nemáme nějaký závažný důvod, můžeme strojům uvnitř sítě věřit, případně odstřihnout jednotlivé stroje vlastními pravidly, ale obecně se dá říct, že v rámci nových spojení co jde ven má zelenou, co jde dovnitř má červenou. Pravidla směrem dovnitř nastavíme ručně, čímž získáme firewall, který se nestaví do cesty běžnému použití a zároveň hlídá útoky z vnějšku do naší sítě. Pokud máme uvnitř sítě nějaký stroj, který nabízí služby v internetu, nastavíme mu pravidla pro vybrané porty.

Ve webovém rozhraní OpenWRT se to dělá v dialogu po kliknutí na Network → Firewall → Traffic Control. Zde se také ve „starší“ verzi nastavuje forwardování mezi zónami. Povolíme tedy forwarding z vnitřní sítě do vnější a přesuneme oko na pravidla. Ta jsou velmi podobná tomu, co používá iptables. Bohužel se opět nemyslelo na uživatelské pohodlí, takže je potřeba chvilku zkoušet, než najdete správnou kombinaci polí, pro zadávání různých filtrovacích parametrů.

Konfigurace pravidel ve starém rozhraní

V nové verzi rozhraní je už zahrnuta podpora pro IPv6, kde se na pozadí používá ip6tables. Pravidla se jinak konfigurují podobně, ale pokrok je tu vidět na první pohled. Jediné co mi vadí, je rozdělení základních a pokročilých parametrů pravidel, kde by určitě pomohlo spojení do jednoho dialogu. Zóny se konfigurují trochu jinak, mají už svůj konfigurační dialog, takže se nemotají v celkovém přehledu a tam se také nastavují politiky pro přeposílání mezi dalšími zónami.

Konfigurace zóny v novém rozhraní

A jak se to projeví v konfiguračním souboru

Pokud nemáte možnost nakonfigurovat firewall přes webové rozhraní, můžete samozřejmě použít i konfigurační soubor /etc/config/fi­rewall. Ten se drží zavedených konvencí, které se podle mě zrovna na tento typ nastavení nehodí. Výsledek pak může vypadat takto:

root_podpora

# Nastavení výchozích politik
config 'defaults'
    option 'syn_flood' '1'
    option 'output' 'ACCEPT'
    option 'input' 'ACCEPT'
    option 'forward' 'REJECT'
    option 'drop_invalid' '1'
# Nastavení zóny pro lokální síť
config 'zone'
    option 'name' 'lan'
    option 'output' 'ACCEPT'
    option 'input' 'ACCEPT'
    option 'forward' 'ACCEPT'
    option 'network' 'lan wifi1' # rozhraní v této zóně
# Nastavení zóny pro internet
config 'zone'
    option 'name' 'wan'
    option 'forward' 'REJECT'
    option 'network' 'wifi0' # rozhraní v této zóně
    option 'input' 'REJECT'
    option 'output' 'ACCEPT'
    option 'log' '1' # povolit logování
# Soubor s vlastními pravidly
# vyhodnocuje se jako skript při spuštění firewallu
config 'include'
    option 'path' '/etc/firewall.user'
# Pravidlo pro povolení SSH na router z venku
config 'rule'
    option 'target' 'ACCEPT'
    option 'src' 'wan'
    option 'proto' 'tcp'
    option 'dest_port' '22'
    option '_name' 'ssh wan'
config 'rule'
    option 'target' 'ACCEPT'
    option '_name' 'Misha'
    option 'src' 'wan'
    option 'dest' 'lan'
    option 'proto' 'all'
    option 'dest_ip' '89.111.104.70/32'
config 'rule'
    option 'target' 'ACCEPT'
    option '_name' 'Delorean local'
    option 'src' 'lan'
    option 'proto' 'tcp'
# Povolení přeposílání z lokální sítě do internetu
config 'forwarding'
    option 'dest' 'wan'
    option 'src' 'lan'
# Pravidlo pro povolení ICMP protokolu z internetu do lokální sítě
config 'rule'
    option 'target' 'ACCEPT'
    option '_name' 'ICMP'
    option 'src' 'wan'
    option 'proto' 'icmp'
    option 'icmp_type' 'any'
    option 'dest' 'lan' 

Pokud se pustíte do této cesty, podívejte se do dokumentace, kde jsou popsané všechny volby. Výše uvedený příklad by vám měl ze začátku pomoct.

Závěr

I když je konfigurační soubor pro firewall v OpenWRT vcelku nepřehledný, webové rozhraní mu dává alespoň nějakou tvář. Navíc je ve webovém rozhraní vidět přehledný výpis iptables s nakonfigurovanými pravidly. Pokud se budete držet toho, co vývojáři OpenWRT připravili, bude se router chovat tak, jak se od něj očekává, za všech podmínek.

Výpis pravidel v iptables v novém rozhraní

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.