如何配置 fail2ban 来保护 Apache 服务器

简介: 如何配置 fail2ban 来保护 Apache 服务器 生产环境中的 Apache 服务器可能会受到不同的攻击。攻击者或许试图通过暴力攻击或者执行恶意脚本来获取未经授权或者禁止访问的目录。一些恶意爬虫或许会扫描你网站下的各种安全漏洞,或者通过收集email地址和web表单来发送垃圾邮件。

如何配置 fail2ban 来保护 Apache 服务器

生产环境中的 Apache 服务器可能会受到不同的攻击。攻击者或许试图通过暴力攻击或者执行恶意脚本来获取未经授权或者禁止访问的目录。一些恶意爬虫或许会扫描你网站下的各种安全漏洞,或者通过收集email地址和web表单来发送垃圾邮件。

Apache服务器具有全面的日志功能,可以捕捉到各种攻击所反映的异常事件。然而,它还不能系统地解析具体的apache 日志并迅速地对潜在的攻击进行反应(比如,禁止/解禁IP地址)。这时候fail2ban可以解救这一切,解放了系统管理员的工作。

fail2ban是一款入侵防御工具,可以基于系统日志检测不同的工具并且可以自动采取保护措施比如:通过iptables禁止ip、通过 /etc/hosts.deny 阻止连接、或者通过邮件发送通知。fail2ban具有一系列预定义的“监狱”,它使用特定程序日志过滤器来检测通常的攻击。你也可以编写自定义的规则来检测来自任意程序的攻击。

在本教程中,我会演示如何配置fail2ban来保护你的apache服务器。我假设你已经安装了apache和fail2ban。对于安装,请参考另外一篇教程

什么是 Fail2ban 监狱

让我们更深入地了解 fail2ban 监狱。监狱定义了具体的应用策略,它会为指定的程序触发一个保护措施。fail2ban在 /etc/fail2ban/jail.conf 下为一些流行程序如Apache、Dovecot、Lighttpd、MySQL、Postfix、SSH 等预定义了一些监狱。每个监狱都通过特定的程序日志过滤器(在/etc/fail2ban/fileter.d 下面)来检测通常的攻击。让我看一个例子监狱:SSH监狱。

 
 
  1. [ssh]
  2. enabled = true
  3. port = ssh
  4. filter = sshd
  5. logpath = /var/log/auth.log
  6. maxretry = 6
  7. banaction = iptables-multiport

SSH监狱的配置定义了这些参数:

  • [ssh]: 方括号内是监狱的名字。
  • enabled:是否启用监狱
  • port: 端口号(或者对应的服务名称)
  • filter: 检测攻击的日志解析规则
  • logpath: 所检测的日志文件
  • maxretry: 最大失败次数
  • banaction: 所进行的禁止操作

定义在监狱配置中的任意参数都会覆盖fail2ban-wide 中相应的默认配置参数。相反,任何缺少的参数都会使用定义在[DEFAULT] 字段的默认值。

预定义的日志过滤器都放在/etc/fail2ban/filter.d,而可以采取的禁止操作放在 /etc/fail2ban/action.d。

如果你想要覆盖fail2ban的默认操作或者定义任何自定义监狱,你可以创建/etc/fail2ban/jail.local*文件。本篇教程中,我会使用/etc/fail2ban/jail.local。

启用预定义的apache监狱

fail2ban的默认安装为Apache服务提供了一些预定义监狱和过滤器。我要启用这些内建的Apache监狱。由于Debian和RedHat配置的稍微不同,我会分别提供它们的配置文件。

在Debian 或者 Ubuntu启用Apache监狱

