Dziś przeglądałem się liście tematów do opisania, i gdzieś tam na dole, trochę zapomniane grzecznie czekały tematy związane z podstawową konfiguracja serwera opartego (nie tylko) o system Debian (dedykowany, Raspberry Pi czy VPS, nie ma znaczenia).

Część zagadnień już za nami, ale zostało jeszcze kilka, może nie tak nośnych jak choćby instalacja i konfiguracja serwera WWW, ale moim zdaniem są to tematy niezbędne – związane z bezpieczeństwem.

Dlatego w najbliższych dniach spodziewajcie się 4-6 wpisów poświęconych podstawowym środkom bezpieczeństwa (nie tylko) na serwerze, po których spróbuję zrobić wpis z małym podsumowanie, i zebraniem wszystkich najważniejszych tematów w jednym miejscu/wpisie.

Dziś firewall – prosty, a skuteczny…

UFW – Uncomplicated Firewall

Programem który wykorzystamy do stworzenia/skonfigurowania naszej zapory sieciowej (firewall) będzie UFW, który tak naprawdę jest pewnego rodzaju nakładką na IPtables, ale dzięki swojej skuteczności i prostocie obsługi ma wielu zwolenników.

Instalacja i podstawowa konfiguracja

Standardowo zaczniemy od instalacji, a ta będzie prosta – bo UFW znajduje się w repozytoriach Debiana (Raspbiana, Ubuntu), więc wystarczy skorzystać z polecenia:

sudo apt-get install ufw

Po instalacji jeszcze włączymy automatyczny start usługi wraz z systemem:

sudo nano /etc/ufw/ufw.conf

I zmieniamy:

ENABLED=no

na:

ENABLED=yes

Można się jeszcze upewnić, czy mamy aktywną obsługę IPv6:

IPV6=yes

Nawet jak teraz/jeszcze nie korzystacie z IPv6, to nie zaszkodzi – będzie na przyszłość.

Status usługi

Zanim zaczniemy jakiekolwiek zmiany w konfiguracji dotyczące blokowania sprawdzamy status usługi, by później nie było niespodzianek:

sudo ufw status verbose

Raczej na pewno otrzymacie w odpowiedzi:

Status: inactive

Gdyby status był „active” (mało prawdopodobne na tym etapie, ale…), to przed dalszą konfiguracją warto tymczasowo wyłączyć UFW:

sudo ufw disable

oraz zrestartować do wartości domyślnych:

sudo ufw reset

Konfiguracja reguł

Standardowo zaczynam konfigurację reguł UFW od 2 podstawowych reguł:

sudo ufw default deny incoming
sudo ufw default allow outgoing

Pierwsza blokuje cały ruch przychodzący, druga pozwala na ruch wychodzący, co jest bazą dla pozostałych reguł, w których będziemy zezwalać na połączenia przychodzące dla różnych portów/usług.

Struktura poleceń

Zacznę od zaprezentowania podstawowych poleceń, i będą to chyba najczęściej używane/najpopularniejsze, choć nie obiecuje, że wszystkie:

sudo ufw allow [nazwa_usługi]
sudo ufw allow [port]
sudo ufw allow [port_od]:[port_do]
sudo ufw allow [port]/[typ_połączenia]
sudo ufw allow [port_od]:[port_do]/[typ_połączenia]
sudo ufw allow from [adres_IP]
sudo ufw allow from [adres_IP] to any port [port]
sudo ufw allow from [adres_IP]/[maska_sieciowa] to any port [port]
sudo ufw allow from [adres_IP]/[maska_sieciowa] to any port [port] proto [typ_połączenia]
sudo ufw allow in on [interfejs_sieciowy] to any port [port]
sudo ufw insert [numer_reguły] deny [port]
sudo ufw insert [numer_reguły] deny from [adres_IP]

Pewnie część z Was się domyśliła, że tam gdzie jest „allow” (zezwól) można wpisać „denny” (zabroń) by stworzyć regułę blokującą, zamiast zezwalającej.

