Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

Veebiserveri tulemüür: avage ainult vajalikud pordid

Veebiserver vajab väljapoole tavaliselt vaid kahte porti. Sellegipoolest kuulavad paljudes serverites internetis andmebaasid, PHP-FPM või haldusliidesed. Nii leiate avatud teenused ja sulgete, mida ei vajata.

Seis Lugemisaeg 5 minKarastamine ja seadistus

Lühidalt: Veebiserveri tulemüür lubab sissetulevalt ainult TCP 80 ja 443, HTTP/3 puhul lisaks UDP 443, ning SSH-i ainult tuntud võrkudest. Kõik muu visatakse ära: andmebaasid, vahemälud, PHP-FPM ja haldusliidesed ei kuulu internetti. Kontrollige esmalt käsuga ss -tulpn, mis kuulab, ehitage seejärel reeglistik vaikeväärtusega „viska ära“ ja testige tulemust väljastpoolt. Väljaminevate ühenduste piiramine piirab lisaks sissemurdmise tagajärgi.

Unustatud uksed peaukse kõrval

PHP2Shelli puhul suunati pilk veebiserverile endale, portidele 80 ja 443. Need peavad olema avatud, muidu poleks veebisaiti. Selliste aukude järgsetes inventuurides jääb aga sageli silma midagi muud: peaukse kõrval on lahti ka teisi uksi. Andmebaas kuulab kõigil võrguliidestel, PHP-FPM-i pool pordil 9000, vahemäluteenus ilma paroolita, seadistusfaasist pärit haldusliides.

Iga selline uks on oma ründepind oma aukudega. Tulemüür, mis lubab ainult vajaliku, sulgeb need mõne reegliga. See on üks tõhusamaid meetmeid oma serveri kindlustamisel, nagu kirjeldab ka leht Root-serveri ja vServeri ise turvamine.

Mis kuulub lahti, mis mitte?

Põhimõte on lubatud loend: kõik on kinni ja ainult teadlikult vabastatud teenused on kättesaadavad. Järgmine ülevaade aitab paigutada.

Teenus Tüüpiline port Kas väljastpoolt kättesaadav?
HTTP ja HTTPS TCP 80, TCP 443 jah
HTTP/3 (QUIC) UDP 443 ainult kui kasutatakse
SSH TCP 22 ainult tuntud võrkudest või VPN-iga
Majutuspaneel olenevalt tootest ainult tuntud võrkudest
MySQL/MariaDB, PostgreSQL TCP 3306, TCP 5432 ei
Redis, Memcached TCP 6379, TCP 11211 ei
PHP-FPM TCP 9000 või Unixi sokkel ei, parem ainult sokkel
Meiliserver TCP 25, 465, 587, 993 ainult kui server võtab kirju vastu või väljastab neid

Teenus, mis ei pea väljapoole nähtav olema, peaks lisaks kuulama ainult aadressil 127.0.0.1 või Unixi soklil. Siis jääb see ka tulemüüri tõrke korral kättesaamatuks. Haldusligipääsude jaoks sobivad IP-vabastused või VPN; üksikasjad on artiklis Haldusalade kaitsmine IP, VPN-i või lisakaitsega.

Samm 1: Selgitage välja, mis kuulab

Enne reeglite kirjutamist hankige ülevaade. Järgmised käsud ainult loevad:

# Kõik kuulavad TCP- ja UDP-pordid koos protsessiga
sudo ss -tulpn
# nftables'i praegune reeglistik
sudo nft list ruleset
# ufw olek, kui kasutatakse
sudo ufw status verbose

Pöörake ss väljundis tähelepanu pordi ees olevale aadressile. 0.0.0.0 või [::] tähendab: teenus kuulab kõigil liidestel. 127.0.0.1 tähendab: ainult kohalikult. Märkige iga teenuse kohta, kas see peab väljastpoolt kättesaadav olema. See loend on samas osa teie serveri inventarist.

Veebiserveri tulemüür nftables'iga

nftables on Linuxi praegune paketifilter. Järgmine reeglistik põhineb ametliku nftables'i viki näitel ja lisab SSH vabastuse ainult haldusvõrgust. Aadressid on dokumentatsiooninäited ja tuleb asendada.

#!/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 vajab naabrite tuvastamist
        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

        # Veebisait
        tcp dport { 80, 443 } accept
        # ainult HTTP/3 puhul:
        # udp dport 443 accept

        # SSH ainult haldusvõrgust
        ip saddr @verwaltung_v4 tcp dport 22 accept
    }

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

Kontrollige reeglistikku enne laadimist käsuga nft -c -f /etc/nftables.conf. Esimene rida flush ruleset kustutab kõik olemasolevad reeglid, ka need, mille on sisse kandnud Docker või Fail2ban. Dockeriga või teiste oma reegleid seadvate teenustega serverites kohandage reeglistikku seetõttu, selle asemel et seda üldiselt asendada. Kuidas Fail2ban tulemüüriga koos töötab, on kirjas artiklis Fail2ban veebiserverite jaoks seadistamine.

