====== Apache ======
===== Základní nastavení Apache =====
==== Omezení publikovaných informací ====
Omezení publikovaných informací o verzích apache a použitých modulech.
ServerTokens Prod
ServerSignature Off
Zamezení vypisování adresářů a procházení symlinků
Options -Indexes -FollowSymLinks
==== Povolené prokoly a šifry ====
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite EECDH+AES:EDH+AES:EDH+CAMELLIA:EECDH+3DES:EDH+3DES:RSA+AES:RSA+CAMELLIA:RSA+3DES
SSLHonorCipherOrder on
==== mod_security ====
yum install mod_security mod_security_crs
vim /etc/httpd/conf.d/mod_security.conf
SecRuleEngine On
Při problémech s lokalizací přidáme do problematických pravidel transformaci ''utf8toUnicode''.
sed -i.bak s/,t:urlDecodeUni,/,t:utf8toUnicode,t:urlDecodeUni,/g soubor_s_problemovymi_pravidly.conf
==== welcome page ====
Vypnout nebo nahradit welcome page v ''/etc/httpd/conf.d/welcome.conf''.
==== Timeout ====
''Timeout'' - doba, po kterou se čeká na:
* TCP paket od klienta v případě, že je RX Buffer prázdný.
* ACK od klienta v případě, že je TX Buffer plný.
Nastavení se liší dle serveru. Problémy může způsobit příliš velká i malá hodnota. Při DoS útoku se doporučuje hodnotu snížit. (default 60)
==== KeepAlive ====
''KeepAlive on''
Zapnutí tohoto rozšíření poskytne možnost HTTP sessions, které umožní poslat více požadavků přes jedno TCP spojení. Například u stránek s mnoha obrázky dojde k zrychlení až o 50%. Je vhodné zapnout u serverů, které nepřijímají požadavky z obrovského počtu IP adres najednou, jinak by mohlo dojít k problémům s pamětí nebo počtem soketů, což zjednoduší případnému DoS útočníkovi práci.
''KeepAliveTimeout 10''
Direktiva určuje počet vteřin, jak dlouho apache počká na další případný request před uzavřením nečinného TCP spojení. Pokud tuto hodnotu nastavíme příliš vysokou na zatíženém serveru, můžeme způsobit výkonnostní problémy, protože nám začne vznikat velké množství nečinných spojení.
''MaxKeepAliveRequests 100''
Tato direktiva omezuje maximální počet požadavků v rámci jednoho TCP spojení.
==== MPM prefork ====
Prefork je vhodný pro moduly, které nezvládají vlákna jako je například mod_php. V opačném případě se doporučuje MPM worker.
Natažení modulu
''LoadModule mpm_prefork_module modules/mod_mpm_prefork.so''
Kontrola zkompilování do apache nebo natažení modulu
httpd –l | grep prefork
httpd -M | grep prefork
mpm_prefork_module (shared)
''StartServers'' určuje počet podprocesů vytvořených při startu a čekajících na obsloužení případných nových požadavků. (defaultně 5)
''MinSpareServers'' určuje minimální počet idle podprocesů, čekajících na obsloužení případných nových požadavků. (defaultně 5)
''MaxSpareServers'' určuje maximální počet idle podprocesů, čekajících na obsloužení případných nových požadavků. (defaultně 10)
''ServerLimit'' použijeme jen v případě, že chceme nastavit MaxClients nad defaultní hodnotu 256.
''MaxClients'' určuje maximum paralelně obsluhovaných požadavků. Aby nedošlo k problémům s pamětí, je vhodné provést výpočet dle následujícího vzorce (celková paměť – kritické minimum pro ostatní služby) / rezidentní paměť pro jeden proces apache (RSS).
(1048-256)/20=39.6 ~ 39
''MaxConnectionsPerChild'' nastaví limit počtu spojení, které může obsloužit jeden podproces. Po dosažení tohoto limitu bude podproces ukončen. Limit lze odhadnou z následujícího vztahu počet requestu za den / počet podprocesu za den
StartServers 2
MinSpareServers 3
MaxSpareServers 5
ServerLimit 35
MaxClients 35
MaxRequestsPerChild 1000