To wyjaśnię jeszcze pozostałe zwroty, choć pewnie część/większość również jest dość oczywista:

  • [nazwa_usługi] – zamiast podawać konkretny port czy ty protokołu można podać nazwę usługi (np. ssh, http, https). Raczej nie korzystam, wolę ręcznie/samodzielnie wskazać co, gdzie i jak
  • [port] – port na którym nasłuchuje jakaś usługa, a których chcemy otworzyć (np. 80 dla HTTP, 443 dla HTTPS, 3306 dla MySQL)
  • [port_od]:[port_do] – zakres portów, „od – do” (np. 80-88)
  • [typ_połączenia] – możecie sprecyzować czy reguła dotyczy protokołu „tcp” czy „udp” (domyślnie oba)
  • [adres_IP] – ograniczamy działanie reguły do konkretnego adresu IP (np. 123.123.123.123)
  • [maska_sieciowa] – maska sieciowa, dzięki której możemy za pomocą jednej reguły zdefiniować wiele adresów IP, np. całą sieć LAN
  • [interfejs_sieciowy] – oznaczenie karty sieciowej, dla ruchu na której reguła będzie mieć zastosowanie (np. eth0)
  • [numer_reguły] – reguły dotyczące blokowania warto dawać na górze, przed regułami zezwalającymi (w dalszej części będzie o wyświetlaniu zdefiniowanych reguł)

Tak jak napisałem powyżej – pewnie nie wyczerpałem wszystkich dostępnych poleceń dotyczących tworzenia reguł, ale na pewno te podstawowe. Zresztą jak chyba widać na przykładach – można poszczególne elementy właściwie dowolnie ze sobą mieszać/łączyć.

Przykładowe reguły

Poniżej kilka przykładowych reguł – niekoniecznie używanych przeze mnie, ale dotyczących dość popularnych usług, a zarazem pozwalających zobrazować to o czym pisałem powyżej.

Serwer SSH na porcie 22 (choć zawsze zalecam zmianę):

sudo ufw allow 22

Serwer WWW na porcie 80:

sudo ufw allow 80

Serwer WWW, połączenie szyfrowane na porcie 443:

sudo ufw allow 443

Serwer miniDLNA na porcie 8200, dostępne tylko sieci LAN 10.0.*.*:

sudo ufw allow from 10.0.0.1/16 to any port 8200

Serwer CUPS na porcie 631:

sudo ufw allow from 10.0.0.1/16 to any port 631

Serwer Samba, dostęp z sieci LAN + oddzielne porty dla oddzielnych typów połączenia:

sudo ufw allow from 10.0.0.1/16 to any port 137 proto udp
sudo ufw allow from 10.0.0.1/16 to any port 138 proto udp
sudo ufw allow from 10.0.0.1/16 to any port 139 proto tcp
sudo ufw allow from 10.0.0.1/16 to any port 445 proto tcp

Serwer NTP na porcie 123:

sudo ufw allow 123/udp

Serwer VPN PPTP na porcie 1723:

sudo ufw allow 1723

W przypadku usługi VPN (PPTP) samo otwarcie portu może być za mało – w systemie Raspbian/Debian 7 Wheezy nie było takiej potrzeby, to już w Raspbian/Debian 8 Jessie bez tych dodatkowych operacji UFW nie pozwoli na korzystanie z VPNa.

Zaczynamy od edycji pliku:

sudo nano /etc/ufw/before.rules

gdzie dodajemy:

# Dla VPN/PPTP
-A ufw-before-input -p 47 -j ACCEPT
-A ufw-before-output -p 47 -j ACCEPT

Ja zazwyczaj dodaję zaraz po fragmencie:

# Don't delete these required lines, otherwise there will be errors * filter
(...)
# End required lines

Dodatkowo w pliku:

sudo nano /etc/default/ufw

zmieniamy:

DEFAULT_FORWARD_POLICY="DROP"

na:

DEFAULT_FORWARD_POLICY="ACCEPT"

Start usługi

Gdy już zablokowaliście wszystkie połączenia przychodzące, zezwoliliście na połączenia wychodzące, i odblokowaliście choćby port dla SSH (jeśli tak jesteście połączeni z serwerem/komputerem) możecie aktywować zaporę za pomocą polecenia:

sudo ufw enable
W tym momencie jeszcze raz uczulam, że gdy łączycie się z danym komputerem/serwerem zdalnie (np. za pomocą SSH) przed aktywacją zapory (UFW) odblokować niezbędne porty dla danego połączenia, tak byście nie odcięli sobie dostępu do systemu.

Jeśli jesteście pewni, że wszystko jest OK, na pytanie które pojawi się przy próbie uruchomienia zapory odpowiadacie „y”:

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

