6G Firewall: Mehr Schutz für deinen Apache Webserver

Ich bin stets um die Sicherheit meines Blogs bedacht. Über die Jahre hinweg habe ich immer wieder an meiner .htaccess etc. geschraubt. Das Projekt HTML5 Boilerplate hat mir mit seiner .htaccess-Datei einen großen Dienst erwiesen. Durch einen Beitrag von Andreas Hecht bei drweb.de bin ich kürzlich über die Firewall von Jeff Starr gestolpert.

Protect (Quelle: GotCredit, Liz. CC BY 2.0)
Protect (Quelle: GotCredit, Liz. CC BY 2.0)

Kannte ich vorher noch gar nicht. Also hab ich einen kurzen Blick auf seine Konfiguration geworfen. Aktuell ist Version 6, an der er ganze drei Jahre entwickelt, getestet und gefeilt hat. Seine Firewall schützt unter anderem vor den folgenden Bedrohungen:

  • bösartige URI Anfragen
  • böse Webcrawler
  • Spam Referrer
  • fiese Exploits
  • XSS Angriffe
  • SQL & PHP Injections
  • Response Splitting
  • Dual-Header Exploits
  • usw.

Im Web gibt es mittlerweile zu viele Bedrohungen, als das ein Webseitenbetreiber oder Blogger dagegen immer das passende Mittel parat hat. Das dachte sich wohl auch Jeff Starr und stellt seine Firewall daher zur freien Verfügung. Meiner Meinung bietet diese Firewall ein sehr gutes Setting und sollte auf jedem Apache Webserver eingesetzt werden.

6G Firewall: Einfach nutzen

Die Nutzung ist denkbar einfach. Dein Server muss lediglich Apache 2 oder höher verwenden und die Konfiguration per .htaccess-Datei akzeptieren. Kopiere die nachfolgende Firewall-Konfiguration einfach in eine .htaccess-Datei und das war’s.

# 6G FIREWALL/BLACKLIST
# @ https://perishablepress.com/6g/
# 6G:[QUERY STRINGS]
<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
	RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR]
	RewriteCond %{QUERY_STRING} ([a-z0-9]{2000}) [NC,OR]
	RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
	RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
	RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
	RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
	RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
	RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
	RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
	RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC]
	RewriteRule .* - [F]
</IfModule>
# 6G:[REQUEST METHOD]
<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_METHOD} ^(connect|debug|delete|move|put|trace|track) [NC]
	RewriteRule .* - [F]
</IfModule>
# 6G:[REFERRERS]
<IfModule mod_rewrite.c>
	RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000}) [NC,OR]
	RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC]
	RewriteRule .* - [F]
</IfModule>
# 6G:[REQUEST STRINGS]
<IfModule mod_alias.c>
	RedirectMatch 403 (?i)([a-z0-9]{2000})
	RedirectMatch 403 (?i)(https?|ftp|php):/
	RedirectMatch 403 (?i)(base64_encode)(.*)(\()
	RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\.
	RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&amp;?)/?$
	RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\")
	RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\s|\{|\}|\[|\]|\|)
	RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|etc/passwd|muieblack)
	RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ)
	RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$
	RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php
</IfModule>
# 6G:[USER AGENTS]
<IfModule mod_setenvif.c>
	SetEnvIfNoCase User-Agent ([a-z0-9]{2000}) bad_bot
	SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot
	<limit GET POST PUT>
		Order Allow,Deny
		Allow from All
		Deny from env=bad_bot
	</limit>
</IfModule>
# 6G:[BAD IPS]
<Limit GET HEAD OPTIONS POST PUT>
	Order Allow,Deny
	Allow from All
	# uncomment/edit/repeat next line to block IPs
	# Deny from 123.456.789
</Limit>

Anpassen musst du eigentlich nichts weiter, außer vielleicht deiner IP-Blockliste. Bei mir war das der Fall. Die Firewall soll laut Jeff Starr sehr ressourcenschonend arbeiten. Auf seinem Blog erhältst du zusätzliche Erklärungen zur Funktionsweise seiner Konfiguration.

weitere Artikel über Webserver-Sicherheit


Avatar von reraiseace
Autor: Markus Werner (reraiseace) Twitterreraiseace, Google+reraiseace, Twittercb_werner
Ich bin Redaktionsvolontär bei der COMPUTER BILD in Hamburg, Fernstudent am Deutschen Journalistenkolleg und schreibe auf re{raise}ace privat über Webdesign und Programmierung. Seit 2015 schrieb ich auch regelmäßig für andere Medien.

0 Kommentare – Schreib mir deine Meinung!

Fülle bitte die nachstehenden Felder aus. Angaben mit einem Sternchen sind Pflichtangaben. Deine E-Mail-Adresse wird nicht veröffentlicht.