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 oznacza Uncomplicated Firewall. Ta nazwa dokładnie opisuje jego działanie. Jest przyjaznym interfejsem do zapory sieciowej dostępnej już w jądrze Linux. Zamiast zapisywać reguły w surowej postaci, wpisuje się krótkie polecenia, takie jak ufw allow 22/tcp. Na świeżo utworzonym VPS każda usługa nasłuchująca jest domyślnie dostępna z Internetu. Zapora zmienia tę sytuację: najpierw odrzuca cały ruch, a następnie zezwala na dostęp do kilku faktycznie używanych portów. Ta pojedyncza zmiana usuwa większość powierzchni ataku za pomocą około czterech poleceń.
Przed wprowadzeniem zmian należy sprawdzić, jakie usługi nasłuchują, ponieważ to ich dostępność określają reguły zapory. Sprawdzanie nasłuchujących usług za pomocą ss -tlnp to właściwy pierwszy krok.
Jedna zasada, która chroni przed odcięciem dostępu
Oto błąd, który zniechęca do używania zapór sieciowych. Włączasz UFW z zasadą domyślnie odrzucającą połączenia, ale wcześniej nie zezwalasz na SSH. W chwili uruchomienia zapory bieżące połączenie zostaje przerwane i nie można ponownie uzyskać dostępu. Aby tego uniknąć, zawsze zezwalaj na SSH przed włączeniem UFW. To cała zasada. Poniższe czynności wykonują te kroki w bezpiecznej kolejności.
Jeśli mimo to do tego dojdzie, dostęp nie zostanie utracony. Konsola internetowa dostawcy, działająca przez VNC lub port szeregowy, nie korzysta z SSH. Można zalogować się za jej pomocą i uruchomić ufw disable albo dodać brakującą regułę.
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 outgoingdeny 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/tcpUFW 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/tcpZezwalaj 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:
Krok 3: Włącz zaporę i potwierdź jej działanie
sudo ufw enableWyś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 verboseStatus: 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 AnywhereNależ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.
Późniejsze zarządzanie regułami
Aby wyświetlić reguły z numerami i móc usunąć wybraną regułę:
sudo ufw status numbered
sudo ufw delete 3Aby zezwolić na dostęp do portu tylko z jednego adresu, co jest dobrym sposobem na udostępnienie usługi administracyjnej wyłącznie własnemu adresowi IP:
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpTo podejście przestaje działać, gdy zmieni się własny adres lub dostęp będzie potrzebny z kilku maszyn. Zwykle należy całkowicie zrezygnować z publicznego otwierania portu i uzyskiwać dostęp do usługi przez sieć prywatną. Służy do tego rozgłaszanie prywatnej podsieci serwera w tailnet.
Zapora sieciowa jest jedną z warstw ochrony. Kontroluje, co może dotrzeć do portu, ale nie spowalnia osoby wielokrotnie próbującej uzyskać dostęp do pozostawionego otwartego portu, takiego jak SSH. W tym celu należy dodać Fail2ban przed SSH, aby blokować adresy powtarzających się naruszeń. Obrona warstwowa oznacza, że każda warstwa zabezpiecza elementy, których nie chronią pozostałe warstwy.
Zapora sieciowa ma sens dopiero po poznaniu portów i sposobu nasłuchiwania usług, a jej konfiguracja jest jednym z kroków wykonywanych w ramach pierwszych 10 minut na nowym 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.