V 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
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:
# 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.