Kes eelistab lihtsamat, kasutab Ubuntus ufw-i. Oluline on järjekord: esmalt SSH vabastus, siis sisselülitamine.

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
Oluline

Muutke tulemüüri reegleid kaugserverites ainult teise ligipääsuteega, näiteks teenusepakkuja konsooliga. Vale SSH-reegel lukustab teid muidu ise välja.

Väljaminevad ühendused: alahinnatud pool

Enamik tulemüüre lubab väljaminevalt kõike. Veebiserveri jaoks on see helde. Pärast sissemurdmist kasutavad ründajad väljaminevaid ühendusi tööriistade järelelaadimiseks, andmete väljaviimiseks või käskude vastuvõtmiseks. Veebiserveri või PHP protsessid, mis loovad ootamatuid ühendusi, loetakse seetõttu hoiatusmärgiks.

Väljaminevate ühenduste piiramine on töömahukam, sest iga legitiimne ühendus peab olema teada: paketiallikad uuenduste jaoks, maksete teenused, liidesed, meilide saatmine, ajaserverid. Pragmaatiline tee on esmalt väljaminevaid ühendusi logida, siis moodustada lubatud loend ja alles seejärel blokeerida. Kuidas olemasolevaid ühendusi kontrollida, kirjeldab Serveri väljaminevate ühenduste kontrollimine; millised muud jäljed viitavad sissemurdmisele, on lehel Kas olen juba kompromiteeritud?.

Lõpuks testige väljastpoolt, teiselt arvutilt ja ainult oma süsteemide vastu, millised pordid on tegelikult kättesaadavad. Alles see test näitab, kas Docker, teenusepakkuja tulemüür ja serveri reeglid annavad koos soovitud pildi.

Kokkuvõte: vähe reegleid, suur mõju

Veebiserveri tulemüür ei pea olema keeruline. Veebipordid lahti, haldus ainult tuntud võrkudest, kõik muu ära visatud: nende põhireeglitega kaovad internetist andmebaasid, vahemälud ja unustatud teenused. See on üks meetmeid parima vaeva ja kasu suhtega.

Veebiserveri või PHP enda aukude vastu tulemüür ei aita, sest just need pordid peavad jääma avatuks. Selle tugevus seisneb ülejäänud ründepinna väikesena hoidmises ja väljaminevate ühenduste piiramisega sissemurdmise tagajärgede tõkestamises.

Otsustav on hooldus. Iga uus teenus, iga konteiner ja iga muudatus teenusepakkuja juures võib pilti nihutada. Korrake kontrolli väljastpoolt seetõttu pärast iga suuremat muudatust ja kindlate intervallide järel, näiteks kord kvartalis.

Kuidas PHP SOS konkreetselt aitab?

  • Seis üles võtta: kaardistame kõik kuulavad teenused ja kontrollime väljastpoolt, mis on tegelikult kättesaadav.
  • Reeglistik üles ehitada: koostame lubatud loendi sissetulevatele ja, kus mõistlik, väljaminevatele ühendustele, kooskõlastatuna Dockeri, Fail2bani ja teenusepakkuja tulemüüriga.
  • Turvaliselt ümber lülitada: viime muudatused ellu teise ligipääsutee ja tagasipöördumisplaaniga.
  • Dokumenteerida: fikseerime pordid, vabastused ja põhjused serveri karastamise raames.

Korduma kippuvad küsimused

Milliseid porte veebiserver vajab?

Külastajate jaoks tavaliselt ainult TCP 80 ja 443, HTTP/3 puhul lisaks UDP 443. SSH ja haldusliidesed peaksid olema kättesaadavad ainult tuntud võrkudest või VPN-i kaudu. Andmebaasi-, vahemälu- ja PHP-FPM-i pordid ei kuulu internetti.

Kas tulemüür kaitseb PHP2Shelli vastu?

Ei. PHP2Shelli kasutatakse ära veebiserveri kaudu, seega just nende portide kaudu, mis peavad olema avatud. Tulemüür vähendab aga ülejäänud ründepinda ning väljaminevate ühenduste piiramine võib sissemurdmise tagajärgi tõkestada.

Miks näitab ufw porte suletuna, mis on siiski kättesaadavad?

Tuntud juhtum on Dockeri konteinerid: Docker kannab avaldatud pordid otse paketifiltri reeglitesse, ufw'st mööda. Kontrollige avatud porte seetõttu alati lisaks väljastpoolt.

Kas minu majutusteenuse pakkuja tulemüür piisab?

Teenusepakkuja eelnev tulemüür on hea teine kiht. See ei asenda aga serveris olevat tulemüüri, sest see ei rakendu pakkuja konfiguratsiooni vea või sisemiste ühenduste korral. Kõige parem on kasutada mõlemat samade põhireeglitega.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi