13 Apache Web Server Sécherheet an Hardening Tipps


Mir all si ganz vertraut mam Apache Webserver, et ass e ganz populäre Webserver fir Är Webdateien oder Är Websäit um Internet ze hosten. Hei sinn e puer Linken déi Iech hëllefe fir den Apache Webserver op Ärem Linux Box ze konfiguréieren.

  1. Apache Web Server installéieren
  2. Setup Är Websäit an Ärer Linux Box

Hei an dësem Tutorial wäert ech e puer Haapttipps ofdecken fir Äre Webserver ze sécheren. Ier Dir dës Ännerungen an Ärem Webserver applizéiert, sollt Dir e puer Basics vum Apache Server hunn.

  1. Dokument root Verzeechnes: /var/www/html oder /var/www
  2. Haaptkonfiguratiounsdatei: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) an /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Standard HTTP-Port: 80 TCP
  4. Standard HTTPS Port: 443 TCP
  5. Test Är Konfiguratiounsdatei Astellungen a Syntax: httpd -t
  6. Zougang Logdateien vum Webserver: /var/log/httpd/access_log
  7. Fehlerlogdateien vum Webserver: /var/log/httpd/error_log

1. Wéi verstoppt Apache Versioun an OS Identitéit vu Feeler

Wann Dir Apache mat Quell installéiert oder all aner Package Installateur wéi Yum, weist et d'Versioun vun Ärem Apache Webserver installéiert op Ärem Server mam Betribssystemnumm vun Ärem Server a Feeler. Et weist och d'Informatioun iwwer Apache Moduler déi op Ärem Server installéiert sinn.

Op der Foto uewen, kënnt Dir gesinn datt Apache seng Versioun weist mat dem OS op Ärem Server installéiert. Dëst kann eng grouss Sécherheetsbedrohung fir Äre Webserver wéi och Är Linux Box sinn. Fir ze verhënneren datt Apache dës Informatioun net op d'Welt weist, musse mir e puer Ännerungen an der Apache Haaptkonfiguratiounsdatei maachen.

Öffnen d'Konfiguratiounsdatei mam vim Editor a sicht no ServerSignature, et ass par défaut On. Mir mussen dës Server Ënnerschrëft Off an déi zweet Linn ServerTokens Prod seet Apache nëmmen Apache als Produkt am Server Äntwert Header op all Säit Ufro zréckzeginn, Et ënnerdréckt d'OS, grouss a kleng Versiounsinformatioun.

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache2/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

2. Desaktivéiere Directory Listing

Par défaut Lëscht Apache all Inhalt vum Dokument Root Verzeechnes an der Verontreiung vun Indexdatei. Kuckt w.e.g. d'Bild hei drënner.

Mir kënnen d'Verzeechneslëscht ausschalten andeems Dir d'Optiounsdirektiv an der Konfiguratiounsdatei fir e spezifesche Verzeichnis benotzt. Dofir musse mir en Entrée an der httpd.conf oder apache2.conf Datei maachen.

<Directory /var/www/html>
    Options -Indexes
</Directory>

3. Fuert weider Apache regelméisseg ze aktualiséieren

Apache Entwéckler Gemeinschaft schafft kontinuéierlech u Sécherheetsprobleemer a verëffentlecht seng aktualiséiert Versioun mat neie Sécherheetsoptiounen. Also Et ass ëmmer recommandéiert déi lescht Versioun vun Apache als Äre Webserver ze benotzen.

Fir d'Apache Versioun ze kontrolléieren: Dir kënnt Är aktuell Versioun mat httpd -v Kommando iwwerpréiwen.

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

Dir kënnt Är Versioun mat dem folgenden Kommando aktualiséieren.

# yum update httpd
# apt-get install apache2

Et ass och recommandéiert Äre Kernel an OS op déi lescht stabil Verëffentlechungen aktualiséiert ze halen wann Dir keng spezifesch Applikatioun leeft déi nëmmen op spezifeschen OS oder Kernel funktionnéiert.

4. Desaktivéiere onnéideg Moduler

Et ass ëmmer gutt d'Chancen ze minimiséieren Affer vun engem Webattack ze sinn. Also ass et recommandéiert all déi Moduler auszeschalten déi am Moment net am Gebrauch sinn. Dir kënnt all déi kompiléiert Moduler vum Webserver oplëschten, andeems Dir folgend Kommando benotzt.