Lista reguł, stan zapory

W każdej chwili – po aktywacji usługi – może sprawdzić listę ustawionych/zdefiniowanych reguł za pomocą polecenia:

sudo ufw status

lub:

sudo ufw status verbose

Przykładowa odpowiedź:

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

To                         Action      From
--                         ------      ----
22			   ALLOW IN    Anywhere
1723                       ALLOW IN    Anywhere
80                         ALLOW IN    Anywhere
443                        ALLOW IN    Anywhere
8200                       ALLOW IN    10.0.0.1/16
631                        ALLOW IN    10.0.0.1/16
137/udp                    ALLOW IN    10.0.0.1/16
138/udp                    ALLOW IN    10.0.0.1/16
139/tcp                    ALLOW IN    10.0.0.1/16
445/tcp                    ALLOW IN    10.0.0.1/16
123/udp                    ALLOW IN    Anywhere
22		           ALLOW IN    Anywhere (v6)
1723                       ALLOW IN    Anywhere (v6)
80                         ALLOW IN    Anywhere (v6)
443                        ALLOW IN    Anywhere (v6)
123/udp                    ALLOW IN    Anywhere (v6)

Choć jak polecam wersję z numerowaniem, co przyda się np. przy kasowaniu niepotrzebnych reguł:

sudo ufw status numbered

W odpowiedzi – dla naszego testowego zestawu – zobaczycie coś takiego:

Status: active

     To Action      From
     --                         ------      ----
[ 1] 22		                ALLOW IN    Anywhere
[ 2] 1723                       ALLOW IN    Anywhere
[ 3] 80                         ALLOW IN    Anywhere
[ 4] 443                        ALLOW IN    Anywhere
[ 5] 8200                       ALLOW IN    10.8.0.0/16
[ 6] 631                        ALLOW IN    10.8.0.0/16
[ 7] 137/udp                    ALLOW IN    10.8.0.0/16
[ 8] 138/udp                    ALLOW IN    10.8.0.0/16
[ 9] 139/tcp                    ALLOW IN    10.8.0.0/16
[10] 445/tcp                    ALLOW IN    10.8.0.0/16
[11] 123/udp                    ALLOW IN    Anywhere
[12] 22		                ALLOW IN    Anywhere (v6)
[13] 1723                       ALLOW IN    Anywhere (v6)
[14] 80                         ALLOW IN    Anywhere (v6)
[15] 443                        ALLOW IN    Anywhere (v6)
[16] 123/udp                    ALLOW IN    Anywhere (v6)

Kasowanie niepotrzebnych reguł

Kasować reguły możecie za pomocą polecenia za pomocą którego zostały wcześniej utworzone – wystarczy po „ufw” dodać „delete”:

sudo ufw delete allow 22
sudo ufw delete allow 123/udp

To moim zdaniem dużo wygodniejszą metodą jest skorzystanie z polecenia:

sudo ufw status numbered

Co spowoduje wyświetlenie listy reguł z przyporządkowanymi im numerami:

Status: active

     To Action      From
     --                         ------      ----
[ 1] 22		                ALLOW IN    Anywhere
[ 2] 1723                       ALLOW IN    Anywhere
[ 3] 80                         ALLOW IN    Anywhere
[ 4] 443                        ALLOW IN    Anywhere
[ 5] 8200                       ALLOW IN    10.8.0.0/16
[ 6] 631                        ALLOW IN    10.8.0.0/16
[ 7] 137/udp                    ALLOW IN    10.8.0.0/16
[ 8] 138/udp                    ALLOW IN    10.8.0.0/16
[ 9] 139/tcp                    ALLOW IN    10.8.0.0/16
[10] 445/tcp                    ALLOW IN    10.8.0.0/16
[11] 123/udp                    ALLOW IN    Anywhere
[12] 22		                ALLOW IN    Anywhere (v6)
[13] 1723                       ALLOW IN    Anywhere (v6)
[14] 80                         ALLOW IN    Anywhere (v6)
[15] 443                        ALLOW IN    Anywhere (v6)
[16] 123/udp                    ALLOW IN    Anywhere (v6)

Dzięki temu możemy kasować reguły szybko i precyzyjnie za pomocą polecenia:

sudo ufw delete 1

