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

Apache PHP jaoks turvaliselt seadistamine

Apache on paindlik ja just see teeb ta konfiguratsioonivigade suhtes haavatavaks. Nii ühendate PHP PHP-FPM-i kaudu, sulgete .htaccess'i tagauksena ja seate olulisemad põhisuvandid turvaliselt.

Seis Lugemisaeg 5 minKarastamine ja seadistus

Lühidalt: Apache'i turvaliseks seadistamiseks PHP jaoks ühendate PHP PHP-FPM-i ja mod_proxy_fcgi kaudu, lülitate .htaccess-i sättega AllowOverride None välja ning seate ServerTokens Prod, ServerSignature Off, TraceEnable Off ja Options -Indexes. LimitRequestBody kohandate PHP piiridele, mittevajalikud moodulid lülitate välja. Konfiguratsioon ei asenda PHP uuendust, kuid vähendab ründepinda märgatavalt.

Apache pärast PHP2Shelli: rohkem kui taaskäivitus

Apache'i haldajad olid 2026. aasta oktoobris erilise surve all. PHP meeskond hindab mod_php riski kõige suuremaks, sest seal näidati ekspluateerimist enne, kui rakenduse kood üldse käivitub. Akuutsed sammud, see tähendab paikamine ja täielik taaskäivitus, kirjeldab leht Miks mod_php kannab suurimat riski.

Pärast paika jääb küsimus, kui hea on Apache'i konfiguratsioon ise. Kasvanud serverid kannavad sageli sätteid paljudest aastatest: katalooginimekirjad, avatud .htaccess-õigused, moodulid, mida keegi enam ei vaja. Iga neist võib hilisema vea teha suuremaks, kui see peaks olema.

See artikkel kirjeldab Apache 2.4 jaoks kerget, turvalist põhikonfiguratsiooni PHP-FPM-iga. Näited kasutavad Debiani ja Ubuntu teid; RHEL-i perekonnas asuvad failid kaustas /etc/httpd/.

PHP ühendamine PHP-FPM-i kaudu mod_php asemel

PHP-FPM-iga töötab PHP oma protsessides, veebiserverist eraldi. Apache annab päringud edasi mod_proxy_fcgi kaudu. Apache'i dokumentatsiooni järgi on SetHandler-iga ühendamisel eelis ProxyPassMatch-i ees: Apache seostab päringu esmalt ise failisüsteemis oleva failiga ja annab alles seejärel PHP-FPM-ile edasi.

<FilesMatch "\.php$">
    SetHandler "proxy:unix:/run/php/seite1.sock|fcgi://localhost/"
</FilesMatch>

Mooduleid aktiveerite Debianis ja Ubuntus käsuga a2enmod proxy_fcgi. Kes mod_php-lt üle läheb, deaktiveerib PHP mooduli ja vahetab seejärel Prefork-MPM-i Event-MPM-i vastu. Vana töörežiimi tausta selgitab mod_php selgitus: PHP Apache'i protsessis.

PHP-FPM-i poolel kuulub igasse pooli security.limit_extensions = .php. PHP käsiraamatu järgi käivitab FPM muidu ka .phar-faile.

Apache PHP turvaline seadistus: põhisuvandid

Mõned sätted kehtivad kogu serverile ja kuuluvad oma konfiguratsioonifaili, näiteks /etc/apache2/conf-available/haertung.conf, aktiveeritud käsuga a2enconf haertung.

# Lühendage versiooniandmeid (võimalik ainult serveriülesena)
ServerTokens Prod
ServerSignature Off

# Lülitage TRACE-meetod välja
TraceEnable Off

# Põhimõtteliselt ei vabastata midagi, veebisaidid lubavad sihipäraselt
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

Järgmine tabel paigutab olulisemad suvandid. Vaikeväärtused ja mõju pärinevad Apache'i dokumentatsioonist.

