Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Bezpieczeństwo Linux

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 sudo do 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 -y

Lub na nowszych wersjach używając DNF:

sudo dnf install firewalld -y

Na 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 firewalld

Sprawdź, czy usługa działa prawidłowo:

sudo systemctl status firewalld

Powinieneś 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

StrefaPoziom zaufaniaTypowy przypadek użycia
dropNajniższyWszystkie połączenia przychodzące są odrzucane bez odpowiedzi
blockBardzo niskiPołączenia przychodzące są odrzucane z komunikatem ICMP
publicNiskiDomyślna strefa dla niezaufanych sieci publicznych
externalNiskiDla interfejsów skierowanych na zewnątrz z maskaradą NAT
dmzŚredniSerwery dostępne z zewnątrz, ale izolowane wewnętrznie
workŚrednio-wysokiSieci robocze ze średnim poziomem zaufania
homeWysokiSieci domowe, gdzie inne hosty są zaufane
internalWysokiSieci wewnętrzne, podobne do domowych
trustedNajwyższyWszystkie 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-zones

Przykł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=public

Zweryfikuj zmianę:

sudo firewall-cmd --get-default-zone

Oczekiwane 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=home

Zweryfikuj:

sudo firewall-cmd --get-default-zone

Oczekiwane wyjście:

home

Przykł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=work

Zweryfikuj:

sudo firewall-cmd --get-default-zone

Oczekiwane wyjście:

work

Krok 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-services

Zezwó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 --permanent

Aby zezwolić na ruch HTTPS (port 443/TCP):

sudo firewall-cmd --zone=public --add-service=https --permanent

Aby 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 --permanent

Zastosuj 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 --reload

Weryfikuj usługi w strefie

sudo firewall-cmd --zone=public --list-services

Przykładowe wyjście:

dhcpv6-client http https ssh

Usuń usługę ze strefy

Aby usunąć HTTPS ze strefy public:

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

Krok 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 --reload

Aby otworzyć port UDP (np. port 53 dla DNS):

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Aby otworzyć zakres portów (np. 6000–6100 TCP):

sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reload

Zamykanie określonego portu

Aby zamknąć port 8080:

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Wyświetlanie wszystkich otwartych portów w strefie

sudo firewall-cmd --zone=public --list-ports

Step 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 --reload

Przykł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 --reload

Przykł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 --reload

Przykł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 --reload

Przykł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 --reload

Wyświetl wszystkie rich rules w strefie

sudo firewall-cmd --zone=public --list-rich-rules

Usuń rich rule

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Krok 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-all

Przykł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" accept

Wyświetl konfigurację dla wszystkich stref

sudo firewall-cmd --list-all-zones

Wyświetl konfigurację dla określonej strefy

sudo firewall-cmd --zone=dmz --list-all

Sprawdź, czy określona usługa jest dozwolona

sudo firewall-cmd --zone=public --query-service=http

Sprawdź, czy określony port jest otwarty

sudo firewall-cmd --zone=public --query-port=8080/tcp

Krok 9: Reguły Runtime vs. Permanent — Zrozumienie różnicy

Firewalld działa z dwoma odrębnymi warstwami konfiguracji:

WarstwaFlagaTrwałośćPrzypadek użycia
Runtime*(brak flagi)*Utracone przy przeładowaniu/restarcieTymczasowe testowanie reguł
Permanent--permanentPrzetrwaje przeładowanie i restartKonfiguracje produkcyjne

Najlepszy przepływ pracy

  1. Najpierw przetestuj regułę w runtime (bez --permanent), aby sprawdzić, czy działa zgodnie z oczekiwaniami
  2. Dodaj regułę na stałe po potwierdzeniu
  3. 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 --reload

Alternatywnie zastosuj regułę permanent i natychmiast przeładuj w jednym przepływie pracy:

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

Krok 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 --reload

Zmień strefę interfejsu

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload

Usuń interfejs ze strefy

sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reload

Krok 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 --reload

Przekierowanie 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 --reload

Przekierowanie 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 --reload

Praktyczne 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 --reload

Bazowa 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 --reload

Rozwią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 firewalld

Problem 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 --reload

Polecenie --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 --reload

Problem 4: Sprawdzanie dzienników Firewalld

sudo journalctl -u firewalld -f

Lub sprawdź dziennik systemowy w poszukiwaniu komunikatów związanych z zaporą:

sudo grep -i firewall /var/log/messages

Firewalld – Szybki Przewodnik Referencyjny

ZadaniePolecenie
Sprawdź statussudo systemctl status firewalld
Uruchom Firewalldsudo systemctl start firewalld
Zatrzymaj Firewalldsudo systemctl stop firewalld
Włącz przy starciesudo systemctl enable firewalld
Pobierz domyślną strefęsudo firewall-cmd --get-default-zone
Wyświetl wszystkie strefysudo firewall-cmd --get-zones
Wyświetl aktywne strefysudo 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 portsudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
Zamknij portsudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
Wyświetl usługisudo firewall-cmd --zone=public --list-services
Wyświetl portysudo firewall-cmd --zone=public --list-ports
Wyświetl wszystkie regułysudo firewall-cmd --list-all
Dodaj regułę zaawansowanąsudo firewall-cmd --zone=public --add-rich-rule='...' --permanent
Zapisz reguły czasu wykonywaniasudo firewall-cmd --runtime-to-permanent
Przeładuj Firewalldsudo firewall-cmd --reload
Tryb paniki (zablokuj wszystko)sudo firewall-cmd --panic-on
Wyłącz tryb panikisudo 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:

  1. Zawsze zezwól na SSH przed włączeniem zapory, aby uniknąć zablokowania się
  2. Użyj flagi --permanent dla wszystkich reguł produkcyjnych i zawsze postępuj zgodnie z --reload
  3. Ogranicz wrażliwe usługi (SSH, bazy danych, panele administracyjne) do określonych zaufanych adresów IP, używając reguł zaawansowanych
  4. Regularnie przeglądaj reguły zapory — Twoja postawa bezpieczeństwa powinna ewoluować wraz ze zmianami infrastruktury
  5. 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.