Wenn Sie ein Systemadministrator sind, sollten Sie Ihren Apache-Webserver sichern, indem Sie die 10 Tipps in diesem Artikel befolgen.
1. Unnötige Module deaktivieren
Wenn Sie vorhaben, Apache aus den Quellen zu installieren, sollten Sie die folgenden Module deaktivieren. Wenn Sie ./configure –help ausführen, sehen Sie alle verfügbaren Module, die Sie deaktivieren/aktivieren können.
- userdir – Zuordnung von Anfragen zu benutzerspezifischen Verzeichnissen. d.h. ~Benutzername in URL wird in ein Verzeichnis auf dem Server übersetzt
- autoindex – Zeigt eine Verzeichnisliste an, wenn keine index.html-Datei vorhanden ist
- status – Zeigt Serverstatistiken an
- env – Löschen/Setzen von ENV-Variablen
- setenvif – Platzierung von ENV-Variablen auf Headern
- cgi – CGI-Skripte
- Aktionen – Auslösen von Aktionen bei Anfragen
- Verhandlung – Inhaltsverhandlung
- Alias – Zuordnung von Anfragen zu verschiedenen Dateisystemteilen
- include – Serverseitige Includes
- filter – Intelligentes Filtern der Anfrage
- version – Umgang mit Versionsinformationen in Konfigurationsdateien mit IfVersion
- as-is – aktuelle Dateitypen
Deaktivieren Sie alle oben genannten Module wie unten gezeigt, wenn Sie ./configure
ausführen./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
Wenn Sie SSL aktivieren und mod_setenv deaktivieren, erhalten Sie die folgende Fehlermeldung.
- Fehler :Syntaxfehler in Zeile 223 von /usr/local/apache2/conf/extra/httpd-ssl.conf:Ungültiger Befehl „BrowserMatch“, möglicherweise falsch geschrieben oder von einem Modul definiert, das nicht in der Serverkonfiguration enthalten ist
- Lösung :Wenn Sie SSL verwenden, deaktivieren Sie setenvif nicht. Oder kommentieren Sie BrowserMatch in Ihrer httpd-ssl.conf aus, wenn Sie mod_setenvif deaktivieren.
Nach der Installation, wenn Sie httpd -l ausführen , sehen Sie alle installierten Module.
# /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
In diesem Beispiel haben wir die folgenden Apache-Module installiert.
- core.c – Apache-Kernmodul
- mod_auth* – Für verschiedene Authentifizierungsmodule
- mod_log_config.c – Clientanfrage protokollieren. bietet zusätzliche Protokollflexibilität.
- mod_ssl.c – Für SSL
- prefork.c – Für das MPM-Modul (Multi-Processing Module)
- httpd_core.c – Apache-Kernmodul
- mod_mime.c – Zum Setzen von Dokument-MIME-Typen
- mod_dir.c – Für die Weiterleitung mit nachgestelltem Schrägstrich in Verzeichnispfaden. wenn Sie url/test/ angeben, geht es zu url/test/index.html
- mod_so.c – Zum Laden von Modulen beim Start oder Neustart
2. Führen Sie Apache als separaten Benutzer und Gruppe aus
Standardmäßig wird Apache möglicherweise als "Niemand" oder "Daemon" ausgeführt. Es ist gut, Apache in einem eigenen nicht privilegierten Konto auszuführen. Zum Beispiel:apache.
Erstellen Sie eine Apache-Gruppe und einen Benutzer.
groupadd apache useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
Ändern Sie die httpd.conf und legen Sie Benutzer und Gruppe entsprechend fest.
# vi httpd.conf User apache Group apache
Wenn Sie danach Apache neu starten und ps -ef ausführen, sehen Sie, dass der Apache als „Apache“ ausgeführt wird (mit Ausnahme des ersten httpd-Prozesses, der immer als root ausgeführt wird).
# ps -ef | grep -i http | awk '{print $1}' root apache apache apache apache apache
3. Beschränken Sie den Zugriff auf das Root-Verzeichnis (verwenden Sie "Erlauben" und "Verweigern")
Sichern Sie das Stammverzeichnis, indem Sie Folgendes in der httpd.conf festlegen
<Directory /> Options None Order deny,allow Deny from all </Directory>
Oben:
- Optionen Keine – Stellen Sie dies auf „Keine“ ein, wodurch keine optionalen Zusatzfunktionen aktiviert werden.
- Auftrag ablehnen, zulassen – Dies ist die Reihenfolge, in der die Direktiven „Deny“ und „Allow“ verarbeitet werden sollen. Dies verarbeitet zuerst „deny“ und als nächstes „allow“.
- Alle ablehnen – Dies verweigert die Anfrage von allen an das Stammverzeichnis. Für das Root-Verzeichnis gibt es keine Allow-Direktive. Daher kann niemand darauf zugreifen.
4. Legen Sie die entsprechenden Berechtigungen für das conf- und das bin-Verzeichnis fest
bin- und conf-Verzeichnisse sollten nur von autorisierten Benutzern eingesehen werden. Es ist eine gute Idee, eine Gruppe zu erstellen und alle Benutzer, die berechtigt sind, die Apache-Konfigurationsdateien anzuzeigen/zu ändern, zu dieser Gruppe hinzuzufügen.
Nennen wir diese Gruppe:apacheadmin
Erstellen Sie die Gruppe.
groupadd apacheadmin
Gewähren Sie dieser Gruppe Zugriff auf das bin-Verzeichnis.
chown -R root:apacheadmin /usr/local/apache2/bin chmod -R 770 /usr/local/apache2/bin
Gewähren Sie dieser Gruppe Zugriff auf das conf-Verzeichnis.
chown -R root:apacheadmin /usr/local/apache2/conf chmod -R 770 /usr/local/apache2/conf
Fügen Sie dieser Gruppe geeignete Mitglieder hinzu. In diesem Beispiel sind sowohl ramesh als auch john Teil von apacheadmin
# vi /etc/group apacheadmin:x:1121:ramesh,john
5. Verzeichnissuche deaktivieren
Wenn Sie dies nicht tun, können Benutzer alle Dateien (und Verzeichnisse) in Ihrem Stammverzeichnis (oder einem beliebigen Unterverzeichnis) sehen.
Wenn sie beispielsweise zu http://{your-ip}/images/ gehen und Sie keine index.html unter images haben, sehen sie alle darin aufgelisteten Bilddateien (und die Unterverzeichnisse). den Browser (genau wie eine Ausgabe von ls -1). Von hier aus können sie auf die einzelne Bilddatei klicken, um sie anzuzeigen, oder auf ein Unterverzeichnis klicken, um ihren Inhalt anzuzeigen.
Um das Durchsuchen von Verzeichnissen zu deaktivieren, können Sie entweder den Wert der Options-Direktive auf „None“ oder „-Indexes“ setzen . Ein – vor dem Optionsnamen entfernt ihn aus der aktuellen Liste der für dieses Verzeichnis erzwungenen Optionen.
Indizes zeigen eine Liste der verfügbaren Dateien und Unterverzeichnisse in einem Verzeichnis im Browser an (nur wenn keine index.html in diesem Ordner vorhanden ist). Indizes sollten also nicht erlaubt sein.
<Directory /> Options None Order allow,deny Allow from all </Directory> (or) <Directory /> Options -Indexes Order allow,deny Allow from all </Directory>
6. .htaccess nicht zulassen
Mit der .htaccess-Datei in einem bestimmten Unterverzeichnis unter den htdocs (oder irgendwo außerhalb) können Benutzer die Standard-Apache-Direktiven überschreiben. In bestimmten Situationen ist dies nicht gut und sollte vermieden werden. Sie sollten diese Funktion deaktivieren.
Sie sollten Benutzern nicht erlauben, die .htaccess-Datei zu verwenden und Apache-Direktiven zu überschreiben. Setzen Sie dazu „AllowOverride None ” im Stammverzeichnis.
<Directory /> Options None AllowOverride None Order allow,deny Allow from all </Directory>
7. Andere Optionen deaktivieren
Im Folgenden sind die verfügbaren Werte für die Options-Direktive aufgeführt:
- Optionen Alle – Alle Optionen sind aktiviert (außer MultiViews). Wenn Sie die Direktive Options nicht angeben, ist dies der Standardwert.
- Optionen ExecCGI – CGI-Skripte ausführen (verwendet mod_cgi)
- Optionen FollowSymLinks – Wenn Sie symbolische Links in diesem Verzeichnis haben, wird diesem gefolgt.
- Optionen beinhaltet – Serverseitige Includes zulassen (verwendet mod_include)
- Optionen enthält NOEXEC – Erlaube serverseitige Einbindungen ohne die Fähigkeit, einen Befehl oder CGI auszuführen.
- Optionsindizes – Verzeichnisliste deaktivieren
- Optionen MultiViews – Inhalt ausgehandelte Mehrfachansichten zulassen (verwendet mod_negotiation)
- Optionen SymLinksIfOwnerMatch – Ähnlich wie FollowSymLinks. Dies folgt jedoch nur, wenn der Eigentümer zwischen dem Link und dem ursprünglichen Verzeichnis, mit dem er verknüpft ist, identisch ist.
Geben Sie niemals „Optionen alle“ an. Geben Sie immer eine (oder mehrere) der oben genannten Optionen an. Sie können mehrere Optionen wie unten gezeigt in einer Zeile kombinieren.
Options Includes FollowSymLinks
Das + und – vor einem Optionswert ist hilfreich, wenn Sie Verzeichnisse verschachtelt haben und eine Option aus der übergeordneten Directory-Direktive überschreiben möchten.
In diesem Beispiel hat das /site-Verzeichnis sowohl Includes als auch Indizes:
<Directory /site> Options Includes Indexes AllowOverride None Order allow,deny Allow from all </Directory>
Wenn Sie für das /site/en-Verzeichnis nur Indizes von /site (und nicht die Includes) benötigen und wenn Sie SymLinks nur zu diesem Verzeichnis folgen möchten, gehen Sie wie folgt vor.
<Directory /site/en> Options -Includes +FollowSymLink AllowOverride None Order allow,deny Allow from all </Directory>
- /site wird Includes und Indizes haben
- /site/en wird Indizes und FollowSymLink haben
8. Unerwünschte DSO-Module entfernen
Wenn Sie dynamische Shared-Object-Module in den Apache geladen haben, sind sie in der httpd.conf unter der Direktive „LoadModule“ vorhanden.
Bitte beachten Sie, dass die statisch kompilierten Apache-Module nicht als „LoadModule“-Direktive aufgelistet werden.
Kommentieren Sie alle unerwünschten "LoadModules" aus in der httpd.conf
grep LoadModule /usr/local/apache2/conf/httpd.conf
9. Beschränken Sie den Zugriff auf ein bestimmtes Netzwerk (oder eine IP-Adresse)
Wenn Sie möchten, dass Ihre Website nur von einer bestimmten IP-Adresse oder einem bestimmten Netzwerk angezeigt wird, gehen Sie wie folgt vor:
Um einem bestimmten Netzwerk den Zugriff auf Ihre Site zu erlauben, geben Sie die Netzwerkadresse in der Allow-Anweisung an.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.0.0/24 </Directory>
Um einer bestimmten IP-Adresse den Zugriff auf Ihre Website zu erlauben, geben Sie die IP-Adresse in der Allow-Anweisung an.
<Directory /site> Options None AllowOverride None Order deny,allow Deny from all Allow from 10.10.1.21 </Directory>
10. Apache-Version nicht anzeigen oder senden (Set ServerTokens)
Standardmäßig enthält der HTTP-Antwort-Header des Servers die Apache- und PHP-Version. Etwas Ähnliches wie das Folgende. Dies ist schädlich, da wir nicht möchten, dass ein Angreifer die spezifische Versionsnummer erfährt.
Server: Apache/2.2.17 (Unix) PHP/5.3.5
Um dies zu vermeiden, setzen Sie die ServerTokens in httpd.conf auf Prod. Dadurch wird „Server:Apache“ ohne Versionsinformationen angezeigt.
# vi httpd.conf ServerTokens Prod
Im Folgenden sind mögliche ServerTokens-Werte aufgeführt:
- ServerTokens Prod zeigt „Server:Apache“ an
- ServerTokens Major zeigt „Server:Apache/2“ an
- ServerTokens Minor zeigt „Server:Apache/2.2“ an
- ServerTokens Min zeigt „Server:Apache/2.2.17“ an
- ServerTokens-Betriebssystem zeigt „Server:Apache/2.2.17 (Unix)“ an
- ServerTokens voll zeigt „Server:Apache/2.2.17 (Unix) PHP/5.3.5“ an (Wenn Sie keinen ServerTokens-Wert angeben, ist dies die Standardeinstellung)
Stellen Sie neben all den oben genannten 10 Tipps sicher, dass Sie Ihr UNIX / Linux-Betriebssystem sichern. Es hat keinen Sinn, Ihren Apache zu sichern, wenn Ihr Betriebssystem nicht sicher ist. Halten Sie außerdem Ihre Apache-Version immer auf dem neuesten Stand. Die neueste Version des Apache enthält Korrekturen für alle bekannten Sicherheitsprobleme. Stellen Sie sicher, dass Sie Ihre Apache-Protokolldateien regelmäßig überprüfen.
Zusätzliche Lektüre zu Apache
- So installieren Sie Apache 2 mit SSL unter Linux (mit mod_ssl, openssl)
- 9 Tipps zur Verwendung von Apachectl und Httpd wie ein Power User
- XAMPP:Einfache Installation von Apache, MySQL, PHP, Perl
- So installieren oder aktualisieren Sie den LAMP-Stack mit Yum