Jak skonfigurować reguły zapory sieciowej: kompletny przewodnik techniczny
Reguła firewalla to wpis polityki, który instruuje silnik firewalla, aby zezwalał, odmawiał lub rejestrował ruch sieciowy na podstawie zdefiniowanych kryteriów, takich jak źródłowy/docelowy adres IP, numer portu, protokół transportowy i kierunek ruchu. Poprawnie skonfigurowane reguły firewalla stanowią podstawową warstwę egzekwowania między infrastrukturą a publicznym internetem, co czyni je najważniejszą kontrolą bezpieczeństwa na każdym serwerze lub urządzeniu sieciowym.
Ten przewodnik omawia architekturę reguł firewalla, UFW na Linux, firewalld, Windows Defender Firewall, nftables oraz praktyki operacyjne, które odróżniają środowisko zabezpieczone od błędnie skonfigurowanego.
Co faktycznie kontrolują reguły firewalla
Każda reguła w zestawie reguł firewalla jest oceniana względem pięciu podstawowych atrybutów pakietu, powszechnie nazywanych 5-krotką:
- Źródłowy adres IP — host lub podsieć źródłowa (np.
192.168.1.0/24) - Docelowy adres IP — docelowy host lub zakres
- Port źródłowy — port efemeryczny po stronie inicjującej
- Port docelowy — port usługi po stronie odbierającej (np.
443dla HTTPS,22dla SSH) - Protokół —
TCP,UDP,ICMPlub numer protokołu
Poza 5-krotką, firewalle stanowe śledzą również stan połączenia (NEW, ESTABLISHED, RELATED, INVALID), co pozwala im zezwalać na ruch powrotny dla połączeń wychodzących bez konieczności pisania jawnych reguł przychodzących dla każdej odpowiedzi.
Firewalle stanowe a bezstanowe
| Funkcja | Stanowy | Bezstanowy |
|---|---|---|
| Śledzi stan połączenia | Tak | Nie |
| Automatycznie zezwala na ruch powrotny | Tak | Nie — wymaga jawnych reguł |
| Narzut wydajnościowy | Umiarkowany | Bardzo niski |
| Typowy przypadek użycia | Firewalle hostowe, NGFW | Routery rdzeniowe, wysokoprzepustowe ACL |
| Odporność na spoofing | Wysoka | Niska |
| Złożoność reguł | Niższa | Wyższa |
| Przykładowe narzędzia | iptables (conntrack), UFW, Windows Defender | AWS NACL, podstawowe ACL na Cisco IOS |
W praktycznie wszystkich wdrożeniach serwerowych — w tym Hosting VPS i Serwery Dedykowane — stanowy firewall hostowy jest właściwym domyślnym wyborem.
Przetwarzanie reguł firewalla: problem kolejności
Jednym z najczęstszych źródeł błędnej konfiguracji jest niezrozumienie kolejności reguł. Większość firewalli ocenia reguły od góry do dołu i stosuje pierwszą pasującą regułę, a następnie zatrzymuje przetwarzanie. Oznacza to:
- Szeroka reguła
ALLOWumieszczona powyżej konkretnej regułyDENYpo cichu ją nadpisze. - Reguła
DENY ALLna początku łańcucha blokuje wszystko, niezależnie od tego, co następuje po niej. - Zduplikowane lub przesłonięte reguły marnują cykle przetwarzania i powodują zamieszanie podczas audytu.
Najlepsza praktyka: Zawsze umieszczaj konkretne reguły przed ogólnymi. Umieszczaj jawne reguły DENY dla znanych złośliwych źródeł blisko góry, następnie konkretne reguły ALLOW dla zaufanych usług, i kończ każdy łańcuch domyślną polityką DENY.
Konfigurowanie reguł firewalla na Linux z UFW
UFW (Uncomplicated Firewall) to frontend dla iptables i nftables w systemach opartych na Debian/Ubuntu. Abstrahuje składnię łańcuchów niskiego poziomu do czytelnych dla człowieka poleceń, zachowując pełną kontrolę nad filtrowaniem portów, protokołów, IP i interfejsów.
Krok 1: Instalacja i włączenie UFW
UFW jest preinstalowany na Ubuntu. Przed włączeniem sprawdź jego status:
sudo ufw status verboseJeśli jest nieaktywny, włącz go:
sudo ufw enableKrytyczne ostrzeżenie: Jeśli jesteś połączony przez SSH i nie zezwoliłeś jeszcze na port 22, włączenie UFW zablokuje Ci dostęp. Zawsze zezwalaj na SSH przed włączeniem firewalla na zdalnym serwerze.
Krok 2: Ustawienie domyślnych polityk
Domyślne polityki określają, co dzieje się z ruchem, który nie pasuje do żadnej jawnej reguły. Bezpieczna linia bazowa to:
sudo ufw default deny incoming
sudo ufw default allow outgoingBlokuje to wszystkie niechciane połączenia przychodzące, jednocześnie zezwalając na cały ruch wychodzący. Jeśli Twoja polityka bezpieczeństwa wymaga filtrowania ruchu wychodzącego (np. zapobiegania eksfiltracji danych lub wywołaniom zwrotnym C2), zmień domyślne ustawienie dla ruchu wychodzącego:
sudo ufw default deny outgoingNastępnie jawnie zezwól tylko na te miejsca docelowe ruchu wychodzącego, których potrzebuje Twoja aplikacja.
Krok 3: Zezwalanie na konkretne usługi i porty
UFW obsługuje nazwy usług z /etc/services lub jawne numery portów:
# Allow SSH by service name
sudo ufw allow ssh
# Allow HTTP and HTTPS
sudo ufw allow http
sudo ufw allow https
# Allow a custom application port
sudo ufw allow 8080/tcp
# Allow a UDP service (e.g., DNS resolver)
sudo ufw allow 53/udpAby zezwolić na zakres portów (np. pasywne FTP):
sudo ufw allow 49152:65535/tcpKrok 4: Ograniczenie dostępu do konkretnych źródłowych adresów IP
Udostępnianie portów administracyjnych dla 0.0.0.0/0 jest główną przyczyną kompromitacji przez ataki brute-force. Ogranicz SSH do znanego adresu IP zarządzania:
sudo ufw allow from 203.0.113.50 to any port 22 proto tcpAby zezwolić całej podsieci zarządzania:
sudo ufw allow from 10.0.0.0/8 to any port 22 proto tcpKrok 5: Blokowanie ruchu z konkretnych adresów IP lub podsieci
Zablokuj znany złośliwy adres IP:
sudo ufw deny from 198.51.100.77Zablokuj całą podsieć (np. blokadę geograficzną lub zakres abuzywnego ASN):
sudo ufw deny from 198.51.100.0/24Przypadek brzegowy: Reguły UFW deny wysyłają odpowiedź TCP RST lub ICMP port-unreachable, co potwierdza istnienie hosta. Użyj reject, aby zamiast tego po cichu odrzucać pakiety:
sudo ufw reject from 198.51.100.0/24Krok 6: Sprawdzanie aktywnych reguł
sudo ufw status numberedFlaga numbered przypisuje indeks do każdej reguły, który jest wymagany do celowanego usuwania:
[ 1] 22/tcp ALLOW IN 203.0.113.50
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN AnywhereAby uzyskać pełne szczegółowe dane wyjściowe, w tym domyślne polityki i powiązania interfejsów:
sudo ufw status verboseKrok 7: Usuwanie reguł
Usuń według numeru reguły (preferowane — unika niejednoznaczności):
sudo ufw delete 3Usuń według specyfikacji reguły:
sudo ufw delete allow 8080/tcpKrok 8: Przeładowanie i utrwalanie reguł
Reguły UFW są automatycznie utrwalane po ponownym uruchomieniu. Po zbiorczych zmianach przeładuj bez przerywania istniejących połączeń:
sudo ufw reloadAby całkowicie zresetować wszystkie reguły i zacząć od nowa:
sudo ufw resetZaawansowane UFW: Profile aplikacji
UFW obsługuje nazwane profile aplikacji przechowywane w /etc/ufw/applications.d/. Pozwala to definiować reguły wieloportowe pod jedną nazwą:
sudo ufw app list
sudo ufw allow 'Nginx Full'
sudo ufw app info 'Nginx Full'Tworzenie niestandardowego profilu dla API Node.js:
[NodeAPI]
title=Node.js API Server
description=Custom Node.js application
ports=3000,3001/tcpNastępnie zastosuj go:
sudo ufw allow NodeAPIKonfigurowanie reguł firewalla za pomocą firewalld (RHEL/CentOS/Fedora)
firewalld używa modelu opartego na strefach zamiast płaskiego zestawu reguł. Każdy interfejs sieciowy jest przypisany do strefy (np. public, internal, dmz), a reguły są stosowane per strefa. Jest to architektonicznie bardziej elastyczne dla serwerów wieloadresowych.
Podstawowe operacje firewalld
# Check status
sudo firewall-cmd --state
# List all active zones and their interfaces
sudo firewall-cmd --get-active-zones
# List rules in the public zone
sudo firewall-cmd --zone=public --list-allZezwalanie na usługi i ich usuwanie
# Allow HTTPS permanently
sudo firewall-cmd --zone=public --add-service=https --permanent
# Allow a custom port
sudo firewall-cmd --zone=public --add-port=8443/tcp --permanent
# Remove a service
sudo firewall-cmd --zone=public --remove-service=http --permanent
# Reload to apply permanent changes
sudo firewall-cmd --reloadReguły rozszerzone dla polityk specyficznych dla IP
Reguły rozszerzone firewalld zapewniają szczegółowość iptables z bardziej czytelną składnią:
# Allow SSH only from a specific IP
sudo firewall-cmd --zone=public
--add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept'
--permanent
# Block all traffic from a subnet
sudo firewall-cmd --zone=public
--add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" drop'
--permanent
sudo firewall-cmd --reloadKonfigurowanie reguł firewalla za pomocą nftables
nftables to nowoczesne zastępstwo dla iptables, oferujące ujednolicone środowisko dla filtrowania IPv4, IPv6, ARP i mostów ze znacznie lepszą wydajnością i atomowym zastępowaniem reguł.
Podstawowy zestaw reguł nftables
# Flush existing ruleset
sudo nft flush ruleset
# Create a basic filtering table
sudo nft add table inet filter
# Add input, forward, and output chains
sudo nft add chain inet filter input { type filter hook input priority 0 ; policy drop ; }
sudo nft add chain inet filter forward { type filter hook forward priority 0 ; policy drop ; }
sudo nft add chain inet filter output { type filter hook output priority 0 ; policy accept ; }
# Allow established and related connections
sudo nft add rule inet filter input ct state established,related accept
# Allow loopback
sudo nft add rule inet filter input iif lo accept
# Allow SSH from a specific IP
sudo nft add rule inet filter input ip saddr 203.0.113.50 tcp dport 22 accept
# Allow HTTP and HTTPS from anywhere
sudo nft add rule inet filter input tcp dport { 80, 443 } acceptAby utrwalić zestaw reguł, zapisz go do domyślnego pliku konfiguracyjnego:
sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftablesKonfigurowanie reguł firewalla w systemie Windows
Windows Defender Firewall z zaawansowanymi zabezpieczeniami zapewnia zarówno interfejsy GUI, jak i wiersza poleceń (netsh, PowerShell) do zarządzania regułami.
Korzystanie z GUI
- Otwórz Windows Defender Firewall z zaawansowanymi zabezpieczeniami przez
wf.msc. - Wybierz Reguły przychodzące lub Reguły wychodzące w lewym panelu.
- Kliknij Nowa reguła w prawym panelu.
- Wybierz typ reguły:
- Port — filtruj według numeru portu TCP/UDP
- Program — filtruj według ścieżki pliku wykonywalnego
- Predefiniowany — użyj wbudowanej definicji usługi Windows
- Niestandardowy — pełna kontrola nad wszystkimi parametrami
- Określ port lub program, wybierz Zezwól lub Blokuj, wybierz odpowiednie profile (Domena, Prywatny, Publiczny) i nazwij regułę.
Korzystanie z PowerShell (zalecane do automatyzacji)
# Allow inbound HTTPS
New-NetFirewallRule -DisplayName "Allow HTTPS Inbound" `
-Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow
# Allow inbound SSH (Windows OpenSSH)
New-NetFirewallRule -DisplayName "Allow SSH Inbound" `
-Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow `
-RemoteAddress 203.0.113.50
# Block inbound traffic from a specific IP
New-NetFirewallRule -DisplayName "Block Malicious IP" `
-Direction Inbound -RemoteAddress 198.51.100.77 -Action Block
# View all inbound rules
Get-NetFirewallRule -Direction Inbound | Select-Object DisplayName, Enabled, Action
# Remove a rule by name
Remove-NetFirewallRule -DisplayName "Allow HTTPS Inbound"Korzystanie z netsh (starsze, ale szeroko obsługiwane)
:: Allow inbound port 443
netsh advfirewall firewall add rule name="Allow HTTPS" protocol=TCP dir=in localport=443 action=allow
:: Block a specific IP
netsh advfirewall firewall add rule name="Block IP" dir=in remoteip=198.51.100.77 action=block
:: Delete a rule
netsh advfirewall firewall delete rule name="Allow HTTPS"Krytyczne pułapki i przypadki brzegowe reguł firewalla
Niejawne zezwolenie dla ruchu ESTABLISHED
W stanowych firewallach, brak jawnego zezwolenia na połączenia ESTABLISHED i RELATED w łańcuchu wejściowym spowoduje przerwanie wszystkich sesji inicjowanych wychodzących (np. apt update, curl, wyszukiwania DNS) nawet gdy łańcuch wyjściowy jest ustawiony na ACCEPT. Jest to najczęstsza błędna konfiguracja w surowych konfiguracjach iptables lub nftables.
# This rule MUST appear before any DROP rules in the input chain
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTParytety IPv6
Wielu administratorów skrupulatnie konfiguruje reguły IPv4 i całkowicie zapomina o IPv6. Jeśli Twój serwer ma adres IPv6 i obsługa IPv6 w UFW nie jest włączona, atakujący może ominąć wszystkie reguły IPv4, łącząc się przez ::. Sprawdź, czy /etc/default/ufw zawiera:
IPV6=yesInterfejs pętli zwrotnej
Zawsze jawnie zezwalaj na ruch na interfejsie pętli zwrotnej (lo). Wiele lokalnych usług (bazy danych, kolejki komunikatów, wewnętrzne API) komunikuje się przez 127.0.0.1 lub ::1. Blokowanie pętli zwrotnej po cichu przerywa komunikację między procesami.
sudo ufw allow in on lo
sudo ufw allow out on loOgraniczanie szybkości w celu zapobiegania atakom brute-force
UFW natywnie obsługuje ograniczanie szybkości połączeń, co jest niezbędne dla SSH i innych usług uwierzytelniania:
sudo ufw limit sshPozwala to na maksymalnie 6 prób połączenia na 30 sekund z jednego adresu IP przed wyzwoleniem automatycznej tymczasowej blokady — lekka alternatywa dla fail2ban w podstawowych wdrożeniach.
ICMP i ruch diagnostyczny
Blokowanie całego ICMP jest powszechną, ale kontrproduktywną praktyką. Przerywa ping, traceroute, wykrywanie MTU ścieżki i niektóre protokoły routingu. Właściwe podejście to zezwolenie na konkretne typy ICMP:
- Typ 0 (Echo Reply) i Typ 8 (Echo Request) — dla
ping - Typ 3 (Destination Unreachable) — dla wykrywania MTU ścieżki
- Typ 11 (Time Exceeded) — dla
traceroute
Zablokuj Typ 17 (Address Mask Request) i Typ 18 (Address Mask Reply), które nie mają żadnego uzasadnionego nowoczesnego zastosowania.
Reguły firewalla i środowiska hostingowe
Właściwa strategia firewalla zależy w dużej mierze od warstwy infrastruktury.
W przypadku Współdzielonego Hostingu WWW, firewall jest zarządzany na poziomie platformy przez dostawcę. Najemcy zazwyczaj konfigurują kontrole dostępu na poziomie aplikacji, a nie filtry pakietów na poziomie jądra.
Na VPS z cPanel, cPanel/WHM zawiera ConfigServer Security & Firewall (CSF), który opakowuje iptables interfejsem wysokiego poziomu, automatycznym wykrywaniem ataków brute-force i obsługą port knocking. CSF jest standardowym rozwiązaniem firewalla dla środowisk cPanel i powinien być używany zamiast surowego UFW w tych systemach.
Na niezarządzanym Hostingu VPS lub Serwerach Dedykowanych, masz pełną kontrolę nad firewallem jądra. To tutaj UFW, firewalld i nftables są odpowiednimi narzędziami. Linia bazowa hartowania powinna obejmować:
- Domyślna polityka odmawiania dla ruchu przychodzącego
- SSH ograniczony do znanych adresów IP zarządzania lub bramy VPN
- Wszystkie nieistotne porty zamknięte
- Ograniczanie szybkości na portach uwierzytelniania
- Rejestrowanie włączone dla odrzuconego ruchu
Jeśli uruchamiasz obciążenia GPU lub usługi wnioskowania ML na Hostingu GPU, zwróć szczególną uwagę na porty udostępniane przez notebooki Jupyter, TensorBoard i API obsługi modeli — są one często atakowane przez boty do kopania kryptowalut, które skanują w poszukiwaniu otwartych portów o wysokich numerach.
Lista kontrolna audytu i konserwacji reguł firewalla
Regularne audyty reguł są równie ważne jak wstępna konfiguracja. Reguły gromadzą się z czasem i stają się przestarzałe, tworząc niepotrzebną powierzchnię ataku.
Zadania audytu do wykonania kwartalnie:
- Uruchom
sudo ufw status numberedlub odpowiednik i przejrzyj każdą regułę względem bieżącego inwentarza usług - Usuń reguły dla wycofanych usług, starych adresów IP i tymczasowych wyjątków, które nigdy nie zostały wyczyszczone
- Sprawdź, czy domyślne polityki nadal są
deny incoming - Sprawdź, czy reguły IPv6 odzwierciedlają reguły IPv4
- Potwierdź, że rejestrowanie jest włączone i że dzienniki odrzuconego ruchu są pobierane przez Twój SIEM lub agregator dzienników
- Przetestuj reguły za pomocą
nmapz zewnętrznego hosta, aby zweryfikować, czy powierzchnia ataku odpowiada Twoim zamierzeniom
# Scan your own server from an external host to verify exposed ports
nmap -sS -sV -p 1-65535 --open YOUR_SERVER_IP- Sprawdź, czy reguły
ESTABLISHED/RELATEDsą obecne i poprawnie uporządkowane - Przejrzyj reguły ograniczania szybkości i dostosuj progi na podstawie obserwowanych wzorców ruchu
Macierz decyzyjna: wybór właściwego narzędzia firewalla
| Scenariusz | Zalecane narzędzie | Uzasadnienie |
|---|---|---|
| Serwer Ubuntu/Debian, prosty zestaw reguł | UFW | Czytelna dla człowieka składnia, domyślnie utrwalona |
| Serwer RHEL/CentOS/Fedora | firewalld | Natywna integracja, model stref odpowiedni dla konfiguracji wielokartowych |
| Wysokowydajne lub złożone filtrowanie | nftables | Atomowe aktualizacje, jednolite środowisko dla IPv4/IPv6/ARP |
| Starsze RHEL/CentOS 6 | iptables | Jedyna opcja na starszych jądrach |
| Windows Server | Windows Defender + PowerShell | Natywny, zarządzalny przez GPO, skryptowalny |
| VPS z cPanel | CSF (ConfigServer Firewall) | Stworzony specjalnie dla cPanel, zawiera demona LFD |
| Wirtualna maszyna w chmurze (AWS/GCP/Azure) | Grupy zabezpieczeń chmury + firewall hostowy | Obrona w głąb; grupy zabezpieczeń chmury są stanowe i bezpłatne |
Praktyczne kluczowe wnioski
- Ustaw domyślne odmawianie dla ruchu przychodzącego przed napisaniem jakichkolwiek reguł zezwalających. Zapewnia to, że każda reguła, o której zapomnisz napisać, skutkuje zablokowanym połączeniem, a nie otwartym.
- Nigdy nie udostępniaj SSH dla
0.0.0.0/0na serwerze produkcyjnym. Ogranicz go do adresu IP zarządzania, podsieci VPN lub użyj port knocking. - Pisz reguły zezwalające tak konkretnie, jak to możliwe. Preferuj
from 203.0.113.50 to any port 22 proto tcpzamiastallow 22. - Odzwierciedlaj reguły IPv4 w IPv6. Firewall, który filtruje tylko IPv4, to połowa firewalla.
- Włącz ograniczanie szybkości połączeń na wszystkich portach uwierzytelniania jako podstawowe zabezpieczenie przed atakami brute-force.
- Rejestruj odrzucony ruch. Ciche odrzucenia bez rejestrowania sprawiają, że reagowanie na incydenty jest prawie niemożliwe.
- Audytuj reguły zgodnie z harmonogramem. Przestarzałe reguły to zobowiązanie, a nie siatka bezpieczeństwa.
- Testuj z zewnątrz. Używaj
nmaplub zewnętrznego skanera portów po każdej znaczącej zmianie reguł, aby potwierdzić efektywną powierzchnię ataku. - Używaj
ufw reloadzamiastufw disable && ufw enable, aby uniknąć przerywania aktywnych połączeń podczas aktualizacji reguł. - Na
nftablesiiptables, zawsze umieszczaj regułę akceptacjiESTABLISHED/RELATEDna początku łańcucha wejściowego, aby uniknąć przerywania sesji inicjowanych wychodzących.
Często zadawane pytania
Jaka jest różnica między regułą firewalla a grupą zabezpieczeń w środowiskach chmurowych?
Grupa zabezpieczeń (AWS, GCP, Azure) to stanowy, zarządzany przez chmurę filtr pakietów stosowany na poziomie hiperwizora przed dotarciem ruchu do Twojej maszyny wirtualnej. Reguła firewalla hostowego (UFW, firewalld) działa wewnątrz jądra systemu operacyjnego. Oba powinny być używane jednocześnie dla obrony w głąb — grupa zabezpieczeń chmury jako zewnętrzny obwód i firewall hostowy jako wewnętrzna warstwa egzekwowania.
Dlaczego UFW pokazuje regułę jako aktywną, ale ruch jest nadal blokowany?
Najczęstszą przyczyną jest kolejność reguł. Reguła DENY wcześniej w łańcuchu pasuje przed Twoją regułą ALLOW. Uruchom sudo ufw status numbered i sprawdź kolejność. Sprawdź również, czy istnieją reguły IPv6, jeśli klient łączy się przez IPv6, i potwierdź, że właściwy interfejs jest docelowy, jeśli serwer jest wieloadresowy.
Czy powinienem całkowicie blokować ICMP ze względów bezpieczeństwa?
Nie. Blokowanie całego ICMP przerywa wykrywanie MTU ścieżki, co powoduje zawieszanie się sesji TCP w sieciach z niestandardowymi MTU. Przerywa również traceroute i znacznie utrudnia diagnostykę sieci. Blokuj tylko typy ICMP bez uzasadnionego zastosowania operacyjnego (typy 17 i 18). Zezwól na żądanie/odpowiedź echo, destination unreachable i time exceeded.
Co dzieje się z aktywnymi połączeniami SSH po przeładowaniu UFW?
sudo ufw reload przeładowuje zestaw reguł bez opróżniania istniejących wpisów stanu conntrack. Aktywne sesje SSH pozostają połączone, ponieważ tabela śledzenia połączeń jądra nadal przechowuje ich stan ESTABLISHED. Tylko sudo ufw disable po którym następuje sudo ufw enable opróżniłoby stan i potencjalnie przerwało aktywne połączenia.
Jak zapobiec utracie reguł firewalla po ponownym uruchomieniu systemu?
UFW automatycznie utrwala reguły po ponownym uruchomieniu za pomocą plików konfiguracyjnych /etc/ufw/. Dla firewalld, użyj flagi --permanent przy każdej regule i uruchom sudo firewall-cmd --reload. Dla surowego nftables, zapisz zestaw reguł za pomocą sudo nft list ruleset > /etc/nftables.conf i upewnij się, że usługa systemd nftables jest włączona. Dla iptables, użyj iptables-save > /etc/iptables/rules.v4 i zainstaluj pakiet iptables-persistent.
na wszystkich usługach hostingowych