15%

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
01.11.2024

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

Lub na nowszych wersjach przy użyciu 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 rozruchu 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 swój własny zestaw reguł, które określają, jaki ruch jest dozwolony lub zabroniony.

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 wiadomością ICMP
publicNiskiDomyślna strefa dla niezaufanych sieci publicznych
externalNiskiDla interfejsów skierowanych na zewnątrz z maskingiem NAT
dmzŚredniSerwery dostępne z zewnątrz, ale izolowane wewnętrznie
workŚrednio-wysokiSieci robocze z umiarkowanym zaufaniem
homeWysokiSieci domowe, gdzie inne hosty są zaufane
internalWysokiSieci wewnętrzne, podobne do domu
trustedNajwyższyWszystkie połączenia są akceptowane

Sprawdź bieżącą strefę domyślną

sudo firewall-cmd --get-default-zone

Wyświetl listę wszystkich dostępnych stref

sudo firewall-cmd --get-zones

Wyświetl aktualnie aktywne strefy i ich interfejsy

sudo firewall-cmd --get-active-zones

Przykładowe dane wyjściowe:

public
  interfaces: eth0

Krok 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=public

Sprawdź zmianę:

sudo firewall-cmd --get-default-zone

Oczekiwane dane wyjściowe:

public

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

Sprawdź:

sudo firewall-cmd --get-default-zone

Oczekiwane dane wyjściowe:

home

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

Sprawdź:

sudo firewall-cmd --get-default-zone

Oczekiwane dane wyjściowe:

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

Sprawdź usługi w strefie

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

Przykładowe dane wyjściowe:

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: 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 --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

Zamknij określony port

Aby zamknąć port 8080:

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

Wyświetl listę wszystkich otwartych portów w strefie

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

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

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

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

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

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

Wyświetl listę wszystkich bogatych reguł w strefie

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

Usuń bogatą regułę

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

Przykł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" 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 czasu wykonywania a reguły trwałe — zrozumienie różnicy

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

WarstwaFlagaTrwałośćPrzypadek użycia
Czas wykonywania*(brak flagi)*Utracone przy przeładowaniu/ponownym uruchomieniuTymczasowe testowanie reguł
Trwałe--permanentPrzetrwaj przeładowanie i ponowne uruchomienieKonfiguracje produkcyjne

Przepływ pracy najlepszych praktyk

  1. Najpierw przetestuj regułę w czasie wykonywania (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 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 --reload

Alternatywnie zastosuj regułę trwałą 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 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 --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 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 --reload

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

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

Praktyczne 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

15%

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