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 uruchamiasz projekt osobisty, aplikację biznesową czy produkcyjny serwer WWW, prawidłowo skonfigurowana zapora sieciowa jest Twoją pierwszą i najkrytyczniejszą 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 zaawansowanych reguł oraz monitorowanie zapory w czasie rzeczywistym. Jeśli hostujesz na VPS lub Dedicated Server z AlexHost, ten przewodnik pomoże Ci zabezpieczyć swoje środowisko i utrzymać silną, adaptacyjną postawę bezpieczeństwa.
Co to jest Firewalld i dlaczego powinieneś go używać?
Firewalld to dynamiczny demon zarządzania zaporą sieciową dostępny na większości głównych dystrybucji Linuksa, w tym CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux, a coraz częściej również na 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 restartowania zapory lub przerywania istniejących połączeń
- Abstrakcja usług — zarządzaj ruchem według nazwy usługi (np.
http,ssh) zamiast surowych numerów portów - Reguły zaawansowane — pisz złożone, warunkowe reguły kierujące się na określone IP, protokoły i akcje
- Integracja D-Bus — umożliwia innym aplikacjom i usługom programową interakcję z zaporą
- 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 (utrzymuj ją otwartą przez cały czas — będziesz modyfikować reguły zapory)
> Krytyczne ostrzeżenie: Zawsze upewnij się, że SSH (port 22 domyślnie) jest jawnie dozwolony w regułach zapory 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 używając DNF:
sudo dnf install firewalld -yNa Fedora
sudo dnf install firewalld -y
Na 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 starcie 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 własny zestaw reguł, które określają, jaki ruch jest dozwolony lub zakazany.

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 komunikatem ICMP |
public | Niski | Domyślna strefa dla niezaufanych sieci publicznych |
external | Niski | Dla interfejsów skierowanych na zewnątrz z maskaradą NAT |
dmz | Średni | Serwery dostępne z zewnątrz, ale izolowane wewnętrznie |
work | Średnio-wysoki | Sieci robocze ze średnim poziomem zaufania |
home | Wysoki | Sieci domowe, gdzie inne hosty są zaufane |
internal | Wysoki | Sieci wewnętrzne, podobne do domowych |
trusted | Najwyższy | Wszystkie połączenia są akceptowane |
Sprawdzenie bieżącej strefy domyślnej
sudo firewall-cmd --get-default-zone
Lista wszystkich dostępnych stref
sudo firewall-cmd --get-zones
Wyświetlanie aktualnie aktywnych stref i ich interfejsów
sudo firewall-cmd --get-active-zonesPrzykładowe wyjście:
public
interfaces: eth0
Krok 4: Zmiana strefy domyślnej
Przykład 1 — Ustawienie strefy domyślnej na public (Zalecane dla VPS/Serwerów Dedykowanych)
Dla większości serwerów dostępnych w Internecie, public jest odpowiednią strefą domyślną. Stosuje konserwatywny poziom zaufania i zezwala tylko na wyraźnie dozwolony ruch:
sudo firewall-cmd --set-default-zone=publicZweryfikuj zmianę:
sudo firewall-cmd --get-default-zoneOczekiwane wyjście:
public
Przykład 2 — Ustawienie strefy domyślnej na home
Jeśli Twój serwer działa w zaufanej sieci prywatnej (takiej jak laboratorium domowe lub wewnętrzne środowisko programistyczne), strefa home umożliwia bardziej permisywną komunikację między zaufanymi hostami:
sudo firewall-cmd --set-default-zone=homeZweryfikuj:
sudo firewall-cmd --get-default-zoneOczekiwane wyjście:
homePrzykład 3 — Ustawienie strefy domyślnej na work
Dla serwerów w sieci korporacyjnej lub biznesowej, gdzie umiarkowane zaufanie jest odpowiednie:
sudo firewall-cmd --set-default-zone=workZweryfikuj:
sudo firewall-cmd --get-default-zoneOczekiwane wyjście:
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. Ułatwia to znacznie zarządzanie regułami na podstawie intencji, a nie surowych numerów portów.
Lista 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 przez przeładowanie Firewalld
Flaga --permanent zapisuje regułę w konfiguracji trwałej, ale nie stosuje jej natychmiast do działającego zapory. Zawsze przeładuj po wprowadzeniu zmian trwałych:
sudo firewall-cmd --reloadWeryfikuj usługi w strefie
sudo firewall-cmd --zone=public --list-servicesPrzykładowe wyjście:
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: Zarządzanie portami bezpośrednio
W przypadkach, gdy usługa nie ma wstępnie zdefiniowanej definicji Firewalld, możesz otwierać lub zamykać określone porty bezpośrednio.
Otwieranie określonego portu
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 --reloadZamykanie określonego portu
Aby zamknąć port 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reloadWyświetlanie wszystkich otwartych portów w strefie
sudo firewall-cmd --zone=public --list-portsStep 7: Advanced Configuration with Rich Rules
Rich rules dają ci szczegółową, warunkową kontrolę nad ruchem — znacznie wykraczającą poza to, co pozwalają proste reguły usług lub portów. Obsługują filtrowanie według źródłowego IP, docelowego IP, protokołu, portu i akcji (accept, reject, drop, log).
Składnia Rich Rule
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 jedna z najważniejszych konfiguracji bezpieczeństwa dla każdego zdalnego serwera. Jeśli zarządzasz serwerem z ustalonego adresu IP, ogranicz dostęp SSH wyłącznie do tego 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 generujący 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 wewnętrznej podsieci (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ć narażenie 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 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 wszystkie rich rules w strefie
sudo firewall-cmd --zone=public --list-rich-rulesUsuń rich rule
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
Regularne przeglądanie konfiguracji zapory jest niezbędne do utrzymania silnej postawy bezpieczeństwa. Firewalld udostępnia kilka poleceń do sprawdzenia bieżącego stanu reguł.
Wyświetl pełną konfigurację dla strefy domyślnej
sudo firewall-cmd --list-allPrzykładowe wyjście:
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 Runtime vs. Permanent — Zrozumienie różnicy
Firewalld działa z dwoma odrębnymi warstwami konfiguracji:
| Warstwa | Flaga | Trwałość | Przypadek użycia |
|---|---|---|---|
| Runtime | *(brak flagi)* | Utracone przy przeładowaniu/restarcie | Tymczasowe testowanie reguł |
| Permanent | --permanent | Przetrwaje przeładowanie i restart | Konfiguracje produkcyjne |
Najlepszy przepływ pracy
- Najpierw przetestuj regułę w runtime (bez
--permanent), aby sprawdzić, czy działa zgodnie z oczekiwaniami - Dodaj regułę na stałe po potwierdzeniu
- Przeładuj Firewalld, aby zsynchronizować konfiguracje runtime i permanent
# 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łę permanent 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 Serwerach dedykowanych 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 przekierowania portów
W przypadku serwerów działających jako bramy lub uruchamiających NAT (Network Address Translation), Firewalld natywnie obsługuje maskowanie i przekierowanie portów.
Włączanie maskowania (NAT)
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reloadPrzekierowanie portu (np. przekierowanie portu zewnętrznego 80 na port wewnętrzny 8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reloadPrzekierowanie ruchu 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 uruchamiasz serwer WWW, serwer bazy danych lub serwer aplikacji na infrastrukturze AlexHost, oto zalecane konfiguracje Firewalld:
Bazowa konfiguracja serwera WWW
# 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 z ważnym certyfikatem SSL, aby zapewnić szyfrowanie całego ruchu internetowego end-to-end. AlexHost oferuje certyfikaty SSL dla wszystkich środowisk hostingowych.
Bazowa konfiguracja serwera bazy danych (MySQL/MariaDB)
# Allow MySQL only from a specific application server 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
# Block direct MySQL access from the public internet
sudo firewall-cmd --zone=public --remove-service=mysql --permanent 2>/dev/null
sudo firewall-cmd --reloadBazowa konfiguracja serwera cPanel/WHM
Jeśli używasz VPS z cPanel, musisz otworzyć porty wymagane przez cPanel i WHM:
# Web traffic
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
# cPanel/WHM ports
sudo firewall-cmd --zone=public --add-port=2082/tcp --permanent # cPanel HTTP
sudo firewall-cmd --zone=public --add-port=2083/tcp --permanent # cPanel HTTPS
sudo firewall-cmd --zone=public --add-port=2086/tcp --permanent # WHM HTTP
sudo firewall-cmd --zone=public --add-port=2087/tcp --permanent # WHM HTTPS
sudo firewall-cmd --zone=public --add-port=2095/tcp --permanent # Webmail HTTP
sudo firewall-cmd --zone=public --add-port=2096/tcp --permanent # Webmail HTTPS
# Mail ports
sudo firewall-cmd --zone=public --add-service=smtp --permanent
sudo firewall-cmd --zone=public --add-service=imaps --permanent
sudo firewall-cmd --zone=public --add-service=pop3s --permanent
sudo firewall-cmd --reloadRozwiązywanie typowych problemów z Firewalld
Problem 1: Firewalld nie uruchamia się
Sprawdź konflikty z innymi narzędziami zapory:
sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalldProblem 2: Reguły nie utrzymują się po ponownym uruchomieniu
Upewnij się, że użyłeś flagi --permanent i przeładowałeś:
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reloadPolecenie --runtime-to-permanent zapisuje wszystkie bieżące reguły czasu wykonywania do konfiguracji trwałej.
Problem 3: Zablokowany dostęp SSH
Jeśli przypadkowo zablokowałeś dostęp SSH, będziesz musiał uzyskać dostęp do serwera przez konsolę (dostępną przez panel kontrolny VPS AlexHost) i uruchomić:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
sudo firewall-cmd --reloadProblem 4: Sprawdzanie dzienników Firewalld
sudo journalctl -u firewalld -fLub sprawdź dziennik systemowy w poszukiwaniu komunikatów związanych z zaporą:
sudo grep -i firewall /var/log/messagesFirewalld – Szybki Przewodnik Referencyjny
| Zadanie | Polecenie |
|---|---|
| Sprawdź status | sudo systemctl status firewalld |
| Uruchom Firewalld | sudo systemctl start firewalld |
| Zatrzymaj Firewalld | sudo systemctl stop firewalld |
| Włącz przy starcie | sudo systemctl enable firewalld |
| Pobierz domyślną strefę | sudo firewall-cmd --get-default-zone |
| Wyświetl wszystkie strefy | sudo firewall-cmd --get-zones |
| Wyświetl aktywne strefy | sudo firewall-cmd --get-active-zones |
| Ustaw domyślną strefę | sudo firewall-cmd --set-default-zone=public |
| Dodaj usługę | sudo firewall-cmd --zone=public --add-service=http --permanent |
| Usuń usługę | sudo firewall-cmd --zone=public --remove-service=http --permanent |
| Otwórz port | sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent |
| Zamknij port | sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent |
| Wyświetl usługi | sudo firewall-cmd --zone=public --list-services |
| Wyświetl porty | sudo firewall-cmd --zone=public --list-ports |
| Wyświetl wszystkie reguły | sudo firewall-cmd --list-all |
| Dodaj regułę zaawansowaną | sudo firewall-cmd --zone=public --add-rich-rule='...' --permanent |
| Zapisz reguły czasu wykonywania | sudo firewall-cmd --runtime-to-permanent |
| Przeładuj Firewalld | sudo firewall-cmd --reload |
| Tryb paniki (zablokuj wszystko) | sudo firewall-cmd --panic-on |
| Wyłącz tryb paniki | sudo firewall-cmd --panic-off |
Podsumowanie
Firewalld to niezwykle wydajne i elastyczne narzędzie do zarządzania zaporą sieciową, które daje administratorom systemów Linux precyzyjną, dynamiczną kontrolę nad ruchem sieciowym. Opanowując strefy, usługi, reguły portów i reguły zaawansowane, możesz zbudować warstwową, adaptacyjną architekturę bezpieczeństwa, która chroni Twój serwer przed nieautoryzowanym dostępem, atakami brute-force i zagrożeniami na poziomie sieci.
Kluczowe zasady do zapamiętania:
- Zawsze zezwól na SSH przed włączeniem zapory, aby uniknąć zablokowania się
- Użyj flagi
--permanentdla wszystkich reguł produkcyjnych i zawsze postępuj zgodnie z--reload - Ogranicz wrażliwe usługi (SSH, bazy danych, panele administracyjne) do określonych zaufanych adresów IP, używając reguł zaawansowanych
- Regularnie przeglądaj reguły zapory — Twoja postawa bezpieczeństwa powinna ewoluować wraz ze zmianami infrastruktury
- Najpierw przetestuj reguły w czasie rzeczywistym, a następnie uczyń je trwałymi po weryfikacji
Niezależnie od tego, czy zarządzasz jednym VPS czy flotą Serwerów Dedykowanych, AlexHost zapewnia infrastrukturę, wydajność i pełny dostęp root potrzebny do wdrożenia konfiguracji bezpieczeństwa klasy enterprise. Połącz konfigurację Firewalld z Certyfikatami SSL dla szyfrowanej komunikacji i odkryj Panele Sterowania VPS dla usprawnionego zarządzania serwerem — wszystko dostępne na zaufanej, wysokowydajnej platformie AlexHost.
na wszystkich usługach hostingowych