Ajankohtainen tilanne: PHP2Shell. Kaksi kriittistä PHP-haavoittuvuutta (CVSS 9.2) sallii haittakoodin suorittamisen ilman kirjautumista. Korjaukset 21.10.2026 alkaen.Mitä nyt on tehtävä →

Apachen turvallinen asetus PHP:lle

Apache on joustava, ja juuri se tekee siitä alttiin virhekonfiguraatiolle. Näin liitätte PHP:n PHP-FPM:n kautta, suljette .htaccess-takaoven ja asetatte tärkeimmät ydinvalinnat turvallisiksi.

Tilanne Lukuaika 5 minKoventaminen ja asetukset

Lyhyesti: Asettaaksenne Apachen PHP:lle turvallisesti liitätte PHP:n PHP-FPM:n ja mod_proxy_fcgi:n kautta, kytkette .htaccess-tiedoston pois asetuksella AllowOverride None ja asetatte ServerTokens Prod, ServerSignature Off, TraceEnable Off ja Options -Indexes. LimitRequestBody mukautatte PHP:n rajoihin, tarpeettomat moduulit kytkette pois. Asetus ei korvaa PHP-päivitystä mutta pienentää hyökkäyspintaa selvästi.

Apache PHP2Shellin jälkeen: enemmän kuin uudelleenkäynnistys

Apache-ylläpitäjät olivat lokakuussa 2026 erityisen paineen alla. PHP-tiimi arvioi riskin korkeimmaksi mod_php:n kohdalla, koska siellä hyökkäys osoitettiin ennen kuin sovelluskoodi ylipäätään suoritetaan. Akuutit vaiheet, eli päivitys ja täydellinen uudelleenkäynnistys, kuvaa sivu Miksi mod_php kantaa korkeimman riskin.

Päivityksen jälkeen jää kysymys, kuinka hyvä Apachen asetus itsessään on. Vuosien mittaan kasvaneilla palvelimilla on usein vuosien takaisia asetuksia: hakemistolistauksia, avoimia .htaccess-oikeuksia, moduuleja, joita kukaan ei enää tarvitse. Jokainen niistä voi tehdä myöhemmästä virheestä suuremman kuin sen tarvitsisi olla.

Tämä kirjoitus kuvaa kevyen, turvallisen perusasetuksen Apache 2.4:lle PHP-FPM:n kanssa. Esimerkit käyttävät Debianin ja Ubuntun polkuja; RHEL-perheessä tiedostot ovat hakemistossa /etc/httpd/.

PHP liitetään PHP-FPM:n kautta mod_php:n sijaan

PHP-FPM:n kanssa PHP pyörii omissa prosesseissaan, erillään verkkopalvelimesta. Apache välittää pyynnöt mod_proxy_fcgi:n kautta. Apachen dokumentaation mukaan liitännällä SetHandler on etu verrattuna ProxyPassMatch-asetukseen: Apache yhdistää pyynnön ensin itse tiedostojärjestelmän tiedostoon ja välittää sen vasta sitten PHP-FPM:lle.

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

Moduulit aktivoitte Debianilla ja Ubuntulla komennolla a2enmod proxy_fcgi. Joka siirtyy pois mod_php:stä, poistaa PHP-moduulin käytöstä ja vaihtaa sen jälkeen Prefork-MPM:stä Event-MPM:ään. Vanhan käyttötavan taustat selittää mod_php selitettynä: PHP Apache-prosessissa.

PHP-FPM:n puolella security.limit_extensions = .php kuuluu jokaiseen pooliin. PHP-käsikirjan mukaan FPM suorittaa muuten myös .phar-tiedostoja.

Apache PHP turvallisesti: ydinvalinnat

Jotkin asetukset koskevat koko palvelinta ja kuuluvat omaan asetustiedostoonsa, esimerkiksi /etc/apache2/conf-available/haertung.conf, aktivoituna komennolla a2enconf haertung.

# Lyhennä versiotiedot (mahdollista vain palvelinlaajuisesti)
ServerTokens Prod
ServerSignature Off

# Kytke TRACE-metodi pois
TraceEnable Off

# Periaatteessa mitään ei sallita, verkkosivustot sallivat kohdennetusti
<Directory />
    Options None
    AllowOverride None
    Require all denied
</Directory>

