Úvod
Firewalld je řešení pro správu firewallu, které je k dispozici pro mnoho distribucí Linuxu. Slouží jako rozhraní k systému filtrování paketů iptables, který poskytuje jádro Linuxu. V této příručce se dozvíte, jak nakonfigurovat firewall pro váš server. Ukážeme vám také základy správy firewallu pomocí administračního nástroje firewall-cmd.
Základy Firewalld
FirewallD využívá koncepty zón a služeb namísto řetězců a pravidel iptables. V závislosti na nakonfigurovaných zónách a službách můžete řídit, jaký provoz je povolen nebo zakázán směrem do systému a ze systému. FirewallD lze konfigurovat a spravovat pomocí nástroje příkazového řádku firewall-cmd.
Instalace a povolení spuštění firewallu při startu
Na většině linuxových distribucí je již firewallD nainstalován. Pokud jej však potřebujete nainstalovat sami, zadejte níže uvedenou syntaxi:
|
1 |
sudo yum install firewalld |
Po instalaci firewalld můžete službu povolit a restartovat server:
|
1 2 |
sudo systemctl enable firewalld sudo reboot |
Poté restartujte server. Váš firewall bude povolen po úspěšném restartování serveru. Poté pomocí níže uvedeného příkazu ověřte, zda byla služba aktivována:
|
1 |
sudo firewall-cmd --state |

Výstup ukazuje, že výchozí nastavení firewallu funguje.
Kontrola výchozích nastavení
Zónu vybranou serverem můžete zkontrolovat pomocí tohoto příkazu:
|
1 |
firewall-cmd --get-default-zone |

Aktivní zónu ověříte zadáním:
|
1 |
firewall-cmd --get-active-zones |

Vytiskněte konfiguraci výchozí zóny, abyste zjistili pravidla připojená k veřejné oblasti pomocí této syntaxe:
|
1 |
sudo firewall-cmd --list-all |

Výstup indikuje, že tato zóna je jak výchozí, tak aktivní zónou. Ukazuje také, že k této zóně jsou přiřazena rozhraní eth0 a eth1.
Kontrola alternativních zón
Kromě výchozích a aktivních zón existují další zóny, které můžete prozkoumat. Zadáním tohoto příkazu zobrazíte všechny dostupné zóny:
|
1 |
firewall-cmd --get-zones |

Zkontrolujte konkrétní konfiguraci přiřazenou k zóně přidáním parametru –zone= do příkazu –list-all:
|
1 |
sudo firewall-cmd --zone=home --list-all |

Změna zóny rozhraní
Zónu rozhraní můžete snadno změnit pomocí volby –change-interface v kombinaci s volbou –change-interface. Následující příkaz přiřadí rozhraní eth1 k pracovnímu prostoru:
|
1 |
sudo firewall-cmd --zone=work --change-interface=eth1 |
Změny můžete ověřit zadáním:
|
1 |
sudo firewall-cmd --get-active-zones |
Změna výchozí zóny
Chcete-li změnit výchozí zónu, použijte parametr –set-default-zone následovaný názvem zóny, kterou chcete nastavit jako výchozí. Chcete-li například změnit výchozí zónu pro začátek, měli byste spustit následující příkaz:
|
1 |
sudo firewall-cmd --set-default-zone=home |
Dále můžete změny ověřit pomocí:
|
1 |
sudo firewall-cmd --get-default-zone |
Nastavení pravidel pro vaše aplikace
Projděme si základy potřebné k definování výjimek firewallu pro služby:
Přidání služby do vašich zón
Nejjednodušším způsobem je přidání potřebných portů nebo služeb do zón, které používáte. Stejně tak můžete použít volbu –get-services k zobrazení všech dostupných služeb:
|
1 |
firewall-cmd --get-services |

Službu pro zónu můžete aktivovat pomocí parametru –add-service =. Akce cílí na výchozí zónu nebo na jakoukoli zónu definovanou parametrem –zone =. Ve výchozím nastavení je nakonfigurována pouze aktuální relace firewallu. Trvalou konfiguraci firewallu můžete nastavit aktivací příznaku –permanent. Pokud například provozujete webový server, který poskytuje běžný provoz HTTP, můžete tento provoz pro rozhraní v naší zóně “public” pro tuto relaci povolit zadáním:
|
1 |
sudo firewall-cmd --zone=public --add-service=http |
Pokud chcete změnit výchozí zónu, můžete –zone = vynechat. Úspěšnost operace můžete zkontrolovat pomocí operací –list-all nebo –list-services:
|
1 |
sudo firewall-cmd --zone=public --list-services |

Jakmile ověříte, že vše funguje podle očekávání, s největší pravděpodobností budete chtít změnit trvalá pravidla firewallu, aby byla vaše služba dostupná i po restartu. Změnu v naší zóně “public” můžeme provést trvale zadáním syntaxe:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --add-service=http výstup: success |
Zda to bylo úspěšné, můžete zkontrolovat přidáním příznaku –permanent k operaci –list-services. Pro –všechny trvalé operace musíte použít sudo:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --permanent --list-services výstup: dhcpv6-client http ssh |
Vaše zóna “public” nyní povoluje provoz HTTP na portu 80. To můžete přidat do aktuální relace a sady trvalých pravidel pomocí níže uvedeného příkazu:
|
1 2 3 |
sudo firewall-cmd --zone=public --add-service=https sudo firewall-cmd --zone=public --permanent --add-service=https |
Pokud neexistují žádné služby, které by vyhovovaly vašim požadavkům, máte dvě skvělé možnosti, jak tuto situaci vyřešit:
- Otevření portu pro vaše zóny
Nejpřímějším způsobem, jak přidat podporu pro vaši konkrétní aplikaci, je otevřít porty používané v jednotlivých zónách. Je to tak jednoduché, jako určit port nebo rozsah portů a odpovídající protokol pro porty, které potřebujete otevřít. Pokud například vaše aplikace běží na portu 5000 a používá TCP, můžete ji pro tuto relaci přidat do zóny “public” pomocí parametru –add-port =. Protokoly mohou být TCP nebo UDP:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --add-port=5000/tcp výstup: success |
Chcete-li zkontrolovat, zda byla operace úspěšná, použijte operaci –list-ports:
|
1 2 3 4 |
sudo firewall-cmd --zone=public --list-ports Výstup: 5000/tcp |
Můžete také určit rozsah pro sériové rozhraní oddělením počátečního a koncového portu v rozsahu spojovníkem. Pokud například vaše aplikace používá porty UDP 4990 až 4999, můžete je v zóně “public” otevřít zápisem:
|
1 |
sudo firewall-cmd --zone=public --add-port=4990-4999/udp |
Po otestování je pravděpodobně budeme chtít přidat do trvalého firewallu. Můžete to provést zadáním následujícího:
|
1 2 3 |
sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp sudo firewall-cmd --zone=public --permanent --list-ports |

- Definování služby
Služba je kolekce portů s přidruženým názvem a popisem. Služby se spravují snadněji než porty, ale vyžaduje to trochu počáteční práce. Nejjednodušší způsob, jak začít, je zkopírovat existující skript (v / usr / lib / firewalld / services) do adresáře /etc/firewalld/services. Můžete například zkopírovat definici služby SSH pro použití v definici služby “example” následovně. Název souboru bez přípony XML určuje název služby v seznamu služeb firewallu:
|
1 |
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml |
V tomto okamžiku můžete upravit definici v zkopírovaném souboru:
|
1 |
sudo vi /etc/firewalld/services/example.xml |
Nejprve soubor obsahuje definici SSH, kterou jste zkopírovali:
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>SSH</short> <description>Zabezpečený Shell (SSH) je a protokol pro přihlašování do a spouštění příkazů na vzdálených počítačích. To poskytuje zabezpečenou šifrovanou komunikaci. Pokud vy plánujete na přistupovat k vašemu počítači vzdáleně přes SSH přes a chráněné firewallem rozhraní, povolte tuto možnost. Vy potřebujete ten openssh-server balíček nainstalovaný pro tuto možnost aby byla užitečná.</description> <port protocol="tcp" port="22"/> </service> |
Většina této definice se skládá z metadat. Musíte změnit krátký název služby v tagách <short>. Toto je čitelný název služby. Představte si, že pro naši službu “example” musíme otevřít port 7777 pro TCP a 8888 pro UDP. Stávající definici můžete změnit vstupem do režimu INSERT stisknutím klávesy i:
|
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="utf-8"?> <service> <short>Ukázková služba</short> <description>Toto je pouze an ukázková služba. To pravděpodobně by nemělo't být používáno na a reálném systému.</description> <port protocol="tcp" port="7777"/> <port protocol="udp" port="8888"/> </service> |
Poté stiskněte klávesu ESC a napište :x pro uložení a zavření souboru. Poté zadejte níže uvedený příkaz pro restartování firewallu, abyste měli přístup k nové službě;
|
1 |
sudo firewall-cmd --reload |
Poté použijte níže uvedený příkaz k zobrazení seznamu dostupných služeb:
|
1 |
firewall-cmd --get-services |

