Firewalld: filtrace provozu mezi zónami pomocí politik

14. 2. 2023
Doba čtení: 3 minuty

Sdílet

 Autor: Depositphotos
V dnešním článku o filtraci síťového provozu pomocí nástroje Firewalld si ukážeme, jak definovat politiky pro komunikaci mezi různými zónami. Z filtru pro koncové zařízení tak uděláme klasický síťový firewall.

Filtrace mezi rozhraními

Co se dozvíte v článku
  1. Filtrace mezi rozhraními
  2. Vytvoření politiky
  3. Priorita politik
  4. Výchozí cíl (target)
  5. Příště

Firewalld byl původně vytvořen jako nástroj pro koncový síťový uzel. Fungoval dobře pro omezování příchozího provozu na vstupu, ale nebyl použitelný pro filtraci provozu mezi různými rozhraními nebo třeba virtuálními počítači. Bylo to částečně řešitelné pomocí funkce direct, která umožňovala psát vlastní nízkoúrovňová pravidla pro IPtables.

Nebylo to ovšem uživatelsky příliš přívětivé a museli jste přitom umět používat zápis pravidel pro IPtables. Hlavním důvodem pro nasazení Firewalld je právě se této syntaxi vyhnout, takže použití rozhraní direct šlo přímo proti smyslu Firewalld. Navíc s příchodem Nftables pozbylo staré rozhraní smysl, je označené za zastaralé a v budoucnu bude odstraněno.

Náhradou za něj je koncept politik (policies), který oblast komunikace mezi rozhraními pokrývá. Umožňuje stanovit pravidla pro provoz směrovaný mezi různými zónami. K dané politice je pak možné přidat služby, porty a další základní stavební kameny, které se obvykle používají u zón. Výsledkem je pak něco velmi podobného zóně, ale výrazně mocnější a univerzálnější.

Zásadní rozdíl mezi zónou a politikou také je, že politiku je možné aplikovat nezávisle na oba směry toku provozu. Lze tak vytvářet různá pravidla v závislosti na zdrojové a cílové zóně. Zdrojová zóna je označována jako ingress a cílová pak jako egress.

Vytvoření politiky

Politiku je potřeba explicitně vytvořit a také k ní přidat obě rozhraní. Ukážeme si to na konkrétním příkladu.

# firewall-cmd --permanent --new-policy politika
# firewall-cmd --permanent --policy politika --add-ingress-zone public
# firewall-cmd --permanent --policy politika --add-egress-zone home
# firewall-cmd --reload

V tomto případě ukládáme změny nejprve na disk a poté je nakonec aplikujeme. Pokud ale vynecháme volbu --permanent, můžeme změny provádět rovnou za běhu, jak bylo popsáno v prvním článku naší série.

V každém případě musíme uvést alespoň jednu zdrojovou a jednu cílovou zónu. Je ovšem možné příkaz zavolat vícekrát a zvolit tak několik zón, mezi kterými bude naše nová politika uplatňována.

Zónu můžeme z politiky samozřejmě také kdykoliv odstranit.

# firewall-cmd --permanent --policy politika --remove-ingress-zone public

Symbolické zóny

V kontextu politik existují ještě dvě zvláštní zóny, kterým se říká symbolické. Jmenují se HOST a ANY. Jde vlastně o virtuální zóny, které mají zvláštní význam. HOST označuje místní počítač, na kterém běží Firewalld. Tato symbolická zóna je tedy použitelná pro povolení politiky pro provoz, který pochází z místního počítače nebo na něj směřuje.

Zóna ANY  je pak použitelná pro nasazení politiky na všechny existující či v budoucnu vzniklé zóny. Je to vlastně jakýsi žolík, který pokrývá všechny existující zóny.

Následující příklad pokrývá veškerý provoz, který pochází z místního počítače a odchází libovolným rozhraním.

# firewall-cmd --permanent --new-policy odchozi
# firewall-cmd --permanent --policy odchozi --add-ingress-zone HOST
# firewall-cmd --permanent --policy odchozi --add-egress-zone ANY

Priorita politik

Na danou kombinaci zón je možné aplikovat více politk, pak ovšem přicházejí do hry priority. Jejím nastavením můžeme volit nadřazenost či podřazenost různých politik týkajících se stejných zón.

# firewall-cmd --permanent --policy odchozi --set-priority -500

Pro hodnotu priority platí několik pravidel:

  1. politiky s negativní prioritou se uplatní ještě před pravidly v zónách
  2. politiky s pozitivní prioritou se uplatní po pravidlech v zónách
    • To je důležité, protože některé zóny svými pravidly pokryjí veškerý provoz (viz target).
  3. priorita 0 je vyhrazena a není možné ji použít

Výchozí cíl (target)

Politiky mají svůj výchozí cíl zvaný target, stejně jako jej mají i zóny. Tento princip už jsme si popsali dříve: jde o pravidlo, které se aplikuje na provoz, který není explicitně vyřešen žádným dalším pravidlem.

V případě politik je výchozím pravidlem CONTINUE, které předá nevyřešené pakety k dalšímu zpracování v následujících politikách nebo zónách. Cíl ale můžeme změnit také na ACCEPT, DROP nebo REJECT, kdy budou pakety propuštěny, zahozeny či slušně odmítnuty.

bitcoin_skoleni

# firewall-cmd --permanent --policy odchozi --set-target CONTINUE

Politiky se pak chovají velmi podobně jako klasické zóny. Můžete v nich tedy například otevírat konkrétní služby. Pokud přepnete výchozí pravidlo na zákaz, můžete pak například nechat mezi danými zónami procházet jen provoz HTTP a HTTPS.

# firewall-cmd --permanent --policy odchozi --add-service=http
# firewall-cmd --permanent --policy odchozi --add-service=https
# firewall-cmd --reload

Příště

V příštím článku si ukážeme, jak na modifikaci síťového provozu. Předvedeme si přesměrování portů, překlad adres (NAT) a také zpracování provozu podle zdrojové IP adresy.

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.