Seuraava taulukko jäsentää tärkeimmät valinnat. Oletusarvot ja vaikutus ovat peräisin Apachen dokumentaatiosta.

Direktiivi Oletus Suositus Miksi
ServerTokens Full Prod Server-otsake nimeää vain ”Apache”
ServerSignature Off Off ei versiriviä virhesivujen alla
TraceEnable on Off TRACE hylätään koodilla 405
Options FollowSymlinks -Indexes, symlinkit vain omistajan mukaan ei hakemistolistauksia
AllowOverride None None .htaccess ei arvioida
LimitRequestBody 1 GiB (2.4.54:stä) sopiva arvoon post_max_size hylkää suuret pyynnöt aikaisin

Tärkeää AllowOverride-asetuksessa: monet jakelut ja CMS-ohjeet asettavat verkkojuurelle AllowOverride All. Silloin jokainen .htaccess-tiedosto voi muuttaa Rewrite-sääntöjä, käsittelijöitä ja mod_php:n kanssa jopa PHP-asetuksia. Hyökkääjä, jolla on kirjoitusoikeus upload-kansioon, voi asettaa sinne oman .htaccess-tiedoston. Asetuksella AllowOverride None tämä tie on suljettu.

VirtualHost mallipohjaksi

Seuraava VirtualHost yhdistää kohdat yhdelle verkkosivustolle. Varmennepolut, socketin ja hakemistot mukautatte. mod_ssl ja mod_headers on oltava aktiivisia.

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

    # Estä versionhallinta ja ympäristötiedostot
    <DirectoryMatch "/\.(git|svn|hg)">
        Require all denied
    </DirectoryMatch>
    <FilesMatch "^\.env">
        Require all denied
    </FilesMatch>

    # 32 MiB, sopii arvoon post_max_size = 32M
    LimitRequestBody 33554432

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

Kaksinkertainen Header unset ei ole vahinko. Apachen dokumentaation mukaan mod_proxy_fcgi:n otsakkeet päätyvät eri sisäiseen tauluun kuin palvelimen omat otsakkeet; molemmilla muunnelmilla saatte kiinni molemmat tapaukset. Muita otsakkeita, jotka suojaavat kävijöitä aktiivisesti, kuvaa opas Verkkosivustojen tietoturvaotsakkeet.

Upload- ja välimuistikansiot tarvitsevat lisäksi suorituksen eston. Miten löydätte ja estätte kaikki kirjoitettavat kansiot, kerrotaan kohdassa PHP:n suorituksen kielto upload-kansioissa.

Moduulien karsinta ja tuloksen tarkistus

Jokainen ladattu moduuli on koodia, joka reagoi pyyntöihin. Tarkistakaa, mitkä moduulit ovat aktiivisia, ja kytkekää pois ne, joita ette tarvitse. Tyypillisiä ehdokkaita ovat autoindex, status ilman käyttörajoitusta, cgi ja userdir.

# Näytä aktiiviset moduulit
apachectl -M | sort
# Esimerkki Debian/Ubuntu: kytke hakemistolistausmoduuli pois
sudo a2dismod autoindex
# Tarkista asetukset ja lataa vasta sitten uudelleen
sudo apachectl configtest && sudo systemctl reload apache2
# Testi ulkopuolelta: TRACE:n pitäisi palauttaa 405, .git:n 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 ansaitsee erityishuomion. Tilasivu näyttää käynnissä olevat pyynnöt osoitteineen ja kutsuttuine polkuineen. Jos sitä tarvitaan, rajatkaa pääsy direktiivillä Require ip hallintaverkkoihinne. Sama pätee PHP-FPM:n tilasivuihin, jotka on tehty saavutettaviksi Apachen kautta.

Tärkeää

Älkää muuttako AllowOverride-asetusta ilman valmistelua. Siirtäkää ensin kaikkien .htaccess-tiedostojen säännöt VirtualHostiin ja testatkaa verkkosivusto kopiolla. Muuten uudelleenohjaukset ja siistit URL-osoitteet lakkaavat toimimasta uudelleenlatauksen jälkeen.

Lisäkerroksena sovelluksen edessä voi olla järkevää käyttää omaa Web Application Firewallia; aloituksen kuvaa ModSecurityn ja OWASP Core Rule Setin käyttöönotto.