Tato služba je nyní k dispozici ve vaší zóně.
Vytváření vlastních zón
Ačkoli předdefinované zóny budou pravděpodobně většině uživatelů stačit, může být užitečné definovat vlastní zóny, které lépe popisují jejich funkci.
Při přidávání zóny ji přidejte do trvalého nastavení firewallu. Poté můžete provést reload, abyste nastavení přenesli do své relace. Například můžete vytvořit dvě dříve diskutované zóny zadáním:
|
1 2 |
sudo firewall-cmd --permanent --new-zone=publicweb sudo firewall-cmd --permanent --new-zone=privateDNS |
Pomocí tohoto příkazu můžete potvrdit, že jsou přítomny ve vaší trvalé konfiguraci:
|
1 |
sudo firewall-cmd --permanent --get-zones |

Znovu načtěte (reload) firewall, abyste tyto nové zóny uvedli do aktivní konfigurace:
|
1 2 3 4 5 |
sudo firewall-cmd --reload firewall-cmd --get-zones výstup: block dmz drop external home internal privateDNS public publicweb trusted work |
Nyní můžete ke svým zónám přiřadit příslušné služby a porty. Například pro zónu “publicweb” byste mohli chtít přidat služby SSH, HTTP a HTTPS:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --add-service=ssh sudo firewall-cmd --zone=publicweb --add-service=http sudo firewall-cmd --zone=publicweb --add-service=https |

Pomocí tohoto příkazu můžete také přidat službu DNS do své zóny „privateDNS“:
|
1 2 |
sudo firewall-cmd --zone=privateDNS --add-service=dns sudo firewall-cmd --zone=privateDNS --list-all |

Dále můžete změnit svá rozhraní na tyto nové zóny a otestovat je:
|
1 2 3 |
sudo firewall-cmd --zone=publicweb --change-interface=eth0 sudo firewall-cmd --zone=privateDNS --change-interface=eth1 |
Otestujte konfiguraci, abyste zjistili, zda funguje. Pokud vám tyto hodnoty vyhovují, musíte stejná pravidla přidat do trvalé konfigurace. To provedete opětovným použitím pravidel s parametrem —permanent:
|
1 2 3 4 5 6 7 |
sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh sudo firewall-cmd --zone=publicweb --permanent --add-service=http sudo firewall-cmd --zone=publicweb --permanent --add-service=https sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns |
Po trvalém použití těchto pravidel můžete restartovat síť a znovu načíst službu firewallu:
|
1 2 3 |
sudo systemctl restart network sudo systemctl reload firewalld |
Zkontrolujte, zda byly zóny správně přiřazeny:
|
1 |
firewall-cmd --get-active-zones |

Dále se ujistěte, že obě zóny mají správnou službu:
|
1 2 3 4 |
sudo firewall-cmd --zone=publicweb --list-services výstup: http https ssh |
|
1 2 3 4 5 |
sudo firewall-cmd --zone=privateDNS --list-services výstup: dns |
Pokud chcete nastavit jednu ze svých zón jako výchozí pro ostatní rozhraní, musíte toto chování nakonfigurovat pomocí parametru –set-default-zone= pomocí tohoto příkazu:
|
1 |
sudo firewall-cmd --set-default-zone=publicweb |
Závěr
V tomto okamžiku jste úspěšně vytvořili své vlastní zóny. Měli byste mít základní znalosti o správě služby firewalld na vašem systému CentOS pro každodenní použití. Dobré porozumění službě firewalld vám umožní plně využít její výkon a flexibilitu.
Příjemnou práci s počítačem!


Komentáře
Zatím žádné komentáře. Buďte první.