zoukankan      html  css  js  c++  java
  • 如何使用Mod_Security和Mod_evasive模块保护Apache 提升DDOS防御力

    对于从事主机业务的人来说,如果你正在托管自己的服务器并将它们暴露在互联网上,保护你的系统免受攻击者的攻击必须是一个高度优先考虑的问题。
    mod_security(web应用的开源入侵检测和预防引擎,与web服务器无缝集成)和mod_evasive是两个非常重要的工具,可以用来保护web服务器免受暴力或DDoS攻击。
    mod_evasive,顾名思义,在受到攻击时提供回避能力,作为保护伞,使web服务器免受此类威胁。
    在本文中,我们将讨论如何在RHEL/CentOS 8和7以及Fedora上与Apache一起安装、配置并将其投入使用。此外,我们将模拟攻击,以验证服务器是否做出相应的反应。这假设你的系统上已经安装了LAMP服务器。
    如果你运行的是RHEL/CentOS 8/7或Fedora,你还需要将iptables设置为默认的防火墙前端,而不是firewalld。我们这样做是为了在RHEL/CentOS 8/7和Fedora中使用相同的工具。
    步骤1:在RHEL / CentOS 8/7和Fedora上安装Iptables防火墙
    首先,停止并禁用firewalld:
    # systemctl stop firewalld
    # systemctl disable firewalld
    然后在启用iptables之前安装iptables-services软件包:
    # yum update && yum install iptables-services
    # systemctl enable iptables
    # systemctl start iptables
    # systemctl status iptables
    步骤2:安装Mod_Security和Mod_evasive
    除了已经安装了LAMP之外,你还需要启用RHEL/CentOS 8/7中的EPEL存储库来安装这两个软件包。Fedora用户不需要启用任何repo,因为epel已经是Fedora项目的一部分。
    # yum update && yum install mod_security mod_evasive
    --------------- CentOS/RHEL 8 ---------------
    # dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
    # dnf --enablerepo=raven-extras install mod_evasive
    安装完成后,您将在/etc/httpd/conf.d中找到这两个工具的配置文件。
    # ls -l /etc/httpd/conf.d
    现在,为了将这两个模块与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并验证它是否加载了mod_evasive和mod_security:
    # systemctl restart httpd
    转储已加载的静态模块和共享模块的列表。
    # httpd -M | grep -Ei '(evasive|security)'
    步骤3:安装核心规则集和配置Mod_Security
    简单地说,核心规则集(CRS)为web服务器提供了在特定条件下如何行为的指令。mod_security的开发公司提供了一个免费的CRS,叫做OWASP (Open Web Application Security Project) ModSecurity CRS,可以下载安装如下。
    1.将OWASP CRS下载到为此目的创建的目录中。
    # mkdir /etc/httpd/crs-tecmint
    # cd /etc/httpd/crs-tecmint
    # wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master
    2.为了方便起见,解压缩CRS文件并更改目录的名称。
    # tar xzf master
    # mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs
    3.现在该配置mod_security。将带有规则的示例文件(owasp-modsecurity-crs / modsecurity_crs_10_setup.conf.example)复制到另一个没有.example扩展名的文件中:
    # cd owasp-modsecurity-crs/
    # cp crs-setup.conf.example crs-setup.conf
    并通过在Web服务器的主配置文件/etc/httpd/conf/httpd.conf文件中插入以下几行,告诉Apache将其与模块一起使用。如果选择将tarball解压缩到另一个目录,则需要按照Include指令编辑路径:
    <IfModule security2_module>
    Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf
    Include crs-tecmint/owasp-modsecurity-crs/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配置指令的完整说明指南。
    步骤4:配置Mod_Evasive
    使用/etc/httpd/conf.d/mod_evasive.conf中的指令配置mod_evasive。由于在软件包升级期间没有更新规则,因此与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设置的限制,则在DOSBlockingPeriod时间内,其源IP地址将被列入黑名单。在DOSBlockingPeriod期间,来自该IP地址的任何请求都将遇到403 Forbidden错误。
    随时尝试使用这些值,以便您的Web服务器将能够处理所需的流量和类型。
    请注意,如果未正确设置这些值,则可能会导致最终阻止合法访问者。
    您可能还需要考虑其他有用的指令:
    DOSEmail通知
    如果已启动并运行邮件服务器,则可以通过Apache发送警告消息。请注意,如果SELinux设置为强制执行,则需要授予apache用户SELinux发送电子邮件的权限。您可以通过运行
    # setsebool -P httpd_can_sendmail 1
    接下来,将此指令与其余其他指令一起添加到mod_evasive.conf文件中:
    DOSEmailNotify you@yourdomain.com
    如果设置了此值,并且您的邮件服务器正常工作,那么只要IP地址被列入黑名单,就会将电子邮件发送到指定的地址。
    DOS系统命令
    这需要一个有效的系统命令作为参数,
    DOSSystemCommand </command>
    该伪指令指定了将IP地址列入黑名单时要执行的命令。它通常与添加了防火墙规则的外壳程序脚本结合使用,以阻止来自该IP地址的其他连接。
    编写一个用于在防火墙级别处理IP黑名单的Shell脚本
    当IP地址被列入黑名单时,我们需要阻止以后的连接。我们将使用下面的Shell脚本执行此工作。在/usr/local/bin中创建一个名为scripts-tecmint(或您选择的名称)的目录,并在该目录中创建一个名为ban_ip.sh的文件。
    #!/bin/sh
    # IP that will be blocked, as detected by mod_evasive
    IP=$1
    # Full path to iptables
    IPTABLES="/sbin/iptables"
    # mod_evasive lock directory
    MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
    # Add the following firewall rule (block all traffic coming from $IP)
    $IPTABLES -I INPUT -s $IP -j DROP
    # Remove lock file for future checks
    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权限以在不使用终端和密码的情况下运行我们的脚本(并且仅该脚本!),否则所有这些操作都将无效。像往常一样,您可以只输入visudo作为root来访问/ etc / sudoers文件,然后添加以下两行,如下图所示:
    apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
    Defaults:apache !requiretty
    重要信息:作为默认安全策略,您只能在终端中运行sudo。由于在这种情况下,我们需要使用不带tty的sudo,因此必须注释掉下图中突出显示的行:
    #Defaults requiretty
    最后,重新启动Web服务器:
    # systemctl restart httpd
    至此,配置就已经全部完成,您可以自行测试,在启用mod_security和mod_evasive的情况下,模拟攻击使CPU和RAM在源IP被列入黑名单并被防火墙阻止之前,仅在几秒钟内尝试一个临时使用高峰。如果没有这些工具,模拟肯定会很快击垮服务器,并使其在攻击期间无法使用。

    A5互联https://www.a5idc.net/

  • 相关阅读:
    c#中value是什么意思
    javascript json转为 go struct 小工具代码
    android greendao的外部封装不太友好。
    redis 内存泄露
    Robolectric 配置
    android studio 代理配置
    python 写文件,utf-8问题
    go 的 time ticker 设置定时器
    FQ记(nexus7 2代 恢复出厂设置,然后重启,因为被墙,卡住了!)
    lua https request 调用
  • 原文地址:https://www.cnblogs.com/a5idc/p/13437623.html
Copyright © 2011-2022 走看看