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 →

Sigurno konfigurirati Apache za PHP

Apache je fleksibilan, a upravo ga to čini podložnim pogrešnoj konfiguraciji. Evo kako PHP povezati putem PHP-FPM-a, zatvoriti .htaccess kao stražnja vrata i sigurno postaviti najvažnije temeljne opcije.

Stanje 6 min čitanjaOjačavanje i konfiguracija

Ukratko: Da biste Apache za PHP konfigurirali sigurno, PHP povežite putem PHP-FPM-a i mod_proxy_fcgi, isključite .htaccess pomoću AllowOverride None i postavite ServerTokens Prod, ServerSignature Off, TraceEnable Off i Options -Indexes. LimitRequestBody prilagodite PHP granicama, a nepotrebne module isključite. Konfiguracija ne zamjenjuje PHP ažuriranje, ali znatno smanjuje napadnu površinu.

Apache nakon PHP2Shella: više od ponovnog pokretanja

Operateri Apachea u listopadu 2026. bili su pod osobitim pritiskom. PHP tim rizik kod mod_php-a ocjenjuje najvišim jer je tamo pokazan exploit prije nego što se uopće izvrši kod aplikacije. Akutne korake, dakle zakrpanje i potpuno ponovno pokretanje, opisuje stranica Zašto mod_php nosi najveći rizik.

Nakon zakrpe ostaje pitanje koliko je dobra sama Apache konfiguracija. Poslužitelji koji su rasli često nose postavke iz mnogih godina: popise direktorija, otvorena .htaccess prava, module koje nitko više ne treba. Svaka od njih može kasniju pogrešku učiniti većom nego što bi morala biti.

Ovaj članak opisuje vitku, sigurnu osnovnu konfiguraciju za Apache 2.4 s PHP-FPM-om. Primjeri koriste Debian i Ubuntu putove; u RHEL obitelji datoteke se nalaze pod /etc/httpd/.

PHP povezati putem PHP-FPM-a umjesto mod_php-a

S PHP-FPM-om PHP radi u vlastitim procesima, odvojeno od web-poslužitelja. Apache zahtjeve prosljeđuje putem mod_proxy_fcgi. Prema dokumentaciji Apachea povezivanje putem SetHandler ima prednost pred ProxyPassMatch: Apache zahtjev najprije sam pridruži datoteci u datotečnom sustavu, a tek zatim ga prosljeđuje PHP-FPM-u.

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

Module na Debianu i Ubuntuu uključujete naredbom a2enmod proxy_fcgi. Tko prelazi s mod_php-a, deaktivira PHP modul i zatim prelazi s Prefork na Event MPM. Pozadinu starog načina rada objašnjava članak mod_php objašnjen: PHP u Apache procesu.

Na strani PHP-FPM-a security.limit_extensions = .php pripada u svaki pool. Prema PHP priručniku FPM inače izvršava i .phar datoteke.

Apache PHP sigurno konfigurirati: temeljne opcije

Neke postavke vrijede za cijeli poslužitelj i pripadaju u zasebnu konfiguracijsku datoteku, primjerice /etc/apache2/conf-available/haertung.conf, aktiviranu pomoću a2enconf haertung.

# Skratiti podatke o verziji (moguće samo na razini cijelog poslužitelja)
ServerTokens Prod
ServerSignature Off

# Isključiti TRACE metodu
TraceEnable Off

# Načelno ništa ne odobravati, web-stranicama dopuštati ciljano
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

Sljedeća tablica svrstava najvažnije opcije. Zadane vrijednosti i učinak potječu iz dokumentacije Apachea.

Direktiva Zadano Preporuka Zašto
ServerTokens Full Prod zaglavlje Server navodi samo „Apache“
ServerSignature Off Off bez retka s verzijom ispod stranica s pogreškama
TraceEnable on Off TRACE se odbija s 405
Options FollowSymlinks -Indexes, simboličke poveznice samo prema vlasniku bez popisa direktorija
AllowOverride None None .htaccess se ne evaluira
LimitRequestBody 1 GiB (od 2.4.54) prilagođeno post_max_size rano odbiti velike zahtjeve

Važno kod AllowOverride: mnoge distribucije i upute za CMS za web-korijen postavljaju AllowOverride All. Time svaka .htaccess datoteka može mijenjati pravila prepisivanja, handlere, a kod mod_php-a čak i PHP postavke. Napadač s pravima pisanja u mapi za prijenose može tamo odložiti vlastitu .htaccess. S AllowOverride None taj je put zatvoren.

VirtualHost kao predložak

Sljedeći VirtualHost povezuje točke za jednu web-stranicu. Putove certifikata, socket i direktorije prilagodite. mod_ssl i mod_headers moraju biti aktivni.

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

    # Blokirati upravljanje verzijama i datoteke okruženja
    <DirectoryMatch "/\.(git|svn|hg)">
        Require all denied
    </DirectoryMatch>
    <FilesMatch "^\.env">
        Require all denied
    </FilesMatch>

    # 32 MiB, prilagođeno post_max_size = 32M
    LimitRequestBody 33554432

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

