Koje usluge slušaju na Vašem VPS-u i što je dostupno izvana?
Svaki program koji prihvaća veze sluša na nekom portu: SSH na 22, web poslužitelj na 80 i 443, MariaDB na 3306. Svaki port koji je dostupan izvana predstavlja vrata prema Vašem poslužitelju. Web stranici izvana obično trebaju samo portovi 22, 80 i 443. Ovdje možete pročitati kako vidjeti što sluša i na kojoj adresi te kako provjeriti što vidi ostatak interneta.
Provjera što sluša
Pokrenite na Vašem VPS-u:
sudo ss -tulpn
Opcije znače: TCP (-t), UDP (-u), samo portovi koji slušaju (-l), koji program (-p) i brojevi umjesto naziva (-n). Primjer:
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",...))
Važan je stupac Local Address, odnosno adresa na kojoj program sluša:
| Adresa | Značenje |
|---|---|
0.0.0.0 | Sve IPv4 adrese, dakle i Vaša javna adresa: dostupno izvana, osim ako to ne blokira vatrozid |
[::] | Sve IPv6 adrese: isto, ali za IPv6 |
127.0.0.1 ili [::1] | Samo sam poslužitelj (loopback): izvana nikada nije dostupno |
127.0.0.53 ili 127.0.0.54 | Također loopback: lokalni DNS pomoćnik usluge systemd-resolved |
U primjeru je MariaDB u redu: pristupiti joj mogu samo programi na samom poslužitelju. Redis sluša na svim adresama i upravo je to pogreška o kojoj je riječ.
Zatvaranje u samoj usluzi
Baza podataka, predmemorija ili administratorsko sučelje gotovo nikada ne bi trebali biti dostupni izvana. Najbolji prvi korak je da usluga sluša samo na loopbacku. Na Debianu i Ubuntuu:
| Program | Postavka | Datoteka |
|---|---|---|
| MariaDB ili MySQL | bind-address = 127.0.0.1 | /etc/mysql/mariadb.conf.d/50-server.cnf |
| PostgreSQL | listen_addresses = 'localhost' | /etc/postgresql/<verzija>/main/postgresql.conf |
| Redis | bind 127.0.0.1 -::1 i protected-mode yes | /etc/redis/redis.conf |
Zatim ponovno pokrenite uslugu (pogledajte Upravljanje uslugama pomoću systemctl na Vašem VPS-u) i ponovno provjerite pomoću ss -tulpn. Želite li sami pristupiti bazi podataka sa svog prijenosnog računala, umjesto otvorenog porta koristite SSH tunel, pogledajte SSH config: prijava kratkim nazivom.
Vatrozid kao drugi sloj
Vatrozid blokira ono što ipak greškom sluša na svim adresama. Kako postaviti ufw, opisano je u članku Vatrozid s ufw (ili nftables). Ne oslanjajte se na samo jedan sloj: vatrozid može biti isključen ili pravilo može biti preširoko.
ports:) zaobilaze ufw. Baza podataka s "3306:3306" tada je dostupna izvana, čak i ako ufw prikazuje da je port zatvoren. Ispred dodajte 127.0.0.1: ili port nemojte objavljivati. Pogledajte Docker i vatrozid: sigurno objavljivanje portova.Provjera izvana
ss prikazuje što sluša na poslužitelju, ali ne i što Vaš vatrozid propušta. Stvarnu provjeru obavljate s drugog računala, a ne sa samog poslužitelja. Pomoću nc (netcat) na Macu ili Linuxu:
nc -vz -w 3 203.0.113.10 6379 nc -6 -vz -w 3 2001:db8::10 6379
Na Windowsima isto radi PowerShell naredbom Test-NetConnection 203.0.113.10 -Port 6379. Upišite svoju IPv4 i IPv6 adresu; nalaze se na zaslonu VPS-a. Rezultat tumačite ovako:
- Otvoren (succeeded): nešto sluša i dostupno je izvana.
- Zatvoren (Connection refused): ništa ne sluša ili vatrozid aktivno odbija vezu.
- Filtriran (time-out): vatrozid tiho odbacuje promet.
Za bazu podataka dobri su i zatvoren i filtriran rezultat. Testirajte i IPv6: česta je pogreška vatrozid sa samo IPv4 pravilima, dok usluga sluša i na [::]. Skener portova poput nmapa provjerava više portova odjednom; takav skener koristite samo na vlastitom poslužitelju.
Vaš VPS je u potpunosti u samostalnom upravljanju: sami određujete koje usluge slušaju i kako je postavljen Vaš vatrozid. Mi Vam pomažemo s dijelom koji se odnosi na WebOké, kao što su zaslon VPS-a, mreža i snapshotovi.
Želite li naučiti više? Pratite besplatni tečaj VPS i upravljanje Linux poslužiteljem, lekciju 5.1 Portovi i usluge koje slušaju ili lekciju 5.2 Vatrozid s ufw i nftables.
