firewall to metoda monitorowania i filtrowania przychodzącego i wychodzącego ruchu sieciowego. Działa poprzez zdefiniowanie zestawu reguł bezpieczeństwa, które określają, czy zezwolić, czy zablokować określony ruch. Prawidłowo skonfigurowana zapora sieciowa jest jednym z najważniejszych aspektów ogólnego bezpieczeństwa systemu.
CentOS 8 jest wyposażony w demona Firewalla o nazwie firewalld. Jest to kompletne rozwiązanie z interfejsem D-Bus, które pozwala na dynamiczne zarządzanie Zaporą systemu.
w tym samouczku porozmawiamy o tym, jak skonfigurować zaporę sieciową i zarządzać nią w CentOS 8. Wyjaśnimy również podstawowe pojęcia FirewallD.
- wymagania wstępne #
- podstawowe pojęcia Firewalld #
- strefy Firewalld #
- usługi zapory #
- firewalld Runtime and Permanent Settings #
- włączenie FirewallD #
- strefy Firewalld #
- Zmiana celu strefy #
- Przypisywanie interfejsu do innej strefy #
- zmiana strefy domyślnej #
- tworzenie nowych stref #
- usługi Firewalld #
- Tworzenie nowej usługi FirewallD #
- otwieranie portów i adresów źródłowych #
- otwieranie źródłowego adresu IP #
- otwarcie portu źródłowego #
- przekazywanie portów #
- przekazuj ruch z jednego portu na drugi pod adresem IP #
- przekierowanie ruchu na inny adres IP #
- przekierowanie ruchu na inny serwer na innym porcie #
- wniosek #
wymagania wstępne #
aby skonfigurować usługę zapory sieciowej, musisz być zalogowany jako root lub użytkownik z uprawnieniami sudo.
podstawowe pojęcia Firewalld #
firewalld wykorzystuje pojęcia stref i usług. W oparciu o strefy i usługi, które skonfigurujesz, możesz kontrolować, jaki ruch jest dozwolony lub zablokowany do iz systemu.
Firewalld można konfigurować i zarządzać za pomocą narzędzia wiersza poleceń firewall-cmd
.
w CentOS 8, iptables jest zastępowane przez nftables jako domyślny backend Firewalla dla demona firewalld.
strefy Firewalld #
strefy to predefiniowane zestawy reguł, które określają poziom zaufania sieci, do których podłączony jest komputer. Do strefy można przypisać interfejsy sieciowe i źródła.
poniżej znajdują się strefy dostarczone przez FirewallD uporządkowane zgodnie z poziomem zaufania strefy od niezaufanych do zaufanych:
- drop: Wszystkie połączenia przychodzące są usuwane bez powiadomienia. Dozwolone są tylko połączenia wychodzące.
- blok: wszystkie połączenia przychodzące są odrzucane za pomocą wiadomości
icmp-host-prohibited
dlaIPv4
iicmp6-adm-prohibited
dla IPv6n. dozwolone są tylko połączenia wychodzące. - publiczne: do użytku w niezaufanych miejscach publicznych. Nie ufasz innym komputerom w sieci, ale możesz zezwolić na wybrane połączenia przychodzące.
- zewnętrzny: do użytku w sieciach zewnętrznych z włączoną maskaradą NAT, gdy system działa jako brama lub router. Dozwolone są tylko wybrane połączenia przychodzące.
- wewnętrzny: do użytku w sieciach wewnętrznych, gdy system działa jako brama lub router. Inne systemy w sieci są na ogół zaufane. Dozwolone są tylko wybrane połączenia przychodzące.
- dmz: używany dla komputerów znajdujących się w strefie zdemilitaryzowanej, które mają ograniczony dostęp do reszty sieci. Dozwolone są tylko wybrane połączenia przychodzące.
- praca: używany do maszyn roboczych. Inne komputery w sieci są zazwyczaj zaufane. Dozwolone są tylko wybrane połączenia przychodzące.
- Strona główna: używany do maszyn domowych. Inne komputery w sieci są zazwyczaj zaufane. Dozwolone są tylko wybrane połączenia przychodzące.
- zaufane: wszystkie połączenia sieciowe są akceptowane. Zaufaj wszystkim komputerom w sieci.
usługi zapory #
usługi Firewalld to predefiniowane reguły, które mają zastosowanie w strefie i definiują niezbędne ustawienia zezwalające na ruch przychodzący dla określonej usługi. Usługi umożliwiają łatwe wykonywanie kilku zadań w jednym kroku.
na przykład usługa może zawierać definicje dotyczące otwierania portów, przekazywania ruchu i innych.
firewalld Runtime and Permanent Settings #
Firewalld używa dwóch oddzielnych zestawów konfiguracji: runtime i permanent configuration.
konfiguracja runtime jest aktualną konfiguracją uruchomioną i nie utrzymuje się przy ponownym uruchomieniu. Kiedy Demon firewalld się uruchamia, ładuje stałą konfigurację, która staje się konfiguracją runtime.
domyślnie podczas wprowadzania zmian w konfiguracji Firewalld przy użyciu narzędzia firewall-cmd
zmiany są stosowane do konfiguracji runtime. Aby zmiany stały, dołącz do polecenia opcję --permanent
.
aby zastosować zmiany w obu zestawach konfiguracji, możesz użyć jednej z następujących metod:
-
zmień konfigurację runtime i ustaw ją na stałe:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
Zmień stałą konfigurację i przeładuj demona firewalld:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
włączenie FirewallD #
na CentOS 8 firewalld jest domyślnie instalowany i włączany. Jeśli z jakiegoś powodu nie jest zainstalowany w Twoim systemie, możesz zainstalować i uruchomić demona, wpisując:
sudo dnf install firewalld
sudo systemctl enable firewalld --now
możesz sprawdzić stan usługi firewall za pomocą:
sudo firewall-cmd --state
jeśli firewall jest włączony, polecenie powinno wydrukować running
. W przeciwnym razie zobaczysz not running
.
strefy Firewalld #
jeśli nie została ona zmieniona, Domyślna strefa jest ustawiona na public
, a wszystkie interfejsy sieciowe są przypisane do tej strefy.
Strefa domyślna to ta, która jest używana do wszystkiego, co nie jest jawnie przypisane do innej strefy.
możesz zobaczyć domyślną strefę wpisując:
sudo firewall-cmd --get-default-zone
public
aby wyświetlić listę wszystkich dostępnych stref, wpisz:
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
aby zobaczyć strefy aktywne i przypisane do nich interfejsy sieciowe:
sudo firewall-cmd --get-active-zones
poniższy wynik pokazuje, że interfejsy eth0
i eth1
są przypisane do strefy public
:
public interfaces: eth0 eth1
możesz wydrukować ustawienia konfiguracji strefy za pomocą:
sudo firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
z powyższego wyniku widzimy, że strefa publiczna jest aktywna i używa domyślnego celu, którym jest REJECT
. Wyjście pokazuje również, że strefa jest używana przez interfejsy eth0
i eth1
i umożliwia ruch klienta DHCP i SSH.
jeśli chcesz sprawdzić konfiguracje wszystkich dostępnych stref wpisz:
sudo firewall-cmd --list-all-zones
polecenie drukuje ogromną listę z ustawieniami wszystkich dostępnych stref.
Zmiana celu strefy #
cel definiuje domyślne zachowanie strefy dla ruchu przychodzącego, które nie jest określone. Można go ustawić na jedną z następujących opcji: default
, ACCEPT
, REJECT
, i DROP
aby ustawić cel strefy, określ strefę za pomocą opcji --zone
, a cel za pomocą opcji --set-target
.
na przykład, aby zmienić cel strefy public
na DROP
, Uruchom:
sudo firewall-cmd --zone=public --set-target=DROP
Przypisywanie interfejsu do innej strefy #
możesz utworzyć określone zestawy reguł dla różnych stref i przypisać do nich różne interfejsy. Jest to szczególnie przydatne w przypadku wielu interfejsów na komputerze.
aby przypisać interfejs do innej strefy, określ strefę za pomocą opcji --zone
, a interfejs za pomocą opcji --change-interface
.
na przykład następujące polecenie przypisuje interfejs eth1
do strefy work
:
sudo firewall-cmd --zone=work --change-interface=eth1
Sprawdź zmiany wpisując:
sudo firewall-cmd --get-active-zones
work interfaces: eth1public interfaces: eth0
zmiana strefy domyślnej #
aby zmienić strefę domyślną, użyj opcji --set-default-zone
, po której następuje nazwa strefy, którą chcesz ustawić jako domyślną.
na przykład, aby zmienić domyślną strefę na home
, wykonasz następujące polecenie:
sudo firewall-cmd --set-default-zone=home
zweryfikuj zmiany za pomocą:
sudo firewall-cmd --get-default-zone
home
tworzenie nowych stref #
Firewalld pozwala również na tworzenie własnych stref. Jest to przydatne, gdy chcesz utworzyć reguły dla poszczególnych aplikacji.
w poniższym przykładzie utworzymy nową strefę o nazwie memcached
, otworzymy port 11211
i umożliwimy dostęp tylko z adresu IP 192.168.100.30
:
-
Utwórz strefę:
sudo firewall-cmd --new-zone=memcached --permanent
-
Dodaj Zasady do strefy:
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
-
Przeładuj demona firewalld, aby aktywować zmiany:
sudo firewall-cmd --reload
usługi Firewalld #
dzięki firewalld możesz zezwolić na ruch dla określonych portów i / lub źródeł w oparciu o predefiniowane reguły zwane usługami.
aby uzyskać listę wszystkich domyślnych dostępnych usług typu:
sudo firewall-cmd --get-services
więcej informacji na temat każdej usługi można znaleźć, otwierając powiązany .plik xml w katalogu /usr/lib/firewalld/services
. Na przykład usługa HTTP jest zdefiniowana w następujący sposób:
<?xml version="1.0" encoding="utf-8"?><service> <short>WWW (HTTP)</short> <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description> <port protocol="tcp" port="80"/></service>
Zezwolenie na przychodzący ruch HTTP (port 80) dla interfejsów w strefie publicznej, tylko dla bieżącej sesji (konfiguracja runtime) typu:
sudo firewall-cmd --zone=public --add-service=http
--zone
.aby sprawdzić, czy usługa została pomyślnie dodana, użyj opcji --list-services
:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
aby utrzymać otwarty port 80 po ponownym uruchomieniu uruchom ponownie to samo polecenie z opcją --permanent
lub wykonaj:
sudo firewall-cmd --runtime-to-permanent
użyj opcji --list-services
wraz z opcją --permanent
, aby zweryfikować zmiany:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
składnia usuwania usługi jest taka sama jak przy dodawaniu. Wystarczy użyć --remove-service
zamiast flagi --add-service
:
sudo firewall-cmd --zone=public --remove-service=http --permanent
powyższe polecenie usuwa usługę http
ze stałej konfiguracji strefy publicznej.
Tworzenie nowej usługi FirewallD #
jak już wspomnieliśmy, domyślne usługi są przechowywane w katalogu /usr/lib/firewalld/services
. Najprostszym sposobem utworzenia nowej usługi jest skopiowanie istniejącego pliku usługi do katalogu /etc/firewalld/services
, który jest miejscem dla usług utworzonych przez użytkownika i zmodyfikowanie ustawień pliku.
na przykład, aby utworzyć definicję usługi dla Plex Media Server, możesz użyć pliku usługi SSH:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
Otwórz nowo utworzony plik plexmediaserver.xml
i zmień krótką nazwę i opis usługi w tagach <short>
i <description>
. Najważniejszym znacznikiem, który musisz zmienić, jest znacznik port
, który definiuje numer portu i protokół, który chcesz otworzyć.
w poniższym przykładzie otwieramy porty 1900
UDP i 32400
TCP.
<?xml version="1.0" encoding="utf-8"?><service version="1.0"><short>plexmediaserver</short><description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description><port protocol="udp" port="1900"/><port protocol="tcp" port="32400"/></service>
Zapisz plik i przeładuj usługę FirewallD:
sudo firewall-cmd --reload
możesz teraz korzystać z usługi plexmediaserver
w swoich strefach tak samo jak każda inna usługa.
otwieranie portów i adresów źródłowych #
Firewalld pozwala również szybko włączyć cały ruch z zaufanego adresu IP lub na określonym porcie bez tworzenia definicji usługi.
otwieranie źródłowego adresu IP #
aby umożliwić cały ruch przychodzący z określonego adresu IP (lub zakresu), określ strefę za pomocą opcji --zone
, a źródłowy adres IP za pomocą opcji --add-source
.
na przykład, aby umożliwić cały ruch przychodzący z 192.168.1.10 w strefie public
, Uruchom:
sudo firewall-cmd --zone=public --add-source=192.168.1.10
trwałość nowej reguły:
sudo firewall-cmd --runtime-to-permanent
Sprawdź zmiany za pomocą następującego polecenia:
sudo firewall-cmd --zone=public --list-sources
192.168.1.10
składnia usuwania źródłowego adresu IP jest taka sama jak przy dodawaniu. Wystarczy użyć opcji --remove-source
zamiast opcji --add-source
:
sudo firewall-cmd --zone=public --remove-source=192.168.1.10
otwarcie portu źródłowego #
aby umożliwić cały ruch przychodzący na danym porcie, określ strefę za pomocą opcji --zone
, a port i protokół za pomocą opcji --add-port
.
na przykład, aby otworzyć port 8080
w strefie publicznej dla bieżącej sesji, którą uruchomisz:
sudo firewall-cmd --zone=public --add-port=8080/tcp
protokół może być albo tcp
, udp
, sctp
, lub dccp
Sprawdź zmiany:
sudo firewall-cmd --zone=public --list-ports
8080
aby utrzymać otwarty port po ponownym uruchomieniu, Dodaj regułę do stałych ustawień, uruchamiając to samo polecenie za pomocą flagi --permanent
lub wykonując:
sudo firewall-cmd --runtime-to-permanent
składnia usuwania portu jest taka sama jak podczas dodawania portu. Wystarczy użyć opcji --remove-port
zamiast opcji --add-port
.
sudo firewall-cmd --zone=public --remove-port=8080/tcp
przekazywanie portów #
aby przekazać ruch z jednego portu na drugi, najpierw włącz maskaradę dla żądanej strefy za pomocą opcji --add-masquerade
. Na przykład, aby włączyć maskaradę dla strefy external
, wpisz:
sudo firewall-cmd --zone=external --add-masquerade
przekazuj ruch z jednego portu na drugi pod adresem IP #
w poniższym przykładzie przekazujemy ruch z portu 80
na port 8080
na tym samym serwerze:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
przekierowanie ruchu na inny adres IP #
w poniższym przykładzie przesyłamy ruch z portu 80
na port 80
na serwerze z IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
przekierowanie ruchu na inny serwer na innym porcie #
w poniższym przykładzie przesyłamy ruch z portu 80
na port 8080
na serwerze z IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
aby uczynić regułę forward trwałą, użyj:
sudo firewall-cmd --runtime-to-permanent
wniosek #
nauczyłeś się konfigurować i zarządzać usługą firewalld w systemie CentOS 8.
upewnij się, że zezwalasz na wszystkie połączenia przychodzące, które są niezbędne do prawidłowego funkcjonowania systemu, jednocześnie ograniczając wszystkie niepotrzebne połączenia.