Yhteenveto: järjestys voittaa yksittäisen toimenpiteen

Turvallinen Apache-asetus PHP:lle koostuu muutamasta, hyvin ymmärretystä rakennuspalikasta. PHP pyörii PHP-FPM:n kautta erillään verkkopalvelimesta, .htaccess ei ole käytössä, versiotiedot ja TRACE on kytketty pois, kokorajat sopivat PHP:hen ja kirjoitettavat kansiot eivät suorita skriptejä. Mikään näistä kohdista ei ole yksinään mullistava. Yhdessä ne varmistavat, ettei virhe yhdessä kohdassa johda heti palvelimen haltuunottoon.

Johdolle ja projektivastaaville toinen ominaisuus on lähes tärkeämpi: siisti asetus on jäljitettävissä. Kun kaikki säännöt ovat VirtualHostissa kymmenien .htaccess-tiedostojen sijaan, seuraavan kriittisen aukon kohdalla voi nopeasti tarkistaa, miten mikin verkkosivusto on liitetty. Lokakuun 2026 kaltaisessa tilanteessa se säästää juuri sen ajan, jolla on väliä.

Suunnitelkaa muutos silti rauhassa ja testiympäristön kanssa. Hätiköity vaihto mod_php:stä PHP-FPM:ään vähän ennen viikonloppua aiheuttaa todennäköisemmin uusia ongelmia kuin ratkaisee.

Miten PHP SOS auttaa konkreettisesti?

  • Nykytilan tarkistus: Luemme koko Apache-asetuksen, kaikki aktiiviset moduulit ja kaikki .htaccess-tiedostot.
  • Siirtymän suunnittelu: Missä mod_php pyörii yhä, valmistelemme vaihdon PHP-FPM:ään omilla pooleilla sivustoa kohden.
  • Asetusten koventaminen: Asetamme ydinvalinnat, siirrämme .htaccess-säännöt VirtualHosteihin ja estämme kirjoitettavat kansiot.
  • Testaus ja dokumentointi: Tarkistamme verkkosivustot ulkopuolelta jokaisen muutoksen jälkeen ja kirjaamme tilan palvelimen koventamisen yhteydessä.

Usein kysytyt kysymykset

Pitäisikö mod_php:tä vielä käyttää?

Uusiin käyttöönottoihin suosittelemme PHP-FPM:ää mod_proxy_fcgi:n kautta. PHP-tiimi arvioi PHP2Shellin riskin olevan korkein mod_php:n kohdalla. PHP-FPM:n kanssa PHP pyörii erillään verkkopalvelimesta, omilla käyttäjillä sivustoa kohden ja omilla rajoillaan.

Miksi AllowOverride None, jos CMS:ni tarvitsee .htaccess-tiedostoa?

Kuka tahansa, jolla on kirjoitusoikeus verkkojuureen, voi luoda .htaccess-tiedoston, myös sisäänajettu koodi. Asetuksella AllowOverride None Apache ei arvioi tällaisia tiedostoja. CMS:nne säännöt siirrätte silloin kertaluonteisesti VirtualHostiin. Se vaatii vähän vaivaa mutta tekee asetuksesta jäljitettävän ja nopeamman.

Voinko asettaa ServerTokens-arvon eri tavalla sivustoa kohden?

Et. Apachen dokumentaation mukaan ServerTokens on voimassa koko palvelimelle, eikä sitä voi muuttaa VirtualHostia kohden. Se ohjaa samalla versiotietoa virhesivujen alla, jonka ServerSignature näyttää.

Mikä on LimitRequestBody-asetuksen oletusarvo?

Apache 2.4.54:stä lähtien oletus on 1 GiB, versiossa 2.4.53 ja vanhemmissa se oli rajoittamaton. Asettakaa arvo PHP-asetustenne post_max_size-arvon mukaan, jotta liian suuret pyynnöt hylätään jo verkkopalvelimessa.

Lähteet

Pikayhteys

Jokainen tunti on tärkeä. Kirjoittakaa meille nyt.

Kuvatkaa lyhyesti järjestelmä, PHP-versio ja havainnot. Otamme yhteyttä, selvitämme tilanteen ja työskentelemme etänä, kunnes tapaus on käsitelty loppuun ja dokumentoitu.

Pikaapu