Firewally jsou důležitou součástí zabezpečení sítě, takže je důležité, aby správce systému znal, jak fungují. Pokud rozumíte firewallům, můžete svou síť udržet v bezpečí tím, že budete inteligentně rozhodovat o provozu, který povolíte dovnitř a ven.
Protože „firewall“ je tak vzrušující název, lidé si často představují složitou neonovou bitvu ve stylu Tronu, která se odehrává na okraji sítě, se zapalováním paketů nepoctivých dat, aby chránili techno pevnost vašich uživatelů. Firewall je ve skutečnosti jen část softwaru, která řídí příchozí a odchozí síťový provoz.
Porty
Firewall je schopen řídit tento provoz monitorováním síťových portů. Ve světě firewallů termín port Neoznačuje fyzické připojení, jako je port USB, VGA nebo HDMI. Pro účely firewallů port je umělá konstrukce vytvořená operačním systémem, která představuje cestu pro určitý typ dat. Tento systém se mohl jmenovat jakkoli, například „kontakty“, „spojení“ nebo dokonce „tučňáci“, ale jeho tvůrci použili „porty“, a to je název, který používáme dodnes. Jde o to, že na žádném portu není nic zvláštního; představují pouze způsob, jak určit adresu, kde dochází k přenosu dat.
Existuje řada portů, které jsou známé, ale i to jsou pouze konvence. Můžete například vědět, že provoz HTTP se vyskytuje na portu 80, provoz HTTPS používá port 443, FTP používá port 21 a SSH používá port 22. Když váš počítač přenáší data do jiného počítače, přidá k datům předponu, která označuje, které port, ke kterému chce přistupovat. Pokud port na přijímací straně přijímá data stejného protokolu jako data, která odesíláte, pak je výměna dat úspěšná.
Tento proces můžete vidět v akci na jakékoli webové stránce. Otevřete webový prohlížeč a přejděte na example.com:80
, což způsobí, že váš počítač odešle požadavek HTTP na port 80 počítače obsluhujícího web example.com. Na oplátku obdržíte webovou stránku. Webové prohlížeče však nevyžadují zadání portu, ke kterému chcete přistupovat pokaždé, když přejdete na adresu URL, protože se předpokládá, že provoz HTTP přistupuje k portu 80 nebo 443.
Tento proces můžete otestovat pomocí webového prohlížeče založeného na terminálu:
$ curl --connect-timeout 3 "http://example.com:80" | head -n4
<!doctype html>
<html>
<head>
<title>Example Domain</title>
Pomocí stejného zápisu můžete vynutit odmítnutí tím, že přejdete na web pomocí nestandardního portu. Přejděte na libovolný port, example.com:79
například. Vaše žádost o webovou stránku byla zamítnuta:
$ curl --connect-timeout 3 "http://example.com:79"
curl: (7) Failed to connect: Network is unreachable
Korelace mezi porty a protokoly jsou pouze konvence, na kterých se vzájemně dohodla skupina standardů a uživatelská základna. Tato nastavení lze změnit na jednotlivých počítačích. Ve skutečnosti, v dobách průkopníků počítačů, mnoho lidí mělo pocit, že pouhá změna čísla portu populárních služeb by útok zmírnila. Dnes jsou útoky mnohem sofistikovanější. Nemá cenu překvapovat automatizovaný skener portů změnou portu, na kterém služba naslouchá.
Místo toho firewall řídí, jaká aktivita je povolena na daném portu.
[ Bezplatné stažení:cheat pro pokročilé příkazy systému Linux. ]
Rozhraní firewall-cmd
Vaše infrastruktura může mít server v racku, jehož jediným účelem je provozovat firewall, nebo můžete mít firewall zabudovaný ve směrovači – nebo modemu – fungujícím jako primární brána k internetu. Pravděpodobně také máte na své osobní pracovní stanici nebo notebooku spuštěnou bránu firewall. Všechny tyto brány firewall mají své vlastní konfigurační rozhraní. Tento článek se zabývá firewall-cmd
terminálový příkaz nalezený ve většině distribucí Linuxu.
Firewall-cmd je přední nástroj pro správu firewalld
démon, který je propojen s rámcem netfilter jádra Linuxu. Tato sada pravděpodobně není přítomna na vestavěných modemech běžných v malých a středních podnicích, ale je zapnutá nebo dostupná pro jakoukoli distribuci Linuxu, která používá systemd
.
Bez aktivní brány firewall, firewall-cmd
nemá co ovládat, takže prvním krokem je zajistit, aby firewalld
běží:
$ sudo systemctl enable --now firewalld
Tento příkaz spustí démona brány firewall a nastaví jej na automatické načítání po restartu.
Blokovat (téměř) vše
Běžnou radou při konfiguraci firewallu je nejprve vše zablokovat a poté otevřít porty, o kterých víte, že je skutečně potřebujete. To však znamená, že musíte vědět, co potřebujete, a někdy je přijít na to, že je to odpolední práce sama o sobě.
Pokud vaše organizace provozuje například vlastní službu DNS nebo službu ukládání do mezipaměti DNS, musíte pamatovat na odblokování portu (obvykle 53), který obsluhuje komunikaci DNS. Pokud se při vzdálené konfiguraci serverů spoléháte na SSH, pak tento port nesmíte blokovat. Musíte počítat s každou službou spuštěnou ve vaší infrastruktuře a musíte pochopit, zda je tato služba pouze interní, nebo zda potřebuje interakci s vnějším světem.
V případě proprietárního softwaru mohou docházet k hovorům do vnějšího světa, o kterých ani nevíte. Pokud některé aplikace špatně reagují na nedávno zavedený přísný firewall, možná budete muset provést zpětnou analýzu (nebo kontaktovat linku podpory aplikace), abyste zjistili, jaký druh provozu se snaží vytvořit a proč. Ve světě open source je tento problém méně častý, ale není mimo sféru možností, zejména v případě složitých softwarových balíků (například dnes dokonce i přehrávače médií volají na internet, i když pouze za účelem získání obalu alba nebo seznam skladeb).
Firewall-cmd používá zóny jako předvolby, což vám dává na výběr rozumná výchozí nastavení. Díky tomu si ušetříte nutnost budovat firewall od začátku. Zóny se vztahují na síťové rozhraní, takže na serveru se dvěma ethernetovými rozhraními můžete mít jednu zónu spravující jedno ethernetové rozhraní a jinou zónu ovládající druhou.
Vyplatí se věnovat čas seznámení se zónami poskytovanými ve vašem systému. Chcete-li zobrazit všechny dostupné zóny, použijte:
$ sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Chcete-li zjistit, co je v konkrétní zóně odblokováno:
$ sudo firewall-cmd --zone work --list-all
work
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Použijte jednu ze stávajících zón jako výchozí bod pro svá vlastní pravidla brány firewall nebo si vytvořte vlastní.
Vytvořit zónu
Chcete-li vytvořit novou zónu, použijte --new-zone
možnost.
Všechny firewall-cmd
akce přetrvávají pouze do restartování brány firewall nebo počítače, na kterém běží. Vše, co chcete, aby bylo trvalé, musí být doprovázeno --permanent
vlajka.
Například vytvořte novou trvalou zónu s názvem corp
a poté znovu načtěte pravidla brány firewall, aby se vaše nová zóna aktivovala:
$ sudo firewall-cmd --new-zone corp --permanent
success
$ sudo firewall-cmd --reload
Před přiřazením libovolného síťového rozhraní této nové zóně přidejte ssh
službu, abyste k ní měli vzdálený přístup. Použijte --permanent
možnost, aby toto přidání přetrvávalo i po restartu:
$ sudo firewall-cmd --zone corp --add-service ssh --permanent
Vaše nová zóna s názvem corp
, je nyní aktivní, odmítá veškerý provoz kromě SSH a není přiřazen žádnému konkrétnímu síťovému rozhraní. Chcete-li vytvořit corp
aktivní a výchozí zóna pro síťové rozhraní, které chcete chránit (ens3
v tomto příkladu) použijte --change-interface
možnost:
$ firewall-cmd --change-interface ens3 \
--zone corp --permanent
The interface is under control of NetworkManager, setting zone to 'corp'.
success
Vytvořením corp
výchozí zóna, všechny budoucí příkazy jsou aplikovány na corp
pokud není --zone
volba určuje jinou zónu. Zda chcete nastavit corp
jako výchozí závisí na tom, zda plánujete tuto zónu jako svou novou primární zónu. Pokud ano, úlohu provede následující:
$ sudo firewall-cmd --set-default corp
Chcete-li zobrazit zóny aktuálně přiřazené ke každému rozhraní, použijte --get-active-zones
možnost:
$ sudo firewall-cmd --get-active-zones``
corp
interfaces: ens3
work
interfaces: ens4
Přidat a odebrat služby
Nyní, když jste zablokovali vše kromě SSH, můžete otevřít porty, na které se vaše síť spoléhá. Rychlý a snadný způsob, jak povolit provoz přes váš firewall, je přidat předdefinovanou službu.
Seznam dostupných předdefinovaných služeb je rozsáhlý. Chcete-li jej zobrazit, použijte:
$ sudo firewall-cmd --get-services
RH-Satellite-6 amanda-client amqp
amqps apcupsd audit bacula bacula-client
bgp bitcoin bitcoin-rpc bitcoin-testnet ceph
cockpit dhcp dhcpv6 dhcpv6-client distcc dns
[...]
Předpokládejme, že potřebujete spustit webový server. Nejprve byste si nainstalovali webový server, který chcete používat (httpd
balíček na RHEL nebo Fedoře, apache2
na Ubuntu a Debianu). V tomto příkladu použijeme httpd
:
$ sudo dnf install httpd
$ sudo systemctl --enable --now httpd
Poté otestujte svůj webový server lokálně:
$ curl --silent localhost:80 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
Dále se pokuste připojit k vašemu webovému serveru z externího prohlížeče. Připojení se nezdaří, což dokazuje, že firewall je účinný:
$ curl --connect-timeout 3 192.168.122.206
curl: (28) Connection timed out after 3001 milliseconds
Odblokování služby
Chcete-li povolit provoz HTTP přes bránu firewall, přidejte http
služba:
$ sudo firewall-cmd --add-service http --permanent
$ sudo firewall-cmd --reload
Poté otestujte z externího zdroje:
$ curl --silent 192.168.122.206 | grep title
<title>Test Page for the Apache HTTP Server on Red Hat Enterprise Linux</title>
Nyní, když víte, jak přidat službu, je odstranění jedné docela intuitivní:
$ sudo firewall-cmd --remove-service http --permanent
$ sudo firewall-cmd --reload
Přidat a odebrat porty
Někdy předdefinovaná služba neexistuje nebo předpokládá výchozí nastavení, která neodpovídají vaší síti. Místo přidávání služby můžete přidat číslo portu a typ protokolu přímo pomocí --add-port
.
Pokud například potřebujete do své vlastní zóny přidat nestandardní port 1622 pro SSH (pokud vaše vlastní zóna není výchozí zónou pro vaše příkazy, přidejte --zone
možnost):
$ sudo firewall-cmd --add-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
Chcete-li tento port odstranit, použijte --remove-port
:
$ sudo firewall-cmd --remove-port 1622/tcp --permanent
success
$ sudo firewall-cmd --reload
Ohnivé stěny
S firewall-cmd
můžete dělat mnohem víc , jako je definování vlastních služeb, blokování ICMP a definování zdrojů povoleného příchozího provozu. Nejlepší způsob, jak se naučit, je experimentovat, takže si nainstalujte Red Hat Enterprise Linux nebo Fedoru do GNOME Boxů a experimentujte s tvarováním provozu pomocí všech možností firewall-cmd
poskytuje.