# grep LoadModule /etc/httpd/conf/httpd.conf

# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
....

Uewen ass d'Lëscht vun de Moduler déi als Standard aktivéiert sinn awer dacks net gebraucht ginn: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Fir de bestëmmte Modul auszeschalten, kënnt Dir e \# um Ufank vun där Linn setzen an de Service nei starten.

5. Run Apache als separat Benotzer a Grupp

Mat enger Standardinstallatioun leeft Apache säi Prozess mam Benotzer keen oder Daemon. Aus Sécherheetsgrënn ass et recommandéiert Apache a sengem eegene net-privilegiéierte Kont ze lafen. Zum Beispill: http-web.

# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

Elo musst Dir Apache soen fir mat dësem neie Benotzer ze lafen a fir dat ze maachen, musse mir en Entrée an /etc/httpd/conf/httpd.conf maachen an de Service nei starten.

Öffnen /etc/httpd/conf/httpd.conf mam vim Editor a sicht no Schlësselwuert Benotzer a Grupp an do musst Dir de Benotzernumm an de Gruppnumm spezifizéieren fir ze benotzen.

User http-web
Group http-web

6. Benotzt Erlaabt an Ofleenung fir Zougang zu Verzeichnungen ze beschränken

Mir kënnen den Zougang zu Verzeichnisser beschränken mat Allow an Deny Optiounen an der httpd.conf Datei. Hei an dësem Beispill wäerte mir de Root-Verzeichnis sécheren, fir dat andeems Dir déi folgend an der httpd.conf Datei setzt.

<Directory />
   Options None
   Order deny,allow
   Deny from all
</Directory>

  1. Optiounen Keng - Dës Optioun erlaabt de Benotzer keng optional Features z'aktivéieren.
  2. Bestellung refuséieren, erlaben - Dëst ass d'Uerdnung an där d'Direktive Verweigeren an Erlaaben veraarbecht ginn. Hei wäert et als éischt verleegnen an als nächst erlaaben.
  3. Verleegnen vun allen - Dëst wäert d'Ufro vu jidderengem an de Root-Verzeichnis refuséieren, kee wäert fäeg sinn Zougang zu de Root-Verzeichnis ze kréien.

7. Benotzt mod_security a mod_evasive Moduler fir Apache ze sécheren

Dës zwee Moduler mod_security an mod_evasive si ganz populär Moduler vun Apache a punkto Sécherheet.

Wou mod_security als Firewall fir eis Webapplikatiounen funktionnéiert an eis erlaabt den Traffic op Echtzäitbasis ze iwwerwaachen. Et hëlleft eis och eis Websäiten oder Webserver vu brute Force Attacken ze schützen. Dir kënnt einfach mod_security op Ärem Server mat der Hëllef vun Äre Standard Package Installateuren installéieren.

$ sudo apt-get install libapache2-modsecurity
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload
# yum install mod_security
# /etc/init.d/httpd restart

mod_evasive funktionnéiert ganz effizient, et brauch eng Ufro fir ze veraarbecht a veraarbecht se ganz gutt. Et verhënnert datt DDOS Attacke sou vill Schued maachen. Dës Feature vu mod_evasive erméiglecht et d'HTTP brute Kraaft an den Dos oder DDos Attack ze handhaben. Dëse Modul erkennt Attacke mat dräi Methoden.

  1. Wann esou vill Ufroen an e puer Mol pro Sekonn op eng selwecht Säit kommen.
  2. Wann e Kand Prozess probéiert méi wéi 50 gläichzäiteg Ufroen ze maachen.
  3. Wann iergendeng IP nach ëmmer probéiert nei Ufroen ze maachen wann se temporär op schwaarze Lëscht ass.

mod_evasive kann direkt vun der Quell installéiert ginn. Hei hu mir en Installatiouns- a Setupguide vun dëse Moduler déi Iech hëllefen dës Apache Moduler an Ärer Linux Këscht opzestellen.

  1. Schützt Apache mat Mod_Security a Mod_evasive

8. Desaktivéiere Apache's folgend vu symbolesche Linken

