Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Vatrozid za web-poslužitelje: otvoriti samo nužne portove

Web-poslužitelju prema van obično trebaju samo dva porta. Ipak na mnogim poslužiteljima na internetu slušaju baze podataka, PHP-FPM ili administratorska sučelja. Evo kako pronaći otvorene usluge i zatvoriti ono što se ne treba.

Stanje 5 min čitanjaOjačavanje i konfiguracija

Ukratko: Vatrozid za web-poslužitelje dopušta dolazno samo TCP 80 i 443, kod HTTP/3 dodatno UDP 443, i SSH samo iz poznatih mreža. Sve ostalo se odbacuje: baze podataka, predmemorije, PHP-FPM i administratorska sučelja ne pripadaju na internet. Najprije pomoću ss -tulpn provjerite što sluša, zatim izgradite skup pravila sa zadanim „odbaciti“ i testirajte rezultat izvana. Ograničavanje odlaznih veza dodatno ograničava posljedice provale.

Zaboravljena vrata pokraj ulaznih

Kod PHP2Shella pogled je bio usmjeren na sam web-poslužitelj, na portove 80 i 443. Oni moraju biti otvoreni, inače nema web-stranice. Kod inventura nakon takvih ranjivosti često se ipak primijeti nešto drugo: pokraj ulaznih vrata stoje otvorena i druga vrata. Baza podataka sluša na svim mrežnim sučeljima, PHP-FPM pool na portu 9000, usluga predmemorije bez lozinke, administratorsko sučelje iz faze postavljanja.

Svaka od tih vrata zasebna je napadna površina s vlastitim ranjivostima. Vatrozid koji dopušta samo nužno zatvara ih s nekoliko pravila. To je jedna od najdjelotvornijih mjera pri osiguravanju vlastitog poslužitelja, kako opisuje i stranica Samostalno osigurati root poslužitelj i vServer.

Što pripada otvoreno, a što ne?

Načelo je popis dopuštenog: sve je zatvoreno, a dostupne su samo svjesno odobrene usluge. Sljedeći pregled pomaže pri svrstavanju.

Usluga Tipičan port Dostupno izvana?
HTTP i HTTPS TCP 80, TCP 443 da
HTTP/3 (QUIC) UDP 443 samo ako se koristi
SSH TCP 22 samo iz poznatih mreža ili putem VPN-a
Hosting panel ovisno o proizvodu samo iz poznatih mreža
MySQL/MariaDB, PostgreSQL TCP 3306, TCP 5432 ne
Redis, Memcached TCP 6379, TCP 11211 ne
PHP-FPM TCP 9000 ili Unix socket ne, bolje samo socket
Poslužitelj e-pošte TCP 25, 465, 587, 993 samo ako poslužitelj prima ili pruža e-poštu

Usluga koja ne mora prema van trebala bi uz to slušati samo na 127.0.0.1 ili Unix socketu. Tada ostaje nedostupna čak i pri kvaru vatrozida. Za administratorske pristupe prikladne su IP dozvole ili VPN; pojedinosti su u članku Zaštititi administratorska područja IP-om, VPN-om ili dodatnom zaštitom.

Korak 1: utvrditi što sluša

Prije nego napišete pravila, steknite pregled. Sljedeće naredbe samo čitaju:

# Svi portovi TCP i UDP koji slušaju, s procesom
sudo ss -tulpn
# Trenutačni skup pravila nftablesa
sudo nft list ruleset
# Status ufw-a, ako se koristi
sudo ufw status verbose

U ispisu naredbe ss pazite na adresu ispred porta. 0.0.0.0 ili [::] znači: usluga sluša na svim sučeljima. 127.0.0.1 znači: samo lokalno. Za svaku uslugu zabilježite mora li biti dostupna izvana. Taj je popis ujedno dio Vašeg inventara poslužitelja.

Vatrozid za web-poslužitelje s nftables

nftables je aktualni filtar paketa pod Linuxom. Sljedeći skup pravila oslanja se na primjer u službenom nftables wikiju i dodaje odobrenje za SSH samo iz administrativne mreže. Adrese su primjeri iz dokumentacije i moraju se zamijeniti.

#!/usr/sbin/nft -f
flush ruleset

table inet filter {
    set verwaltung_v4 {
        type ipv4_addr
        flags interval
        elements = { 203.0.113.0/28 }
    }

    chain input {
        type filter hook input priority 0; policy drop;

        ct state vmap { established : accept, related : accept, invalid : drop }
        iifname lo accept

        # IPv6 treba otkrivanje susjeda
        icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
        icmp type echo-request limit rate 5/second accept
        icmpv6 type echo-request limit rate 5/second accept

        # Web-stranica
        tcp dport { 80, 443 } accept
        # samo kod HTTP/3:
        # udp dport 443 accept

        # SSH samo iz administrativne mreže
        ip saddr @verwaltung_v4 tcp dport 22 accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }
}