要在基于Debian的系统上启用预定义的apache监狱,如下创建/etc/fail2ban/jail.local。

 
 
  1. $ sudo vi /etc/fail2ban/jail.local

 
 
  1. # 检测密码认证失败
  2. [apache]
  3. enabled = true
  4. port = http,https
  5. filter = apache-auth
  6. logpath = /var/log/apache*/*error.log
  7. maxretry = 6
  8. # 检测漏洞和 PHP 脆弱性扫描
  9. [apache-noscript]
  10. enabled = true
  11. port = http,https
  12. filter = apache-noscript
  13. logpath = /var/log/apache*/*error.log
  14. maxretry = 6
  15. # 检测 Apache 溢出攻击
  16. [apache-overflows]
  17. enabled = true
  18. port = http,https
  19. filter = apache-overflows
  20. logpath = /var/log/apache*/*error.log
  21. maxretry = 2
  22. # 检测在服务器寻找主目录的尝试
  23. [apache-nohome]
  24. enabled = true
  25. port = http,https
  26. filter = apache-nohome
  27. logpath = /var/log/apache*/*error.log
  28. maxretry = 2

由于上面的监狱没有指定措施,这些监狱都将会触发默认的措施。要查看默认的措施,在/etc/fail2ban/jail.conf中的[DEFAULT]下找到“banaction”。

 
 
  1. banaction = iptables-multiport

本例中,默认的操作是iptables-multiport(定义在/etc/fail2ban/action.d/iptables-multiport.conf)。这个措施使用iptable的多端口模块禁止一个IP地址。

在启用监狱后,你必须重启fail2ban来加载监狱。

 
 
  1. $ sudo service fail2ban restart

在CentOS/RHEL 或者 Fedora中启用Apache监狱