Par défaut follegt Apache Symlinks, mir kënnen dës Feature mat FollowSymLinks mat Optiounsdirektiv ausschalten. A fir dat ze maachen, musse mir déi folgend Entrée an der Haaptkonfiguratiounsdatei maachen.

Options -FollowSymLinks

A wann e bestëmmte Benotzer oder Websäit FollowSymLinks aktivéiert brauch, kënne mir einfach eng Regel an .htaccess Datei vun där Websäit schreiwen.

# Enable symbolic links
Options +FollowSymLinks

Bemierkung: Fir d'Reegelen ëmzeschreiwen an der .htaccess Datei AllowOverride All soll an der Haaptkonfiguratioun weltwäit präsent sinn.

9. Auszeschalten Server Säit enthält an CGI Ausféierung

Mir kënnen ausschalten Server Säit enthält (mod_include) an CGI Ausféierung wann net néideg a fir dat ze maachen musse mir Haaptkonfiguratiounsdatei änneren.

Options -Includes
Options -ExecCGI

Mir kënnen dëst och fir e bestëmmte Verzeichnis mam Directory Tag maachen. Hei An dësem Beispill schalte mir Includes a Cgi Dateiexekutioune fir /var/www/html/web1 Verzeechnes aus.

<Directory "/var/www/html/web1">
Options -Includes -ExecCGI
</Directory>

Hei sinn e puer aner Wäerter mat kënnen op oder ausgeschalt ginn mat Optiounen Direktiv.

  1. Optiounen All - Fir All Optiounen gläichzäiteg z'aktivéieren. Dëst ass de Standardwäert, Wann Dir keng Wäerter explizit an der Apache conf Datei oder .htaccess wëllt spezifizéieren.
  2. Optiounen enthält NOEXEC - Dës Optioun erlaabt Server Säit enthält ouni d'Ausféierungserlaabnes fir e Kommando oder cgi Dateien.
  3. Optiounen MultiViews - Erlaabt Inhaltsverhandlunge Multiviews mat mod_negotiation Modul.
  4. Optiounen SymLinksIfOwnerMatch - Et ass ähnlech wéi FollowSymLinks. Dëst wäert awer nëmmen folgen wann de Besëtzer d'selwecht ass tëscht dem Link an dem ursprénglechen Verzeechnes mat deem et verlinkt ass.

10. Limite Ufro Gréisst

Par défaut huet Apache keng Limit op der Gesamtgréisst vun der HTTP Ufro dh onlimitéiert a wann Dir grouss Ufroen op engem Webserver erlaabt ass et méiglech datt Dir en Affer vu Denial of Service Attacke kéint sinn. Mir kënnen d'Ufrogréisst vun enger Apache-Direktiv LimitRequestBody mat dem Verzeechnes Tag limitéieren.

Dir kënnt de Wäert a Bytes vun 0 (onlimitéiert) op 2147483647 (2GB) setzen, déi an engem Ufrokierper erlaabt sinn. Dir kënnt dës Limit no Äre Sitebedürfnisser setzen, Ugeholl datt Dir e Site hutt wou Dir Eropluede erlaabt an Dir wëllt d'Uploadgréisst fir e bestëmmte Verzeechnes limitéieren.

Hei an dësem Beispill ass user_uploads e Verzeechnes deen Dateien enthält déi vun de Benotzer eropgeluede ginn. Mir setzen eng Limit vu 500K fir dëst.

<Directory "/var/www/myweb1/user_uploads">
   LimitRequestBody 512000
</Directory>

11. Schützen DDOS Attacken an Hardening

