Zarządzanie firewallem UFW
Spis treści
Serwer wystawiony do internetu bez firewalla? Da się tak żyć. Tylko po co.
Jeśli chcesz, żeby z zewnątrz widać było wyłącznie te porty, których faktycznie używasz, sięgnij po UFW (Uncomplicated Firewall). Nazwa nie kłamie - to naprawdę jest nieskomplikowane, bo UFW to po prostu nakładka na iptables, która tłumaczy ludzkie polecenia na tamtejsze zaklęcia.
Na Mikrusie#
Tu sprawa jest banalna. W NOOBS-ie mamy gotowy skrypt, który ustawia domyślne polityki, otwiera SSH i trzy standardowe porty Twojego Mikrusa, a na deser dokłada ochronę przed skanowaniem portów.
NOOBS-a jeszcze nie masz? Proszę bardzo:
curl -s https://noobs.mikr.us | bash
A potem już tylko:
sudo /opt/noobs/scripts/chce_firewall.sh
Skrypt sam wyłuskuje numer Mikrusa z nazwy hosta i na tej podstawie otwiera porty 10000+ID, 20000+ID oraz 30000+ID. Jeżeli w panelu masz wyklikane jeszcze jakieś dodatkowe porty, podaj je jako argumenty:
sudo /opt/noobs/scripts/chce_firewall.sh 8080 2222
Koniec. Serio. Od teraz wszystko, co przychodzi z zewnątrz, jest odbijane, chyba że jawnie na to pozwoliłeś.
Na dowolnym serwerze (Ubuntu/Debian)#
Wolisz wiedzieć, co się dzieje pod maską? Albo siedzisz na VPS-ie u kogoś innego? Poniżej to samo ręcznie. Na Mikrusie działa identycznie.
UFW najczęściej już siedzi w systemie (przyjeżdża razem z openssh-server), tyle że uśpiony. Sprawdź:
sudo ufw status
Status: inactive? W porządku, lecimy dalej. A gdyby UFW w ogóle nie było:
sudo apt update && sudo apt install ufw
Teraz haczyk, na który łapie się sporo osób. Na standardowym obrazie Ubuntu, z którego korzysta Mikrus, domyślna polityka dla ruchu przychodzącego to ACCEPT, nie DENY - czyli “wchodźcie wszyscy”. Samo ufw enable niczego więc nie zablokuje. Politykę trzeba ustawić jawnie:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Zanim włączysz firewall, otwórz SSH. Bez dyskusji. Inaczej zamkniesz drzwi, stojąc po złej stronie:
sudo ufw allow 22/tcp
Na Mikrusie dorzuć od razu trzy standardowe porty (112 zamień na numer swojej maszyny):
sudo ufw allow 10112/tcp
sudo ufw allow 20112/tcp
sudo ufw allow 30112/tcp
Chwila, moment. Czemu SSH to 22, skoro łączysz się na 10112? Bo reguły UFW dotyczą portu, na którym usługa nasłuchuje wewnątrz kontenera, a ten nie musi się pokrywać z numerem widocznym z zewnątrz. Ruch na 10112 przekierowujemy u siebie na 22 w Twoim kontenerze. Z pozostałymi dwoma portami (20000+ID i 30000+ID) jest prościej, bo przekierowanie idzie 1:1 i numery się zgadzają.
Teraz można już spokojnie:
sudo ufw enable
Podstawowe komendy#
Strona WWW? Otwierasz 80 i 443:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Blokada portu. Przydaje się zaskakująco często, bo niejedna aplikacja po instalacji ochoczo wystawia się na cały świat, choć nikt jej o to nie prosił:
sudo ufw deny 8080/tcp
Dostęp tylko z jednego adresu IP, na przykład do panelu admina wyłącznie z domowego łącza:
sudo ufw allow from 81.15.20.33 to any port 8080
I moja ulubiona komenda, czyli rate limiting. Szczerze mówiąc, przy SSH to całkiem sensowny zamiennik fail2ban dla leniwych: 6 prób połączenia w ciągu 30 sekund i adres ląduje na 30 sekund w karnym kącie.
sudo ufw limit 22/tcp
Na koniec IPv6, o którym ludzie notorycznie zapominają. Każdy Mikrus ma prawdziwy, publiczny adres IPv6, bez żadnego NAT-u. Ruch po IPv6 trafia więc prosto do kontenera i nie przechodzi przez te trzy przekierowane porty. Brzmi groźnie, ale UFW ogarnia to bez Twojego udziału: każda reguła dostaje bliźniaczkę dla IPv6, oznaczoną w statusie jako (v6).
Sprawdzanie stanu firewalla#
sudo ufw status verbose
Wersja z numerkami, która przyda się za moment przy usuwaniu:
sudo ufw status numbered
Usuwanie reguły#
Można podać regułę dokładnie tak, jak przy dodawaniu:
sudo ufw delete allow 8080/tcp
Można też po numerze z ufw status numbered:
sudo ufw delete 3
UFW upewni się jeszcze pytaniem Proceed with operation (y|n)?. Wciskasz y.
Najczęstsze błędy#
Odcięcie samego siebie. Klasyka gatunku. ufw enable przy polityce deny incoming, a wcześniej zabrakło ufw allow 22/tcp, i SSH milknie w ułamku sekundy. Na Mikrusie z opresji wyciągnie Cię MARIAN z panelu - za jego pomocą odpalisz na serwerze ufw disable, nawet gdy SSH już nie wpuszcza.
Reguła niby jest, ale nie działa. W dziewięciu przypadkach na dziesięć chodzi o pomylenie portu zewnętrznego z panelu z wewnętrznym, na którym usługa faktycznie słucha. Wróć do przykładu z SSH.
UFW plus ręczne reguły iptables. Nie róbcie tego. UFW zarządza w iptables własnymi łańcuchami, a dokładanie do nich ręcznych reguł kończy się zachowaniem, którego nie przewidzi nikt, łącznie z autorem tych reguł.
Jeśli szukasz miejsca dla swoich developerskich potrzeb, to zapoznaj się z ofertą serwerów VPS od Mikrusa.
SerweryVPS już od 35 zł rocznie.
Dowiedz się więcej