SSD Nodes Learn Hosting plans →
Przewodniki Matt ConnorAutor: Matt Connor · Zaktualizowano 2026-08-27

UFW na VPS: konfiguracja zapory i bezpieczne SSH

Skonfiguruj UFW na VPS: ustaw domyślną odmowę, zezwól tylko na potrzebne porty i dodaj SSH przed uruchomieniem zapory, aby uniknąć utraty dostępu.

Czym jest UFW i dlaczego warto go używać

UFW to skrót od Uncomplicated Firewall, a nazwa ta trafnie oddaje jego charakter. Jest to przyjazny interfejs dla zapory sieciowej wbudowanej w jądro Linux, dzięki czemu zamiast tworzyć surowe reguły, można używać krótkich poleceń, takich jak ufw allow 22/tcp. Na nowym serwerze VPS każda usługa nasłuchująca jest domyślnie dostępna z Internetu. Zapora sieciowa zmienia ten stan: domyślnie blokuje wszystko, a następnie pozwala na ruch tylko na wybranych portach. Ta pojedyncza zmiana eliminuje większość zagrożeń za pomocą zaledwie kilku poleceń. UFW jest narzędziem stosowanym w systemach Ubuntu i Debian, więc jeśli serwer VPS korzysta z Rocky lub AlmaLinux, należy użyć firewalld, który organizuje reguły w strefy.

Przed przystąpieniem do konfiguracji należy sprawdzić, co nasłuchuje na portach, ponieważ to właśnie te usługi podlegają działaniu zapory. Sprawdzenie nasłuchujących usług za pomocą ss -tlnp jest właściwym pierwszym krokiem.

Jedyna reguła chroniąca przed utratą dostępu

Oto błąd, który zniechęca użytkowników do korzystania z zapór sieciowych. UFW zostaje włączone z polityką domyślnego odrzucania ruchu, ale użytkownik nie zezwala na połączenia SSH. W momencie aktywacji zapory bieżące połączenie zostaje przerwane i nie można ponownie uzyskać dostępu do serwera. Można tego uniknąć, zawsze zezwalając na SSH przed włączeniem UFW. To cały sekret, a poniższe kroki opisują bezpieczną kolejność działań.

Jeśli mimo to dojdzie do zablokowania, nie oznacza to trwałej utraty dostępu: konsola internetowa dostawcy, dostępna przez VNC lub port szeregowy, nie przechodzi przez SSH, więc można się tam zalogować i wykonać ufw disable lub dodać brakującą regułę. Zablokowanie przez zaporę ma charakterystyczny objaw: odrzucony pakiet powoduje zawieszenie klienta SSH do momentu przekroczenia limitu czasu, podczas gdy zatrzymany demon SSH natychmiast odrzuca połączenie, co stanowi różnicę między connection refused a connection timed out.

Krok 1: Ustaw domyślne zasady

Najpierw skonfiguruj UFW tak, aby odrzucał wszystkie połączenia przychodzące i zezwalał na wszystkie połączenia wychodzące:

sudo ufw default deny incoming
sudo ufw default allow outgoing

deny incoming to ważniejsza część. Oznacza, że każdy port bez jawnej reguły zezwalającej jest zamknięty z zewnątrz, nawet jeśli nasłuchuje na nim usługa. allow outgoing umożliwia serwerowi normalny dostęp do Internetu, na przykład w celu pobierania aktualizacji. Te dwa polecenia zmieniają tylko zasady. Nie są one egzekwowane do momentu włączenia UFW w kroku 3.

Krok 2: Zezwól na porty, których rzeczywiście potrzebujesz

Przed włączeniem zapory otwórz SSH, aby zachować połączenie:

sudo ufw allow 22/tcp

UFW może również ograniczać częstotliwość połączeń SSH: sudo ufw limit 22/tcp zezwala na połączenia z portem, ale blokuje każdy adres, z którego w ciągu trzydziestu sekund nawiązano co najmniej sześć połączeń. Ogranicza to działanie skryptów przeprowadzających ataki brute-force bez instalowania dodatkowego oprogramowania.

Jeśli jest uruchomiony serwer WWW, zezwól również na HTTP i HTTPS:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Zezwalaj tylko na usługi udostępniane publicznie. Baza danych, taka jak Postgres na porcie 5432, prawie nigdy nie powinna mieć reguły zezwalającej. Powiąż ją z 127.0.0.1, aby była dostępna tylko na tym komputerze. Każdy otwarty port wymaga ochrony, dlatego lista powinna być krótka.

Można również utworzyć tutaj pełną sekwencję poleceń ufw dla serwera, a następnie uruchomić je w podanej kolejności:

ToolUFW rule generator

Krok 3: Włącz zaporę i potwierdź jej działanie

sudo ufw enable

Wyświetlone zostanie ostrzeżenie, że polecenie może przerwać istniejące połączenia SSH. Ponieważ w kroku 2 zezwolono na 22/tcp, bieżąca sesja zostanie utrzymana. Potwierdź wynik:

sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing)

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
80/tcp                     ALLOW IN    Anywhere

Należy sprawdzić tutaj dwie rzeczy. Status: active oznacza, że zapora działa. Każda reguła jest wyświetlana dwukrotnie: najpierw bez oznaczenia, a następnie z (v6). Oznacza to, że UFW obsługuje zarówno IPv6, jak i IPv4. Jeśli brakuje wierszy (v6), ruch IPv6 nie jest objęty zarządzaniem. Jest to osobny problem opisany w artykule o zaporze IPv6.

Zarządzanie regułami w późniejszym czasie

Aby wyświetlić reguły z numerami w celu usunięcia wybranej z nich:

sudo ufw status numbered
sudo ufw delete 3

Aby zezwolić na ruch na porcie tylko z jednego adresu, co jest skutecznym sposobem na udostępnienie usługi administracyjnej wyłącznie dla własnego adresu IP:

sudo ufw allow from 10.0.0.24 to any port 5432 proto tcp

Takie podejście przestaje być skuteczne, gdy własny adres ulega zmianie lub dostęp musi uzyskać kilka maszyn. Standardowym rozwiązaniem jest całkowite zamknięcie portu dla ruchu publicznego i uzyskiwanie dostępu do usługi przez sieć prywatną, co można osiągnąć poprzez ogłaszanie prywatnej podsieci serwera w sieci tailnet.

Zapora sieciowa to tylko jedna z warstw zabezpieczeń. Kontroluje ona, co może dotrzeć do portu, ale nie spowalnia atakującego, który próbuje sforsować otwarty port, na przykład SSH. W tym celu należy dodać Fail2ban przed usługą SSH, aby blokować powtarzające się próby włamań. Obrona wielowarstwowa oznacza, że każda warstwa zabezpiecza to, czego nie obejmują pozostałe.

Zapora sieciowa ma sens tylko wtedy, gdy wiadomo, czym są porty i jak usługi nasłuchują, a jej konfiguracja jest jednym z etapów pierwszych 10 minut na nowym serwerze VPS.

FAQ

Czy włączenie UFW rozłączy sesję SSH?

Nie, jeśli najpierw zezwoli się na SSH. Należy wykonać sudo ufw allow 22/tcp przed sudo ufw enable. Połączenie pozostanie aktywne, ponieważ zapora będzie zezwalać na port 22. Zagrożenie stanowi włączenie zapory z domyślną regułą deny bez reguły zezwalającej na SSH, co odcina dostęp. W takiej sytuacji należy zalogować się za pośrednictwem konsoli VNC lub szeregowej udostępnionej przez dostawcę i wykonać ufw disable.

Które porty należy otworzyć na VPS?

Tylko porty usług udostępnianych publicznie. SSH (22/tcp) umożliwia zarządzanie serwerem. Porty HTTP i HTTPS (80/tcp, 443/tcp) należy otworzyć, jeśli jest uruchomiona strona internetowa. Wszystkie pozostałe porty powinny pozostać zablokowane. Usługi wewnętrzne, takie jak bazy danych, powinny nasłuchiwać na 127.0.0.1 i nie powinny mieć żadnej reguły zapory. Dzięki temu nie będą dostępne z sieci.

Czy UFW obsługuje IPv6?

Tak, we współczesnym Ubuntu. Wartość IPV6=yes jest ustawiona w /etc/default/ufw, dlatego każda reguła dotyczy obu stosów, a ufw status wyświetla reguły IPv6 z przyrostkiem (v6). Sposoby wystąpienia problemów opisano w pułapce zapory IPv6.

Jak usunąć regułę UFW?

Należy wykonać sudo ufw status numbered, aby wyświetlić reguły wraz z numerami indeksów, a następnie sudo ufw delete N, gdzie N oznacza numer usuwanej reguły. Regułę można również usunąć na podstawie specyfikacji, na przykład za pomocą sudo ufw delete allow 80/tcp.

Jak zezwolić na dostęp do portu tylko z jednego adresu IP?

Należy użyć reguły from zamiast zwykłej reguły allow. Aby zezwolić wyłącznie adresowi biura na dostęp do PostgreSQL, należy wykonać sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. Przy polityce domyślnego odrzucania port pozostaje zamknięty dla wszystkich do czasu dodania reguły zezwalającej. Oznacza to, że ta reguła from jest jedyną drogą dostępu: cały Internet pozostaje zablokowany, a dostęp uzyska tylko wskazany adres. Nie należy dodawać zwykłej reguły allow 5432/tcp, ponieważ otworzyłaby port dla wszystkich. Jest to najbezpieczniejszy sposób udostępnienia bazy danych lub panelu administracyjnego. Należy potwierdzić konfigurację za pomocą sudo ufw status verbose, które wyświetla adres źródłowy obok portu.