Ktoré služby počúvajú na vašom VPS a čo je dostupné zvonku?
Každý program, ktorý prijíma pripojenia, počúva na porte: SSH na 22, webový server na 80 a 443, MariaDB na 3306. Každý port, ktorý je dostupný zvonku, predstavuje dvere do vášho servera. Webová stránka zvonku zvyčajne potrebuje iba porty 22, 80 a 443. Tu sa dozviete, ako zistiť, čo počúva a na akej adrese, a ako overiť, čo vidí zvyšok internetu.
Čo počúva na serveri
Spustite na svojom VPS:
sudo ss -tulpn
Voľby znamenajú: TCP (-t), UDP (-u), iba počúvajúce (-l), ktorý program (-p) a čísla namiesto názvov (-n). Príklad:
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",...))
Dôležitý je stĺpec Local Address, teda adresa, na ktorej program počúva:
| Adresa | Význam |
|---|---|
0.0.0.0 | Všetky adresy IPv4, teda aj vaša verejná adresa: dostupné zvonku, pokiaľ to nezablokuje firewall |
[::] | Všetky adresy IPv6: to isté pre IPv6 |
127.0.0.1 alebo [::1] | Iba samotný server (loopback): zvonku nikdy nedostupné |
127.0.0.53 alebo 127.0.0.54 | Tiež loopback: lokálny pomocník DNS služby systemd-resolved |
V príklade je MariaDB v poriadku: pristupovať k nej môžu iba programy na samotnom serveri. Redis počúva na všetkých adresách, a práve o túto chybu tu ide.
Uzavretie priamo v službe
Databáza, cache alebo administračné rozhranie by takmer nikdy nemali byť dostupné zvonku. Najlepším prvým krokom je, aby služba počúvala iba na loopback. Na Debiane a Ubuntu:
| Program | Nastavenie | Súbor |
|---|---|---|
| MariaDB alebo MySQL | bind-address = 127.0.0.1 | /etc/mysql/mariadb.conf.d/50-server.cnf |
| PostgreSQL | listen_addresses = 'localhost' | /etc/postgresql/<verzia>/main/postgresql.conf |
| Redis | bind 127.0.0.1 -::1 a protected-mode yes | /etc/redis/redis.conf |
Potom službu reštartujte (pozrite Správa služieb pomocou systemctl na vašom VPS) a znova skontrolujte pomocou ss -tulpn. Ak sa chcete k databáze pripojiť zo svojho notebooku, použite namiesto otvoreného portu SSH tunel, pozrite Konfigurácia SSH: prihlásenie pomocou krátkeho názvu.
Firewall ako druhá vrstva
Firewall zablokuje to, čo napriek tomu omylom počúva na všetkých adresách. Ako nastaviť ufw, nájdete v článku Firewall s ufw (alebo nftables). Nespoliehajte sa na jednu vrstvu: firewall môže byť vypnutý alebo pravidlo môže byť príliš voľné.
ports:), obchádzajú ufw. Databáza s "3306:3306" je potom dostupná zvonku, aj keď ufw hlási, že port je zatvorený. Pridajte pred ňu 127.0.0.1: alebo port nepublikujte. Pozrite Docker a firewall: bezpečné publikovanie portov.Kontrola zvonku
ss ukazuje, čo na serveri počúva, ale nie to, čo prepúšťa váš firewall. Skutočnú kontrolu urobíte z iného počítača, nie zo samotného servera. Pomocou nc (netcat) na Macu alebo Linuxe:
nc -vz -w 3 203.0.113.10 6379 nc -6 -vz -w 3 2001:db8::10 6379
Vo Windows to isté urobí PowerShell príkazom Test-NetConnection 203.0.113.10 -Port 6379. Doplňte svoju vlastnú adresu IPv4 a IPv6; nájdete ich na obrazovke VPS. Výsledok čítajte takto:
- Otvorený (succeeded): niečo počúva a je to dostupné zvonku.
- Zatvorený (Connection refused): nič nepočúva alebo firewall aktívne odmieta.
- Filtrovaný (time-out): firewall potichu zahadzuje prevádzku.
Pre databázu sú stavy zatvorený aj filtrovaný v poriadku. Otestujte aj IPv6: častou chybou je firewall iba s pravidlami pre IPv4, zatiaľ čo služba počúva aj na [::]. Skener portov ako nmap kontroluje viac portov naraz; takýto skener používajte iba na vlastnom serveri.
Váš VPS je plne v samospráve: ktoré služby počúvajú a ako je nastavený firewall, spravujete sami. My pomáhame s časťou WebOké, ako je obrazovka VPS, sieť a snapshoty.
Chcete sa dozvedieť viac? Absolvujte bezplatný kurz Správa VPS a linuxových serverov, lekciu 5.1 Porty a počúvajúce služby alebo lekciu 5.2 Firewall s ufw a nftables.
