Pokud jste správce systému, měli byste zabezpečit webový server Apache podle 10 tipů uvedených v tomto článku.
1. Zakázat nepotřebné moduly
Pokud plánujete instalovat apache ze zdroje, měli byste zakázat následující moduly. Pokud tak učiníte ./configure –help, uvidíte všechny dostupné moduly, které můžete zakázat/povolit.
- userdir – Mapování požadavků na adresáře specifické pro uživatele. tj. ~username v URL bude přeloženo do adresáře na serveru
- autoindex – zobrazí seznam adresářů, když není přítomen žádný soubor index.html
- stav – zobrazí statistiky serveru
- env – Vymazání/nastavení proměnných ENV
- setenvif – Umístění proměnných ENV do záhlaví
- cgi – skripty CGI
- akce – Spouštění akcí na žádost
- vyjednávání – vyjednávání obsahu
- alias – mapování požadavků na různé části souborového systému
- zahrnout – Zahrnuje na straně serveru
- filtr – Inteligentní filtrování požadavku
- version – Zpracování informací o verzi v konfiguračních souborech pomocí IfVersion
- tak jak jsou – typy souborů tak jak jsou
Deaktivujte všechny výše uvedené moduly, jak je ukázáno níže, když provedete ./configure
./configure \ --enable-ssl \ --enable-so \ --disable-userdir \ --disable-autoindex \ --disable-status \ --disable-env \ --disable-setenvif \ --disable-cgi \ --disable-actions \ --disable-negotiation \ --disable-alias \ --disable-include \ --disable-filter \ --disable-version \ --disable-asis
Pokud povolíte ssl a deaktivujete mod_setenv, zobrazí se následující chyba.
- Chyba :Chyba syntaxe na řádku 223 souboru /usr/local/apache2/conf/extra/httpd-ssl.conf:Neplatný příkaz ‘BrowserMatch’, možná špatně napsaný nebo definovaný modulem, který není zahrnut v konfiguraci serveru
- Řešení :Pokud používáte ssl, nevypínejte setenvif. Nebo zakomentujte BrowserMatch ve vašem httpd-ssl.conf, pokud deaktivujete mod_setenvif.
Po instalaci, když provedete httpd -l , uvidíte všechny nainstalované moduly.
# /usr/local/apache2/bin/httpd -l Compiled in modules: core.c mod_authn_file.c mod_authn_default.c mod_authz_host.c mod_authz_groupfile.c mod_authz_user.c mod_authz_default.c mod_auth_basic.c mod_log_config.c mod_ssl.c prefork.c http_core.c mod_mime.c mod_dir.c mod_so.c
V tomto příkladu máme nainstalované následující moduly apache.
- core.c – základní modul Apache
- mod_auth* – pro různé moduly ověřování
- mod_log_config.c – Zaznamenat požadavek klienta. poskytuje další flexibilitu protokolu.
- mod_ssl.c – pro SSL
- prefork.c – pro modul MPM (Multi-Processing Module)
- httpd_core.c – základní modul Apache
- mod_mime.c – pro nastavení typů MIME dokumentů
- mod_dir.c – pro přesměrování koncovým lomítkem na cestách k adresářům. pokud zadáte url/test/, přejde na adresu url/test/index.html
- mod_so.c – Pro načítání modulů během startu nebo restartu
2. Spusťte Apache jako samostatný uživatel a skupina
Ve výchozím nastavení může Apache běžet jako nikdo nebo jako démon. Apache je dobré provozovat na vlastním neprivilegovaném účtu. Například:apache.
Vytvořte skupinu a uživatele Apache.
groupadd apache useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
Upravte soubor httpd.conf a vhodně nastavte uživatele a skupinu.
# vi httpd.conf User apache Group apache
Poté, pokud restartujete apache a provedete ps -ef, uvidíte, že apache běží jako „apache“ (s výjimkou 1. procesu httpd, který bude vždy běžet jako root).
# ps -ef | grep -i http | awk '{print $1}' root apache apache apache apache apache
3. Omezte přístup ke kořenovému adresáři (použijte Povolit a Zakázat)
Zabezpečte kořenový adresář nastavením následujícího v httpd.conf
<Directory /> Options None Order deny,allow Deny from all </Directory>
Ve výše uvedeném:
- Žádné možnosti – Nastavte toto na None, což nepovolí žádné volitelné doplňkové funkce.
- Odmítnutí objednávky, povolení – Toto je pořadí, ve kterém by měly být zpracovány směrnice „Odmítnout“ a „Povolit“. Tím se nejprve zpracuje „odmítnout“ a poté „povolit“.
- Odmítnout všem – Toto odepře požadavek od všech do kořenového adresáře. Pro kořenový adresář neexistuje žádná direktiva Allow. Nikdo k němu tedy nemá přístup.
4. Nastavte příslušná oprávnění pro adresář conf a bin
Adresář bin a conf by měli prohlížet pouze oprávnění uživatelé. Je dobré vytvořit skupinu a přidat do této skupiny všechny uživatele, kteří mají povoleno prohlížet/upravovat konfigurační soubory Apache.
Nazvěme tuto skupinu:apacheadmin
Vytvořte skupinu.
groupadd apacheadmin
Povolte této skupině přístup k adresáři bin.
chown -R root:apacheadmin /usr/local/apache2/bin chmod -R 770 /usr/local/apache2/bin
Povolte této skupině přístup do adresáře conf.
chown -R root:apacheadmin /usr/local/apache2/conf chmod -R 770 /usr/local/apache2/conf
Přidejte do této skupiny vhodné členy. V tomto příkladu jsou ramesh i john součástí apacheadmin
# vi /etc/group apacheadmin:x:1121:ramesh,john
5. Zakázat procházení adresářů
Pokud to neuděláte, uživatelé budou moci vidět všechny soubory (a adresáře) ve vašem kořenovém adresáři (nebo v jakémkoli podadresáři).
Pokud například přejdou na http://{vaše-ip}/images/ a pokud pod obrázky nemáte index.html, uvidí všechny soubory obrázků (a podadresáře) uvedené v prohlížeč (stejně jako výstup ls -1). Odtud mohou kliknout na jednotlivý soubor obrázku a zobrazit jej, nebo kliknout na podadresář a zobrazit jeho obsah.
Chcete-li zakázat procházení adresářů, můžete buď nastavit hodnotu direktivy Options na „None“ nebo „-Indexes“ . A – před názvem volby ji odstraní z aktuálního seznamu voleb vynucených pro daný adresář.
Indexy zobrazí seznam dostupných souborů a podadresářů v adresáři v prohlížeči (pouze v případě, že v této složce není přítomen žádný index.html). Indexy by tedy neměly být povoleny.
<Directory /> Options None Order allow,deny Allow from all </Directory> (or) <Directory /> Options -Indexes Order allow,deny Allow from all </Directory>
6. Nepovolovat .htaccess
Pomocí souboru .htaccess uvnitř konkrétního podadresáře pod htdocs (nebo kdekoli mimo) mohou uživatelé přepsat výchozí direktivy apache. V určitých situacích to není dobré a je třeba se tomu vyhnout. Tuto funkci byste měli zakázat.
Neměli byste dovolit uživatelům používat soubor .htaccess a přepisovat direktivy Apache. Chcete-li to provést, nastavte „AllowOverride Žádné ” v kořenovém adresáři.
<Directory /> Options None AllowOverride None Order allow,deny Allow from all </Directory>
7. Zakázat další možnosti
Níže jsou dostupné hodnoty pro direktivu Options:
- Všechny možnosti – Všechny možnosti jsou povoleny (kromě MultiViews). Pokud neurčíte direktivu Options, jedná se o výchozí hodnotu.
- Možnosti ExecCGI – Spouštět CGI skripty (používá mod_cgi)
- Možnosti FollowSymLinks – Pokud máte v tomto adresáři symbolické odkazy, budou následovány.
- Možnosti včetně – Povolit server side include (používá mod_include)
- Možnosti včetně NOEXEC – Povolit zahrnutí na straně serveru bez možnosti spustit příkaz nebo cgi.
- Indexy možností – Zakázat výpis adresářů
- Možnosti MultiViews – Povolit vícenásobná zobrazení vyjednaná pro obsah (používá mod_negotiation)
- Možnosti SymLinksIfOwnerMatch – Podobné jako FollowSymLinks. To však bude následovat pouze v případě, že vlastník je stejný mezi odkazem a původním adresářem, ke kterému je odkaz připojen.
Nikdy nezadávejte „Možnosti vše“. Vždy uveďte jednu (nebo více) z výše uvedených možností. Můžete kombinovat více možností v jednom řádku, jak je znázorněno níže.
Options Includes FollowSymLinks
+ a – před hodnotou volby jsou užitečné, když máte vnořené direcotires a chcete přepsat volbu z nadřazené direktivy Directory.
V tomto příkladu má adresář /site jak include, tak indexy:
<Directory /site> Options Includes Indexes AllowOverride None Order allow,deny Allow from all </Directory>
V případě adresáře /site/en, pokud potřebujete pouze indexy z /site (a ne include), a pokud chcete FollowSymLinks pouze do tohoto adresáře, proveďte následující.
<Directory /site/en> Options -Includes +FollowSymLink AllowOverride None Order allow,deny Allow from all </Directory>
- /web bude mít zahrnutí a indexy
- /site/en bude mít indexy a FollowSymLink
8. Odstraňte nežádoucí moduly DSO
Pokud jste do apache načetli nějaké moduly dynamických sdílených objektů, budou přítomny v direktivě httpd.conf pod direktivou „LoadModule“.
Vezměte prosím na vědomí, že staticky zkompilované moduly Apache nebudou uvedeny jako direktiva „LoadModule“.
Zakomentujte všechny nežádoucí „LoadModules“ v souboru httpd.conf
grep LoadModule /usr/local/apache2/conf/httpd.conf
9. Omezit přístup ke konkrétní síti (nebo ip-adrese)
Pokud chcete, aby byl váš web zobrazen pouze na konkrétní IP adrese nebo síti, postupujte takto:
Chcete-li povolit konkrétní síti přístup k vašemu webu, zadejte síťovou adresu v direktivě Allow.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.0.0/24 </Directory>
Chcete-li povolit konkrétní ip-adrese přístup na váš web, zadejte ip-adresu v direktivě Allow.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.1.21 </Directory>
10. Nezobrazovat ani neposílat verzi Apache (nastavit serverové tokeny)
Ve výchozím nastavení bude hlavička HTTP odpovědi serveru obsahovat verzi Apache a php. Něco podobného následujícímu. To je škodlivé, protože nechceme, aby útočník věděl o konkrétním čísle verze.
Server: Apache/2.2.17 (Unix) PHP/5.3.5
Abyste tomu zabránili, nastavte ServerTokens na Prod v httpd.conf. Zobrazí se „Server:Apache“ bez jakýchkoli informací o verzi.
# vi httpd.conf ServerTokens Prod
Následující jsou možné hodnoty ServerTokens:
- Prod ServerTokens zobrazí „Server:Apache“
- ServerTokens Major zobrazí „Server:Apache/2“
- ServerTokens Minor zobrazí „Server:Apache/2.2“
- Minimální počet serverových tokenů zobrazí „Server:Apache/2.2.17“
- OS ServerTokens zobrazí „Server:Apache/2.2.17 (Unix)“
- ServerTokens je plný zobrazí „Server:Apache/2.2.17 (Unix) PHP/5.3.5“ (Pokud nezadáte žádnou hodnotu ServerTokens, toto je výchozí)
Kromě všech výše uvedených 10 tipů nezapomeňte zabezpečit svůj operační systém UNIX / Linux. Nemá smysl zabezpečovat váš Apache, pokud váš OS není zabezpečený. Také udržujte svou verzi Apache vždy aktuální. Nejnovější verze Apache obsahuje opravy všech známých bezpečnostních problémů. Nezapomeňte často kontrolovat soubory protokolu Apache.
Další čtení na Apache
- Jak nainstalovat Apache 2 s SSL na Linuxu (s mod_ssl, openssl)
- 9 tipů, jak používat Apachectl a Httpd jako zkušený uživatel
- XAMPP:Easy Apache, MySQL, PHP, Perl Install
- Jak nainstalovat nebo upgradovat sadu LAMP pomocí Yum