Ř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.
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ý.