PUB:20150104 How to configure fail2ban to protect Apache HTTP server

@geekpi
This commit is contained in:
wxy 2015-03-16 22:08:23 +08:00
parent 9998ff511e
commit a98199820b

View File

@ -1,16 +1,16 @@
如何配置 fail2ban 来保护 Apache 服务器
================================================================================
生产环境中的Apache服务器可能会受到不同的攻击。攻击者或许试图通过暴力攻击或者执行恶意脚本来获取未经授权或者禁止访问的目录。一些恶意爬虫或许会扫描你网站下的任意安全漏洞或者手机email地址或者web表格来发送垃圾邮件。
生产环境中的 Apache 服务器可能会受到不同的攻击。攻击者或许试图通过暴力攻击或者执行恶意脚本来获取未经授权或者禁止访问的目录。一些恶意爬虫或许会扫描你网站下的各种安全漏洞或者通过收集email地址和web表单来发送垃圾邮件。
Apache服务器具有综合的日志功能来捕捉不同表明是攻击的异常事件。然而它还不能系统地解析具体的apache日志并迅速地反应到潜在的攻击(比如,禁止/解禁IP地址。这时候`fail2ban`可以解救这一切,解放了系统管理员的工作。
Apache服务器具有全面的日志功能可以捕捉到各种攻击所反映的异常事件。然而它还不能系统地解析具体的apache 日志并迅速地对潜在的攻击进行反应(比如,禁止/解禁IP地址。这时候`fail2ban`可以解救这一切,解放了系统管理员的工作。
`fail2ban`是一款入侵防御工具,可以基于系统日志检测不同的工具并且可以自动采取保护措施比如:通过`iptables`禁止ip、阻止/etc/hosts.deny中的连接、或者通过邮件通知事件。fail2ban具有一系列预定义的“监狱”它使用特定程序日志过滤器来检测通常的攻击。你也可以编写自定义的规则来检测来自任意程序的攻击。
`fail2ban`是一款入侵防御工具,可以基于系统日志检测不同的工具并且可以自动采取保护措施比如:通过`iptables`禁止ip、通过 /etc/hosts.deny 阻止连接、或者通过邮件发送通知。fail2ban具有一系列预定义的“监狱”它使用特定程序日志过滤器来检测通常的攻击。你也可以编写自定义的规则来检测来自任意程序的攻击。
在本教程中我会演示如何配置fail2ban来保护你的apache服务器。我假设你已经安装了apache和fail2ban。对于安装请参考[另外一篇教程][1]。
### 什么是 Fail2ban 监狱 ###
让我们更深入地了解fail2ban监狱。监狱定义了具体的应用策略它会为指定的程序触发一个保护措施。fail2ban在/etc/fail2ban/jail.conf 下为一些流行程序如Apache、Dovecot、Lighttpd、MySQL、Postfix、[SSH][2]等预定义了一些监狱。每个依赖于特定的程序日志过滤器(在/etc/fail2ban/fileter.d 下面来检测通常的攻击。让我看一个例子监狱SSH监狱。
让我们更深入地了解 fail2ban 监狱。监狱定义了具体的应用策略它会为指定的程序触发一个保护措施。fail2ban在 /etc/fail2ban/jail.conf 下为一些流行程序如Apache、Dovecot、Lighttpd、MySQL、Postfix、[SSH][2] 等预定义了一些监狱。每个监狱都通过特定的程序日志过滤器(在/etc/fail2ban/fileter.d 下面来检测通常的攻击。让我看一个例子监狱SSH监狱。
[ssh]
enabled = true
@ -24,15 +24,15 @@ SSH监狱的配置定义了这些参数
- **[ssh]** 方括号内是监狱的名字。
- **enabled**:是否启用监狱
- **port** 端口的数字 (或者数字对应的名称).
- **filter** 检测攻击的检测规则
- **logpath** 检测的日志文件
- **maxretry** 禁止前失败的最大数
- **banaction** 禁止操作
- **port** 端口号(或者对应的服务名称)
- **filter** 检测攻击的日志解析规则
- **logpath** 检测的日志文件
- **maxretry** 最大失败次
- **banaction** 所进行的禁止操作
定义配置文件中的任意参数都会覆盖相应的默认配置`fail2ban-wide` 中的参数。相反,任意缺少的参数都会使用定义在[DEFAULT]字段的值。
定义在监狱配置中的任意参数都会覆盖`fail2ban-wide` 中相应的默认配置参数。相反,任何缺少的参数都会使用定义在[DEFAULT] 字段的默认值。
预定义日志过滤器都必须在/etc/fail2ban/filter.d可以采取的操作在/etc/fail2ban/action.d。
预定义的日志过滤器都放在/etc/fail2ban/filter.d而可以采取的禁止操作放在 /etc/fail2ban/action.d。
![](https://farm8.staticflickr.com/7538/16076581722_cbca3c1307_b.jpg)
@ -40,7 +40,7 @@ SSH监狱的配置定义了这些参数
### 启用预定义的apache监狱 ###
`fail2ban`的默认安装为Apache服务提供了一些预定义监狱以及过滤器。我要启用这些内建的Apache监狱。由于Debian和红买配置的稍微不同我会分别它们的配置文件。
`fail2ban`的默认安装为Apache服务提供了一些预定义监狱和过滤器。我要启用这些内建的Apache监狱。由于Debian和RedHat配置的稍微不同我会分别提供它们的配置文件。
#### 在Debian 或者 Ubuntu启用Apache监狱 ####
@ -50,7 +50,7 @@ SSH监狱的配置定义了这些参数
----------
# detect password authentication failures
# 检测密码认证失败
[apache]
enabled = true
port = http,https
@ -58,7 +58,7 @@ SSH监狱的配置定义了这些参数
logpath = /var/log/apache*/*error.log
maxretry = 6
# detect potential search for exploits and php vulnerabilities
# 检测漏洞和 PHP 脆弱性扫描
[apache-noscript]
enabled = true
port = http,https
@ -66,7 +66,7 @@ SSH监狱的配置定义了这些参数
logpath = /var/log/apache*/*error.log
maxretry = 6
# detect Apache overflow attempts
# 检测 Apache 溢出攻击
[apache-overflows]
enabled = true
port = http,https
@ -74,7 +74,7 @@ SSH监狱的配置定义了这些参数
logpath = /var/log/apache*/*error.log
maxretry = 2
# detect failures to find a home directory on a server
# 检测在服务器寻找主目录的尝试
[apache-nohome]
enabled = true
port = http,https
@ -100,7 +100,7 @@ SSH监狱的配置定义了这些参数
----------
# detect password authentication failures
# 检测密码认证失败
[apache]
enabled = true
port = http,https
@ -108,7 +108,7 @@ SSH监狱的配置定义了这些参数
logpath = /var/log/httpd/*error_log
maxretry = 6
# detect spammer robots crawling email addresses
# 检测抓取邮件地址的爬虫
[apache-badbots]
enabled = true
port = http,https
@ -117,7 +117,7 @@ SSH监狱的配置定义了这些参数
bantime = 172800
maxretry = 1
# detect potential search for exploits and php <a href="http://xmodulo.com/recommend/penetrationbook" style="" target="_blank" rel="nofollow" >vulnerabilities</a>
# 检测漏洞和 PHP 脆弱性扫描
[apache-noscript]
enabled = true
port = http,https
@ -125,7 +125,7 @@ SSH监狱的配置定义了这些参数
logpath = /var/log/httpd/*error_log
maxretry = 6
# detect Apache overflow attempts
# 检测 Apache 溢出攻击
[apache-overflows]
enabled = true
port = http,https
@ -133,7 +133,7 @@ SSH监狱的配置定义了这些参数
logpath = /var/log/httpd/*error_log
maxretry = 2
# detect failures to find a home directory on a server
# 检测在服务器寻找主目录的尝试
[apache-nohome]
enabled = true
port = http,https
@ -141,9 +141,9 @@ SSH监狱的配置定义了这些参数
logpath = /var/log/httpd/*error_log
maxretry = 2
# detect failures to execute non-existing scripts that
# are associated with several popular web services
# e.g. webmail, phpMyAdmin, WordPress
# 检测执行不存在的脚本的企图
# 这些都是流行的网站服务程序
# webmail phpMyAdminWordPress
port = http,https
filter = apache-botsearch
logpath = /var/log/httpd/*error_log
@ -175,7 +175,7 @@ SSH监狱的配置定义了这些参数
![](https://farm8.staticflickr.com/7572/15891521967_5c6cbc5f8f_c.jpg)
你也可以手动禁止或者解禁IP地址
你也可以手动禁止或者解禁IP地址
要用制定监狱禁止IP
@ -187,7 +187,7 @@ SSH监狱的配置定义了这些参数
### 总结 ###
本篇教程解释了fail2ban监狱如何工作以及如何使用内置的监狱来保护Apache服务器。依赖于你的环境以及要保护的web服务器类型你或许要适配已存在的监狱或者编写自定义监狱和日志过滤器。查看outfail2ban的[官方Github页面][3]来获取最新的监狱和过滤器示例。
本篇教程解释了fail2ban监狱如何工作以及如何使用内置的监狱来保护Apache服务器。依赖于你的环境以及要保护的web服务器类型你或许要调整已有的监狱或者编写自定义监狱和日志过滤器。查看outfail2ban的[官方Github页面][3]来获取最新的监狱和过滤器示例。
你有在生产环境中使用fail2ban么分享一下你的经验吧。
@ -197,11 +197,11 @@ via: http://xmodulo.com/configure-fail2ban-apache-http-server.html
作者:[Dan Nanni][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
[a]:http://xmodulo.com/author/nanni
[1]:http://xmodulo.com/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html
[2]:http://xmodulo.com/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html
[1]:http://linux.cn/article-5067-1.html
[2]:http://linux.cn/article-5067-1.html
[3]:https://github.com/fail2ban/fail2ban