Jakie usługi nasłuchują na Państwa VPS i co jest dostępne z zewnątrz?
Każdy program, który przyjmuje połączenia, nasłuchuje na porcie: SSH na 22, serwer WWW na 80 i 443, MariaDB na 3306. Każdy port dostępny z zewnątrz to drzwi do Państwa serwera. Strona internetowa zwykle potrzebuje z zewnątrz tylko portów 22, 80 i 443. W tym artykule wyjaśniamy, jak sprawdzić, co nasłuchuje i na jakim adresie, oraz jak zweryfikować, co widzi reszta internetu.
Sprawdzanie, co nasłuchuje
Prosimy uruchomić na swoim VPS:
sudo ss -tulpn
Opcje oznaczają: TCP (-t), UDP (-u), tylko nasłuchujące (-l), który program (-p) oraz numery zamiast nazw (-n). Przykład:
tcp LISTEN 0.0.0.0:22 users:(("sshd",...))
tcp LISTEN 0.0.0.0:443 users:(("nginx",...))
tcp LISTEN 127.0.0.1:3306 users:(("mariadbd",...))
tcp LISTEN 0.0.0.0:6379 users:(("redis-server",...))
tcp LISTEN [::]:22 users:(("sshd",...))
Najważniejsza jest kolumna Local Address, czyli adres, na którym program nasłuchuje:
| Adres | Znaczenie |
|---|---|
0.0.0.0 | Wszystkie adresy IPv4, a więc także Państwa adres publiczny: dostępny z zewnątrz, chyba że zablokuje go firewall |
[::] | Wszystkie adresy IPv6: to samo dla IPv6 |
127.0.0.1 lub [::1] | Tylko sam serwer (loopback): nigdy niedostępny z zewnątrz |
127.0.0.53 lub 127.0.0.54 | Również loopback: lokalny pomocnik DNS usługi systemd-resolved |
W przykładzie MariaDB jest skonfigurowana prawidłowo: dostęp do niej mają tylko programy na samym serwerze. Redis nasłuchuje na wszystkich adresach i właśnie o ten błąd chodzi.
Zamykanie w samej usłudze
Baza danych, cache czy panel administracyjny prawie nigdy nie powinny być dostępne z zewnątrz. Najlepszym pierwszym krokiem jest ustawienie, aby usługa nasłuchiwała tylko na loopback. W Debianie i Ubuntu:
| Program | Ustawienie | Plik |
|---|---|---|
| MariaDB lub MySQL | bind-address = 127.0.0.1 | /etc/mysql/mariadb.conf.d/50-server.cnf |
| PostgreSQL | listen_addresses = 'localhost' | /etc/postgresql/<wersja>/main/postgresql.conf |
| Redis | bind 127.0.0.1 -::1 oraz protected-mode yes | /etc/redis/redis.conf |
Następnie prosimy zrestartować usługę (zob. Zarządzanie usługami za pomocą systemctl na VPS) i ponownie sprawdzić za pomocą ss -tulpn. Jeśli chcą Państwo łączyć się z bazą danych z własnego laptopa, prosimy użyć tunelu SSH zamiast otwartego portu, zob. Konfiguracja SSH: logowanie za pomocą krótkiej nazwy.
Firewall jako druga warstwa
Firewall blokuje to, co mimo wszystko przez przypadek nasłuchuje na wszystkich adresach. Sposób konfiguracji ufw opisujemy w artykule Firewall z ufw (lub nftables). Prosimy nie polegać na jednej warstwie: firewall może być wyłączony, a reguła może być zbyt szeroka.
ports:) omijają ufw. Baza danych z "3306:3306" jest wtedy dostępna z zewnątrz, nawet jeśli ufw pokazuje, że port jest zamknięty. Prosimy dodać przed nim 127.0.0.1: lub nie publikować portu. Zob. Docker i firewall: bezpieczne publikowanie portów.Sprawdzanie z zewnątrz
ss pokazuje, co nasłuchuje na serwerze, ale nie to, co przepuszcza firewall. Prawdziwą kontrolę przeprowadza się z innego komputera, a nie z samego serwera. Za pomocą nc (netcat) na Macu lub Linuksie:
nc -vz -w 3 203.0.113.10 6379 nc -6 -vz -w 3 2001:db8::10 6379
W systemie Windows to samo robi PowerShell poleceniem Test-NetConnection 203.0.113.10 -Port 6379. Prosimy wpisać własny adres IPv4 i IPv6; znajdą je Państwo na ekranie VPS. Wynik należy odczytać następująco:
- Otwarty (succeeded): coś nasłuchuje i jest dostępne z zewnątrz.
- Zamknięty (Connection refused): nic nie nasłuchuje lub firewall aktywnie odrzuca połączenie.
- Filtrowany (time-out): firewall po cichu odrzuca ruch.
W przypadku bazy danych zarówno stan zamknięty, jak i filtrowany są prawidłowe. Prosimy przetestować również IPv6: częstym błędem jest firewall z regułami tylko dla IPv4, podczas gdy usługa nasłuchuje także na [::]. Skaner portów, taki jak nmap, sprawdza wiele portów jednocześnie; prosimy używać go wyłącznie na własnym serwerze.
Państwa VPS jest w pełni samodzielnie zarządzany: to Państwo decydują, jakie usługi nasłuchują i jak skonfigurowany jest firewall. My pomagamy w części dotyczącej WebOké, takiej jak ekran VPS, sieć i snapshoty.
Chcą Państwo dowiedzieć się więcej? Zapraszamy na bezpłatny kurs VPS i administrowania serwerem Linux, lekcja 5.1 Porty i nasłuchujące usługi lub lekcja 5.2 Firewall z ufw i nftables.
