Wyszukiwanie w witrynie

Jak zainstalować, skonfigurować i używać zapory ogniowej w CentOS i Ubuntu


Firewalld (demon zapory ogniowej) jest alternatywą dla usługi iptables, służącą do dynamicznego zarządzania zaporą systemową z obsługą stref sieciowych (lub zapory ogniowej) i zapewnia interfejs D-Bus do zarządzania konfiguracjami. Jest łatwy w obsłudze i konfiguracji, a teraz jest domyślnym narzędziem do zarządzania zaporą sieciową w RHEL/CentOS, Fedora i kilku innych dystrybucjach Linuksa.

W tym artykule omówimy, jak skonfigurować zaporę systemową za pomocą firewalld i wdrożyć podstawowe filtrowanie pakietów w CentOS/RHEL 7 i Ubuntu.

Podstawy dotyczące zapory ogniowej

Zapora sieciowa składa się z trzech warstw, którymi są:

  • warstwa podstawowa: odpowiedzialna za obsługę konfiguracji i zaplecze (wymienione poniżej).
  • Interfejs D-Bus: podstawowy sposób zmiany i tworzenia konfiguracji zapory sieciowej.
  • backendy: do interakcji z netfilter (natywnym modułem jądra używanym do firewalli). Należą do nich iptables, ip6tables, ebtables, ipset, nft, linnftables; menedżer sieci; i moduły.

Zarządza regułami zapory sieciowej, wdrażając strefy sieci/zapory, które definiują poziom zaufania połączeń lub interfejsów sieciowych. Inne obsługiwane funkcje zapory obejmują usługi, konfigurację bezpośrednią (używaną do bezpośredniego przekazywania surowej składni iptables), zestawy IPT oraz typy ICMP.

Firewall obsługuje dwa rodzaje środowisk konfiguracyjnych:

  • konfiguracja środowiska uruchomieniowego, która obowiązuje tylko do ponownego uruchomienia komputera lub ponownego uruchomienia usługi zapory ogniowej
  • konfiguracja stała, która jest zapisana i działa trwale.

Narzędzie wiersza poleceń firewall-cmd służy do zarządzania czasem wykonania i stałą konfiguracją. Alternatywnie do interakcji z demonem można użyć narzędzia konfiguracyjnego graficznego interfejsu użytkownika (GUI) firewall-config.

Ponadto firewalld oferuje dobrze zdefiniowany interfejs dla innych lokalnych usług lub aplikacji, umożliwiający bezpośrednie żądanie zmian w regułach zapory sieciowej, jeśli działają one z uprawnieniami roota.

Globalny plik konfiguracyjny firewalld znajduje się w /etc/firewalld/firewalld.conf, a funkcje zapory są konfigurowane w formacie XML.

Zrozumienie ważnych funkcji zapory ogniowej

Główną cechą firewalld są strefy sieciowe/firewall. Każdy inny obiekt jest ograniczony do strefy. Strefa zapory opisuje poziom zaufania dla połączenia, interfejsu lub powiązania adresu źródłowego.

Domyślna konfiguracja obejmuje szereg predefiniowanych stref posortowanych według domyślnego poziomu zaufania stref od niezaufanych do zaufanych: upuść, blokuj, publiczne, zewnętrzne, dmz, służbowe, domowe, wewnętrzne i zaufane. Są one zdefiniowane w plikach przechowywanych w katalogu /usr/lib/firewalld/zones.

Możesz skonfigurować lub dodać własne strefy za pomocą klienta CLI lub po prostu utworzyć lub skopiować plik strefy w /etc/firewalld/zones z istniejących plików i go edytować.

Kolejną ważną koncepcją firewalla są usługi. Usługę definiuje się za pomocą portów i protokołów; definicje te reprezentują daną usługę sieciową, taką jak serwer WWW lub usługa dostępu zdalnego. Usługi są zdefiniowane w plikach przechowywanych w katalogu /usr/lib/firewalld/services/ lub /etc/firewalld/services/.

Jeśli znasz podstawowe pojęcia dotyczące iptables/ip6tables/ebtables, możesz także użyć bezpośredniego interfejsu (lub konfiguracji), aby uzyskać bezpośredni dostęp do zapory ogniowej. Jednak dla tych, którzy nie mają żadnej wiedzy na temat iptables, można zastosować bogaty język do tworzenia bardziej złożonych reguł zapory sieciowej dla IPv4 i IPv6.