Gutt, et ass wouer datt Dir Är Websäit net komplett virun DDos Attacken schützt. Hei sinn e puer Direktiven déi Iech hëllefe kënnen ze kontrolléieren.

  1. TimeOut : Dës Direktiv erlaabt Iech d'Zuel vun Zäit festzeleeën, deen de Server op bestëmmten Eventer waart bis se fäerdeg ass, ier se versoen. Säi Standardwäert ass 300 Sekonnen. Et ass gutt dëse Wäert niddereg ze halen op deene Siten déi ënner DDOS Attacken ënnerleien. Dëse Wäert hänkt ganz vun der Aart vun der Ufro of, déi Dir op Ärer Websäit kritt. Opgepasst: Et kéint Problemer mat kommen CGI Scripten stellen.
  2. MaxClients: Dës Direktiv erlaabt Iech d'Limite op Verbindungen ze setzen déi gläichzäiteg zerwéiert ginn. All nei Verbindung gëtt no dëser Limit an der Schlaang gesat. Et ass verfügbar mat Prefork an Worker souwuel MPM. De Standardwäert dovun ass 256.
  3. KeepAliveTimeout : Et ass d'Zäit wéi de Server op eng spéider Ufro waart ier d'Verbindung zougemaach gëtt. De Standardwäert ass 5 Sekonnen.
  4. LimitRequestFields: Et hëlleft eis eng Limit op d'Zuel vun den Headerfelder vun HTTP-Ufroen ze setzen, déi vun de Clienten ugeholl ginn. Säin Standardwäert ass 100. Et ass recommandéiert dëse Wäert ze senken wann DDos Attacke geschéien als Resultat vu sou vill http Ufro Header.
  5. LimitRequestFieldSize : Et hëlleft eis eng Gréisstlimit op den HTTP Request Header ze setzen.

12. Aktivéiert Apache Logging

Apache erlaabt Iech onofhängeg vun Ärem OS Logbicher ze protokolléieren. Et ass schlau Apache Logging z'aktivéieren, well et méi Informatioun gëtt, sou wéi d'Befehle vun de Benotzer, déi mat Ärem Webserver interagéiert hunn.

Fir dat ze maachen, musst Dir de mod_log_config Modul enthalen. Et ginn dräi Haaptprotokollbezunnen Direktiven verfügbar mat Apache.

  1. TransferLog: Eng Logdatei erstellen.
  2. LogFormat : En personaliséierten Format spezifizéieren.
  3. CustomLog : Eng Logdatei erstellen an formatéieren.

Dir kënnt se och fir eng bestëmmte Websäit benotzen wann Dir Virtual Hosting maacht a fir dat musst Dir et an der virtueller Host Sektioun spezifizéieren. Zum Beispill, hei ass meng Websäit virtuell Hostkonfiguratioun mat Logging aktivéiert.

<VirtualHost *:80>
DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined
</VirtualHost>

13. Séchert Apache mat SSL Certificaten

Lescht, awer net déi mannst SSL Zertifikater, kënnt Dir Är all Kommunikatioun op eng verschlësselte Manéier iwwer den Internet mat SSL Zertifika sécheren. Stellt Iech vir, Dir hutt eng Websäit op där d'Leit aloggen andeems se hir Login-Umeldungsinformatiounen beweisen oder Dir hutt eng E-Commerce Websäit wou d'Leit hir Bankdetailer oder Debit-/Kreditkaartdetailer ubidden fir Produkter ze kafen, Par défaut schéckt Äre Webserver dës Detailer einfach - Text Format awer wann Dir SSL Zertifikater op Är Websäiten benotzt, schéckt Apache all dës Informatioun am verschlësselten Text.

Dir kënnt SSl Zertifikater vu sou vill verschiddene SSL Ubidder kafen wéi namecheap.com. Wann Dir e ganz klenge Webgeschäft bedreift an net gewëllt sidd en SSL Zertifika ze kafen, kënnt Dir ëmmer nach e Selbst ënnerschriwwenen Zertifika op Är Websäit zouginn. Apache benotzt de mod_ssl Modul fir SSL Zertifikat z'ënnerstëtzen.

# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

Wann Ären Zertifika erstallt an ënnerschriwwe gouf. Elo musst Dir dëst an der Apache Konfiguratioun addéieren. Öffnen d'Haaptkonfiguratiounsdatei mam vim Editor a füügt déi folgend Zeilen un an start de Service nei.

<VirtualHost 172.16.25.125:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/example.com.crt
        SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
        SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
        ServerAdmin [email 
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog /var/log/httpd/example.com-error_log
        CustomLog /var/log/httpd/example.com-access_log common
</VirtualHost>

Öffnen Äre Browser, Typ https://example.com, an Dir wäert fäeg sinn den neie selbst ënnerschriwwenen Zertifika ze gesinn.

Dëst sinn e puer Sécherheetstips déi Dir benotze kënnt fir Är Apache Webserverinstallatioun ze sécheren. Fir méi nëtzlech Sécherheetstips an Iddien, kuckt déi offiziell Online Dokumentatioun vum Apache HTTP Server.