相关内容

就业课程

热门标签

python RHCA RHE7.0 KVM linux就业培训 linux培训 linux 金源万博 mysql 云计算 python培训 RedHat redhat linux Redhat培训 redhat认证 RH442 linux认证 RHCE RHCE培训 openstack openstack培训 北京金源万博 RHCE培训 Django 虚拟化 Python运维开发

您所在的位置:首页>新闻动态>新闻内容

如何通过配置fail2ban保护Apache HTTP服务器?

  生产环境中的Apache HTTP服务器可能会遭到各种不同方式的攻击。攻击者可能采用蛮力攻击或执行恶意脚本,企图访问未经授权的目录或禁止访问的目录。一些恶意机器人程序可能会扫描你的网站,查找任何可能存在的安全漏洞,或者收集电子邮件地址或网站表单,以便发送垃圾邮件。

  Apache HTTP服务器随带全面的日志功能,可以捕获及记录表明此类攻击的异常事件。不过,系统性地分析详细的Apache日志,并迅速应对潜在攻击(比如禁止/取消禁止冒犯性的IP地址)仍然很重要。这时候fail2ban派得上用场,可以简化系统管理员的工作。

  fail2ban是一款开源入侵预防工具,可以根据系统日志来检测各种各样的攻击,并且自动采取预防行动,比如说使用iptables禁止IP地址,通过/etc/hosts.deny阻止连接,或者通过电子邮件通知事件。fail2ban随带一组预先定义的“jail”(暂译“监狱”),这些jail使用针对特定应用程序的日志过滤器来检测常见攻击。你还可以编写自定义的jail,阻止针对任意应用程序的任何特定的攻击。

  我在本教程中将演示你如何可以配置fail2ban,以保护Apache HTTP服务器。我假设你事先已经安装好了Apache HTTP服务器和fail2ban。至于fail2ban的安装,请参阅另一篇教程:http://xmodulo.com/how-to-protect-ssh-server-from-brute-force-attacks-using-fail2ban.html。

    fail2ban Jail是什么?

  首先允许我比较详细地介绍一下fail2ban jail。jail定义了针对特定应用程序的策略,fail2ban根据该策略来触发保护某个应用程序的行动。针对Apache、Dovecot、Lighttpd、MySQL、Postfix和SSH之类的流行应用程序,fail2ban随带几个在/etc/fail2ban/jail.conf中预先定义的jail。每个jail依靠针对特定应用程序的日志过滤器(位于/etc/fail2ban/fileter.d)来检测常见攻击。不妨看一个示例性的jail:SSH jail。

  [ssh]

  enabled = true

  port = ssh

  filter = sshd

  logpath = /var/log/auth.log

  maxretry = 6

  banaction = iptables-multiport

  这个SSH jail的配置由几个参数来定义:

  •[ssh]:jail的名称,带方括号。

  •enabled:该jail是不是激活。

  •port:要保护的端口号(数字编号或公共名)。

  •filter:用来检测攻击的分析日志的规则。

  •logpath:要仔细分析的日志文件。

  •maxretry:禁止之前最多失败次数。

  •banaction:禁止动作。

  jail配置中定义的任何参数将覆盖对应的适用整个fail2ban范围的默认参数。反过来,任何遗漏的参数会被赋予在[DEFAULT]部分中定义的默认值。

  预先定义的日志过滤器位于/etc/fail2ban/filter.d,可用的动作位于/etc/fail2ban/action.d。

  如果你想覆盖fail2ban默认参数或者定义任何自定义的jail,只要通过创建/etc/fail2ban/jail.local文件就能实现。我在本教程中将使用/etc/fail2ban/jail.local。

    启用预先定义的Apache Jail

  默认安装的fail2ban为Apache HTTP服务器提供了几种预先定义的jail和过滤器。我准备启用那些内置的Apache jail。由于Debian配置和红帽配置略有差异,我为它们单独提供了fail2ban jail配置。

    在Debian或Ubuntu上启用Apache Jail

  想在基于Debian的系统上启用预先定义的Apache jail,就要创建/etc/fail2ban/jail.local,如下所示。

  $ sudo vi /etc/fail2ban/jail.local

  # 检测密码验证失败

  [apache]

  enabled = true

  port = http,https

  filter = apache-auth

  logpath = /var/log/apache*/*error.log

  maxretry = 6

  # 检测搜索安全薄弱环节和php漏洞的潜在行为

  [apache-noscript]

  enabled = true

  port = http,https

  filter = apache-noscript

  logpath = /var/log/apache*/*error.log

  maxretry = 6

  # 检测Apache溢出企图

  [apache-overflows]

  enabled = true

  port = http,https

  filter = apache-overflows

  logpath = /var/log/apache*/*error.log

  maxretry = 2

  # 检测未能在服务器上找到主目录的活动

  [apache-nohome]

  enabled = true

  port = http,https

  filter = apache-nohome

  logpath = /var/log/apache*/*error.log

  maxretry = 2

  由于上述没有一个jail指定动作,所有这些jail被触发后将执行默认动作。想弄清楚默认动作,寻找/etc/fail2ban/jail.conf中[DEFAULT]部分下面的“banaction”。

  banaction = iptables-multiport

  在这个情况下,默认动作是iptables-multiport(在/etc/fail2ban/action.d/iptables-multiport.conf中定义)。该动作使用iptables以及multiport模块禁止IP地址。

  启用jail后,你必须重启fail2ban,以便装入jail。

  $ sudo service fail2ban restart

  在CentOS/RHEL或Fedora上启用Apache jail

  想在基于红帽的系统上启用预先定义的Apache jail,就要创建/etc/fail2ban/jail.local,如下所示。

  $ sudo vi /etc/fail2ban/jail.local

  # 检测密码验证失败

  [apache]

  enabled = true

  port = http,https

  filter = apache-auth

  logpath = /var/log/httpd/*error_log

  maxretry = 6

  # 检测搜索电子邮件地址的垃圾邮件机器人程序

  [apache-badbots]

  enabled = true

  port = http,https

  filter = apache-badbots

  logpath = /var/log/httpd/*access_log

  bantime = 172800

  maxretry = 1

  #检测搜索安全薄弱环节和php漏洞的潜在行为vulnerabilities

  [apache-noscript]

  enabled = true

  port = http,https

  filter = apache-noscript

  logpath = /var/log/httpd/*error_log

  maxretry = 6

  # 检测Apache溢出企图

  [apache-overflows]

  enabled = true

  port = http,https

  filter = apache-overflows

  logpath = /var/log/httpd/*error_log

  maxretry = 2

  # 检测未能在服务器上找到主目录的活动

  [apache-nohome]

  enabled = true

  port = http,https

  filter = apache-nohome

  logpath = /var/log/httpd/*error_log

  maxretry = 2

  # 检测未能执行与几种流行Web服务

  # (比如webmail,phpMyAdmin,WordPress)

  # 有关的不存在脚本

  port = http,https

  filter = apache-botsearch

  logpath = /var/log/httpd/*error_log

  maxretry = 2

  请注意:所有这些jail的默认动作是iptables-multiport(定义为/etc/fail2ban/jail.conf中[DEFAULT]下面的“banaction”)。该动作使用iptable以及multiport模块禁止IP地址。

  启用jail后,你必须重启fail2ban,将jail装入到fail2ban中。

  在Fedora或CentOS/RHEL 7上:

  $ sudo systemctl restart fail2ban

  在CentOS/RHEL 6上:

  $ sudo service fail2ban restart

  检查和管理Fail2ban禁止状态

  一旦jail被激活,你可以使用fail2ban-client命令行工具,监控当前的禁止状态。

  想查看活动jail列表:

  $ sudo fail2ban-client status

  想查看某一个jail的状态(包括被禁止IP列表):

  $ sudo fail2ban-client status [name-of-jail]

  你还可以手动禁止或取消禁止IP地址。

  想让某一个jail禁止IP地址:

  $ sudo fail2ban-client set [name-of-jail] banip [ip-address]

  想取消禁止某个jail阻止的IP地址:

  $ sudo fail2ban-client set [name-of-jail] unbanip [ip-address]

上一篇:美媒:Facebook与百度阿里等中国IT企业最值得投资...
下一篇:曾导致服务器重启的“闰秒”又要来了...

金源在线客服

QQ在线咨询

咨询电话
010-83650488

在线咨询

在线咨询

电话咨询