Jak zainstalować pakiet Firewalld w systemie Linux

W CentOS 7 pakiet firewalld jest preinstalowany i możesz to sprawdzić za pomocą następującego polecenia.

rpm -qa firewalld

W Ubuntu 16.04 i 18.04 możesz zainstalować go przy użyciu domyślnego menedżera pakietów, jak pokazano.

sudo apt install firewalld

Jak zarządzać usługą zapory ogniowej w systemie Linux

Firewalld to zwykła usługa systemowa, którą można zarządzać za pomocą polecenia systemctl.

 
sudo systemctl start firewalld	#start the service for the mean time
sudo systemctl enable firewalld	#enable the service to auto-start at boot time
sudo systemctl status firewalld	#view service status

Po uruchomieniu usługi firewalld możesz także sprawdzić, czy demon działa, czy nie, korzystając z narzędzia firewall-cmd (jeśli nie jest aktywne, polecenie to wyświetli komunikat „not działanie ").

sudo firewall-cmd --state

Jeśli zdarzy Ci się trwale zapisać jakieś zmiany, możesz ponownie załadować zaporę. Spowoduje to ponowne załadowanie reguł zapory sieciowej i zachowanie informacji o stanie. Bieżąca stała konfiguracja stanie się nową konfiguracją środowiska wykonawczego.

sudo firewall-cmd --reload

Jak pracować ze strefami zapory w Firewalld

Aby uzyskać listę wszystkich dostępnych stref i usług zapory, uruchom następujące polecenia.

sudo firewall-cmd --get-zones
sudo firewall-cmd --get-services

Strefa domyślna to strefa używana dla każdej funkcji zapory, która nie jest jawnie powiązana z inną strefą. Możesz ustawić domyślną strefę dla połączeń sieciowych i interfejsów, uruchamiając.

sudo firewall-cmd --get-default-zone

Aby ustawić strefę domyślną, na przykład zewnętrzną, użyj poniższego polecenia. Należy pamiętać, że dodanie opcji --permanent ustawia konfigurację na stałe (lub umożliwia odpytywanie informacji ze środowiska konfiguracji stałej).

sudo firewall-cmd --set-default-zone=external
OR
sudo firewall-cmd --set-default-zone=external --permanent
sudo firewall-cmd --reload 

Następnie przyjrzyjmy się, jak dodać interfejs do strefy. Ten przykład pokazuje, jak dodać kartę sieci bezprzewodowej (wlp1s0) do strefy domowej, która jest używana w obszarach domowych.

sudo firewall-cmd --zone=home --add-interface=wlp1s0

Interfejs można dodać tylko do jednej strefy. Aby przenieść go do innej strefy, użyj przełącznika --change-interface, jak pokazano, lub usuń go z poprzedniej strefy za pomocą przełącznika –remove-interface, a następnie dodaj go do nowej strefy.

Zakładając, że chcesz połączyć się z publiczną siecią WI-FI, powinieneś przenieść swój interfejs bezprzewodowy z powrotem do strefy publicznej, w następujący sposób:

sudo firewall-cmd --zone=public --add-interface=wlp1s0
sudo firewall-cmd --zone=public --change-interface=wlp1s0

Można korzystać z wielu stref jednocześnie. Aby uzyskać listę wszystkich aktywnych stref z włączonymi funkcjami takimi jak interfejsy, usługi, porty, protokoły, uruchom:

sudo firewall-cmd --get-active-zones

W nawiązaniu do poprzedniego punktu, jeśli chcesz znaleźć więcej informacji o danej strefie, czyli o wszystkim, co zostało w niej dodane lub włączone, użyj jednego z poniższych poleceń:

sudo firewall-cmd --zone=home --list-all
OR
sudo firewall-cmd --info-zone public

Inną przydatną opcją jest --get-target, która pokazuje cel stałej strefy. Celem może być: domyślny, AKCEPTUJ, UPUŚĆ, ODRZUT. Możesz sprawdzić cel różnych stref:

sudo firewall-cmd --permanent --zone=public --get-target  
sudo firewall-cmd --permanent --zone=block --get-target  
sudo firewall-cmd --permanent --zone=dmz --get-target  
sudo firewall-cmd --permanent --zone=external --get-target
sudo firewall-cmd --permanent --zone=drop --get-target

Jak otwierać i blokować porty w zaporze Firewalld

Aby otworzyć port (lub kombinację port/protokół) w zaporze, po prostu dodaj go do strefy z opcją --add-port. Jeśli nie określisz jawnie strefy, zostanie ona włączona w strefie domyślnej.

Poniższy przykład pokazuje, jak dodać porty 80 i 443, aby umożliwić przychodzący ruch internetowy za pośrednictwem HTTP i HTTPS > protokoły odpowiednio:

sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Następnie załaduj ponownie zaporę sieciową i jeszcze raz sprawdź włączone funkcje w strefie publicznej, powinieneś zobaczyć właśnie dodane porty.

sudo firewall-cmd --reload
sudo firewall-cmd --info-zone public

Blokowanie lub zamykanie portu w zaporze jest równie proste, wystarczy usunąć go ze strefy za pomocą opcji --remove-port. Np. aby zamknąć porty 80 i 443 w strefie publicznej.

sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

Zamiast używać kombinacji portu lub portu/protokołu, możesz użyć nazwy usługi, do której przypisany jest port, jak wyjaśniono w następnej sekcji.

Jak otwierać i blokować usługi w zaporze Firewalld

Aby otworzyć usługę w zaporze, włącz ją za pomocą opcji --add-service. Jeżeli strefa zostanie pominięta, zostanie użyta strefa domyślna.

Poniższe polecenie na stałe włączy usługę http w strefie publicznej.

sudo firewall-cmd --zone=public --permanent --add-service=http 
sudo firewall-cmd --reload 

Opcji --remove-service można użyć do wyłączenia usługi.

sudo firewall-cmd --zone=public --permanent --remove-service=http 
sudo firewall-cmd --reload 

Jak włączyć i wyłączyć maskowanie adresów IP za pomocą zapory ogniowej

Maskarada IP (znana również jako IPMASQ lub MASQ) to NAT (tłumaczenie adresu sieciowego) mechanizm w sieciach Linux, który umożliwia hostom w sieci posiadającym prywatne adresy IP komunikację z Internetem przy użyciu publicznego adresu IP przypisanego do serwera Linux (brama IPMASQ).

Jest to mapowanie jeden do wielu. Ruch z twoich niewidzialnych hostów będzie widoczny na innych komputerach w Internecie, tak jakby pochodził z twojego serwera Linux.

Możesz włączyć maskowanie adresów IP w wybranej strefie, na przykład w strefie publicznej. Ale zanim to zrobisz, najpierw sprawdź, czy maskarada jest aktywna, czy nie („nie” oznacza, że jest wyłączone, a „tak” oznacza inaczej).

sudo firewall-cmd --zone=public --query-masquerade
sudo firewall-cmd --zone=public --add-masquerade

Typowym przypadkiem użycia maskarady jest przekierowanie portów. Zakładając, że chcesz połączyć się przez SSH ze zdalnej maszyny do hosta w swojej sieci wewnętrznej z adresem IP 10.20.1.3, na którym nasłuchuje demon sshd na porcie 5000.

Możesz przekierować wszystkie połączenia z portu 22 na serwerze Linux do zamierzonego portu na hoście docelowym, wydając:

sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Aby wyłączyć maskowanie w strefie, użyj przełącznika --remove-masquerade.

sudo firewall-cmd --zone=public --remove-masquerade

Jak włączyć i wyłączyć komunikat IMCP w zaporze sieciowej

Wiadomości ICMP (Internet Control Message Protocol) to albo prośby o informacje, albo odpowiedzi na prośby o informacje, albo komunikaty o błędach.

Możesz włączyć lub wyłączyć komunikaty ICMP w zaporze, ale wcześniej wypisz wszystkie obsługiwane typy ICMP.

sudo firewall-cmd --get-icmptypes

Aby dodać lub usunąć żądany typ bloku.

sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Możesz wyświetlić wszystkie typy icmp dodane w strefie za pomocą przełącznika --list-icmp-blocks.

sudo firewall-cmd --zone=home --list-icmp-blocks

Jak używać bezpośredniego interfejsu do przekazywania surowych poleceń iptables

Komenda firewall-cmd udostępnia także opcje bezpośrednie (--direct), umożliwiające uzyskanie bardziej bezpośredniego dostępu do zapory. Jest to przydatne dla osób z podstawową znajomością iptables.

Ważne: opcji bezpośrednich należy używać tylko w ostateczności, gdy nie jest możliwe użycie zwykłych opcji firewall-cmd opisanych powyżej.

Oto przykład przekazania nieprzetworzonej reguły iptables przy użyciu przełącznika --add-rules. Możesz łatwo usunąć te reguły, zastępując --add-rule przez --remove-rule:

sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Więcej informacji o iptables znajdziesz w tym przewodniku: Jak skonfigurować zaporę sieciową Iptables, aby umożliwić zdalny dostęp do usług w systemie Linux.

Jeśli nie znasz składni iptables, możesz wybrać „bogaty język” zapory ogniowej, aby tworzyć bardziej złożone reguły zapory ogniowej w łatwy do zrozumienia sposób, jak wyjaśniono poniżej.

Jak korzystać z bogatego języka w zaporze Firewalld

bogaty język (znany również jako bogate reguły) służy do dodawania bardziej złożonych reguł zapory sieciowej dla IPv4 i IPv6 bez znajomości składni iptables.

Rozszerza funkcje strefy (usługa, port, blok icmp, maskarada i port forward), które omówiliśmy. Obsługuje adresy źródłowe i docelowe, rejestrowanie, akcje i limity dla dzienników i akcji.

--add-rich-rule służy do dodawania rozbudowanych reguł. Ten przykład pokazuje, jak zezwolić na nowe połączenia IPv4 i IPv6 dla usługi http i logować 1 na minutę za pomocą audytu:

sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Aby usunąć dodaną regułę, zastąp opcję --add-rich-rule opcją --remove-rich-rule.

sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Funkcja ta umożliwia także blokowanie lub zezwalanie na ruch z określonego adresu IP. Poniższy przykład pokazuje jak odrzucać połączenia z adresu IP 10.20.1.20.

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Jak włączyć i wyłączyć tryb paniki w zaporze Firewalld

Tryb paniki to specjalny tryb w zaporze firewall, w którym wszystkie przychodzące i wychodzące pakiety są odrzucane, a aktywne połączenia wygasają po aktywacji.
Możesz włączyć ten tryb w sytuacjach awaryjnych, gdy zagrożenie dla środowiska sieciowego ustąpi.

Aby wysłać zapytanie do trybu paniki, użyj opcji --query-panic.

sudo firewall-cmd --query-panic

Aby włączyć tryb paniki, użyj opcji --panic-on. Możesz sprawdzić, czy działa, używając polecenia ping, jak pokazano. Ponieważ pakiet został odrzucony, nie można rozpoznać nazwy www.google.com i stąd wyświetlany jest błąd.

sudo firewall-cmd --panic-on
ping -c 2 www.google.com

Aby wyłączyć tryb paniki, użyj opcji --panic-off.

sudo firewall-cmd --panic-off

Jak zablokować zaporę sieciową

Pamiętaj, że w podstawach dotyczących zapory ogniowej wspomnieliśmy, że lokalne aplikacje lub usługi mogą zmieniać konfigurację zapory, jeśli działają z uprawnieniami roota. Możesz kontrolować, które aplikacje mogą żądać zmian w zaporze ogniowej, określając to na białej liście blokowania.

Ta funkcja jest domyślnie wyłączona. Można ją włączyć lub wyłączyć odpowiednio za pomocą przełącznika --lockdown-on lub --lockdown.

sudo firewall-cmd --lockdown-on
OR
sudo firewall-cmd --lockdown-off

Pamiętaj, że zaleca się włączenie lub wyłączenie tej funkcji poprzez edycję głównego pliku konfiguracyjnego, ponieważ polecenie firewall-cmd może nie istnieć na białej liście blokowania po włączeniu blokady.

sudo vim /etc/firewalld/firewalld.conf

Znajdź parametr Blokada i zmień jego wartość z nie (oznacza wyłączone) na tak (oznacza włączone).

Lockdown=yes

Aby ustawić to ustawienie na stałe, ponownie załaduj zaporę ogniową.

sudo firewall-cmd --reload
Streszczenie

Firewalld to łatwy w użyciu zamiennik usługi iptables, która wykorzystuje iptables jako backend. W tym artykule pokazaliśmy, jak zainstalować pakiet firewalld, wyjaśniliśmy ważne funkcje firewalld i omówiliśmy, jak je skonfigurować w środowiskach wykonawczych i konfiguracji stałej.

Jeśli masz jakieś pytania lub uwagi, skontaktuj się z nami za pomocą poniższego formularza komentarza. Więcej informacji można znaleźć na stronie podręcznika zapory ogniowej (man firewalld) lub w dokumentacji zapory ogniowej w witrynie internetowej projektu.