Co spowoduje skasowanie reguły:

[ 1] 22		                ALLOW IN    Anywhere

Reset ułatwień

Gdyby tak się stało, że z jakiś przyczyn (np. testy ;-)) tak namieszaliście w konfiguracji, że sami już nie wiecie która regułą do czego służy, to zawsze możecie zresetować/wyczyścić dodane reguły:

sudo ufw reset

Tylko pamiętajcie by wcześniej – na wszelki wypadek – zdezaktywować zaporę:

sudo ufw disable

GUFW, czyli UFW z graficznym interfejsem użytkownika (GUI)

Jeśli zamiast poleceń wydawanych z konsoli (wiersza poleceń – windowsowiec ze mnie) wolicie korzystać z graficznego interfejsu użytkownika, to możecie doinstalować sobie program GUFW:

sudo apt-get install gufw

Program ten uruchomicie bezpośrednio z poziomu systemu (gdy korzystacie z trybu graficznego), lub gry u Was tak jak u mnie Linux to tylko konsola (tylko na potrzeby serwerów, prywatnie/na co dzień Windows ;-)) za pomocą X11/Xming:

gksudo gufw

W głównym oknie programu znajdziecie status usługi, podstawowe opcje związane ze sterowaniem UFW, oraz listę zdefiniowanych reguł:

linux_ufw_gufw

Samo dodawanie reguł oczywiście też możecie wykonać w trybie graficznym, tutak w trybie zaawansowanym:

linux_ufw_gufw_add-rule01

Podsumowanie

I to właściwie wszystko – mam nadzieję, że dzięki temu poradnikowi Ci z Was (zwłaszcza na serwerze) którzy do tej pory nie korzystali z żadnej zapory zdecydują się na wdrożenie u siebie choćby UFW, co jest jak widzieliście – a przynajmniej mam taką nadzieje – proste, a zarazem skuteczne.

By uzyskać więcej informacji wystarczy, że skorzystacie z polecenia:

man ufw

Jak napisałem we wstępie – to pierwszy wpis z kilku które wisiały, a które chyba pozwolą nam zamknąć temat przygotowania serwera VPS do pracy jako m.in. serwer WWW…

(!) Zgłoś błąd na stronie
Potrzebujesz profesjonalnej pomocy? Skontaktuj się z nami!
Spodobał Ci się artykuł? Zapisz się do naszego Newslettera - ZERO SPAMu, same konkrety, oraz dostęp do dodatkowych materiałów przeznaczonych dla subskrybentów!
Na podany adres e-mail otrzymasz od nas wiadomość e-mail, w której znajdziesz link do potwierdzenia subskrypcji naszego Newslettera. Dzięki temu mamy pewność, że nikt nie dodał Twojego adresu przez przypadek. Jeśli wiadomość nie przyjdzie w ciągu najbliższej godziny (zazwyczaj jest to maksymalnie kilka minut) sprawdź folder SPAM.
Roztańczona Karolina zapisała się do Newslettera WebInsider.pl i... teraz może tańczyć
WebInsider poleca księgowość wFirma
WebInsider korzysta z VPSa w HitMe.pl
WebInsider poleca VPSy DigitalOcean
WebInsider poleca serwis Vindicat
Napisz komentarz
wipl_napisz-komentarz_01Jeśli informacje zawarte na tej stronie okazały się pomocne, możesz nam podziękować zostawiając poniżej swój komentarz.

W tej formie możesz również zadać dodatkowe pytania dotyczące wpisu, na które – w miarę możliwości – spróbujemy Ci odpowiedzieć.
Linki partnerskie
Niektóre z linków na tej stronie to tzw. „linki partnerskie”, co oznacza, że jeśli klikniesz na link i dokonasz wymaganej akcji (np. zakup/rejestracja) możemy otrzymać za to prowizję. Pamiętaj, że polecamy tylko te produkty i usługi, z których sami korzystamy, i uważamy, że są tego na prawdę warte… :-)
Znaki towarowe i nazwy marek
W niektórych wpisach (oraz innych miejscach na stronie) mogą być przedstawione/użyte znaki towarowe i/lub nazwy marek, które stanowią własność intelektualną tych podmiotów, a zostały użyte wyłącznie w celach informacyjnych.
Młody Szymon dzięki motywowi Divi od Elegant Themes zrobił stronę dla firmy ojca