GNU/Linux >> Znalost Linux >  >> Linux

Zabezpečte svou linuxovou síť pomocí firewall-cmd

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.


Linux
  1. Začněte s NetworkManagerem v systému Linux

  2. Zobrazte síťová připojení svého linuxového serveru pomocí netstat

  3. Jak zabezpečit své e-mailové služby Linux pomocí SSL/TLS

  1. Začínáme s linuxovými firewally

  2. Odstraňte problémy se sítí pomocí tcpdump

  3. Zabezpečte svůj Linuxový server pomocí Fail2Ban [Příručka pro začátečníky]

  1. Zabezpečte své kontejnery pomocí SELinux

  2. Vytvořte zlé dvojče své sítě pomocí Fluxion na Kali Linuxu

  3. 6 nezbytných nástrojů s otevřeným zdrojovým kódem pro zabezpečení vašeho linuxového serveru