Firewalld: správa zón a povolení vybraných služeb

17. 1. 2023
Doba čtení: 4 minuty

Sdílet

 Autor: Depositphotos
V dalším článku o linuxovém firewallu spravovaném pomocí Firewalld si ukážeme, jak přiřadit síťové rozhraní do zóny a jak povolovat průchod jednotlivých služeb mezi používanými zónami.

předchozím článku jsme si ukázali základní koncepty, na kterých staví Firewalld. Dnes se podíváme na to, jak spravovat jednotlivá rozhraní a stanovovat pravidla pro průchod komunikace mezi nimi.

Co se dozvíte v článku
  1. Vztah s Network Managerem
  2. Služby
  3. Otevření služby
  4. Otevření portu
  5. Příště

Vztah s Network Managerem

Firewalld není přímo závislý na použití služby Network Manager jako správce síťových rozhraní. Dokáže s ním ale velmi dobře spolupracovat a používá ho jako jednu ze služeb pro konfiguraci sítě (backend). Firewalld se používá ve výchozím stavu ve světě distribucí odvozených od Red Hat Enterprise Linuxu (Rocky Linux, AlmaLinux, CentOS…), kde je Network Manager také nasazen.

Pokud ho vaše distribuce nepoužívá nebo ho deaktivujete/odinstalujete, samotný Firewalld bude fungovat dál, ale nedostane například informace o tom, že došlo k přejmenování rozhraní. Stejně tak pokud bude služba nastartována až poté, co bylo některé ze síťových rozhraní zprovozněno (je ve stavu up), nebude automaticky zařazeno do žádné zóny.

Jestliže Network Manager nepoužíváte, můžete nově přidané rozhraní přidat do zóny manuálně:

# firewall-cmd --permanent --zone=home --add-interface=enp0s8

Já pro demonstraci používám Rocky Linux 9.1, takže v něm Network Manager mám. Můžu tedy stejnou akci udělat přímo pomocí něj. Pojmenoval jsem si nové síťové rozhraní jako interni a ono se samo přidalo do výchozí zóny, kterou je zóna public. Teď ho můžu manuálně přiřadit do jiné zóny.

# nmcli connection modify interni connection.zone home

Snadno se můžeme vždy přesvědčit, jaké zóny používáme (máme „aktivní“) a která rozhraní v jednotlivých zónách jsou:

# firewall-cmd --get-active-zones
home
  interfaces: enp0s8
public
  interfaces: enp0s3

Služby

Služby jsou jakési šablony, které jsou připravené pro použití konkrétního síťového provozu spojeného s určitého démona. Například služba s názvem ssh odpovídá démonovi implementujícímu SSH, který pro komunikaci používá TCP port 22. Pokud tuto službu přidáme k zóně, otevřeme tím daný port a komunikaci povolíme.

Informaci o konkrétních pravidel zapsaných do této připravené služby si můžeme zobrazit příkazem, který jsme si ukázali už minule:

# firewall-cmd --info-service ssh
ssh
  ports: 22/tcp
  protocols:
  source-ports:
  modules:
  destination:
  includes:
  helpers:

Projdeme si postupně všechny položky v seznamu. Položka ports může obsahovat port či rozsah portů a také typ protokolu čtvrté síťové vrstvy (TCP nebo UDP). Tato položka může být uvedena vícekrát, pokud služba používá více portů.

Položka protocols volitelně definuje protokol třetí síťové vrstvy pomocí názvu (například ip nebo icmp). Jejich databázi najdete v systému v souboru  /etc/protocols.

Podobně jako u položky ports je možné také u volitelné vlastnosti source-port určit rozsah či jeden port, ze kterého může komunikace přicházet a také protokol čtvrté vrstvy. Tuto položku je možné také zopakovat vícekrát.

Položka destination se může u služby vyskytovat maximálně jednou a může obsahovat IP adresu cílového stroje nebo sítě (včetně masky). Je možné tu použít i jméno (hostname), ale to je přeloženo pouze jednou při první aktivaci služby.

Služba může také obsahovat seznam místních portů či destinací a může také pro svou potřebu volat pomocné moduly pomocí položky module, které se při povolení této služby načítají. Používají se pro sledování spojení (connection tracking) u některých služeb, které při komunikaci používají různé dynamické porty. Dostaneme se k nim v některém z následujících článků.

Otevření služby

Pro zjednodušení práce s firewallem je součástí instalace už celá řada připravených služeb. Ty předpokládají použití standardních portů, jejichž seznam najdete v systému v souboru /etc/services. Najdete tu databázi portů, které byly v IANA přiděleny běžně užívaným službám.

Koncept služeb (zmíněných šablon) ve Firewalld umožňuje jednoduše otevřít přístup do zóny k dané službě, aniž bychom museli znát její specifika, včetně používaného portu. Pokud uživatel nainstaluje SSH a chce pro danou zónu otevřít přístup k této službě, jednoduše ji k zóně přiřadí:

# firewall-cmd --permanent --zone=public --add-service=ssh

Tento příkaz trvale otevře v zóně public přístup ke službě ssh. Znamená to, že síťová rozhraní zařazená do dané zóny budou mít otevřený TCP port 22 a budou přijímat spojení pro daného démona. Takto samozřejmě můžeme v zóně otevřít libovolný počet služeb, které chceme používat.

Stejně tak máme možnost službu ze zóny zase odebrat, pokud ji už nebudeme využívat:

# firewall-cmd --permanent --zone=public --remove-service=ssh

Dočasně otevřená služba

Službu je možné otevřít i dočasně, to znamená, že dané pravidlo po zvoleném čase automaticky zmizí. Tuto volbu není možné samozřejmě kombinovat s volbou --permanent, protože není nikdy ukládána do konfiguračních souborů, ale je přítomna jen v paměti firewallu.

# firewall-cmd --timeout=3h --zone=public --add-service=ssh

Otevření portu

Může se stát, že chcete použít nestandardní službu nebo službu, která nemá svou vlastní šablonu ve Firewalld. Pokud jde o nejjednodušší případ, kdy nám prostě stačí otevřít jeden port, můžeme to udělat přímo i bez šablony služby.

# firewall-cmd --permanent --zone=home --add-port=22/tcp

Projeví se to tím, že ve výpisu informací ze zóny se objeví explicitně vyjmenované jednotlivé otevřené porty:

bitcoin_skoleni

# firewall-cmd --info-zone=home
home (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s8
  sources:
  services: cockpit dhcpv6-client mdns samba-client
  ports: 22/tcp 80/tcp 443/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Můžeme samozřejmě porty zase zavřít:

# firewall-cmd --permanent --zone=home --remove-port=22/tcp

Příště

Příště se podíváme na to, jak upravit existující službu či si vytvořit vlastní. Získáme tak možnost přizpůsobit si firewall našim specifickým požadavkům, například nestandardním portům, které používáme.

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