Jak skonfigurować zaporę sieciową UFW w systemie Ubuntu

Wstęp

UFW, czyli Uncomplicated Firewall , to interfejs do iptables zaprojektowany w celu uproszczenia konfiguracji zapory sieciowej. Chociaż podstawowy system iptables jest wydajny i elastyczny, jego nauka i prawidłowe użytkowanie może być trudne dla początkujących. UFW upraszcza ten proces, czyniąc go dobrym wyborem dla użytkowników, którzy chcą zabezpieczyć swoją sieć bez konieczności opanowania skomplikowanych reguł zapory sieciowej. Zapewnia on przystępny sposób wdrożenia niezbędnych zabezpieczeń sieciowych w systemie Ubuntu.

W tym poradniku dowiesz się, jak skonfigurować zaporę sieciową z UFW w systemie Ubuntu. Dowiesz się, jak skonfigurować domyślne zasady, zezwalać i blokować określone połączenia według portu lub usługi oraz zarządzać regułami zapory sieciowej. Omówimy podstawowe kroki, takie jak włączenie dostępu SSH przed aktywacją zapory sieciowej, sprawdzenie statusu reguł i zresetowanie konfiguracji w razie potrzeby. Przewodnik zawiera również najlepsze praktyki bezpieczeństwa, które umożliwiają efektywne i długoterminowe zarządzanie zaporą sieciową.

Najważniejsze wnioski
  • UFW (Uncomplicated Firewall) to przyjazny dla użytkownika interfejs do iptables, który ułatwia konfigurację zapory w systemach Ubuntu.
  • Aby zapewnić bezpieczeństwo platformy, domyślne zasady UFW powinny być skonfigurowane tak, aby blokować cały ruch przychodzący i zezwalać na cały ruch wychodzący.
  • Przed włączeniem zapory sieciowej konieczne jest utworzenie reguły zezwalającej na połączenia SSH, aby zapobiec zablokowaniu dostępu do serwera.
  • Możesz aktywować zaporę i skonfigurować ją tak, aby uruchamiała się przy rozruchu systemu, wykonując następujące polecenie: sudo ufw enable.
  • Reguły zapory sieciowej można definiować tak, aby zezwalać lub odmawiać połączeń na podstawie profili aplikacji, nazw usług, numerów portów lub określonych adresów IP.
  • Polecenie sudo ufw status verbose pozwala sprawdzić, czy zapora jest aktywna i przejrzeć listę skonfigurowanych reguł.
  • Reguły zapory sieciowej można usunąć, podając numer reguły lub określając oryginalną definicję reguły.
  • Należy stosować zasadę najmniejszych uprawnień, otwierając tylko określone porty, które są niezbędne do prawidłowego działania aplikacji.
  • Włączenie rejestrów UFW to najlepszy sposób monitorowania ruchu sieciowego i identyfikowania potencjalnie złośliwych działań.
  • W celu zautomatyzowanej reakcji na zagrożenia UFW można zintegrować z systemem zapobiegania włamaniom, takim jak Fail2ban , aby dynamicznie blokować atakujących.

Wymagania wstępne

Aby skorzystać z tego samouczka, będziesz potrzebować:

  • Serwer z systemem Ubuntu i użytkownikiem innym niż root z uprawnieniami sudo.
  • UFW jest domyślnie zainstalowany w Ubuntu. Jeśli z jakiegoś powodu został odinstalowany, możesz go zainstalować za pomocą komendy sudo apt install ufw.

Krok 1 — Upewnij się, że protokół IPv6 jest włączony

W najnowszych wersjach Ubuntu protokół IPv6 jest domyślnie włączony. W praktyce oznacza to, że większość reguł zapory dodanych do serwera będzie zawierać zarówno wersję IPv4, jak i IPv6, przy czym ta druga będzie identyfikowana oznaczeniem v6 w wynikach polecenia status programu UFW. Aby upewnić się, że protokół IPv6 jest włączony, sprawdź plik konfiguracyjny UFW w lokalizacji /etc/default/ufw. Otwórz ten plik za pomocą nano lub w innym edytorze wiersza poleceń:

sudo nano /etc/default/ufw

Następnie upewnij się, że wartość IPV6 jest ustawiona na yes. Powinno to wyglądać tak:

/etc/default/ufw
IPV6=yes

Zapisz i zamknij plik. Jeśli używasz nano, możesz to zrobić, wpisując CTRL+X, a następnie YENTER aby potwierdzić.

Po włączeniu funkcji UFW w późniejszym kroku tego przewodnika zostanie ona skonfigurowana tak, aby zapisywała reguły zapory zarówno dla IPv4, jak i IPv6.


