Ufw: firewall jednoduše a rychle

19. 8. 2010
Doba čtení: 5 minut

Sdílet

IPtables je mocný nástroj, který se správnými znalostmi dokáže cokoli, co si jen umíte u filtrování provozu na síti představit. Když ale potřebujete ochránit pouze svůj počítač, ať už jde o desktop či notebook, je to jako obrovský kanón na malého vrabce. Proto vznikla řada projektů, které firewall zjednodušují.

Řeč bude o projektu ufw, což je zkratka pro Uncomplicated Firewall. Cílem projektu je přinést jednoduché rozhraní pro linuxový firewall, a hned při prvních pokusech zjistíte, že se mu to daří docela dobře.

Pomocí ufw lze nastavit:

  • pravidla pro běžící služby
  • pravidla pro aplikace
  • pravidla pro konkrétní porty a rozsahy portů

Důležité je, že o iptables prakticky nic nemusíte vědět a firewall nastavíte. Pokud vám dělá problémy používat řádkové aplikace, můžete použít gufw, což je grafická nadstavba pro ufw. Nečekejte od ufw nic převratného, je to jednoúčelová aplikace, která má zamezit komunikaci aplikací, u kterých si to nepřejete.

Ufw se vyvíjí pro Ubuntu a je v něm k dispozici od verze 8.04 ve výchozí instalaci. Gufw je taktéž vyvíjeno pro Ubuntu, ale není k dispozici ve výchozí instalaci, takže pokud si chcete firewall jednoduše naklikat, je potřeba gufw nainstalovat:

$ sudo aptitude install gufw 

Teď byste měli mít všechno pro řádkové i grafické nastavení firewallu a můžeme si ukázat několik příkladů použití, které se vám budou v běžném provozu hodit.

ufw

Základem každého firewallu je výchozí politika a přidávání a odebírání pravidel. Na tohle je ufw jako stvořené a obě změny se s ním dělají víc než dobře.

Nejdříve začneme tím, že firewall zapneme:

$ ufw enable 

Tím jsme inicializovali strukturu chainů v iptables, která obsahuje pravidla pro logování a ve výchozím stavu jsou zakázána příchozí spojení. Také je nastaven stavový firewall, který vpustí pakety připojení, jež jsou vytvořeny od nás, takže všechny běžné služby by měly fungovat. Pokud netušíte, co je to chain nebo iptables, můžete zkusit náš seriál o iptables, ale pro další práci s ufw to vědět nepotřebujete. Uvádím to jen jako porovnání, pokud iptables znáte. Když se vám firewall přestane líbit, můžete ho zase vypnout:

$ ufw disable 

Rozhodnete-li se volit jinou politiku než je povolování jednotlivých služeb, tedy že povolíte všechno a budete některé služby zakazovat, bude se vám hodit následující ukázka:

$ ufw default allow incoming 

nebo

$ ufw default reject incoming 

Klíčové slovo „incoming“, tedy příchozí provoz, můžete změnit na „outgoing“, tedy odchozí provoz.

Po zapnutí firewallu a nastavení výchozího chování je čas pro přidávání pravidel. Ty se dají rozdělit do třech skupin, jak je popsáno výše. Můžete pracovat s přednastavenými profily aplikací, služeb a pak s jednotlivými porty či jejich rozsahem. Když třeba provozujeme na lokálním stroji webový server, povolíme jeho službu:

$ ufw allow in http 

Pokud to je SSH, povolíme SSH:

$ ufw allow in ssh 

A podobně to funguje i u ostatních. Nezapomeňte, že takhle povolujete příchozí provoz. Odchozí provoz se povoluje nahrazením parametru „in“ za parametr „out“. Pokud nás zajímá seznam dostupných profilů, tak ten získáme po zadání:

$ ufw app list 

Profil ssh ani http tady nehledejte, protože tu nejsou vypsané, ale najdete je v gufw, společně s mnoha dalšími.

Nicméně mnohem častěji budete povolovat jednotlivé porty a tady jsou parametrové orgie přeci jen větší:

ufw allow|reject|deny in|out proto tcp|udp from any|IP to any|IP port 80,22,21
ufw allow|reject|deny in|out proto tcp|udp from any|IP port 8000 to any|IP port 8010 

V prvním příkladu je ukázáno, jak nastavit politiku pro několik portů najednou a ve druhém a třetím jde o rozsah portů 8000 až 8010. Také se zde setkáváme s parametry „allow“, „reject“ a „deny“. Pomocí „allow“ provoz povolíme, přes „reject“ dáme vědět druhé straně, že tudy ne a „deny“ pakety tiše zahodí. Běžně se sluší dávat o stavu portu vědět druhé straně, ale pokud jste opravdu paranoidní, použijte deny.

Možností, jak pravidla zapsat, je hromada, proto vám sem dám několik příkladů z výpisu gufw, které si budete případně schopni upravit podle sebe:

$ ufw allow in proto tcp from any to any port 51413
$ ufw allow in proto tcp from any to any port 135,139,445
$ ufw allow in from any to any port 8000
$ ufw allow in from any to any port 8000-8100
$ ufw allow in proto tcp from any port 8000 to any port 8010 

Stav firewallu získáme zadáním:

$ ufw status 

Se seznamem pravidel pak:

$ ufw status verbose 

Ve výpise získáme:

Status: active
Do                         Akce        Od
--                         ----        --
[ 1] 51413/tcp             ALLOW IN    Anywhere
[ 2] 22                    ALLOW IN    Anywhere
[ 3] 135,139,445/tcp       ALLOW IN    Anywhere
[ 4] 137,138/udp           ALLOW IN    Anywhere
[ 5] 2049                  ALLOW IN    Anywhere 

Když už máme čísla pravidel, můžeme pohodlně pravidla mazat:

$ ufw delete 3
Deleting:
 allow 135,139,445/tcp
Proceed with operation (y|n)? y
Pravidlo smazáno 

Nemusíte se bát, že byste udělali chybu, ufw se zeptá, jestli má smazat konkrétní pravidlo. Lze používat podobně jako v iptables mazání zadáním přesného pravidla, ale přes indexy je to jednodušší při ručním mazání.

gufw

Pokud zrovna nekonfigurujete nějaký jednoduchý server nebo nenastavujete firewall skriptem, třeba podle nějakých podmínek, spíš vás bude zajímat grafická nadstavba gufw, protože s ním lze firewall udělat přece jen o něco rychleji a pohodlněji.

Gufw má jednoduché rozhraní, které v úvodu nabídne zapnutí firewallu a tlačítka pro přidání a odstranění pravidel.

Přidávání pravidel je rozděleno do třech tabů:

  • Předpřipravené
  • Jednoduché
  • Pokročilé

V předpřipravených najdete několik služeb a aplikací, které gufw zná a ví, jak pro ně firewall nastavit, pravděpodobně lépe, než to víte sami. Není to ale volba pro paranoidní uživatele, kteří chtějí mít pod kontrolou každý port.

V tabu „Jednoduché“ se nastavují taková pravidla, která povolují jen jeden port a nepotřebujeme u nich definovat IP adresu. Opačný případ je tab „Pokročilé“, kde najdeme nastavení rozsahu IP adres i portů. Zápis se provádí podobně jako u ufw.

bitcoin_skoleni

U všech pravidel máme možnost povolit rozšířené akce, kde kromě pořadí pravidla lze nastavit, jestli se mají průchody přes pravidlo logovat v dmesg, což se hodí pro ladění pravidel.

Závěr

Já sám používám ufw a gufw na desktopu a notebooku a je to perfektní pomocník, když potřebujete firewall bez hledání pravidel v manuálu pro iptables. Není sice tak flexibilní, ale to se mu dá samozřejmě odpustit, na běžném osobním počítači prakticky nic jiného než povolení Samby/NFS a podobně nepotřebujete. Díky ufw se dá pohodlně naskriptovat firewall podle požadavků aktuální situace a skript ani nemusí být nějak složitý.

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