Tento článek je výňatek z mé knihy Linux v akci a druhého Manningova projektu, který ještě nevyšel.
Firewall
Firewall je soubor pravidel. Když se datový paket přesune do nebo z chráněného síťového prostoru, jeho obsah (zejména informace o jeho původu, cíli a protokolu, který plánuje použít) je testován proti pravidlům brány firewall, aby se zjistilo, zda má být povolen průchod. Zde je jednoduchý příklad:
Na jedné straně je iptables nástroj pro správu pravidel brány firewall na počítači se systémem Linux.
Na druhou stranu je firewalld také nástrojem pro správu pravidel brány firewall na počítači se systémem Linux.
Máš s tím problém? A zkazilo by vám den, kdybych vám řekl, že existuje další nástroj, zvaný nftables?
Dobře, přiznávám, že to celé voní trochu legračně, tak mi to dovolte vysvětlit. Vše začíná u Netfilteru, který řídí přístup do a ze síťového zásobníku na úrovni modulu jádra Linuxu. Po celá desetiletí byla primárním nástrojem příkazového řádku pro správu háčků Netfilter sada pravidel iptables.
Linuxový terminál
- 7 nejlepších emulátorů terminálu pro Linux
- 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
- Stáhnout nyní:SSH cheat sheet
- Cheat sheet pro pokročilé příkazy systému Linux
- Výukové programy příkazového řádku systému Linux
Protože syntaxe potřebná k vyvolání těchto pravidel mohla působit trochu tajemně, byly zavedeny různé uživatelsky přívětivé implementace jako ufw a firewalld jako interprety Netfilter vyšší úrovně. Ufw a firewalld jsou však primárně určeny k řešení problémů, kterým čelí samostatné počítače. Budování plnohodnotných síťových řešení bude často vyžadovat extra svaly iptables nebo od roku 2014 jejich nahrazení nftables (prostřednictvím nástroje příkazového řádku nft).
iptables nikam neodešel a je stále široce používán. Ve skutečnosti byste měli očekávat, že při své práci správce budete na mnoho let narážet na sítě chráněné iptables. Ale nftables přidáním do klasické sady nástrojů Netfilter přineslo některé důležité nové funkce.
Od této chvíle ukážu na příkladu, jak firewalld a iptables řeší jednoduché problémy s připojením.
Nakonfigurujte přístup HTTP pomocí brány firewall
Jak jste z názvu mohli uhodnout, firewalld je součástí rodiny systemd. Firewalld lze nainstalovat na počítače Debian/Ubuntu, ale je tam standardně na Red Hat a CentOS. Pokud máte na svém počítači webový server, jako je Apache, můžete potvrdit, že brána firewall funguje, procházením webového kořenového adresáře vašeho serveru. Pokud je web nedostupný, firewalld dělá svou práci.
Použijete firewall-cmd
nástroj pro správu nastavení brány firewall z příkazového řádku. Přidání –state
argument vrací aktuální stav brány firewall:
# firewall-cmd --state
running
Ve výchozím nastavení bude firewalld aktivní a odmítne veškerý příchozí provoz s několika výjimkami, jako je SSH. To znamená, že váš web nebude mít příliš mnoho návštěvníků, což vám jistě ušetří spoustu nákladů na přenos dat. Protože to pravděpodobně není to, co jste pro svůj webový server měli na mysli, budete chtít otevřít porty HTTP a HTTPS, které jsou podle konvence označeny jako 80 a 443. firewalld nabízí dva způsoby, jak toho dosáhnout. Jeden je přes –add-port
argument, který přímo odkazuje na číslo portu spolu se síťovým protokolem, který použije (v tomto případě TCP). –permanent
argument říká firewalld, aby načetl toto pravidlo při každém spuštění serveru:
# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp
–reload
argument použije tato pravidla na aktuální relaci:
# firewall-cmd --reload
Zajímá vás aktuální nastavení vašeho firewallu? Spusťte –list-services
:
# firewall-cmd --list-services
dhcpv6-client http https ssh
Za předpokladu, že jste přidali přístup k prohlížeči, jak je popsáno výše, porty HTTP, HTTPS a SSH by nyní měly být všechny otevřené – spolu s dhcpv6-client
, který Linuxu umožňuje vyžádat si IPv6 IP adresu z místního DHCP serveru.
Nakonfigurujte uzamčený zákaznický kiosk pomocí iptables
Jsem si jistý, že jste viděli kiosky – jsou to tablety, dotykové obrazovky a počítače podobné bankomatům v krabici, kterou letiště, knihovny a podniky nechávají volně ležet a zvou zákazníky a kolemjdoucí k procházení obsahu. Věc na většině kiosků je, že obvykle nechcete, aby se uživatelé cítili jako doma a zacházeli s nimi jako se svými vlastními zařízeními. Obecně nejsou určeny k procházení, prohlížení videí na YouTube nebo k zahajování útoků typu denial-of-service proti Pentagonu. Abyste se ujistili, že nebudou zneužity, musíte je uzamknout.
Jedním ze způsobů je použít nějaký režim kiosku, ať už pomocí chytrého použití správce zobrazení Linuxu nebo na úrovni prohlížeče. Ale abyste se ujistili, že máte všechny díry ucpané, pravděpodobně budete také chtít přidat nějaké pevné síťové ovládací prvky přes bránu firewall. V následující části popíšu, jak bych to udělal pomocí iptables.
Při používání iptables je třeba pamatovat na dvě důležité věci:Pořadí, které pravidlům zadáte, je kritické a pravidla iptables sama o sobě nepřežijí restart. Budu je zde oslovovat jeden po druhém.
Projekt kiosku
Abychom to všechno ilustrovali, představme si, že pracujeme pro obchod, který je součástí většího řetězce zvaného BigMart. Existují desítky let; ve skutečnosti tam naši imaginární prarodiče pravděpodobně vyrostli na nákupech. Ale v těchto dnech kluci z ústředí společnosti BigMart pravděpodobně jen počítají hodiny, než je Amazon nadobro zažene.
Nicméně IT oddělení BigMart dělá, co může, a právě vám poslalo několik kiosků připravených pro WiFi, od kterých se očekává, že je nainstalujete na strategická místa ve vašem obchodě. Myšlenka je taková, že zobrazí webový prohlížeč přihlášený na stránky produktů BigMart.com, což jim umožní vyhledávat funkce zboží, umístění uličky a stav zásob. Kiosky budou také potřebovat přístup na bigmart-data.com, kde je uloženo mnoho obrázků a video médií.
Kromě toho budete chtít povolit aktualizace a v případě potřeby stahování balíčků. Nakonec budete chtít povolit příchozí přístup SSH pouze z vaší místní pracovní stanice a zablokovat všechny ostatní. Obrázek níže ukazuje, jak to celé bude fungovat:
Skript
Zde je návod, jak to vše zapadne do skriptu Bash:
#!/bin/bash
iptables -A OUTPUT -p tcp -d bigmart.com -j ACCEPT
iptables -A OUTPUT -p tcp -d bigmart-data.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp -d ca.archive.ubuntu.com -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j DROP
iptables -A OUTPUT -p tcp --dport 443 -j DROP
iptables -A INPUT -p tcp -s 10.0.3.1 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 22 -j DROP
Základní anatomie našich pravidel začíná -A
, sdělující iptables, že chceme přidat následující pravidlo. OUTPUT
znamená, že toto pravidlo by se mělo stát součástí OUTPUT řetězce. -p
označuje, že toto pravidlo se bude vztahovat pouze na pakety používající protokol TCP, kde jako -d
říká nám, cíl je bigmart.com. -j
vlajka ukazuje na ACCEPT
jako akce, která se má provést, když paket odpovídá pravidlu. V tomto prvním pravidle je touto akcí povolení nebo přijetí žádosti. Ale níže můžete vidět požadavky, které budou vyřazeny nebo zamítnuty.
Pamatujte, že na pořadí záleží. A to proto, že iptables spustí požadavek nad každým ze svých pravidel, ale pouze do té doby, než se shoduje. Takže odchozí požadavek prohlížeče pro, řekněme, youtube.com projde prvními čtyřmi pravidly, ale když se dostane buď na –dport 80
nebo –dport 443
pravidlo – v závislosti na tom, zda se jedná o požadavek HTTP nebo HTTPS – bude zrušeno. iptables se nebude obtěžovat s další kontrolou, protože to byla shoda.
Na druhou stranu systémový požadavek na aktualizaci softwaru na ubuntu.com projde, když narazí na příslušné pravidlo. To, co zde samozřejmě děláme, je povolování odchozích požadavků HTTP nebo HTTPS pouze na naše cíle BigMart nebo Ubuntu a žádné jiné.
Poslední dvě pravidla se budou zabývat příchozími požadavky SSH. Nebudou již zamítnuty dvěma předchozími pravidly dropování, protože nepoužívají porty 80 nebo 443, ale 22. V tomto případě budou požadavky na přihlášení z mé pracovní stanice přijaty, ale požadavky na jiné místo budou zrušeny. To je důležité:Ujistěte se, že IP adresa, kterou používáte pro pravidlo portu 22, odpovídá adrese počítače, který používáte k přihlášení – pokud tak neučiníte, budete okamžitě uzamčeni. Není to samozřejmě žádný velký problém, protože jak je aktuálně nakonfigurován, můžete jednoduše restartovat server a všechna pravidla iptables budou zrušena. Pokud jako server používáte kontejner LXC a přihlašujete se ze svého hostitele LXC, použijte IP adresu, kterou váš hostitel používá k připojení ke kontejneru, nikoli jeho veřejnou adresu.
Budete si muset pamatovat na aktualizaci tohoto pravidla, pokud se IP mého počítače někdy změní; jinak budete uzamčeni.
Hrát si doma (doufejme na nějakém virtuálním počítači, který se dá vyhodit)? Skvělý. Vytvořte si vlastní skript. Nyní mohu skript uložit pomocí chmod
aby byl spustitelný, a spusťte jej jako sudo
. Nedělejte si starosti s tím, že bigmart-data.com not found
chyba – samozřejmě nebyla nalezena; neexistuje.
chmod +X scriptname.sh
sudo ./scriptname.sh
Firewall můžete otestovat z příkazového řádku pomocí cURL
. Požadavek na ubuntu.com funguje, ale manning.com selže.
curl ubuntu.com
curl manning.com
Konfigurace iptables pro načtení při spouštění systému
Linuxový terminál
- 7 nejlepších emulátorů terminálu pro Linux
- 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
- Stáhnout nyní:SSH cheat sheet
- Cheat sheet pro pokročilé příkazy systému Linux
- Výukové programy příkazového řádku systému Linux
Jak nyní zajistím, aby se tato pravidla automaticky načetla při každém spuštění kiosku? Prvním krokem je uložit aktuální pravidla do souboru .rules pomocí iptables-save
nářadí. Tím se v kořenovém adresáři vytvoří soubor obsahující seznam pravidel. Trubka následovaná příkazem tee je nezbytná pro aplikaci mého sudo
oprávnění k druhé části řetězce:skutečné uložení souboru do jinak omezeného kořenového adresáře.
Poté mohu říci systému, aby spustil související nástroj nazvaný iptables-restore
pokaždé, když to nastartuje. Běžná úloha cron, jakou jsme viděli v předchozím modulu, nepomůže, protože se spouštějí v nastavenou dobu, ale netušíme, kdy se náš počítač může rozhodnout selhat a restartovat se.
Existuje mnoho způsobů, jak tento problém vyřešit. Tady je jeden:
Na svůj počítač s Linuxem nainstaluji program s názvem anacron, který nám poskytne soubor v adresáři /etc/ s názvem anacrontab. Upravím soubor a přidám tento iptables-restore
příkazem, který mu říká, aby nahrál aktuální hodnoty tohoto souboru .rules do iptables každý den (v případě potřeby) jednu minutu po spuštění. Dám úkolu identifikátor (iptables-restore
) a poté přidejte samotný příkaz. Protože hrajete se mnou doma, měli byste to všechno vyzkoušet restartováním systému.
sudo iptables-save | sudo tee /root/my.active.firewall.rules
sudo apt install anacron
sudo nano /etc/anacrontab
1 1 iptables-restore iptables-restore < /root/my.active.firewall.rules
Doufám, že tyto praktické příklady ilustrovaly, jak používat iptables a firewalld pro správu problémů s připojením na firewallech založených na Linuxu.