Jak skonfigurować zaporę za pomocą Firewalld w systemie Linux (Kompletny przewodnik)
Zabezpieczenie serwera Linux przed nieautoryzowanym dostępem i złośliwym ruchem nie jest opcjonalne — jest to fundamentalna odpowiedzialność każdego administratora systemu. Niezależnie od tego, czy prowadzisz projekt osobisty, aplikację biznesową czy produkcyjny serwer internetowy, prawidłowo skonfigurowana zapora sieciowa jest Twoją pierwszą i najbardziej krytyczną linią obrony. Firewalld jest jednym z najpotężniejszych i najbardziej elastycznych narzędzi do zarządzania zaporą sieciową dostępnych w systemie Linux, oferując dynamiczne zarządzanie regułami, kontrolę ruchu opartą na strefach i bogatą obsługę reguł — wszystko bez konieczności pełnego ponownego uruchomienia usługi po zastosowaniu zmian.
Ten kompleksowy przewodnik przeprowadzi Cię przez wszystko, co musisz wiedzieć: instalację Firewalld, zrozumienie stref, zarządzanie usługami i portami, pisanie bogatych reguł oraz monitorowanie zapory sieciowej w czasie rzeczywistym. Jeśli hostowujesz na VPS lub Dedicated Server z AlexHost, ten przewodnik pomoże Ci zabezpieczyć Twoje środowisko i utrzymać silną, adaptacyjną postawę bezpieczeństwa.
Co to jest Firewalld i dlaczego powinieneś go używać?
Firewalld to demon dynamicznego zarządzania zaporą sieciową dostępny w większości głównych dystrybucji Linux, w tym CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux i coraz częściej również w Debian i Ubuntu. W przeciwieństwie do starszego podejścia iptables — gdzie każda zmiana reguły wymagała wyczyszczenia i przeładowania całego zestawu reguł — Firewalld stosuje zmiany dynamicznie w czasie wykonywania bez przerywania aktywnych połączeń.
Kluczowe zalety Firewalld
- Architektura oparta na strefach — przypisz różne poziomy zaufania do różnych interfejsów sieciowych lub zakresów IP
- Dynamiczne aktualizacje reguł — zastosuj zmiany bez ponownego uruchomienia zapory sieciowej lub usuwania istniejących połączeń
- Abstrakcja usług — zarządzaj ruchem według nazwy usługi (np.
http,ssh) zamiast surowych numerów portów - Bogate reguły — pisz złożone, warunkowe reguły kierujące się na określone adresy IP, protokoły i akcje
- Integracja D-Bus — pozwala innym aplikacjom i usługom na programową interakcję z zaporą sieciową
- Obsługa IPv4 i IPv6 — zarządzaj obydwiema rodzinami protokołów z jednego interfejsu
Wymagania wstępne
Przed przystąpieniem upewnij się, że posiadasz:
- Serwer Linux z systemem CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian lub Ubuntu
- Dostęp root lub
sudodo serwera - Podstawową wiedzę na temat poleceń terminala Linux
- Aktywną sesję SSH (trzymaj ją otwartą przez cały czas — będziesz modyfikować reguły zapory sieciowej)
> Krytyczne ostrzeżenie: Zawsze upewnij się, że SSH (port 22 domyślnie) jest wyraźnie dozwolone w regułach zapory sieciowej przed włączeniem Firewalld. Zablokowanie się na zdalnym serwerze to częsty i możliwy do uniknięcia błąd.
Krok 1: Instalacja Firewalld
Firewalld jest zawarty w domyślnych repozytoriach większości głównych dystrybucji Linux. Użyj odpowiedniego menedżera pakietów dla Twojego systemu.
Na CentOS / RHEL / Rocky Linux / AlmaLinux
sudo yum install firewalld -yLub na nowszych wersjach przy użyciu DNF:
sudo dnf install firewalld -yNa Fedora
sudo dnf install firewalld -yNa Debian / Ubuntu
Chociaż Firewalld jest najczęściej kojarzony z systemami opartymi na RHEL, jest w pełni obsługiwany w dystrybucjach opartych na Debian:
sudo apt update
sudo apt install firewalld -y> Uwaga dla użytkowników Ubuntu/Debian: Jeśli ufw jest aktualnie aktywny w Twoim systemie, wyłącz go przed włączeniem Firewalld, aby uniknąć konfliktów:
> “`bash
> sudo ufw disable
> “`
Krok 2: Uruchamianie i włączanie Firewalld
Po instalacji uruchom usługę Firewalld i skonfiguruj ją do automatycznego uruchamiania przy rozruchu systemu:
sudo systemctl start firewalld
sudo systemctl enable firewalldSprawdź, czy usługa działa prawidłowo:
sudo systemctl status firewalldPowinieneś zobaczyć dane wyjściowe podobne do:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since ...Jeśli status pokazuje active (running), Firewalld jest operacyjny i gotowy do konfiguracji.
Krok 3: Zrozumienie stref Firewalld
Model oparty na strefach jest fundamentem architektury Firewalld. Strefa definiuje poziom zaufania dla połączenia sieciowego lub interfejsu. Każda strefa zawiera swój własny zestaw reguł, które określają, jaki ruch jest dozwolony lub zabroniony.
Wbudowane strefy Firewalld
| Strefa | Poziom zaufania | Typowy przypadek użycia |
|---|---|---|
drop | Najniższy | Wszystkie połączenia przychodzące są odrzucane bez odpowiedzi |
block | Bardzo niski | Połączenia przychodzące są odrzucane z wiadomością ICMP |
public | Niski | Domyślna strefa dla niezaufanych sieci publicznych |
external | Niski | Dla interfejsów skierowanych na zewnątrz z maskingiem NAT |
dmz | Średni | Serwery dostępne z zewnątrz, ale izolowane wewnętrznie |
work | Średnio-wysoki | Sieci robocze z umiarkowanym zaufaniem |
home | Wysoki | Sieci domowe, gdzie inne hosty są zaufane |
internal | Wysoki | Sieci wewnętrzne, podobne do domu |
trusted | Najwyższy | Wszystkie połączenia są akceptowane |
Sprawdź bieżącą strefę domyślną
sudo firewall-cmd --get-default-zoneWyświetl listę wszystkich dostępnych stref
sudo firewall-cmd --get-zonesWyświetl aktualnie aktywne strefy i ich interfejsy
sudo firewall-cmd --get-active-zonesPrzykładowe dane wyjściowe:
public
interfaces: eth0Krok 4: Zmiana strefy domyślnej
Przykład 1 — Ustawienie strefy domyślnej na public (Zalecane dla VPS/Dedicated Servers)
Dla większości serwerów skierowanych na Internet, public jest odpowiednią strefą domyślną. Stosuje konserwatywny poziom zaufania i zezwala tylko na wyraźnie dozwolony ruch:
sudo firewall-cmd --set-default-zone=publicSprawdź zmianę:
sudo firewall-cmd --get-default-zoneOczekiwane dane wyjściowe:
publicPrzykład 2 — Ustawienie strefy domyślnej na home
Jeśli Twój serwer działa w zaufanej sieci prywatnej (takiej jak domowe laboratorium lub wewnętrzne środowisko programistyczne), strefa home umożliwia bardziej permisywną komunikację między zaufanymi hostami:
sudo firewall-cmd --set-default-zone=homeSprawdź:
sudo firewall-cmd --get-default-zoneOczekiwane dane wyjściowe:
homePrzykład 3 — Ustawienie strefy domyślnej na work
Dla serwerów w sieci korporacyjnej lub roboczej, gdzie umiarkowane zaufanie jest odpowiednie:
sudo firewall-cmd --set-default-zone=workSprawdź:
sudo firewall-cmd --get-default-zoneOczekiwane dane wyjściowe:
workKrok 5: Zarządzanie usługami za pomocą Firewalld
Firewalld zawiera bibliotekę wstępnie zdefiniowanych definicji usług, które mapują nazwy usług na odpowiadające im porty i protokoły. To znacznie ułatwia zarządzanie regułami na podstawie intencji zamiast surowych numerów portów.
Wyświetl listę wszystkich wstępnie zdefiniowanych usług
sudo firewall-cmd --get-servicesZezwól na usługę w strefie
Aby zezwolić na ruch HTTP (port 80/TCP) w strefie public na stałe:
sudo firewall-cmd --zone=public --add-service=http --permanentAby zezwolić na ruch HTTPS (port 443/TCP):
sudo firewall-cmd --zone=public --add-service=https --permanentAby zezwolić na SSH (port 22/TCP) — zawsze upewnij się, że jest to dozwolone przed wprowadzeniem innych zmian:
sudo firewall-cmd --zone=public --add-service=ssh --permanentZastosuj zmiany poprzez przeładowanie Firewalld
Flaga --permanent zapisuje regułę w konfiguracji trwałej, ale nie stosuje jej natychmiast do działającej zapory sieciowej. Zawsze przeładuj po wprowadzeniu zmian trwałych:
sudo firewall-cmd --reloadSprawdź usługi w strefie
sudo firewall-cmd --zone=public --list-servicesPrzykładowe dane wyjściowe:
dhcpv6-client http https sshUsuń usługę ze strefy
Aby usunąć HTTPS ze strefy public:
sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reloadKrok 6: Bezpośrednie zarządzanie portami
W przypadkach, gdy usługa nie ma wstępnie zdefiniowanej definicji Firewalld, możesz bezpośrednio otworzyć lub zamknąć określone porty.
Otwórz określony port
Aby otworzyć port 8080 przez TCP w strefie public:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reloadAby otworzyć port UDP (np. port 53 dla DNS):
sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reloadAby otworzyć zakres portów (np. 6000–6100 TCP):
sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reloadZamknij określony port
Aby zamknąć port 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reloadWyświetl listę wszystkich otwartych portów w strefie
sudo firewall-cmd --zone=public --list-portsKrok 7: Zaawansowana konfiguracja z bogatymi regułami
Bogate reguły dają Ci szczegółową, warunkową kontrolę nad ruchem — znacznie poza tym, co pozwalają proste reguły usług lub portów. Obsługują filtrowanie według źródłowego adresu IP, docelowego adresu IP, protokołu, portu i akcji (accept, reject, drop, log).
Składnia bogatej reguły
rule [family="<ipv4|ipv6>"]
[source address="<IP/CIDR>"]
[destination address="<IP/CIDR>"]
[service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
[log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
[accept|reject|drop]Przykład 1 — Zezwól na SSH tylko z określonego adresu IP
To jest jedna z najważniejszych konfiguracji bezpieczeństwa dla każdego zdalnego serwera. Jeśli zarządzasz serwerem ze stałego adresu IP, ogranicz dostęp SSH wyłącznie do tego adresu IP:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reloadPrzykład 2 — Zablokuj cały ruch z określonego adresu IP
Aby całkowicie zablokować adres IP, który generuje złośliwy ruch:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadPrzykład 3 — Zezwól na HTTP z określonej podsieci
Aby zezwolić na ruch HTTP tylko z zaufanej podsieci wewnętrznej (np. 192.168.1.0/24):
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reloadPrzykład 4 — Ogranicz szybkość połączeń SSH, aby zapobiec atakom brute force
Rejestruj i ogranicz próby połączenia SSH, aby zmniejszyć ekspozycję na ataki brute-force:
sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reloadPrzykład 5 — Zezwól na określony port z określonego adresu IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reloadWyświetl listę wszystkich bogatych reguł w strefie
sudo firewall-cmd --zone=public --list-rich-rulesUsuń bogatą regułę
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadKrok 8: Monitorowanie i audyt zapory sieciowej
Regularne przeglądanie konfiguracji zapory sieciowej jest niezbędne do utrzymania silnej postawy bezpieczeństwa. Firewalld udostępnia kilka poleceń do inspekcji bieżącego stanu reguł.
Wyświetl pełną konfigurację dla strefy domyślnej
sudo firewall-cmd --list-allPrzykładowe dane wyjściowe:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="203.0.113.50" service name="ssh" acceptWyświetl konfigurację dla wszystkich stref
sudo firewall-cmd --list-all-zonesWyświetl konfigurację dla określonej strefy
sudo firewall-cmd --zone=dmz --list-allSprawdź, czy określona usługa jest dozwolona
sudo firewall-cmd --zone=public --query-service=httpSprawdź, czy określony port jest otwarty
sudo firewall-cmd --zone=public --query-port=8080/tcpKrok 9: Reguły czasu wykonywania a reguły trwałe — zrozumienie różnicy
Firewalld działa z dwoma odrębnymi warstwami konfiguracji:
| Warstwa | Flaga | Trwałość | Przypadek użycia |
|---|---|---|---|
| Czas wykonywania | *(brak flagi)* | Utracone przy przeładowaniu/ponownym uruchomieniu | Tymczasowe testowanie reguł |
| Trwałe | --permanent | Przetrwaj przeładowanie i ponowne uruchomienie | Konfiguracje produkcyjne |
Przepływ pracy najlepszych praktyk
- Najpierw przetestuj regułę w czasie wykonywania (bez
--permanent), aby sprawdzić, czy działa zgodnie z oczekiwaniami - Dodaj regułę na stałe po potwierdzeniu
- Przeładuj Firewalld, aby zsynchronizować konfiguracje czasu wykonywania i trwałe
# Step 1: Test at runtime
sudo firewall-cmd --zone=public --add-service=http
# Step 2: Verify it works as expected, then make it permanent
sudo firewall-cmd --zone=public --add-service=http --permanent
# Step 3: Reload to sync
sudo firewall-cmd --reloadAlternatywnie zastosuj regułę trwałą i natychmiast przeładuj w jednym przepływie pracy:
sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reloadKrok 10: Przypisywanie interfejsów sieciowych do stref
Jeśli Twój serwer ma wiele interfejsów sieciowych (powszechne na Dedicated Servers z publicznymi i prywatnymi kartami sieciowymi), możesz przypisać każdy interfejs do innej strefy z różnymi poziomami zaufania.
Przypisz interfejs do strefy
sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reloadZmień strefę interfejsu
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reloadUsuń interfejs ze strefy
sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reloadKrok 11: Włączanie maskowania IP i przekierowywania portów
Dla serwerów działających jako bramy lub uruchamiających NAT (Network Address Translation), Firewalld natywnie obsługuje maskowanie i przekierowywanie portów.
Włącz maskowanie (NAT)
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reloadPrzekieruj port (np. Przekieruj zewnętrzny port 80 na wewnętrzny port 8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reloadPrzekieruj ruch na inny host
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reloadPraktyczne konfiguracje bezpieczeństwa dla serwerów AlexHost
Jeśli prowadzisz serwer internetowy, serwer bazy danych lub serwer aplikacji na infrastrukturze AlexHost, oto zalecane konfiguracje Firewalld linii bazowej:
Bazowa konfiguracja serwera internetowego
# Allow SSH (restrict to your IP in production)
sudo firewall-cmd --zone=public --add-service=ssh --permanent
# Allow HTTP and HTTPS
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# Reload to apply
sudo firewall-cmd --reload
# Verify
sudo firewall-cmd --list-all> Pro Tip: Połącz konfigurację zapory sieciowej z ważnym Certyfikatem SSL, aby upewnić się, że cały ruch internetowy jest szy
