Katere storitve poslušajo na Vašem VPS-ju in kaj je dosegljivo od zunaj?
Vsak program, ki sprejema povezave, posluša na določenih vratih: SSH na 22, spletni strežnik na 80 in 443, MariaDB na 3306. Vsaka vrata, ki so dosegljiva od zunaj, so vhod na Vaš strežnik. Spletno mesto od zunaj običajno potrebuje le vrata 22, 80 in 443. Tukaj boste izvedeli, kako vidite, kaj posluša in na katerem naslovu, ter kako preverite, kaj vidi preostali internet.
Kako ugotovite, kaj posluša
Na svojem VPS zaženite:
sudo ss -tulpn
Možnosti pomenijo: TCP (-t), UDP (-u), samo poslušajoče (-l), kateri program (-p) in številke namesto imen (-n). Primer:
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",...))
Pomemben je stolpec Local Address, torej naslov, na katerem program posluša:
| Naslov | Pomen |
|---|---|
0.0.0.0 | Vsi naslovi IPv4, torej tudi Vaš javni naslov: dosegljivo od zunaj, razen če to prepreči požarni zid |
[::] | Vsi naslovi IPv6: enako za IPv6 |
127.0.0.1 ali [::1] | Samo strežnik sam (loopback): od zunaj nikoli dosegljivo |
127.0.0.53 ali 127.0.0.54 | Prav tako loopback: lokalni pomočnik DNS storitve systemd-resolved |
V primeru je MariaDB v redu: do nje lahko dostopajo le programi na samem strežniku. Redis posluša na vseh naslovih, in to je natanko napaka, za katero gre.
Zapiranje v sami storitvi
Podatkovna baza, predpomnilnik ali skrbniški vmesnik skoraj nikoli ne bi smeli biti dosegljivi od zunaj. Najboljši prvi korak je, da storitev posluša samo na loopback. Na Debianu in Ubuntuju:
| Program | Nastavitev | Datoteka |
|---|---|---|
| MariaDB ali MySQL | bind-address = 127.0.0.1 | /etc/mysql/mariadb.conf.d/50-server.cnf |
| PostgreSQL | listen_addresses = 'localhost' | /etc/postgresql/<različica>/main/postgresql.conf |
| Redis | bind 127.0.0.1 -::1 in protected-mode yes | /etc/redis/redis.conf |
Nato znova zaženite storitev (glejte Upravljanje storitev s systemctl na Vašem VPS) in ponovno preverite z ss -tulpn. Če želite sami dostopati do podatkovne baze s svojega prenosnika, namesto odprtih vrat uporabite tunel SSH, glejte Konfiguracija SSH: prijava s kratkim imenom.
Požarni zid kot druga plast
Požarni zid ustavi tisto, kar kljub vsemu pomotoma posluša na vseh naslovih. Kako nastavite ufw, je opisano v članku Požarni zid z ufw (ali nftables). Ne zanašajte se na eno samo plast: požarni zid je lahko izklopljen ali pa je pravilo preohlapno.
ports:), obidejo ufw. Podatkovna baza z "3306:3306" je tako dosegljiva od zunaj, tudi če ufw kaže, da so vrata zaprta. Pred vrata dodajte 127.0.0.1: ali pa vrat ne objavite. Glejte Docker in požarni zid: varno objavljanje vrat.Preverjanje od zunaj
ss pokaže, kaj posluša na strežniku, ne pa tudi, kaj prepušča Vaš požarni zid. Pravo preverjanje opravite z drugega računalnika, ne s samega strežnika. Z nc (netcat) na Macu ali Linuxu:
nc -vz -w 3 203.0.113.10 6379 nc -6 -vz -w 3 2001:db8::10 6379
V sistemu Windows enako stori PowerShell z Test-NetConnection 203.0.113.10 -Port 6379. Vnesite svoj naslov IPv4 in IPv6; najdete ju na zaslonu VPS. Rezultat razberete takole:
- Odprto (succeeded): nekaj posluša in je dosegljivo od zunaj.
- Zaprto (Connection refused): nič ne posluša ali pa požarni zid dejavno zavrača povezavo.
- Filtrirano (time-out): požarni zid promet tiho zavrže.
Za podatkovno bazo sta zaprto in filtrirano oboje dobro. Preizkusite tudi IPv6: pogosta napaka je požarni zid s pravili samo za IPv4, medtem ko storitev posluša tudi na [::]. Pregledovalnik vrat, kot je nmap, preveri več vrat hkrati; tak pregledovalnik uporabljajte samo na svojem strežniku.
Vaš VPS je v celoti v Vašem samostojnem upravljanju: katere storitve poslušajo in kako je nastavljen požarni zid, urejate sami. Pomagamo Vam pri delu, ki ga upravlja WebOké, kot so zaslon VPS, omrežje in posnetki stanja.
Želite izvedeti več? Obiščite brezplačni tečaj VPS in upravljanje strežnikov Linux, lekcijo 5.1 Vrata in poslušajoče storitve ali lekcijo 5.2 Požarni zid z ufw in nftables.
