Bitte unterstützt meine Arbeit
1. Apache-Version und Betriebssystem-Identität bei Fehlern verstecken:
Öffne die Apache Konfigurationsdatei mit dem vim-Editor oder ähnlichem und such nach “ServerSignature“, dessen Standardeinstellung On ist.
Wir müssen diese Serversignatur deaktivieren und die zweite Zeile “ServerTokens Prod” sagt dem Apache, dass er nur Apache als Produkt im Server-Response-Header auf jeder Seitenanfrage zurückgeben soll, es unterdrückt das Betriebssystem, Haupt- und Nebenversionsinformationen.
ServerSignature Off
ServerTokens Prod
Jetzt den apache Dienst neustarten.
2. Directory Listing deaktivieren:
Standardmäßig listet der Apache den gesamten Inhalt des Document Root Directory auf sofern keine Indexdatei vorhanden ist.
Wenn du dies aus irgendeinem Grund nicht benötigst, solltest du es besser ausschalten.
Wir können die Verzeichnisauflistung deaktivieren, indem wir die Option in der Konfigurationsdatei für ein bestimmtes Verzeichnis verwenden. Dazu müssen wir einen Eintrag in der Datei httpd.conf oder apache2.conf machen.
<Directory /var/www/html>
Options -Indexes
</Directory>
3. Unnötige Module deaktivieren:
Es ist immer gut, die Chancen, Opfer eines Webangriffs zu werden, zu verringern. Es wird daher empfohlen, alle Module zu deaktivieren, die derzeit nicht verwendet werden. Wir können alle kompilierten Module des Webservers mit folgendem Befehl auflisten.
grep LoadModule /etc/httpd/conf/httpd.conf
# muss vor die entsprechende Zeile gesetzt werden die deaktiviert werden soll zb:
#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
....
Oben ist die Liste der Module, die standardmäßig aktiviert sind, aber oft nicht benötigt werden: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Um das jeweilige Modul zu deaktivieren, machen wir ein “#” am Anfang dieser Zeile einfügen und starten den Apache Dienst im Anschluss neu.
4. “Folgen von symbolischen Links” unter Apache deaktivieren:
Standardmäßig folgt der Apache Symlinks, wir können diese Funktion mit der FollowSymLinks with Option deaktivieren. Und dazu müssen wir den folgenden Eintrag in der Hauptkonfigurationsdatei vornehmen.
Options -FollowSymLinks
Und wenn ein bestimmter Benutzer oder eine bestimmte Website FollowSymLinks aktivieren muss, können wir einfach eine Regel in die Datei “.htaccess” von dieser Website schreiben.
# Enable symbolic links
Options +FollowSymLinks
Hinweis: Um rewrite Regeln in der Datei “.htaccess” zu aktivieren, sollte der Eintrag “AllowOverride All” in der Hauptkonfiguration global vorhanden sein.
5.Schutz vor DDOS-Angriffen und härten des Servers:
Nun, es ist wahr, dass Sie Ihre Website nicht vollständig vor DDos-Angriffen schützen können. Hier sind einige Richtlinien, die Ihnen helfen können, eine Kontrolle darüber zu haben.
TimeOut: Mit dieser Anweisung können Sie die Zeitspanne festlegen, die der Server auf das Eintreten bestimmter Ereignisse wartet, bevor er ausfällt. Der Standardwert ist 300 Sekunden. Es ist gut, diesen Wert auf den Seiten niedrig zu halten, die DDOS-Angriffen ausgesetzt sind. Dieser Wert hängt völlig von der Art der Anfrage ab, die Sie auf Ihrer Website erhalten. Hinweis: Es könnte zu Problemen mit den mitgelieferten CGI-Skripten führen.
MaxClients: Diese Anweisung ermöglicht es Ihnen, die Grenze für Verbindungen festzulegen, die gleichzeitig bedient werden sollen. Jede neue Verbindung wird nach diesem Limit in die Warteschlange gestellt. Es ist verfügbar mit Prefork und Worker sowohl MPM. Der Standardwert ist 256.
KeepAliveTimeout: Ist die Zeit, die der Server auf eine nachfolgende Anforderung wartet, bevor er die Verbindung schließt. Der Standardwert ist 5 Sekunden.
LimitRequestFields: Hilft uns, eine Begrenzung der Anzahl der Headerfelder der HTTP-Anfrage festzulegen, die von den Clients akzeptiert werden. Der Standardwert ist 100. Es wird empfohlen, diesen Wert zu senken, wenn DDos-Angriffe aufgrund von so vielen http-Request-Headern auftreten.
LimitRequestFieldSize: Hilft uns, eine Größenbeschränkung für den HTTP-Request-Header festzulegen.
5.Schutz vor SQL Injections:
MySQL-Injektionsversuche sind einer der häufigsten Hackerangriffe auf PHP-Websites. Wenn Ihre Website auf einem dedizierten oder virtuellen Server gehostet wird, ist es am besten, wenn Ihr Server mit den richtigen mod_security-Regeln gehärtet wird. Wenn Sie jedoch auf einem Shared Hosting-Server arbeiten, ist dies keine Option. Wenn Sie nun glauben, dass es nicht möglich ist, Ihre Website gegen verschiedene Hacker-Methoden auf Shared Hosting zu schützen, dann liegen Sie falsch. Obwohl es nicht möglich ist, fortgeschrittene Strategien zum Schutz Ihrer Website zu verwenden, können Sie sie dennoch mit Hilfe von .htaccess-Regeln vor Hacking-Versuchen schützen. Um einen solchen Schutz zu implementieren, fügen Sie Ihre aktuelle .htaccess-Datei mit dem folgenden Code an
<IfModule mod_rewrite.c>
# Enable rewrite engine
RewriteEngine On
# Block suspicious request methods
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]
# Block WP timthumb hack
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1]
# Block suspicious user agents and requests
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|wget|python|nikto|curl|scan|java|winhttp|clshttp|loader) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{HTTP_USER_AGENT} (;|<|>|'|"|\)|\(|%0A|%0D|%22|%27|%28|%3C|%3E|%00).*(libwww-perl|wget|python|nikto|curl|scan|java|winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
RewriteCond %{THE_REQUEST} \?\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} \/\*\ HTTP/ [NC,OR]
RewriteCond %{THE_REQUEST} etc/passwd [NC,OR]
RewriteCond %{THE_REQUEST} cgi-bin [NC,OR]
RewriteCond %{THE_REQUEST} (%0A|%0D) [NC,OR]
# Block MySQL injections, RFI, base64, etc.
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http%3A%2F%2F [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
# PHP-CGI Vulnerability
RewriteCond %{QUERY_STRING} ^(%2d|\-)[^=]+$ [NC,OR]
#proc/self/environ? no way!
RewriteCond %{QUERY_STRING} proc\/self\/environ [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
WICHTIG: Das macht den Server nicht unhackbar oder 100%ig sicher, denn das ist nicht möglich, wenn man online ist, aber es ist ein guter Anfang, wenn man selbst seine Webseite hosten will oder einen Root/VPS Server hat.:)