关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » HTML5 »如何在 Apache 中抵御暴力破解和 DDos 攻击

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    2015-06-16 00:00:00 出处:linux.cn
    分享

    对于那些需要在因特网上提供服务或托管主机的人来说,保证您的系统在面对攻击时的安全是一个重要的事情。

    mod_security(一个开源的用于Web应用入侵检测及防护的引擎,可以无缝地集成到Web服务器)和mod_evasive是两个在服务器端对抗暴力破解和(D)Dos攻击的非常重要的工具。

    mod_evasive,如它的名字一样,在受攻击时提供避实就虚的功能,它像一个雨伞一样保护Web服务器免受那些威胁。

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    安装mod_security和mod_evasive来保护Apache

    在该文中我们将讨论如何安装、配置以及在RHEL/CentOS6、7和Fedora 21-15上将它们整合到Apache。另外,我们会模拟攻击以便验证服务器做出了正确的反应。

    以上以您的系统中安装有LAMP服务器为基础,所以,假如您没有安装,请先阅读下面链接的文章再开始阅读本文。

    在RHEL/CentOS 7中安装LAMP

    (LCTT 译注:本文有修改。原文为了在RHEL/CentOS 7或Fedora 21中使用同样的工具,而删除了它们自带的 firewalld,使用了旧式的iptables。译者以为这样并不恰当,因此,译文中做了相应删节,并增加了firewalld的相应脚本。)

    步骤 1: 安装mod_security和mod_evasive

    另外,在安装LAMP后,您还需要在RHEL/CentOS 7/6中开启EPEL仓库来安装这两个包。Fedora用户不需要开启这个仓库,因为epel已经是Fedora项目的一部分了。

    # yum update && yum install mod_security mod_evasive

    当安装结束后,您会在/etc/httpd/conf.d下找到这两个工具的配置文件。

    # ls -l /etc/httpd/conf.d

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    mod_security + mod_evasive 配置文件

    现在,为了整合这两个模块到Apache,并在启动时加载它们。请确保下面几行出现在mod_evasive.conf和mod_security.conf的顶层部分,它们分别为:

    LoadModule evasive20_module modules/mod_evasive24.so
    LoadModule security2_module modules/mod_security2.so

    请注意modules/mod_security2.so和modules/mod_evasive24.so都是从/etc/httpd到模块源文件的相对路径。您可以通过列出/etc/httpd/modules的内容来验证(假如需要的话,修改它):

    # cd /etc/httpd/modules
    # pwd
    # ls -l | grep -Ei '(evasive|security)'

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    验证mod_security + mod_evasive模块

    接下来重启Apache并且核实它已加载了mod_evasive和mod_security:

    # service httpd restart         [在RHEL/CentOS 6和Fedora 20-18上]
    # systemctl restart httpd       [在RHEL/CentOS 7和Fedora 21上]
    # httpd -M | grep -Ei '(evasive|security)'     [输出已加载的静态模块和动态模块列表]

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    检查mod_security + mod_evasive模块已加载

    步骤 2: 安装一个核心规则集并且配置mod_security

    简单来说,一个核心规则集(即CRS)为web服务器提供特定状况下如何反应的指令。mod_security的开发者们提供了一个免费的CRS,叫做OWASP([开放Web应用安全项目])ModSecurity CRS,可以从下面的地址下载和安装。

    下载OWASP CRS到为之创建的目录

    # mkdir /etc/httpd/crs-tecmint
    # cd /etc/httpd/crs-tecmint
    # wget https://github.com/SpiderLabs/owasp-modsecurity-crs/tarball/master

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    下载mod_security核心规则

    解压CRS文件并修改文件夹名称

    # tar xzf master
    # mv SpiderLabs-owasp-modsecurity-crs-ebe8790 owasp-modsecurity-crs

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    解压mod_security核心规则

    现在,是时候配置mod_security了

    将示例的规则文件(owasp-modsecurity-crs/modsecuritycrs10_setup.conf.example)拷贝为同名的配置文件。

    # cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf

    并通过将下面的几行插入到web服务器的主配置文件/etc/httpd/conf/httpd.conf来告诉Apache将这个文件和该模块放在一起使用。假如您选择解压打包文件到另一个文件夹,那么您需要修改Include的路径:

    <IfModule security2_module>
        Include crs-tecmint/owasp-modsecurity-crs/modsecurity_crs_10_setup.conf
        Include crs-tecmint/owasp-modsecurity-crs/base_rules/*.conf
    </IfModule>

    最后,建议您在/etc/httpd/modsecurity.d目录下创建自己的配置文件,在那里我们可以用我们自定义的文件夹(接下来的示例中,我们会将其命名为tecmint.conf)而无需修改CRS文件的目录。这样做能够在CRS发布新版本时更加容易的升级。

    <IfModule mod_security2.c>
        SecRuleEngine On
        SecRequestBodyAccess On
        SecResponseBodyAccess On 
        SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
        SecDataDir /tmp
    </IfModule>

    您可以在SpiderLabs的ModSecurity GitHub仓库中参考关于mod_security目录的更完整的解释。

    步骤 3: 配置mod_evasive

    mod_evasive被配置为使用/etc/httpd/conf.d/mod_evasive.conf中的指令。与mod_security不同,由于在包升级时没有规则来更新,因此我们不需要独立的文件来添加自定义指令。

    默认的mod_evasive.conf开启了下列的目录(注意这个文件被详细的注释了,因此我们剔掉了注释以重点显示配置指令):

    <IfModule mod_evasive24.c>
        DOSHashTableSize    3097
        DOSPageCount        2
        DOSSiteCount        50
        DOSPageInterval     1
        DOSSiteInterval     1
        DOSBlockingPeriod   10
    </IfModule>

    这些指令的解释:

    DOSHashTableSize: 这个指令指明了哈希表的大小,它用来追踪基于IP地址的活动。增加这个数字将使得站点访问历史的查询变得更快,但假如被设置的太大则会影响整体性能。 DOSPageCount: 在DOSPageInterval间隔内可由一个用户发起的针对特定的URI(例如,一个Apache 提供服务的文件)的同一个请求的数量。 DOSSiteCount: 类似DOSPageCount,但涉及到整个站点总共有多少的请求可以在DOSSiteInterval间隔内被发起。 DOSBlockingPeriod: 假如一个用户超过了DOSSPageCount的限制或者DOSSiteCount,他的源IP地址将会在DOSBlockingPeriod期间内被加入黑名单。在DOSBlockingPeriod期间,任何从这个IP地址发起的请求将会遭遇一个403禁止错误。

    尽可能的试验这些值,以使您的web服务器有能力处理特定大小的负载。

    一个小警告: 假如这些值设置的不合适,则您会蒙受阻挡合法用户的风险。

    您也许还会用到以下其它有用的指令:

    DOSEmailNotify

    假如您运行有一个邮件服务器,您可以通过Apache发送警告消息。注意,假如SELinux已开启,您需要授权apache用户SELinux的权限来发送email。您可以通过下面的命令来授予权限:

    # setsebool -P httpd_can_sendmail 1

    接下来,将这个指令和其他指令一起加入到mod_evasive.conf文件。

    DOSEmailNotify you@yourdomain.com

    假如这个指令设置了合适的值,并且您的邮件服务器在正常的运行,则当一个IP地址被加入黑名单时,会有一封邮件被发送到相应的地址。

    DOSSystemCommand

    它需要一个有效的系统命令作为参数,

    DOSSystemCommand </command>

    这个指令指定当一个IP地址被加入黑名单时执行的命令。它通常结合shell脚本来使用,比如在脚本中添加一条防火墙规则来阻挡某个IP进一步的连接。

    写一个shell脚本在防火墙阶段处理IP黑名单

    当一个IP地址被加入黑名单,我们需要阻挡它进一步的连接。我们需要下面的shell脚本来执行这个任务。在/usr/local/bin下创建一个叫做scripts-tecmint的文件夹(或其他的名字),以及一个叫做ban_ip.sh的文件。

    用于iptables防火墙

    #!/bin/sh
    # 由mod_evasive检测出,将被阻挡的IP地址
    IP=$1
    # iptables的完整路径
    IPTABLES="/sbin/iptables"
    # mod_evasive锁文件夹
    mod_evasive_LOGDIR=/var/log/mod_evasive
    # 添加下面的防火墙规则 (阻止所有从$IP流入的流量)
    $IPTABLES -I INPUT -s $IP -j DROP
    # 为了未来的检测,移除锁文件
    rm -f "$mod_evasive_LOGDIR"/dos-"$IP"

    用于firewalld防火墙

    #!/bin/sh
    # 由mod_evasive检测出,将被阻挡的IP地址
    IP=$1
    # firewalld-cmd的完整路径
    FIREWALL_CMD="/usr/bin/firewall-cmd"
    # mod_evasive锁文件夹
    mod_evasive_LOGDIR=/var/log/mod_evasive
    # 添加下面的防火墙规则 (阻止所有从$IP流入的流量)
    $FIREWALL_CMD --zone=drop --add-source $IP
    # 为了未来的检测,移除锁文件
    rm -f "$mod_evasive_LOGDIR"/dos-"$IP"

    我们的DOSSystemCommand指令应该是这样的:

    DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

    上面一行的%s代表了由mod_evasive检测到的攻击IP地址。

    将apache用户添加到sudoers文件

    请注意,假如您不给予apache用户以无需终端和密码的方式运行我们脚本(关键就是这个脚本)的权限,则这一切都不起作用。通常,您只需要以root权限键入visudo来存取/etc/sudoers文件,接下来添加下面的两行即可:

    apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
    Defaults:apache !requiretty

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    添加Apache用户到Sudoers

    重要: 在默认的安全策略下您只能在终端中运行sudo。由于这个时候我们需要在没有tty的时候运行sudo,我们必须像下图中那样注释掉下面这一行:

    #Defaults requiretty

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    为Sudo禁用tty

    最后,重启web服务器:

    # service httpd restart         [在RHEL/CentOS 6和Fedora 20-18上]
    # systemctl restart httpd       [在RHEL/CentOS 7和Fedora 21上]

    步骤4: 在Apache上模拟DDos攻击

    有许多工具可以在您的服务器上模拟外部的攻击。您可以google下“tools for simulating ddos attacks”来找一找相关的工具。

    注意,您(也只有您)将负责您模拟所造成的结果。请不要考虑向不在您自己网络中的服务器发起模拟攻击。

    假如您想对一个由别人托管的VPS做这些事情,您需要向您的托管商发送适当的警告或就那样的流量通过他们的网络获得允许。Tecmint.com不会为您的行为负责!

    另外,仅从一个主机发起一个Dos攻击的模拟无法代表真实的攻击。为了模拟真实的攻击,您需要使用许多客户端在同一时间将您的服务器作为目标。

    我们的测试环境由一个CentOS 7服务器[IP 192.168.0.17]和一个Windows组成,在Windows[IP 192.168.0.103]上我们发起攻击:

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    确认主机IP地址

    请播放下面的视频(YT 视频,请自备梯子: https://www.youtube.com/-U_mdet06Jk ),并跟从列出的步骤来模拟一个Dos攻击:

    然后攻击者的IP将被防火墙阻挡:

    如何在 Apache 中抵御暴力破解和 DDos 攻击

    阻挡攻击者的IP地址

    结论

    在开启mod_security和mod_evasive的情况下,模拟攻击会导致CPU和RAM用量在源IP地址被加入黑名单之前出现短暂几秒的使用峰值。假如没有这些模块,模拟攻击绝对会很快将服务器击溃,并使服务器在攻击期间无法提供服务。

    我们很高兴听见您打算使用(或已经使用过)这些工具。我们期望得到您的反馈,所以,请在留言处留下您的评价和问题,谢谢!

    参考链接

    https://www.modsecurity.org/ http://www.zdziarski.com/blog/ page_id=442
    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    帝国CMS7.5编辑器上传图片取消宽高的三种方法

    帝国cms如何自动生成缩略图的实现方法

    Windows 12即将到来,将彻底改变人机交互

    帝国CMS 7.5忘记登陆账号密码怎么办?可以phpmyadmin中重置管理员密码

    帝国CMS 7.5 后台编辑器换行,修改回车键br换行为p标签

    Windows 11 版本与 Windows 10比较,新功能一览

    Windows 11激活产品密钥收集及专业版激活方法

    如何从 Windows 11 中完全删除/卸载 OneNote?无解!

    抖音安全与信任开放日:揭秘推荐算法,告别单一标签依赖

    ultraedit编辑器打开文件时,总是提示是否转换为DOS格式,如何关闭?

    IT头条

    华为Pura80系列新机预热,余承东力赞其复杂光线下的视频拍摄实力

    01:28

    阿里千问3开源首战告捷:全球下载破千万,国产AI模型崛起新高度!

    01:22

    DeepSeek R1小版本试升级:网友实测编程能力已达到国际一线水平

    23:15

    NVIDIA 与 Dell 合作,大规模交付 Blackwell AI 系统

    20:52

    Cerebras 以最快的 Llama 4 Maverick 性能引领 LLM 推理竞赛

    20:51

    技术热点

    PHP中的随机性——你觉得自己幸运吗?

    搞定Ubuntu Linux下WPA无线上网

    Java使用内存映射实现大文件的上传

    MySQL安全性指南

    MySQL两项性能的基本测试浅谈

    教您使用UniqueIdentifier选取SQL Server主键

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。