Krok 2 — Konfigurowanie domyślnych zasad

Jeśli dopiero zaczynasz korzystać z UFW, dobrym pierwszym krokiem jest sprawdzenie domyślnych zasad zapory sieciowej. Reguły te kontrolują sposób obsługi ruchu, który nie pasuje do żadnych innych reguł.

Domyślnie UFW jest skonfigurowany tak, aby odrzucać wszystkie połączenia przychodzące i zezwalać na wszystkie połączenia wychodzące. Oznacza to, że nikt próbujący połączyć się z Twoim serwerem nie będzie mógł się połączyć, podczas gdy każda aplikacja na serwerze będzie mogła połączyć się ze światem zewnętrznym. Możesz następnie utworzyć konkretne reguły allow jako wyjątki od zasady deny.

Aby mieć pewność, że będziesz w stanie śledzić dalszą część tego samouczka, skonfigurujesz teraz domyślne zasady UFW dla ruchu przychodzącego i wychodzącego.

Aby ustawić domyślną politykę przychodzącą UFW na deny, uruchom:

sudo ufw default deny incoming

Output
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

Aby ustawić domyślną politykę wychodzącą UFW na allow, uruchom:

sudo ufw default allow outgoing

Output
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

Te polecenia stosują domyślne ustawienia, aby blokować połączenia przychodzące i zezwalać na połączenia wychodzące. Same domyślne ustawienia zapory sieciowej mogą wystarczyć dla komputera osobistego, ale serwery zazwyczaj muszą odpowiadać na żądania przychodzące od użytkowników zewnętrznych. Przyjrzymy się temu później.


Krok 3 — Zezwalanie na połączenia SSH

Jeśli teraz włączysz zaporę UFW, wszystkie połączenia przychodzące zostaną zablokowane. Oznacza to, że musisz utworzyć reguły, które jawnie zezwalają na legalne połączenia przychodzące — na przykład połączenia SSH lub HTTP — jeśli chcesz, aby serwer odpowiadał na tego typu żądania. Jeśli korzystasz z serwera w chmurze, prawdopodobnie będziesz chciał zezwolić na połączenia przychodzące SSH, aby móc łączyć się z serwerem i nim zarządzać.

Zezwolenie na profil aplikacji OpenSSH UFW

Po instalacji większość aplikacji korzystających z połączeń sieciowych rejestruje profil aplikacji w UFW, co umożliwia użytkownikom szybkie zezwalanie lub blokowanie dostępu zewnętrznego do usługi. Możesz sprawdzić, które profile są aktualnie zarejestrowane w UFW za pomocą:

sudo ufw app list

Output
Available applications:
  OpenSSH

Aby włączyć profil aplikacji OpenSSH, uruchom:

sudo ufw allow OpenSSH

Output
Rule added
Rule added (v6)

Spowoduje to utworzenie reguł zapory sieciowej zezwalających na wszystkie połączenia na porcie 22, który jest portem, na którym domyślnie nasłuchuje demon SSH.

Zezwalanie na SSH według nazwy usługi

Innym sposobem skonfigurowania UFW tak, aby zezwalał na połączenia przychodzące SSH, jest odwołanie się do nazwy jego usługi: ssh.

sudo ufw allow ssh

Output
Rule added
Rule added (v6)

Na podstawie pliku /etc/services UFW rozpoznaje, z jakich portów i protokołów korzysta dana usługa.

Zezwalanie na SSH według numeru portu

Alternatywnie, możesz napisać równoważną regułę, określając port zamiast profilu aplikacji lub nazwy usługi. Na przykład, to polecenie działa tak samo, jak poprzednie przykłady:

sudo ufw allow 22

Output
Rule added
Rule added (v6)

Jeśli skonfigurowałeś demona SSH do korzystania z innego portu, musisz określić odpowiedni port. Na przykład, jeśli serwer SSH nasłuchuje na porcie 2222, możesz użyć tego polecenia, aby zezwolić na połączenia na tym porcie:

sudo ufw allow 2222

Output
Rule added
Rule added (v6)

Teraz, gdy zapora sieciowa jest skonfigurowana tak, aby zezwalać na przychodzące połączenia SSH, możesz ją włączyć.

Ograniczanie ilości połączeń

Aby chronić usługi takie jak SSH przed zautomatyzowanymi atakami siłowymi (brute-force attacks), UFW zawiera funkcję ograniczania ilości połączeń. Po zastosowaniu limitu połączeń do usługi, UFW śledzi częstotliwość prób połączeń z każdego źródłowego adresu IP. Jeśli adres IP nawiąże zbyt wiele połączeń w krótkim czasie, UFW tymczasowo je zablokuje. Jest to bardziej inteligentne podejście niż po prostu zezwalanie lub blokowanie ruchu, ponieważ rozróżnia normalne użytkowanie od zachowań, które prawdopodobnie są złośliwe.

