Situația actuală: PHP2Shell. Două vulnerabilități critice PHP (CVSS 9.2) permit cod malițios fără autentificare. Patchuri din 21.10.2026.Ce este de făcut acum →

Configurarea sigură a Apache pentru PHP

Apache este flexibil, iar tocmai de aceea este vulnerabil la configurări greșite. Cum conectați PHP prin PHP-FPM, închideți .htaccess ca ușă dosnică și setați sigur cele mai importante opțiuni de bază.

Stadiu 6 min de cititSecurizare și configurare

Pe scurt: Pentru a configura sigur Apache pentru PHP, conectați PHP prin PHP-FPM și mod_proxy_fcgi, dezactivați .htaccess cu AllowOverride None și stabiliți ServerTokens Prod, ServerSignature Off, TraceEnable Off și Options -Indexes. LimitRequestBody îl adaptați la limitele PHP, iar modulele de care nu aveți nevoie le dezactivați. Configurația nu înlocuiește o actualizare PHP, dar reduce considerabil suprafața de atac.

Apache după PHP2Shell: mai mult decât o repornire

Operatorii Apache au fost în octombrie 2026 sub o presiune deosebită. Echipa PHP consideră riscul cel mai ridicat la mod_php, pentru că acolo a fost demonstrat un exploit înainte ca vreun cod al aplicației să ruleze. Pașii acuți, adică patchul și repornirea completă, îi descrie pagina De ce poartă mod_php cel mai mare risc.

După patch rămâne întrebarea cât de bună este configurația Apache însăși. Serverele crescute în timp poartă adesea setări acumulate de-a lungul multor ani: liste de directoare, drepturi .htaccess deschise, module de care nu mai are nevoie nimeni. Fiecare dintre ele poate face o eroare ulterioară mai mare decât ar trebui să fie.

Acest articol descrie o configurație de bază suplă și sigură pentru Apache 2.4 cu PHP-FPM. Exemplele folosesc căi Debian și Ubuntu; în familia RHEL, fișierele se află în /etc/httpd/.

Conectarea PHP prin PHP-FPM în loc de mod_php

Cu PHP-FPM, PHP rulează în procese proprii, separate de serverul web. Apache transmite cererile mai departe prin mod_proxy_fcgi. Potrivit documentației Apache, conectarea prin SetHandler are un avantaj față de ProxyPassMatch: Apache asociază mai întâi singur cererea unui fișier din sistemul de fișiere și abia apoi o transmite către PHP-FPM.

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

Modulele le activați sub Debian și Ubuntu cu a2enmod proxy_fcgi. Cine trece de la mod_php dezactivează modulul PHP și trece apoi de la MPM-ul Prefork la cel Event. Contextul vechiului mod de operare îl explică mod_php explicat: PHP în procesul Apache.

Pe partea PHP-FPM, security.limit_extensions = .php aparține fiecărui pool. Potrivit manualului PHP, FPM execută altfel și fișiere .phar.

Configurarea sigură Apache PHP: opțiunile de bază

Unele setări se aplică întregului server și aparțin unui fișier de configurare propriu, de exemplu /etc/apache2/conf-available/haertung.conf, activat cu a2enconf haertung.

# Scurtarea indicațiilor de versiune (posibilă doar la nivel de server)
ServerTokens Prod
ServerSignature Off

# Dezactivarea metodei TRACE
TraceEnable Off

# Mai întâi nu se permite nimic, site-urile permit țintit
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

Tabelul următor încadrează cele mai importante opțiuni. Valorile implicite și efectul provin din documentația Apache.

Directivă Implicit Recomandare De ce
ServerTokens Full Prod antetul Server indică doar „Apache”
ServerSignature Off Off fără linie de versiune sub paginile de eroare
TraceEnable on Off TRACE este respins cu 405
Options FollowSymlinks -Indexes, legături simbolice doar după proprietar fără liste de directoare
AllowOverride None None .htaccess nu este evaluat
LimitRequestBody 1 GiB (de la 2.4.54) potrivit cu post_max_size respingerea timpurie a cererilor mari

Important la AllowOverride: multe distribuții și ghiduri CMS stabilesc pentru webroot AllowOverride All. Astfel, orice fișier .htaccess poate modifica reguli Rewrite, handlere și, la mod_php, chiar setări PHP. Un atacator cu drepturi de scriere într-un dosar de upload poate depune acolo un .htaccess propriu. Cu AllowOverride None, această cale este închisă.

Un VirtualHost ca șablon

VirtualHost-ul următor reunește punctele pentru un singur site. Căile certificatelor, socketul și directoarele le adaptați. mod_ssl și mod_headers trebuie să fie active.

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

    # Blocarea controlului versiunilor și a fișierelor de mediu
    <DirectoryMatch "/\.(git|svn|hg)">
        Require all denied
    </DirectoryMatch>
    <FilesMatch "^\.env">
        Require all denied
    </FilesMatch>

    # 32 MiB, potrivit cu post_max_size = 32M
    LimitRequestBody 33554432

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

Dublul Header unset nu este o greșeală. Potrivit documentației Apache, antetele din mod_proxy_fcgi ajung într-un tabel intern diferit de antetele serverului însuși; cu ambele variante prindeți ambele cazuri. Alte antete care protejează activ vizitatorii descrie ghidul Antete de securitate pentru site-uri.