Direktiiv Vaikeväärtus Soovitus Miks
ServerTokens Full Prod Server-päis nimetab ainult „Apache“
ServerSignature Off Off versioonirida vealehtede all puudub
TraceEnable on Off TRACE lükatakse tagasi koodiga 405
Options FollowSymlinks -Indexes, sümbolilingid ainult omaniku järgi katalooginimekirju ei ole
AllowOverride None None .htaccess-i ei hinnata
LimitRequestBody 1 GiB (alates 2.4.54) vastavalt post_max_size-ile suured päringud varakult tagasi lükata

Oluline AllowOverride puhul: paljud distributsioonid ja CMS-juhendid seavad veebijuurkataloogile AllowOverride All. Siis võib iga .htaccess-fail muuta Rewrite-reegleid, käitlejaid ja mod_php puhul isegi PHP sätteid. Ründaja, kellel on kirjutusõigused üleslaadimiskaustas, saab sinna paigutada oma .htaccess-i. Sättega AllowOverride None on see tee suletud.

VirtualHost mallina

Järgmine VirtualHost ühendab punktid ühe veebisaidi jaoks. Sertifikaatide teed, sokli ja kataloogid kohandate ise. mod_ssl ja mod_headers peavad olema aktiivsed.

<VirtualHost *:443>
    ServerName www.example.de
    DocumentRoot /var/www/seite1/public

    SSLEngine on
    SSLCertificateFile    /etc/ssl/seite1/fullchain.pem
    SSLCertificateKeyFile /etc/ssl/seite1/privkey.pem

    <Directory /var/www/seite1/public>
        Options -Indexes +SymLinksIfOwnerMatch
        AllowOverride None
        Require all granted
    </Directory>

    <FilesMatch "\.php$">
        SetHandler "proxy:unix:/run/php/seite1.sock|fcgi://localhost/"
    </FilesMatch>

    # Blokeerige versioonihaldus ja keskkonnafailid
    <DirectoryMatch "/\.(git|svn|hg)">
        Require all denied
    </DirectoryMatch>
    <FilesMatch "^\.env">
        Require all denied
    </FilesMatch>

    # 32 MiB, vastavalt post_max_size = 32M
    LimitRequestBody 33554432

    Header unset X-Powered-By
    Header always unset X-Powered-By
</VirtualHost>

Kahekordne Header unset ei ole eksitus. Apache'i dokumentatsiooni järgi satuvad mod_proxy_fcgi päised teise sisemisse tabelisse kui serveri enda päised; mõlema variandiga saate kätte mõlemad juhtumid. Muud päised, mis külastajaid aktiivselt kaitsevad, kirjeldab juhend Veebisaitide turvapäised.

Üleslaadimis- ja vahemälukaustad vajavad lisaks käivitamisblokeeringut. Kuidas leida ja blokeerida kõik kirjutatavad kaustad, on kirjas artiklis PHP käivitamise keelamine üleslaadimiskaustades.

Moodulite väljakoristamine ja tulemuse kontroll

Iga laaditud moodul on kood, mis päringutele reageerib. Kontrollige, millised moodulid on aktiivsed, ja lülitage välja, mida te ei vaja. Tüüpilised kandidaadid on autoindex, status ilma ligipääsupiiranguta, cgi ja userdir.

# Kuvage aktiivsed moodulid
apachectl -M | sort
# Näide Debian/Ubuntu: lülitage katalooginimekirja moodul välja
sudo a2dismod autoindex
# Kontrollige konfiguratsiooni ja laadige alles siis uuesti
sudo apachectl configtest && sudo systemctl reload apache2
# Test väljastpoolt: TRACE peab andma 405, .git 403
curl -s -o /dev/null -w "%{http_code}\n" -X TRACE https://www.example.de/
curl -s -o /dev/null -w "%{http_code}\n" https://www.example.de/.git/HEAD

Erilist tähelepanu väärib mod_status. Olekuleht näitab töötavaid päringuid aadresside ja avatud teedega. Kui seda vajatakse, piirake ligipääs käsuga Require ip oma haldusvõrkudega. Sama kehtib PHP-FPM-i olekulehtede kohta, mis on Apache'i kaudu kättesaadavaks tehtud.

Oluline

