Firewall (zapora sieciowa) to mechanizm, który kontroluje ruch przychodzący i wychodzący według reguł: wpuszcza tylko to, na co pozwolisz. Na serwerze z Linuxem najprościej skonfigurować go narzędziem ufw. Najpierw pozwól na SSH, dopiero potem włącz zaporę, bo w przeciwnym razie możesz odciąć się od własnego serwera.
Nowy serwer ma publiczny adres IP, więc od pierwszej minuty może go próbować odwiedzić każdy. Firewall decyduje, które połączenia przejdą, a które zostaną odrzucone. W artykule o serwerze VPS pisałem, że przy VPS niezarządzanym zaporę ustawiasz sam. Tutaj pokazuję, jak to zrobić. Uwaga: na tej maszynie nie mam serwera z Linuxem i ufw, więc żadnej komendy firewalla nie uruchamiałem. Wszystkie polecenia pochodzą z dokumentacji Ubuntu i podręcznika ufw i są tak oznaczone.
Czym jest firewall?
Według Wikipedii firewall (zapora sieciowa) to system bezpieczeństwa sieci, który monitoruje i kontroluje ruch przychodzący oraz wychodzący według skonfigurowanych reguł. Najprościej: stoi między serwerem a internetem i sprawdza, czy dane połączenie spełnia reguły. Jeśli nie, odrzuca je.
Dwie odmiany warto odróżnić:
| Rodzaj | Gdzie działa | Przykład |
|---|---|---|
| Firewall sieciowy | między sieciami, np. między siecią firmową a internetem | sprzęt lub maszyna wirtualna przed siecią |
| Firewall hostowy (host-based) | bezpośrednio na komputerze lub serwerze | ufw na Twoim VPS |
W tym artykule skupiam się na firewallu hostowym, czyli takim, który ustawiasz sam na serwerze.
Jak działa firewall?
Firewall porównuje każde połączenie z listą reguł i je przepuszcza albo odrzuca. Wikipedia opisuje trzy podstawowe rodzaje:
- Filtrowanie pakietów. Sprawdza adres IP, protokół i port. Domyślnie nieprzepuszczone pakiety są po cichu odrzucane.
- Śledzenie połączeń. Pamięta, jakie porty dwa adresy używają w danej rozmowie, więc odpowiedzi na Twoje połączenia przechodzą.
- Zapora warstwy aplikacji. Rozumie konkretne protokoły, np. FTP, DNS czy HTTP.
Najważniejsze dla Ciebie jest to, jaką politykę domyślną ma zapora. Według podręcznika ufw po instalacji domyślnie ruch przychodzący jest blokowany, ruch przekazywany też, a ruch wychodzący dozwolony. Oznacza to, że nic z zewnątrz nie wejdzie, dopóki sam tego nie dopuścisz. To rozsądna zasada: zamknij wszystko, otwórz tylko to, czego potrzebujesz.
Po co firewall na serwerze VPS?
Serwer ma wiele portów, a każdy z nich może być wejściem. Aplikacje nasłuchują na portach, a Ty nie musisz wystawiać wszystkich światu. Firewall pozwala otworzyć tylko te, które są potrzebne. Typowy serwer internetowy wymaga niewielu:
| Port | Do czego | Czy zwykle otwierasz |
|---|---|---|
| 22 (TCP) | SSH, czyli zdalne logowanie | tak, najlepiej tylko dla zaufanych adresów |
| 80 (TCP) | HTTP | tak, jeśli serwujesz stronę |
| 443 (TCP) | HTTPS | tak, jeśli serwujesz stronę |
| 21 (TCP) | FTP | nie; do wysyłania plików używaj SFTP przez port 22 |
| port bazy danych | PostgreSQL, MySQL i inne | zwykle nie; baza nie powinna być dostępna z internetu |
Numery 22, 80 i 443 to ogólnie przyjęte konwencje (z wiedzy ogólnej). O tym, dlaczego SFTP zastępuje FTP, i jak wysyłać pliki bezpiecznie, piszemy w artykule o FTP i SFTP.
Które porty serwera otworzyć, a których nie?
Rozszerzona wersja tabeli powyżej. Numery to domyślne porty tych usług (z wiedzy ogólnej, nie z dokumentacji Ubuntu), więc w Twojej konfiguracji mogą być inne:
| Usługa | Domyślny port | Otwierać z internetu? | Uwagi |
|---|---|---|---|
| SSH | 22 | tak, najlepiej tylko dla zaufanych adresów | do logowania i SFTP; zobacz ufw limit |
| HTTP | 80 | tak, jeśli serwujesz stronę | często tylko do przekierowania na HTTPS |
| HTTPS | 443 | tak, jeśli serwujesz stronę | główny ruch strony |
| FTP | 21 | nie | zamiast tego SFTP przez port 22 |
| MySQL | 3306 | zwykle nie | baza powinna być dostępna lokalnie lub z konkretnych adresów |
| PostgreSQL | 5432 | zwykle nie | jak wyżej |
| Redis | 6379 | zwykle nie | pamięć podręczna i kolejki, nie wystawiaj publicznie |
| MongoDB | 27017 | zwykle nie | jak wyżej |
Zasada jest jedna dla wszystkich usług: jeśli nie musisz, nie otwieraj portu z internetu. Aplikacja na tym samym serwerze łączy się z bazą lokalnie, więc port bazy nie musi być dostępny z zewnątrz. Jeśli potrzebujesz dostępu z konkretnego komputera, użyj reguły z jednym adresem, jak w tabeli zarządzania regułami poniżej.
Jakich narzędzi użyć do firewalla na Linuxie?
| Narzędzie | Co to jest | Uwagi |
|---|---|---|
| ufw (Uncomplicated Firewall) | prosty interfejs do zarządzania zaporą | domyślne narzędzie na Ubuntu według dokumentacji, zalecane na start |
| iptables | narzędzie niższego poziomu | według dokumentacji Ubuntu jest „pod spodem” ufw |
| nftables, firewalld | inne narzędzia i warstwy zarządzania zaporą | z wiedzy ogólnej, nie opisuję, bo nie sprawdzałem ich w dokumentacji |
| Firewall w panelu dostawcy | zapora ustawiana poza serwerem, w panelu hostingu lub chmury | wiele chmur i hostingów ją oferuje (z wiedzy ogólnej); działa niezależnie od zapory na serwerze |
Dokumentacja Ubuntu zaznacza, że ufw jest domyślnie wyłączony. Nowy serwer na Ubuntu nie ma więc włączonej zapory, dopóki jej nie włączysz.
Jak skonfigurować firewall ufw krok po kroku?
Poniższa kolejność pochodzi z dokumentacji Ubuntu i podręcznika ufw. Najważniejsza zasada: najpierw pozwól na SSH, a dopiero potem włącz zaporę.
# 1. pozwól na SSH (port 22), zanim cokolwiek włączysz
sudo ufw allow 22/tcp
# 2. pozwól na ruch WWW, jeśli serwer ma stronę
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# 3. sprawdź, co zostanie zastosowane (nic nie zmienia)
sudo ufw --dry-run allow http
# 4. włącz zaporę
sudo ufw enable
# 5. sprawdź stan i reguły
sudo ufw status verbose
Składnia ufw allow PORT[/PROTOKÓŁ]: według podręcznika protokół dopisujesz po ukośniku, np. 25/tcp, a reguła bez protokołu obejmuje TCP i UDP. Dokumentacja Ubuntu pozwala też używać nazwy usługi z /etc/services zamiast numeru portu. --dry-run pokazuje, co zrobi polecenie, bez zmiany reguł.
Jak nie odciąć się od własnego serwera?
Uwaga mentora: zasada przy firewallu jest prosta: najpierw pozwól na SSH, dopiero potem włącz zaporę. Pomyłka kosztuje dostęp do własnego serwera, a naprawa bywa możliwa tylko przez konsolę w panelu dostawcy.
To najczęstszy i najbardziej kosztowny błąd. Podręcznik ufw ostrzega, że ufw enable „może zerwać istniejące połączenia (np. ssh)”. Reguły dodane wcześniej, np. dla SSH, zostają aktywne po włączeniu zapory, a przy pracy przez SSH ufw pyta o potwierdzenie. Co z tego wynika:
- Najpierw dodaj regułę dla SSH. Bez niej po włączeniu zapory nikt (także Ty) nie zaloguje się na port 22.
- Jeśli zmieniłeś port SSH, otwórz właściwy port. Reguła dla 22 Ci wtedy nie pomoże.
- Zostaw drugie okno terminala z otwartą sesją SSH i testuj połączenie w nowym oknie, zanim zamkniesz stare.
- Zanim zrobisz coś ryzykownego, znajdź w panelu dostawcy dostęp awaryjny (konsola w przeglądarce), bo to ostatni ratunek po zablokowaniu SSH. To praktyka z wiedzy ogólnej, a jej dostępność zależy od dostawcy.
O samym SSH, kluczach i najczęstszych błędach logowania piszę w artykule o SSH.
Jak zarządzać regułami firewalla?
Po włączeniu zapory przydadzą się polecenia z dokumentacji Ubuntu i podręcznika ufw:
| Czego chcesz | Polecenie |
|---|---|
| Pokazać reguły z numerami | sudo ufw status numbered |
| Dodać regułę na wskazanym miejscu | sudo ufw insert 1 allow 80 |
| Usunąć regułę | sudo ufw delete deny 22 lub sudo ufw delete 3 (po numerze) |
| Pozwolić tylko z jednego adresu | sudo ufw allow proto tcp from 192.168.0.2 to any port 22 |
| Ograniczyć próby logowania | sudo ufw limit ssh/tcp (blokuje adres, który w 30 sekund inicjuje 6 lub więcej połączeń) |
| Włączyć logowanie | sudo ufw logging on |
| Zresetować do ustawień fabrycznych | sudo ufw reset |
| Zmienić politykę domyślną | sudo ufw default deny incoming (składnia z podręcznika: ufw default + allow, deny lub reject + kierunek) |
Dwie rzeczy do zapamiętania. Po pierwsze, kolejność reguł ma znaczenie: według podręcznika pierwsza pasująca reguła wygrywa, więc bardziej szczegółowe reguły dodawaj przed ogólnymi. Po drugie, przy regułach dla IPv4 i IPv6 usunięcie po numerze kasuje tylko jedną z nich, więc sprawdź listę po usunięciu.
Dokumentacja Ubuntu opisuje też profile aplikacji w katalogu /etc/ufw/applications.d. Zobaczysz je poleceniem sudo ufw app list, a regułę dla profilu dodasz np. sudo ufw allow Samba.
Jakie błędy zdarzają się przy konfiguracji firewalla?
| Problem | Co zwykle znaczy | Co zrobić |
|---|---|---|
| Po włączeniu zapory SSH przestał działać | brak reguły dla SSH lub zły port | użyj konsoli awaryjnej w panelu dostawcy, dodaj regułę dla SSH |
| Strona nie działa z zewnątrz | port 80 lub 443 zamknięty | sudo ufw status verbose, dodaj allow 80/tcp i allow 443/tcp |
| Reguła nie działa, choć jest na liście | kolejność reguł: wcześniejsza reguła przechwytuje ruch | sprawdź status numbered i ułóż reguły od szczegółowych do ogólnych |
| Zapora ma regułę, ale nic się nie zmieniło | ufw jest wyłączony (domyślnie jest wyłączony) | sprawdź sudo ufw status i włącz zaporę |
| Baza danych dostępna z internetu | otwarty port bazy | usuń regułę, zostaw bazę dostępną tylko lokalnie lub z konkretnych adresów |
| Reguły zniknęły | użyty ufw reset | odtwórz reguły; trzymaj listę komend w notatkach |
Czego firewall nie załatwia?
Zapora kontroluje, kto może się połączyć z którym portem, ale nie rozwiązuje wszystkich problemów z bezpieczeństwem:
- Nie naprawi słabego hasła ani błędu w aplikacji na otwartym porcie.
- Nie zastąpi aktualizacji systemu i oprogramowania.
- Nie chroni przed utratą danych. Do tego służą kopie zapasowe, o których będzie osobny artykuł.
- Nie zabezpieczy samego logowania SSH. Dopiero klucze i wyłączone hasła to robią. Przykładem jest podatność OpenSSH CVE-2026-123158, opisana w artykule o SSH.
Firewall to jedna warstwa z kilku: obok niego są klucze SSH, aktualizacje i kopie. Wdrażanie aplikacji na serwerze pokazujemy w module wdrożenie produkcyjne w chmurze w kursie AI Engineer, a podstawy pracy w konsoli opisuje artykuł o podstawach Linuxa.
Podsumowanie
- Firewall kontroluje ruch przychodzący i wychodzący według reguł. Na serwerze z Linuxem najprościej użyć ufw.
- Według podręcznika
ufwdomyślnie ruch przychodzący jest blokowany, a wychodzący dozwolony, ale na Ubuntu ufw jest domyślnie wyłączony, więc trzeba go włączyć. - Najpierw SSH, potem
ufw enable. Pomyłka może odciąć Cię od serwera, a podręcznik ostrzega, że włączenie zapory może zerwać połączenia SSH. - Otwieraj tylko potrzebne porty (zwykle 22, 80 i 443), a bazy danych nie wystawiaj do internetu.
- Kolejność reguł ma znaczenie: pierwsza pasująca reguła wygrywa.
- Firewall to jedna warstwa: potrzebujesz też kluczy SSH, aktualizacji i kopii zapasowych. Komendy opisałem z dokumentacji, bo nie uruchamiałem ich na prawdziwym serwerze.