Dosarele de upload și de cache au nevoie suplimentar de o blocare a execuției. Cum găsiți și blocați toate dosarele scriibile se află la Interzicerea execuției PHP în dosarele de upload.

Curățarea modulelor și verificarea rezultatului

Fiecare modul încărcat este cod care reacționează la cereri. Verificați ce module sunt active și dezactivați ce nu folosiți. Candidați tipici sunt autoindex, status fără restricție de acces, cgi și userdir.

# Afișarea modulelor active
apachectl -M | sort
# Exemplu Debian/Ubuntu: dezactivarea modulului pentru liste de directoare
sudo a2dismod autoindex
# Verificați configurația și abia apoi reîncărcați
sudo apachectl configtest && sudo systemctl reload apache2
# Test din exterior: TRACE trebuie să returneze 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

mod_status merită atenție specială. Pagina de stare arată cererile în curs, cu adrese și căi apelate. Dacă este necesară, restrângeți accesul cu Require ip la rețelele dumneavoastră de administrare. Același lucru este valabil pentru paginile de stare ale PHP-FPM, făcute accesibile prin Apache.

Important

Nu modificați AllowOverride fără pregătire. Preluați mai întâi regulile din toate fișierele .htaccess în VirtualHost și testați site-ul pe o copie. Altfel, redirecționările și URL-urile prietenoase nu mai funcționează după reîncărcare.

Ca strat suplimentar în fața aplicației poate fi util un Web Application Firewall propriu; introducerea o descrie Utilizarea ModSecurity și OWASP Core Rule Set.

Concluzie: ordinea învinge măsura izolată

O configurație Apache sigură pentru PHP constă din puține elemente de bază, bine înțelese. PHP rulează prin PHP-FPM, separat de serverul web, .htaccess nu este evaluat, indicațiile de versiune și TRACE sunt dezactivate, limitele de dimensiune se potrivesc cu PHP, iar dosarele scriibile nu execută scripturi. Niciunul dintre aceste puncte nu este spectaculos în sine. Împreună fac ca o eroare dintr-un loc să nu ducă imediat la preluarea serverului.

Pentru conducere și responsabilii de proiect, o a doua caracteristică este aproape mai importantă: o configurație ordonată este verificabilă. Dacă toate regulile se află în VirtualHost, în loc să fie împrăștiate în zeci de fișiere .htaccess, la următoarea vulnerabilitate critică se poate verifica repede ce site este conectat cum. Într-o situație ca cea din octombrie 2026, aceasta economisește exact timpul care contează.

Planificați totuși trecerea cu calm și cu un mediu de test. O trecere grăbită de la mod_php la PHP-FPM, chiar înaintea unui weekend, creează mai degrabă probleme noi decât rezolvă.

Cum ajută PHP SOS concret?

  • Verificarea stării existente: Citim întreaga configurație Apache, toate modulele active și toate fișierele .htaccess.
  • Planificarea trecerii: Unde mai rulează mod_php, pregătim trecerea la PHP-FPM, cu pool-uri proprii pentru fiecare site.
  • Securizarea configurației: Stabilim opțiunile de bază, preluăm regulile .htaccess în VirtualHost-uri și blocăm dosarele scriibile.
  • Testare și documentare: După fiecare modificare verificăm site-urile din exterior și consemnăm starea în cadrul securizării serverului.

Întrebări frecvente

Ar trebui să mai folosesc mod_php?

Pentru instalări noi recomandăm PHP-FPM prin mod_proxy_fcgi. Echipa PHP consideră riscul PHP2Shell cel mai ridicat la mod_php. Cu PHP-FPM, PHP rulează separat de serverul web, cu utilizatori proprii pentru fiecare site și cu limite proprii.

De ce AllowOverride None, dacă CMS-ul meu are nevoie de .htaccess?

Un .htaccess poate fi creat de oricine are voie să scrie în webroot, inclusiv de codul introdus. Cu AllowOverride None, Apache nu mai evaluează astfel de fișiere. Regulile CMS-ului dumneavoastră le preluați atunci o singură dată în VirtualHost. Este puțin efort, dar face configurația verificabilă și mai rapidă.

Pot seta ServerTokens diferit pentru fiecare site?

Nu. Potrivit documentației Apache, ServerTokens se aplică întregului server și nu poate fi modificat pentru fiecare VirtualHost. Controlează totodată indicația de versiune de sub paginile de eroare, pe care o afișează ServerSignature.

Ce valoare implicită are LimitRequestBody?

Începând cu Apache 2.4.54, valoarea implicită este 1 GiB, în versiunea 2.4.53 și mai vechi era nelimitată. Stabiliți valoarea potrivit post_max_size din configurația dumneavoastră PHP, pentru ca cererile prea mari să fie respinse deja în serverul web.

Surse

Contact imediat

Fiecare oră contează. Scrieți-ne acum.

Descrieți pe scurt sistemul, versiunea PHP și ce ați observat. Ne vom face auziți, clarificăm situația și lucrăm la distanță până când incidentul este încheiat și documentat.

Ajutor imediat