Ärge lülitage AllowOverride-i ümber ettevalmistuseta. Võtke esmalt kõigi .htaccess-failide reeglid üle VirtualHosti ja testige veebisaiti koopial. Muidu ei tööta ümbersuunamised ja ilusad URL-id pärast uuesti laadimist enam.

Täiendava kihina rakenduse ees võib olla mõistlik oma Web Application Firewall; sissejuhatust pakub ModSecurity ja OWASP Core Rule Set'i kasutamine.

Kokkuvõte: kord lööb üksikmeetme

Turvaline Apache'i konfiguratsioon PHP jaoks koosneb mõnest hästi mõistetud ehituskivist. PHP töötab PHP-FPM-i kaudu veebiserverist eraldi, .htaccess-i ei hinnata, versiooniandmed ja TRACE on välja lülitatud, suuruspiirid sobivad PHP-ga ja kirjutatavad kaustad skripte ei käivita. Ükski neist punktidest pole iseenesest põnev. Koos tagavad need, et viga ühes kohas ei vii kohe serveri ülevõtmiseni.

Juhtkonna ja projektijuhtide jaoks on peaaegu olulisem teine omadus: korrastatud konfiguratsioon on arusaadav. Kui kõik reeglid asuvad VirtualHostis, mitte ei ole laiali kümnetes .htaccess-failides, saab järgmise kriitilise augu korral kiiresti kontrollida, milline veebisait on kuidas ühendatud. 2026. aasta oktoobri-sarnases olukorras säästab see just seda aega, millest sõltub.

Planeerige ümberlülitus sellegipoolest rahulikult ja testkeskkonnaga. Kiirustades tehtud üleminek mod_php-lt PHP-FPM-ile vahetult enne nädalavahetust tekitab pigem uusi probleeme, kui lahendab.

Kuidas PHP SOS konkreetselt aitab?

  • Seisu kontrollida: loeme välja kogu Apache'i konfiguratsiooni, kõik aktiivsed moodulid ja kõik .htaccess-failid.
  • Üleminekut planeerida: kus mod_php veel töötab, valmistame ette üleminekut PHP-FPM-ile oma poolidega veebisaitide kaupa.
  • Konfiguratsiooni karastada: seame põhisuvandid, võtame .htaccess-reeglid üle VirtualHostidesse ja blokeerime kirjutatavad kaustad.
  • Testida ja dokumenteerida: kontrollime pärast iga muudatust veebisaite väljastpoolt ja fikseerime seisu serveri karastamise raames.

Korduma kippuvad küsimused

Kas peaksin mod_php-d veel kasutama?

Uute paigalduste jaoks soovitame PHP-FPM-i mod_proxy_fcgi kaudu. PHP meeskond hindab PHP2Shelli riski mod_php puhul kõige suuremaks. PHP-FPM-iga töötab PHP veebiserverist eraldi, veebisaitide kaupa oma kasutajate ja oma piiridega.

Miks AllowOverride None, kui minu CMS vajab .htaccess'i?

Faili .htaccess saab luua igaüks, kes tohib veebijuurkataloogis kirjutada, ka sissetoodud kood. Sättega AllowOverride None ei hinda Apache selliseid faile. Oma CMS-i reeglid võtate siis ühekordselt üle VirtualHosti. See on veidi vaeva, kuid teeb konfiguratsiooni arusaadavaks ja kiiremaks.

Kas saan ServerTokens'it veebisaitide kaupa erinevalt seada?

Ei. Apache'i dokumentatsiooni järgi kehtib ServerTokens kogu serverile ja seda ei saa VirtualHosti kaupa muuta. See juhib samas ka vealehtede all olevat versiooniandmet, mille ServerSignature sisse lülitab.

Milline on LimitRequestBody vaikeväärtus?

Alates Apache 2.4.54-st on vaikeväärtus 1 GiB, versioonis 2.4.53 ja vanemates oli see piiramatu. Seadke väärtus oma PHP konfiguratsiooni post_max_size järgi, et liiga suured päringud lükataks tagasi juba veebiserveris.

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