Aby włączyć ograniczenie ilości połączeń dla usługi, należy użyć polecenia limit zamiast allow. Najczęstszym przypadkiem użycia jest zabezpieczanie protokołu SSH.

sudo ufw limit ssh

To pojedyncze polecenie tworzy regułę zezwalającą na połączenia SSH, ale z warunkiem: jeśli adres IP spróbuje nawiązać sześć lub więcej połączeń w ciągu 30 sekund, UFW odrzuci kolejne połączenia z tego adresu IP. To prosty i skuteczny sposób na dodanie dodatkowej warstwy zabezpieczeń do usług udostępnianych w internecie.


Krok 4 — Włączanie UFW

Twoja zapora sieciowa powinna być teraz skonfigurowana tak, aby zezwalała na połączenia SSH. Aby sprawdzić, które reguły zostały już dodane, nawet gdy zapora sieciowa jest nadal wyłączona, możesz użyć:

sudo ufw show added

Output
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH

Po potwierdzeniu, że masz regułę zezwalającą na przychodzące połączenia SSH, możesz włączyć zaporę sieciową za pomocą:

sudo ufw enable

Output
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Otrzymasz ostrzeżenie informujące, że polecenie może przerwać istniejące połączenia SSH. Skonfigurowałeś już regułę zapory sieciowej zezwalającą na połączenia SSH, więc kontynuacja powinna być bezproblemowa. Odpowiedz na monit naciskając yENTER.

Zapora sieciowa jest teraz aktywna. Uruchom polecenie sudo ufw status verbose, aby zobaczyć ustawione reguły. W dalszej części tego poradnika omówimy bardziej szczegółowo, jak korzystać z zapory UFW, na przykład zezwalanie lub blokowanie różnych rodzajów połączeń.


Krok 5 — Zezwalanie na inne połączenia

W tym momencie powinieneś zezwolić na wszystkie pozostałe połączenia, na które Twój serwer musi odpowiedzieć. Połączenia, na które powinieneś zezwolić, zależą od Twoich konkretnych potrzeb. Wiesz już, jak pisać reguły zezwalające na połączenia na podstawie profilu aplikacji, nazwy usługi lub portu; zrobiłeś to już dla SSH na porcie 22. Możesz to również zrobić dla:

  • HTTP na porcie 80, który jest używany przez niezaszyfrowane serwery internetowe, używając sudo ufw allow http lub sudo ufw allow 80
  • HTTPS na porcie 443, który jest używany przez szyfrowane serwery internetowe, używając sudo ufw allow https lub sudo ufw allow 443
  • Apache z protokołem HTTP i HTTPS, używając sudo ufw allow ‘Apache Full’
  • Nginx z protokołem HTTP i HTTPS, używając sudo ufw allow ‘Nginx Full’

Nie zapomnij sprawdzić, które profile aplikacji są dostępne dla Twojego serwera sudo ufw app list.

Istnieje kilka innych sposobów zezwalania na połączenia, poza określeniem portu lub znanej nazwy usługi. Przyjrzymy się niektórym z nich później.

Konkretne zakresy portów

Za pomocą UFW można określić zakresy portów. Niektóre aplikacje używają wielu portów zamiast jednego.

Na przykład, aby zezwolić na połączenia X11 korzystające z portów 60006007, należy użyć następujących poleceń:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Określając zakresy portów w UFW, należy określić protokół (tcp lub udp), do którego mają być stosowane reguły. Nie wspominaliśmy o tym wcześniej, ponieważ brak określenia protokołu automatycznie zezwala na oba protokoły, co w większości przypadków jest dopuszczalne.

Konkretne adresy IP

Podczas pracy z UFW możesz również określić adresy IP w swoich regułach. Na przykład, jeśli chcesz zezwolić na połączenia z określonego adresu IP, takiego jak służbowy lub domowy adres IP 203.0.113.4, musisz użyć parametru from, podając adres IP, na który chcesz zezwolić:

sudo ufw allow from 203.0.113.4

Output
Rule added

Możesz również określić port, z którym adres IP może się połączyć, dodając to any port po nim numer portu. Na przykład, jeśli chcesz zezwolić
203.0.113.4na połączenie z portem 22(SSH), użyj tego polecenia:

sudo ufw allow from 203.0.113.4

Output
Rule added

Podsieci