Skup pravila prije učitavanja provjerite naredbom nft -c -f /etc/nftables.conf. Prvi redak flush ruleset briše sva postojeća pravila, i ona koja su upisali Docker ili Fail2ban. Na poslužiteljima s Dockerom ili drugim uslugama koje postavljaju vlastita pravila skup pravila stoga prilagodite umjesto da ga paušalno zamijenite. Kako Fail2ban surađuje s vatrozidom, piše u članku Postaviti Fail2ban za web-poslužitelje.

Tko želi jednostavnije, pod Ubuntuom koristi ufw. Važan je redoslijed: najprije odobrenje za SSH, zatim uključivanje.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow proto tcp from 203.0.113.0/28 to any port 22
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
Važno

Pravila vatrozida na udaljenim poslužiteljima mijenjajte samo uz drugi pristupni put, primjerice konzolu Vašeg pružatelja. Pogrešno SSH pravilo inače zaključava Vas same.

Odlazne veze: podcijenjena polovica

Većina vatrozida odlazno dopušta sve. Za web-poslužitelj to je velikodušno. Nakon provale napadači koriste odlazne veze za učitavanje alata, izvlačenje podataka ili primanje naredbi. Procesi web-poslužitelja ili PHP-a koji uspostavljaju neočekivane veze stoga se smatraju znakom upozorenja.

Ograničavanje odlaznih veza zahtjevnije je jer svaka legitimna veza mora biti poznata: izvori paketa za ažuriranja, usluge plaćanja, sučelja, slanje e-pošte, vremenski poslužitelji. Pragmatičan je put najprije zapisivati odlazne veze, zatim sastaviti popis dopuštenog i tek nakon toga blokirati. Kako provjeriti postojeće veze, opisuje članak Provjeriti odlazne veze poslužitelja; koji drugi tragovi upućuju na provalu, piše na stranici Jesam li već kompromitiran?.

Za kraj testirajte izvana, s drugog računala i samo prema vlastitim sustavima, koji su portovi doista dostupni. Tek taj test pokazuje daju li Docker, vatrozid pružatelja i pravila poslužitelja zajedno željenu sliku.

Zaključak: malo pravila, velik učinak

Vatrozid web-poslužitelja ne mora biti složen. Web portovi otvoreni, administracija samo iz poznatih mreža, sve ostalo odbačeno: s tim osnovnim pravilima baze podataka, predmemorije i zaboravljene usluge nestaju s interneta. To je jedna od mjera s najboljim omjerom truda i koristi.

Protiv ranjivosti u web-poslužitelju ili u samom PHP-u vatrozid ne pomaže jer upravo ti portovi moraju ostati otvoreni. Njegova je snaga u tome da ostatak napadne površine drži malim i da ograničenjem odlaznih veza ublaži posljedice provale.

Odlučujuća je njega. Svaka nova usluga, svaki kontejner i svaka izmjena kod pružatelja može pomaknuti sliku. Provjeru izvana stoga ponavljajte nakon svake veće izmjene i u fiksnim razmacima, primjerice jednom kvartalno.

Kako PHP SOS konkretno pomaže?

  • Zabilježiti stanje: bilježimo sve usluge koje slušaju i izvana provjeravamo što je doista dostupno.
  • Izgraditi skup pravila: izrađujemo popis dopuštenog za dolazne i, gdje je smisleno, odlazne veze, usklađen s Dockerom, Fail2banom i vatrozidom pružatelja.
  • Sigurno prijeći: izmjene provodimo uz drugi pristupni put i plan povratka.
  • Dokumentirati: portove, odobrenja i razloge bilježimo u sklopu ojačavanja poslužitelja.

Česta pitanja

Koji portovi trebaju web-poslužitelju?

Za posjetitelje u pravilu samo TCP 80 i 443, kod HTTP/3 dodatno UDP 443. SSH i administratorska sučelja trebala bi biti dostupna samo iz poznatih mreža ili putem VPN-a. Portovi baze podataka, predmemorije i PHP-FPM-a ne pripadaju na internet.

Štiti li vatrozid od PHP2Shella?

Ne. PHP2Shell se iskorištava preko web-poslužitelja, dakle preko upravo onih portova koji moraju biti otvoreni. Vatrozid ipak smanjuje ostatak napadne površine, a ograničenje odlaznih veza može ublažiti posljedice provale.

Zašto ufw prikazuje portove kao zatvorene, a oni su ipak dostupni?

Poznat slučaj su Docker kontejneri: Docker objavljene portove upisuje izravno u pravila filtriranja paketa, mimo ufw-a. Otvorene portove stoga uvijek dodatno provjerite izvana.

Je li dovoljan vatrozid mog hosting pružatelja?

Vatrozid pružatelja ispred poslužitelja dobar je drugi sloj. Ipak ne zamjenjuje vatrozid na poslužitelju jer ne djeluje pri pogrešci u konfiguraciji pružatelja ili kod internih veza. Najbolje je koristiti oba s istim osnovnim pravilima.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć