Gdy zainfekowany skrypt lub źle skonfigurowana aplikacja zaczyna skanować adresy 10.x albo 192.168.x, ruch opuszcza Twój serwer i często wywołuje zgłoszenia nadużyć od operatora sieci. Zablokowanie połączeń wychodzących do zakresów prywatnych to proste zabezpieczenie na każdym VPS Linux Infrawire. Ten poradnik pokazuje, jak zrobić to w UFW bez psucia DNS ani własnej łączności.
📋 Wymagania wstępne
- VPS z dostępem SSH jako root, z Ubuntu 24.04 lub Debianem 12 (UFW jest dostępny w obu).
- Podstawowa znajomość UFW. Jeśli nie jest jeszcze zainstalowany:
Bashsudo apt update && sudo apt install -y ufw
- Druga sesja SSH otwarta na czas zmian w zaporze.
🧭 Które zakresy blokować
| Zakres | Zastosowanie |
|---|---|
10.0.0.0/8 | Prywatny RFC1918 |
172.16.0.0/12 | Prywatny RFC1918 |
192.168.0.0/16 | Prywatny RFC1918 |
100.64.0.0/10 | NAT operatorski (RFC6598) |
169.254.0.0/16 | Link-local IPv4 |
192.0.0.0/24 | Przydziały protokołowe IETF |
198.18.0.0/15 | Testy wydajności |
fc00::/7 | Unikalne adresy lokalne IPv6 |
Nie blokuj fe80::/10: IPv6 używa adresów link-local do wykrywania sąsiadów i często jako bramy domyślnej, więc ich zablokowanie całkowicie odcina IPv6.
🔍 Najpierw sprawdź, czego naprawdę potrzebuje VPS
Jeśli brama lub resolver DNS leży w zakresie prywatnym, blokada globalna odetnie Twoją sieć. Przed dodaniem jakiejkolwiek reguły przejrzyj konfigurację:
Baship route ip -6 route cat /etc/resolv.conf resolvectl status | grep -E 'DNS Servers|Link'
Jeśli resolver lub usługa, od której zależysz, ma adres prywatny (PRIVATE_DNS_IP), zezwól na niego jawnie i umieść tę regułę na początku, jak poniżej. Jeśli wszystko, czego używasz, jest publiczne, możesz pominąć ten krok.
🧱 Metoda 1: ufw deny out
Upewnij się, że SSH pozostaje dostępny, i ustaw domyślne polityki. Odpowiedzi przychodzące na Twoje sesje SSH nie są dotknięte regułami wychodzącymi do zakresów prywatnych.
Bashsudo ufw allow 22/tcp sudo ufw default deny incoming sudo ufw default allow outgoing
Jeśli potrzebujesz wyjątku, wstaw go na pozycji 1, aby był sprawdzany przed blokadami:
Bashsudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53
Teraz dodaj blokady, po jednej na zakres (UFW sprawdza reguły po kolei, obowiązuje pierwsze dopasowanie):
Bashsudo ufw deny out to 10.0.0.0/8 sudo ufw deny out to 172.16.0.0/12 sudo ufw deny out to 192.168.0.0/16 sudo ufw deny out to 100.64.0.0/10 sudo ufw deny out to 169.254.0.0/16 sudo ufw deny out to 192.0.0.0/24 sudo ufw deny out to 198.18.0.0/15 sudo ufw deny out to fc00::/7 sudo ufw enable
ufw enable może ostrzec, że zakłóci połączenia SSH; ponieważ port 22 jest dozwolony, odpowiedz y. Sprawdź kolejność poleceniem:
Bashsudo ufw status numbered
📄 Metoda 2: before.rules
Jeśli wolisz jeden blok reguł stosowany przed regułami użytkownika, edytuj /etc/ufw/before.rules. Najpierw zrób kopię zapasową:
Bashsudo cp /etc/ufw/before.rules /etc/ufw/before.rules.bak sudo nano /etc/ufw/before.rules
W sekcji *filter, po liniach akceptujących loopback i połączenia już nawiązane, dodaj:
TEXT1# Blokada ruchu wychodzącego do sieci prywatnych 2-A ufw-before-output -d 10.0.0.0/8 -j REJECT 3-A ufw-before-output -d 172.16.0.0/12 -j REJECT 4-A ufw-before-output -d 192.168.0.0/16 -j REJECT 5-A ufw-before-output -d 100.64.0.0/10 -j REJECT 6-A ufw-before-output -d 169.254.0.0/16 -j REJECT
IPv6 ma własny plik, /etc/ufw/before6.rules, z łańcuchem ufw-before-output:
TEXT-A ufw-before-output -d fc00::/7 -j REJECT
Wyjątek dla PRIVATE_DNS_IP umieść tuż nad tymi liniami: -A ufw-before-output -d PRIVATE_DNS_IP -j ACCEPT. Przeładuj:
Bashsudo ufw reload
REJECT odpowiada natychmiast błędem, więc aplikacje kończą się niepowodzeniem od razu zamiast czekać na timeout. Użyj -j DROP, jeśli wolisz ciszę.
✅ Weryfikacja
Reguły muszą być załadowane, a zablokowane cele muszą zawodzić, podczas gdy publiczne nadal działają:
Bashsudo ufw status verbose ping -c 1 10.0.0.1 # musi zawieść ping -c 1 192.168.1.1 # musi zawieść curl -m 5 http://10.0.0.1 # musi zawieść ping -c 2 1.1.1.1 # musi się udać dig +short example.com # musi się rozwiązać curl -I https://www.debian.org
Przy ufw deny out nieudany ping zwykle zgłasza Operation not permitted. Liczniki pakietów potwierdzają trafienia:
Bashsudo iptables -L ufw-user-output -n -v sudo iptables -L ufw-before-output -n -v
🛠️ Rozwiązywanie problemów
DNS przestał działać. Twój resolver jest w zakresie prywatnym. Popraw kolejność przez sudo ufw status numbered, a potem dodaj sudo ufw insert 1 allow out to PRIVATE_DNS_IP port 53. Możesz też przełączyć się na publiczny resolver w konfiguracji sieci.
Po zmianie IPv6 nie działa. Prawdopodobnie zablokowałeś fe80::/10 albo bramę w fc00::/7. Usuń regułę poleceniem sudo ufw delete deny out to fc00::/7 i dodaj ponownie tylko to, co potrzebne.
Straciłeś dostęp do usługi w sieci prywatnej (VPN, wewnętrzne API). Dodaj regułę zezwalającą dla dokładnie tego adresu: ufw insert 1 allow out to PRIVATE_IP. Jeśli odciąłeś sam SSH, użyj dowolnego dostępu konsolowego do serwera i wykonaj sudo ufw disable.
🔒 Twój VPS nie może już przypadkiem skanować sieci prywatnych: zgłoszenia nadużyć tego typu powinny ustać.