Jeśli chcesz zezwolić na podsieć adresów IP, możesz to zrobić, używając notacji CIDR do określenia maski sieci. Na przykład, aby zezwolić na wszystkie adresy IP od 203.0.113.1 do 203.0.113.254 możesz użyć tego polecenia:

sudo ufw allow from 203.0.113.0/24

Output
Rule added

Podobnie możesz określić port docelowy, 203.0.113.0/24 do którego podsieć może się łączyć. Ponownie użyjemy portu 22 (SSH) jako przykładu:

sudo ufw allow from 203.0.113.0/24 to any port 22

Output
Rule added

Połączenia z określonym interfejsem sieciowym

Jeśli chcesz utworzyć regułę zapory, która będzie dotyczyć tylko określonego interfejsu sieciowego, możesz to zrobić, określając opcję „allow in on”, a następnie nazwę interfejsu sieciowego.

Przed kontynuowaniem warto sprawdzić interfejsy sieciowe. Aby to zrobić, użyj tego polecenia:

ip addr

Output
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

Wynik wskazuje nazwy interfejsów sieciowych. Zazwyczaj mają one nazwy takie jak eth0 lub enp3s2.

Jeśli więc Twój serwer ma publiczny interfejs sieciowy o nazwie eth0, możesz zezwolić na ruch HTTP (port 80) do niego za pomocą tego polecenia:

sudo ufw allow in on eth0 to any port 80

Output
Rule added
Rule added (v6)

Dzięki temu serwer będzie mógł odbierać żądania HTTP z publicznego Internetu.

Lub, jeśli chcesz, aby serwer bazy danych MySQL (port 3306) nasłuchiwał połączeń na prywatnym interfejsie sieciowym eth1, możesz na przykład użyć tego polecenia:

sudo ufw allow in on eth1 to any port 3306

Output
Rule added
Rule added (v6)

Dzięki temu inne serwery w Twojej sieci prywatnej będą mogły łączyć się z Twoją bazą danych MySQL.


Krok 6 — Odmowa połączeń

Jeśli nie zmieniłeś domyślnej polityki dla połączeń przychodzących, UFW jest skonfigurowany tak, aby odrzucać wszystkie połączenia przychodzące. Zasadniczo upraszcza to proces tworzenia bezpiecznej polityki zapory sieciowej, wymagając utworzenia reguł, które wyraźnie zezwalają na przechodzenie określonych portów i adresów IP.

Czasami jednak zechcesz zablokować określone połączenia na podstawie źródłowego adresu IP lub podsieci, być może dlatego, że wiesz, że Twój serwer jest atakowany z tego miejsca. Ponadto, aby zmienić domyślną politykę połączeń przychodzących na zezwalającą (co nie jest zalecane), musisz utworzyć reguły blokowania dla wszystkich usług lub adresów IP, dla których nie chcesz zezwalać na połączenia.

Aby zapisać reguły odmowy , możesz skorzystać z poleceń opisanych wcześniej, zastępując allow poleceniem deny .

Na przykład, aby zablokować połączenia HTTP, możesz użyć tego polecenia:

sudo ufw deny http

Output
Rule added
Rule added (v6)

Lub jeśli chcesz zablokować wszystkie połączenia, 203.0.113.4 możesz użyć tego polecenia:

sudo ufw deny from 203.0.113.4

Output
Rule added

W niektórych przypadkach możesz również chcieć zablokować połączenia wychodzące z serwera. Aby uniemożliwić wszystkim użytkownikom korzystanie z portu na serwerze, na przykład portu 25 dla ruchu SMTP, możesz użyć deny out:

sudo ufw deny out 25

Output
Rule added
Rule added (v6)

Spowoduje to zablokowanie całego ruchu wychodzącego SMTP na serwerze.


Krok 7 — Usuwanie reguł

Wiedza o tym, jak usuwać reguły zapory sieciowej, jest równie ważna, jak wiedza o tym, jak je tworzyć. Istnieją dwa sposoby określenia, które reguły mają zostać usunięte: według numeru reguły lub według jej czytelnej dla człowieka nazwy (podobnie jak w przypadku reguł określanych podczas ich tworzenia).

Usuwanie reguły UFW według numeru

Aby usunąć regułę UFW według numeru, najpierw należy uzyskać ponumerowaną listę wszystkich reguł zapory. Polecenie „status UFW” ma opcję wyświetlania numerów obok każdej reguły, jak pokazano tutaj:

sudo ufw status numbered

Output
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22                         ALLOW IN    15.15.15.0/24
[ 2] 80                         ALLOW IN    Anywhere