要在基于红帽的系统中启用预定义的监狱,如下创建/etc/fail2ban/jail.local。

 
 
  1. $ sudo vi /etc/fail2ban/jail.local

 
 
  1. # 检测密码认证失败
  2. [apache]
  3. enabled = true
  4. port = http,https
  5. filter = apache-auth
  6. logpath = /var/log/httpd/*error_log
  7. maxretry = 6
  8. # 检测抓取邮件地址的爬虫
  9. [apache-badbots]
  10. enabled = true
  11. port = http,https
  12. filter = apache-badbots
  13. logpath = /var/log/httpd/*access_log
  14. bantime = 172800
  15. maxretry = 1
  16. # 检测漏洞和 PHP 脆弱性扫描
  17. [apache-noscript]
  18. enabled = true
  19. port = http,https
  20. filter = apache-noscript
  21. logpath = /var/log/httpd/*error_log
  22. maxretry = 6
  23. # 检测 Apache 溢出攻击
  24. [apache-overflows]
  25. enabled = true
  26. port = http,https
  27. filter = apache-overflows
  28. logpath = /var/log/httpd/*error_log
  29. maxretry = 2
  30. # 检测在服务器寻找主目录的尝试
  31. [apache-nohome]
  32. enabled = true
  33. port = http,https
  34. filter = apache-nohome
  35. logpath = /var/log/httpd/*error_log
  36. maxretry = 2
  37. # 检测执行不存在的脚本的企图
  38. # 这些都是流行的网站服务程序
  39. # 如:webmail, phpMyAdmin,WordPress
  40. port = http,https
  41. filter = apache-botsearch
  42. logpath = /var/log/httpd/*error_log
  43. maxretry = 2

注意这些监狱文件默认的操作是iptables-multiport(定义在/etc/fail2ban/jail.conf中[DEFAULT]字段下的“banaction”中)。这个措施使用iptable的多端口模块禁止一个IP地址。

启用监狱后,你必须重启fail2ban来加载监狱。

在 Fedora 或者 CentOS/RHEL 7中:

 
 
  1. $ sudo systemctl restart fail2ban

在 CentOS/RHEL 6中:

 
 
  1. $ sudo service fail2ban restart

检查和管理fail2ban禁止状态

监狱一旦激活后,你可以用fail2ban的客户端命令行工具来监测当前的禁止状态。

查看激活的监狱列表:

 
 
  1. $ sudo fail2ban-client status

查看特定监狱的状态(包含禁止的IP列表):

 
 
  1. $ sudo fail2ban-client status [监狱名]

你也可以手动禁止或者解禁IP地址:

要用制定监狱禁止IP:

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

要解禁指定监狱屏蔽的IP:

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

总结

本篇教程解释了fail2ban监狱如何工作以及如何使用内置的监狱来保护Apache服务器。依赖于你的环境以及要保护的web服务器类型,你或许要调整已有的监狱或者编写自定义监狱和日志过滤器。

你有在生产环境中使用fail2ban么?分享一下你的经验吧。

----------------------------------------------------------------------------------------------------------------------------

原文发布时间:2015-03-18
本文来自云栖合作伙伴“linux中国”
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
12天前
|
消息中间件 安全 Linux
服务器(Linux)在线下载activeMQ以及配置打开
服务器(Linux)在线下载activeMQ以及配置打开
23 3
|
12天前
|
Java Maven
Maven配置以及IDEA设置(Cannot resolve plugin org.apache.maven.plugins:报错)
Maven配置以及IDEA设置(Cannot resolve plugin org.apache.maven.plugins:报错)
46 1
|
4天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错之遇到MySQL服务器的时区偏移量(比UTC晚18000秒)与配置的亚洲/上海时区不匹配,如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
5天前
|
存储 固态存储 安全
租用阿里云服务器2核8G、4核16G、8核32G配置可选实例规格及价格参考
在租用阿里云服务器时,一般通用型实例规格的云服务器处理器与内存配比为1:4,而2核8G、4核16G、8核32G配置就是用户选择较多的配置,这些配置的云服务器一般可用于中小型数据库系统、缓存和各种Web应用,目前在阿里云的活动中经济型e、通用算力型u1、通用型g7、通用型g7a等实例2核8G、4核16G、8核32G配置有优惠,本文为大家介绍这些配置在阿里云目前的活动中可选的实例规格及具体价格和收费标准情况,以供参考。
租用阿里云服务器2核8G、4核16G、8核32G配置可选实例规格及价格参考
|
5天前
|
Linux 数据库
ntp如何配置同步服务器
【5月更文挑战第19天】ntp如何配置同步服务器
27 2
|
7天前
|
存储 弹性计算 监控
【阿里云弹性计算】深入阿里云ECS配置选择:CPU、内存与存储的最优搭配策略
【5月更文挑战第20天】阿里云ECS提供多种实例类型满足不同需求,如通用型、计算型、内存型等。选择CPU时,通用应用可选1-2核,计算密集型应用推荐4核以上。内存选择要考虑应用类型,内存密集型至少4GB起。存储方面,系统盘和数据盘容量依据应用和数据量决定,高性能应用可选SSD或高效云盘。结合业务特点和预算制定配置方案,并通过监控应用性能适时调整,确保资源最优利用。示例代码展示了使用阿里云CLI创建ECS实例的过程。
75 5
|
11天前
|
应用服务中间件 网络安全 Apache
构建高性能Web服务器:Nginx vs Apache
【5月更文挑战第16天】Nginx与Apache是两种主流Web服务器,各具优势。Nginx以其轻量级、高并发处理能力和反向代理功能见长,适合大型网站和高并发场景;而Apache以功能丰富、稳定性强闻名,适合企业网站和需要多种Web服务功能的场景。在性能上,Nginx处理高并发更优,Apache则可能在高负载时遭遇瓶颈。在选择时,应根据实际需求权衡。
|
12天前
|
XML 网络安全 开发工具
如何下载并安装 SAP ABAPGit,并完成 ABAP 服务器上 SSL 证书的配置试读版
如何下载并安装 SAP ABAPGit,并完成 ABAP 服务器上 SSL 证书的配置试读版
17 0
|
12天前
|
缓存 安全 网络安全
Apache服务器配置与优化指南
【5月更文挑战第7天】Apache服务器配置与优化指南包括基础配置和性能优化。安装Apache后,编辑`httpd.conf`配置文件,设置`ServerRoot`、`Listen`、`ServerName`和`DocumentRoot`。启用虚拟主机以托管多个网站。性能优化涉及启用MPM模块(如worker或event),启用压缩功能,优化KeepAlive参数,配置缓存和限制并发连接数。安全配置包括禁用不必要的模块,设置目录权限,启用SSL/TLS及限制IP访问。通过这些措施,提升服务器性能和安全性。
|
4天前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

热门文章

最新文章

推荐镜像

更多