Dvostruki Header unset nije previd. Prema dokumentaciji Apachea zaglavlja iz mod_proxy_fcgi završavaju u drugoj internoj tablici od zaglavlja samog poslužitelja; s obje varijante obuhvaćate oba slučaja. Daljnja zaglavlja koja aktivno štite posjetitelje opisuje vodič Sigurnosna zaglavlja za web-stranice.

Mape za prijenose i predmemoriju trebaju dodatnu zabranu izvršavanja. Kako pronaći i blokirati sve zapisive mape, piše u članku Zabraniti izvršavanje PHP-a u mapama za prijenose.

Počistiti module i provjeriti rezultat

Svaki učitani modul je kod koji reagira na zahtjeve. Provjerite koji su moduli aktivni i isključite što Vam ne treba. Tipični kandidati su autoindex, status bez ograničenja pristupa, cgi i userdir.

# Prikazati aktivne module
apachectl -M | sort
# Primjer Debian/Ubuntu: isključiti modul za popise direktorija
sudo a2dismod autoindex
# Provjeriti konfiguraciju i tek zatim ponovno učitati
sudo apachectl configtest && sudo systemctl reload apache2
# Test izvana: TRACE treba vratiti 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

Osobitu pažnju zaslužuje mod_status. Status stranica prikazuje pokrenute zahtjeve s adresama i pozvanim putovima. Ako je potrebna, pristup ograničite pomoću Require ip na Vaše administrativne mreže. Isto vrijedi za status stranice PHP-FPM-a koje su učinjene dostupnima putem Apachea.

Važno

AllowOverride ne mijenjajte bez pripreme. Najprije pravila iz svih .htaccess datoteka preuzmite u VirtualHost i web-stranicu testirajte na kopiji. Inače preusmjeravanja i lijepi URL-ovi nakon ponovnog učitavanja prestaju raditi.

Kao dodatni sloj ispred aplikacije može imati smisla vlastiti Web Application Firewall; uvod opisuje članak Primijeniti ModSecurity i OWASP Core Rule Set.

Zaključak: red pobjeđuje pojedinačne mjere

Sigurna Apache konfiguracija za PHP sastoji se od nekoliko dobro shvaćenih gradivnih elemenata. PHP radi putem PHP-FPM-a odvojeno od web-poslužitelja, .htaccess se ne evaluira, podaci o verziji i TRACE su isključeni, granice veličine odgovaraju PHP-u, a zapisive mape ne izvršavaju skripte. Nijedna od tih točaka sama po sebi nije spektakularna. Zajedno osiguravaju da pogreška na jednom mjestu ne dovede odmah do preuzimanja poslužitelja.

Za upravu i voditelje projekata gotovo je važnije drugo svojstvo: pospremljena konfiguracija je razumljiva. Ako sva pravila stoje u VirtualHostu umjesto da su razasuta po desecima .htaccess datoteka, kod sljedeće kritične ranjivosti brzo se može provjeriti koja je web-stranica kako povezana. U situaciji poput one u listopadu 2026. to štedi upravo vrijeme koje je presudno.

Prijelaz ipak planirajte mirno i s testnim okruženjem. Prenagljena promjena s mod_php-a na PHP-FPM neposredno prije vikenda prije stvara nove probleme nego što ih rješava.

Kako PHP SOS konkretno pomaže?

  • Provjeriti stanje: čitamo cijelu Apache konfiguraciju, sve aktivne module i sve .htaccess datoteke.
  • Planirati prijelaz: gdje još radi mod_php, pripremamo prelazak na PHP-FPM sa zasebnim poolovima po web-stranici.
  • Ojačati konfiguraciju: postavljamo temeljne opcije, .htaccess pravila preuzimamo u VirtualHostove i blokiramo zapisive mape.
  • Testirati i dokumentirati: nakon svake izmjene izvana provjeravamo web-stranice i bilježimo stanje u sklopu ojačavanja poslužitelja.

Česta pitanja

Trebam li još koristiti mod_php?

Za nove postavke preporučujemo PHP-FPM putem mod_proxy_fcgi. PHP tim rizik od PHP2Shella kod mod_php-a ocjenjuje najvišim. S PHP-FPM-om PHP radi odvojeno od web-poslužitelja, sa zasebnim korisnicima po web-stranici i vlastitim granicama.

Zašto AllowOverride None ako moj CMS treba .htaccess?

Datoteku .htaccess može izraditi svatko tko smije pisati u web-korijen, pa i ubačeni kod. S AllowOverride None Apache takve datoteke ne evaluira. Pravila Vašeg CMS-a tada jednokratno preuzimate u VirtualHost. To je malo truda, ali konfiguraciju čini razumljivom i bržom.

Mogu li ServerTokens postaviti različito po web-stranici?

Ne. Prema dokumentaciji Apachea ServerTokens vrijedi za cijeli poslužitelj i ne može se mijenjati po VirtualHostu. Istodobno upravlja i podatkom o verziji ispod stranica s pogreškama koji prikazuje ServerSignature.

Koju zadanu vrijednost ima LimitRequestBody?

Od Apachea 2.4.54 zadano je 1 GiB, u verziji 2.4.53 i starijima bio je neograničen. Vrijednost postavite prema post_max_size u Vašoj PHP konfiguraciji kako bi se preveliki zahtjevi odbijali već u web-poslužitelju.

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ć