Aktuālā situācija: PHP2Shell. Divas kritiskas PHP ievainojamības (CVSS 9.2) ļauj izpildīt ļaunprātīgu kodu bez pieteikšanās. Ielāpi kopš 21.10.2026.Kas jādara tagad →

Apache droša konfigurēšana PHP

Apache ir elastīgs, un tieši tas to dara jutīgu pret nepareizu konfigurāciju. Kā pieslēgt PHP caur PHP-FPM, aizvērt .htaccess kā slēpto piekļuvi un droši iestatīt svarīgākās kodola opcijas.

Aktuāls uz 5 min lasīšanas laiksNostiprināšana un konfigurācija

Īsi sakot: Lai Apache droši konfigurētu PHP, pieslēdziet PHP caur PHP-FPM un mod_proxy_fcgi, izslēdziet .htaccess ar AllowOverride None un iestatiet ServerTokens Prod, ServerSignature Off, TraceEnable Off un Options -Indexes. LimitRequestBody pielāgojiet PHP robežām, nevajadzīgos moduļus izslēdziet. Konfigurācija neaizstāj PHP atjauninājumu, bet ievērojami samazina uzbrukuma virsmu.

Apache pēc PHP2Shell: vairāk nekā pārstartēšana

Apache uzturētāji 2026. gada oktobrī atradās īpašā spiedienā. PHP komanda mod_php risku novērtē kā augstāko, jo tur exploit tika demonstrēts, vēl pirms tiek izpildīts lietojumprogrammas kods. Akūtos soļus, tātad ielāpošanu un pilnu pārstartēšanu, apraksta lapa Kāpēc mod_php nes augstāko risku.

Pēc ielāpa paliek jautājums, cik laba ir pati Apache konfigurācija. Izaugušie serveri bieži nes iestatījumus no daudziem gadiem: direktoriju sarakstus, atvērtas .htaccess tiesības, moduļus, kurus neviens vairs nevajag. Katrs no tiem var vēlāku kļūdu padarīt lielāku, nekā tai vajadzētu būt.

Šis raksts apraksta vieglu, drošu pamata konfigurāciju Apache 2.4 ar PHP-FPM. Piemēros izmantoti Debian un Ubuntu ceļi; RHEL saimē faili atrodas zem /etc/httpd/.

PHP pieslēgšana caur PHP-FPM mod_php vietā

Ar PHP-FPM PHP darbojas savos procesos, atsevišķi no tīmekļa servera. Apache pieprasījumus nodod tālāk caur mod_proxy_fcgi. Saskaņā ar Apache dokumentāciju pieslēgumam ar SetHandler ir priekšrocība salīdzinājumā ar ProxyPassMatch: Apache vispirms pats piešķir pieprasījumu failam failu sistēmā un tikai tad nodod PHP-FPM.

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

Moduļus Debian un Ubuntu aktivizējat ar a2enmod proxy_fcgi. Kas pāriet no mod_php, tas deaktivizē PHP moduli un pēc tam pāriet no Prefork uz Event MPM. Fona informāciju par veco darbības režīmu izskaidro mod_php skaidrojums: PHP Apache procesā.

PHP-FPM pusē security.limit_extensions = .php pieder katrā pūlā. Saskaņā ar PHP rokasgrāmatu FPM citādi izpilda arī .phar failus.

Apache PHP droša konfigurēšana: kodola opcijas

Daži iestatījumi attiecas uz visu serveri un pieder savā konfigurācijas failā, piemēram, /etc/apache2/conf-available/haertung.conf, aktivizētā ar a2enconf haertung.

# Saīsināt versiju norādes (iespējams tikai visā serverī)
ServerTokens Prod
ServerSignature Off

# Izslēgt TRACE metodi
TraceEnable Off

# Principā neko neatļaut, vietnēm atļaut mērķtiecīgi
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

Turpmākā tabula ierindo svarīgākās opcijas. Noklusējuma vērtības un ietekme ņemtas no Apache dokumentācijas.

Direktīva Noklusējums Ieteikums Kāpēc
ServerTokens Full Prod Server galvene min tikai „Apache"
ServerSignature Off Off nekādas versijas rindiņas zem kļūdu lapām
TraceEnable on Off TRACE tiek noraidīts ar 405
Options FollowSymlinks -Indexes, simboliskās saites tikai pēc īpašnieka nekādu direktoriju sarakstu
AllowOverride None None .htaccess netiek izvērtēts
LimitRequestBody 1 GiB (kopš 2.4.54) atbilstoši post_max_size lielus pieprasījumus noraidīt agrīni

Svarīgi par AllowOverride: daudzi distributīvi un CMS pamācības tīmekļa saknei iestata AllowOverride All. Tad katrs .htaccess fails var mainīt Rewrite noteikumus, handleri un mod_php gadījumā pat PHP iestatījumus. Uzbrucējs ar rakstīšanas tiesībām augšupielāžu mapē tur var novietot savu .htaccess. Ar AllowOverride None šis ceļš ir slēgts.

VirtualHost kā veidne

Turpmākais VirtualHost savieno punktus vienai vietnei. Sertifikātu ceļus, socket un direktorijas pielāgojiet. mod_ssl un mod_headers jābūt aktīviem.

<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>

    # Bloķēt versiju pārvaldību un vides failus
    <DirectoryMatch "/\.(git|svn|hg)">
        Require all denied
    </DirectoryMatch>
    <FilesMatch "^\.env">
        Require all denied
    </FilesMatch>

    # 32 MiB, atbilstoši post_max_size = 32M
    LimitRequestBody 33554432

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

Dubultais Header unset nav nejaušība. Saskaņā ar Apache dokumentāciju galvenes no mod_proxy_fcgi nonāk citā iekšējā tabulā nekā paša servera galvenes; ar abiem variantiem jūs pārtverat abus gadījumus. Citas galvenes, kas aktīvi aizsargā apmeklētājus, apraksta ceļvedis Vietņu drošības galvenes.

Augšupielāžu un kešatmiņas mapēm papildus vajadzīga izpildes bloķēšana. Kā atrast un nobloķēt visas rakstāmās mapes, rakstīts sadaļā PHP izpildes aizliegšana augšupielāžu mapēs.

Moduļu sakārtošana un rezultāta pārbaude

Katrs ielādēts modulis ir kods, kas reaģē uz pieprasījumiem. Pārbaudiet, kuri moduļi ir aktīvi, un izslēdziet to, ko nevajag. Tipiski kandidāti ir autoindex, status bez piekļuves ierobežojuma, cgi un userdir.

# Parādīt aktīvos moduļus
apachectl -M | sort
# Piemērs Debian/Ubuntu: izslēgt direktoriju sarakstu moduli
sudo a2dismod autoindex
# Pārbaudīt konfigurāciju un tikai tad pārlādēt
sudo apachectl configtest && sudo systemctl reload apache2
# Tests no ārpuses: TRACE jāatgriež 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

Īpašu uzmanību pelna mod_status. Statusa lapa rāda darbojošos pieprasījumus ar adresēm un izsauktajiem ceļiem. Ja tā vajadzīga, piekļuvi ierobežojiet ar Require ip uz saviem pārvaldības tīkliem. Tas pats attiecas uz PHP-FPM statusa lapām, kas padarītas sasniedzamas caur Apache.

Svarīgi

AllowOverride nemainiet bez sagatavošanās. Vispirms pārņemiet noteikumus no visiem .htaccess failiem VirtualHost un testējiet vietni uz kopijas. Citādi pāradresācijas un skaistie URL pēc pārlādes vairs nedarbosies.

Kā papildu slānis pirms lietojumprogrammas var būt noderīga sava Web Application Firewall; ievadu apraksta ModSecurity un OWASP Core Rule Set lietošana.

Secinājums: kārtība pārspēj atsevišķu pasākumu

Droša Apache konfigurācija PHP sastāv no dažiem, labi saprastiem elementiem. PHP darbojas caur PHP-FPM atsevišķi no tīmekļa servera, .htaccess netiek izvērtēts, versiju norādes un TRACE ir izslēgti, izmēra robežas atbilst PHP, un rakstāmās mapes neizpilda skriptus. Neviens no šiem punktiem pats par sevi nav iespaidīgs. Kopā tie nodrošina, ka kļūda vienā vietā nenoved uzreiz pie servera pārņemšanas.

Vadībai un projektu vadītājiem gandrīz svarīgāka ir otra īpašība: sakārtota konfigurācija ir izsekojama. Ja visi noteikumi atrodas VirtualHost, nevis izkaisīti desmitos .htaccess failu, nākamās kritiskās ievainojamības gadījumā var ātri pārbaudīt, kura vietne kā pieslēgta. Tādā situācijā kā 2026. gada oktobrī tas ietaupa tieši to laiku, kas ir izšķirošs.

Pāreju tomēr plānojiet mierīgi un ar testa vidi. Pārsteidzīga pāreja no mod_php uz PHP-FPM īsi pirms nedēļas nogales rada drīzāk jaunas problēmas, nekā atrisina.

Kā PHP SOS palīdz konkrēti?

  • Pārbaudīt esošo stāvokli: mēs nolasām visu Apache konfigurāciju, visus aktīvos moduļus un visus .htaccess failus.
  • Plānot pāreju: kur vēl darbojas mod_php, mēs sagatavojam pāreju uz PHP-FPM ar saviem pūliem katrai vietnei.
  • Nostiprināt konfigurāciju: mēs iestatām kodola opcijas, pārņemam .htaccess noteikumus VirtualHost un bloķējam rakstāmās mapes.
  • Testēt un dokumentēt: pēc katras izmaiņas mēs pārbaudām vietnes no ārpuses un fiksējam stāvokli serveru nostiprināšanas ietvaros.

Biežāk uzdotie jautājumi

Vai man vēl vajadzētu izmantot mod_php?

Jauniem uzstādījumiem mēs iesakām PHP-FPM caur mod_proxy_fcgi. PHP komanda risku no PHP2Shell mod_php gadījumā novērtē kā augstāko. Ar PHP-FPM PHP darbojas atsevišķi no tīmekļa servera, ar saviem lietotājiem katrai vietnei un savām robežām.

Kāpēc AllowOverride None, ja mans CMS vajag .htaccess?

Failu .htaccess var izveidot ikviens, kam atļauts rakstīt tīmekļa saknē, arī ielikts kods. Ar AllowOverride None Apache šādus failus neizvērtē. Sava CMS noteikumus jūs tad vienreiz pārņemat VirtualHost. Tā ir zināma piepūle, bet konfigurāciju dara izsekojamu un ātrāku.

Vai ServerTokens varu iestatīt katrai vietnei atšķirīgi?

Nē. Saskaņā ar Apache dokumentāciju ServerTokens attiecas uz visu serveri un to nevar mainīt katram VirtualHost. Tas vienlaikus vada versijas norādi zem kļūdu lapām, ko ieslēdz ServerSignature.

Kāda ir LimitRequestBody noklusējuma vērtība?

Kopš Apache 2.4.54 noklusējums ir 1 GiB, versijā 2.4.53 un vecākās tas bija neierobežots. Iestatiet vērtību atbilstoši jūsu PHP konfigurācijas post_max_size, lai pārāk lieli pieprasījumi tiktu noraidīti jau tīmekļa serverī.

Avoti

Tūlītējs kontakts

Katra stunda ir svarīga. Rakstiet mums tūlīt.

Īsi aprakstiet sistēmu, PHP versiju un novēroto. Mēs sazināsimies, noskaidrosim situāciju un strādāsim attālināti, līdz incidents ir slēgts un dokumentēts.

Tūlītēja palīdzība