# Beispielkonfiguration für mod_security
# Erstellt von Christopher Kunz
# Erhebt keinerlei Anspruch auf irgendeine Vollständigkeit
# Nicht auf Produktionsseiten einsetzen!
# Erstellt im November 2004 für die PHP Conference
# Vielen Dank an Sebastian "GPF" Wiesinger
# Filter anschalten - kann per VHost (de-)aktiviert werden
SecFilterEngine On
SecFilterCheckURLEncoding On
SecAuditEngine RelevantOnly
SecAuditLog /usr/local/apache/logs/security-audit.log
SecFilterScanPOST On
# ServerSignature fälschen - erfordert ServerTokens Full
SecServerSignature "PHPConf/WebServ 1.2.3.4"
# Default-Aktion für SecFilter(-Selective)
SecFilterDefaultAction "log,status:401"
# anti-XSS in Request und Client
SecFilterSelective THE_REQUEST ""
SecFilterSelective "HTTP_USER_AGENT" "<.+>"
# Umgehung von nmap's Webserver-Identifizierungsversuchen
SecFilterSelective THE_REQUEST "^(HELP|default|\||TNMP|DmdT|\:)$" "pass,log"
# Typo3 benötigt "../../" in URIs für eine bestimmte URI
SecFilterSelective QUERY_STRING "\.\./" chain
SecFilterSelective SCRIPT_FILENAME !"alt_file_navframe.php" "deny,log"
# Gallery benötigt "http://" in URI für return-URLs nach Ausfüllen eines
# Formular-Popups
SecFilterSelective QUERY_STRING "http://" chain
SecFilterSelective SCRIPT_FILENAME !do_command.php deny,log,status:403
# Einige generische Regeln, die auf das gesamte Request Scope angewendet werden
# SecFilter ist teurer als SecFilterSelective, sollte also sparsam verwendet
# werden
SecFilter "\.(bash|mysql)_history"
SecFilter "/etc/(passwd|shadow)"
# Aufruf bestimmter Binaries wird verboten
SecFilterSelective "QUERY_STRING" "bin/(kill|ls|passwd|perl|chmod|wget|lynx|links|net(stat|cat)|who|whoami|id|cd|ld)" "log,redirect:/denied-binaries.html"
# Shells sollten auch nicht über den Query-String ausgeführt werden
SecFilterSelective "QUERY_STRING" "bin/(ba|a|z|c|k)?sh" "log,redirect:/denied-bash.html"