Jeśli zdecydujesz, że chcesz usunąć regułę numer 2, która zezwala na połączenia przez port 80 (HTTP), osiągniesz to tym poleceniem:

sudo ufw delete 2

Output
Deleting:
 allow 80
Proceed with operation (y|n)? y
Rule deleted

Spowoduje to wyświetlenie monitu o potwierdzenie, a następnie usunięcie reguły 2, która zezwala na połączenia HTTP.

Ważne: Polecenie ufw status numbered tworzy listy reguł oddzielnie dla wersji IPv4 i IPv6. Usunięcie reguły według numeru spowoduje usunięcie tylko tego pojedynczego wpisu. Należy zidentyfikować i usunąć odpowiadającą jej regułę IPv6 osobno. Natomiast usunięcie reguły według nazwy (np. sudo ufw delete allow http) automatycznie usuwa zarówno regułę IPv4, jak i IPv6.

Usuwanie reguły UFW według nazwy

Zamiast używać numerów reguł, możesz również odwołać się do reguły za pomocą jej czytelnej dla człowieka nazwy, która opiera się na typie reguły (zazwyczaj allow lub deny) oraz nazwie usługi lub numerze portu, który był celem tej reguły, lub nazwie profilu aplikacji, jeśli została ona użyta. Na przykład, aby usunąć regułę allow dla profilu aplikacji, Apache Full który został wcześniej włączony, możesz użyć:

sudo ufw delete allow "Apache Full"

Output
Rule deleted
Rule deleted (v6)

Polecenie delete działa w ten sam sposób w przypadku reguł utworzonych z odwołaniem do usługi po jej nazwie lub porcie. Na przykład, jeśli wcześniej ustawiłeś regułę zezwalającą na połączenia HTTP z sudo ufw allow http, możesz ją usunąć w następujący sposób:

sudo ufw delete allow http

Output
Rule deleted
Rule deleted (v6)

Ponieważ podczas określania reguł nazwy usług są zamienne z numerami portów, można odwołać się do tej samej reguły za pomocą allow 80, zamiast allow http:

sudo ufw delete allow 80

Output
Rule deleted
Rule deleted (v6)

Podczas usuwania reguł UFW według nazwy usuwane są zarówno reguły IPv4, jak i IPv6, jeśli takowe istnieją.


Krok 8 — Sprawdzanie statusu i zasad UFW

W każdej chwili możesz sprawdzić status UFW za pomocą tego polecenia:

sudo ufw status verbose

Jeśli UFW jest wyłączone, co domyślnie jest, zobaczysz coś takiego:

Output
Status: inactive

Jeśli UFW jest aktywny, a powinno być, jeśli wykonasz krok 3, wyjście powie, że jest aktywne i będzie zawierać wszelkie zasady, które są ustawione. Na przykład, jeśli zapora zostanie ustawiona, aby umożliwić SSH (port 22) połączenia z dowolnego miejsca, wyjście może wyglądać mniej więcej tak:

Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

Użyj polecenia status, jeśli chcesz sprawdzić, jak UFW skonfigurował zaporę ogniową.


Krok 9 – Wyłącz lub zresetuj zaporę

Jeśli zdecydujesz, że nie chcesz używać zapory UFW, możesz ją dezaktywować za pomocą tego polecenia:

sudo ufw disable

Output
Firewall stopped and disabled on system startup

Wszelkie zasady, które stworzyłeś z UFW, nie będą już aktywne. Zawsze możesz użyć komendy sudo ufw enable jeśli chcesz później aktywować firewall.

Jeśli masz już skonfigurowane reguły UFW, ale zdecydujesz, że chcesz zacząć od nowa, możesz użyć polecenia reset:

sudo ufw reset

Output
Resetting all rules to installed defaults. This may disrupt existing ssh
connections. Proceed with operation (y|n)? y
Backing up 'user.rules' to '/etc/ufw/user.rules.20210729_170353'
Backing up 'before.rules' to '/etc/ufw/before.rules.20210729_170353'
Backing up 'after.rules' to '/etc/ufw/after.rules.20210729_170353'
Backing up 'user6.rules' to '/etc/ufw/user6.rules.20210729_170353'
Backing up 'before6.rules' to '/etc/ufw/before6.rules.20210729_170353'
Backing up 'after6.rules' to '/etc/ufw/after6.rules.20210729_170353'

Spowoduje to wyłączenie UFW i usunie wszelkie reguły, które zostały wcześniej zdefiniowane. To da ci nowy początek z UFW. Należy pamiętać, że domyślne zasady pozostaną jako ostatni zestaw; może być konieczne ich ręczne zresetowanie.

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *