firewalld to domyślny menedżer zapory w AlmaLinux 9 i Rocky Linux 9. Na Twoim VPS Linux Infrawire pozwala otworzyć tylko potrzebne usługi, ograniczyć SSH do własnego adresu IP i przekierowywać porty, bez ręcznego ruszania reguł nftables.
Największe ryzyko to odcięcie własnej sesji SSH. Ten poradnik jest zbudowany wokół tego problemu: każdą ryzykowną zmianę najpierw testujesz w konfiguracji runtime, a dopiero potem czynisz trwałą.
📋 Wymagania
- VPS z AlmaLinux 9 lub Rocky Linux 9
- Dostęp SSH jako root (IP i hasło roota znajdziesz w panelu klienta)
- Druga sesja SSH, którą trzymasz otwartą podczas edycji reguł
1. Instalacja i uruchomienie firewalld
Bashdnf install -y firewalld systemctl enable --now firewalld firewall-cmd --state
Ostatnie polecenie musi wypisać running. Domyślna strefa to public: pozwala już na SSH, Cockpit i klienta DHCPv6, a resztę połączeń przychodzących odrzuca.
2. Strefy, usługi i porty
Strefa to zestaw reguł przypisany do interfejsu. Usługa to nazwana grupa portów (ssh to 22/tcp, http to 80/tcp, https to 443/tcp).
Bashfirewall-cmd --get-default-zone firewall-cmd --get-active-zones firewall-cmd --list-all firewall-cmd --get-services | tr ' ' '\n' | head -20
Istnieją dwie konfiguracje. Runtime działa natychmiast i znika po przeładowaniu lub restarcie. Trwała (--permanent) jest zapisana na dysku, ale aktywuje się dopiero po firewall-cmd --reload.
3. Otwieranie usług i portów
Bash# Usługi firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https # Własny port firewall-cmd --permanent --add-port=8080/tcp # Zakres portów firewall-cmd --permanent --add-port=30000-30100/udp # Zastosuj konfigurację trwałą firewall-cmd --reload
Aby coś zamknąć, użyj odpowiedniej opcji --remove-service lub --remove-port. Usuń usługę cockpit, jeśli nie korzystasz z konsoli webowej: firewall-cmd --permanent --remove-service=cockpit.
4. SSH tylko z Twojego IP dzięki rich rule
Rich rules wyrażają warunki, takie jak adres źródłowy. Nigdy nie usuwaj ogólnej reguły SSH, zanim nie sprawdzisz, że ta ograniczona działa.
Bash# 1. Dodaj regułę tylko w runtime (podstaw SWÓJ publiczny adres IP) firewall-cmd --add-rich-rule='rule family="ipv4" source address="YOUR_IP/32" service name="ssh" accept' # 2. Otwórz NOWY terminal i sprawdź, czy SSH nadal działa z YOUR_IP # 3. Zrób ją trwałą, a potem usuń usługę SSH otwartą dla wszystkich firewall-cmd --runtime-to-permanent firewall-cmd --permanent --remove-service=ssh firewall-cmd --reload
Jeśli Twoje IP się zmieni, stracisz dostęp: miej pod ręką konsolę VPS w panelu klienta jako drogę awaryjną. Dla adresu IPv6 wpisz family="ipv6" i adres IPv6.
5. Przekierowanie portu
Aby ruch przychodzący na port 80 trafiał do aplikacji nasłuchującej na 8080 na tym samym serwerze:
Bashfirewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080 firewall-cmd --reload
Aby przekazywać ruch na inną maszynę, dodaj toaddr=TARGET_IP do opcji forward-port i włącz maskaradę poleceniem firewall-cmd --permanent --add-masquerade. Jądro musi też zezwalać na forwarding, czym przy maskaradzie zajmuje się firewalld.
6. Weryfikacja konfiguracji
Bashfirewall-cmd --list-all firewall-cmd --list-rich-rules firewall-cmd --permanent --list-all ss -tlnp
Porównaj listy runtime i trwałą: po przeładowaniu muszą być zgodne. Z innej maszyny przetestuj port poleceniem nc -zv VPS_IP 80. Nasłuchująca usługa (ss -tlnp) jest osiągalna tylko wtedy, gdy zapora zezwala na jej port.
🛠️ Rozwiązywanie problemów
FirewallD is not running: uruchom go przez systemctl enable --now firewalld, a błędy sprawdź w journalctl -u firewalld.
Nowa reguła nie działa: użyto --permanent bez przeładowania. Uruchom firewall-cmd --reload.
INVALID_SERVICE lub INVALID_ZONE: literówka w nazwie. Poprawne nazwy wypiszesz przez firewall-cmd --get-services i --get-zones.
SSH na niestandardowym porcie jest odrzucane mimo otwartego portu: SELinux musi znać ten port. Uruchom semanage port -a -t ssh_port_t -p tcp 2222 (najpierw zainstaluj policycoreutils-python-utils), otwórz port w firewalld i zrestartuj sshd.
Utrata dostępu: użyj konsoli VPS z panelu klienta, a potem wykonaj firewall-cmd --permanent --add-service=ssh i firewall-cmd --reload. Unikaj firewall-cmd --panic-on, które blokuje cały ruch, także Twoją sesję.
🔒 Twój VPS udostępnia teraz tylko to, co wybierzesz, a SSH pozostaje w zasięgu ręki!