我需要删除一些恶意Apache连接的规则


10

我将所有流量都丢弃在Web服务器上的端口上,除了80以外。

我在iptables上有一些类似的规则:

iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP

有更多人可以分享吗?我知道总是有坏的黑客还在更新,但是其中一些总是以相同的代码开头。我需要根据某些条件删除连接。这是一些Apache日志(我删除了ips,但是每个atack都来自同一个):

攻击1:我不知道该怎么做,但要通过相同的ip使其达到50次

GET / HTTP/1.1  301 224 -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1  302 3387    -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22

攻击2:尝试仅获取有关服务器的信息。

GET / HTTP/1.1  301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1  302 3228    http mywebsite  Go-http-client/1.1
GET /es/ HTTP/1.1   200 40947   https mywebsite Go-http-client/1.1

攻击3:他们尝试获取登录页面漏洞

GET /userlogin/login.aspx HTTP/1.1  302 186 -   -

攻击4:尝试在首次请求时访问cgi(请参阅我的第一个iptables规则以删除此消息)

GET /hndUnblock.cgi HTTP/1.0    302 186 -   Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 -   Wget(linux)

我对服务器非常陌生,这4次攻击仅持续了12个小时……每周有数千次攻击。


我在这些HTTP请求中没有看到任何特定的模式。您怎么知道它们是恶意的?我不明白您要在这里实现什么。您能否编辑您的问题以澄清问题?谢谢。
David Foerster

大卫,您好:前一段时间,当我打开ftp等端口时,我收到了蛮力日志,当我看到24小时内fail2ban的iptables下降了100 ips时。我关闭了除80外的所有端口。现在,我尝试制定类似fail2ban的规则,但要使用apache。
哈维尔·帕尔梅罗

2
您知道Apache的mod_securitymod_evasive吗?
pa4080

是的,您有分享规则吗?或在哪里找到?我是来自blocklist.de的阻止ips
Javier Palmero

我已经写下了关于Apache2安全性的几乎所有知识。
pa4080

Answers:


18

更新: 当前答案已完全更新。

根据讨论,我创建了一个名为WWW Security Assistant的GitHub存储库。有一个分支称为ask_ubuntu,专门用于此答案。由于字符数的限制,以前在此处可用的所有参考都已删除-它们在GitHub上可用。

这里概述了一些完整的机制,涉及如何在Ubuntu 16.04中提高Apache2安全性

表中的内容:

  • WWW安全助手脚本(WSAS)►Iptables
  • iptables –基本配置–保存和还原
  • 适用于Apache2的ModEvasive
  • ModEvasive►WSAS►iptables
  • 适用于Apache2的ModSecurity 2.9
  • ModSecurity OWASP核心规则集3.x
  • ModSecurity规则白名单
  • ModSecurity规则►WSAS►iptables
  • ModSecurity和Apache日志文件
  • ModSecurity日志文件►Fail2Ban►Iptables
  • ModSecurity GuardianLog►HTTPD Guardian►WSAS►Iptables
  • ModSecurity GuardianLog►HTTPD自定义分析►WSAS►Iptables

另外,假设使用HTTPS总是很好:


WWW安全助手脚本►Iptables

这里介绍脚本www-security-assistant.bash。它可以帮助您处理恶意IP地址。该脚本有两种模式。

自动模式

当外部程序(如Apache的mod_security)提供恶意$IP地址时。在这种情况下,调用脚本的语法应为:

www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst

在此模式下,脚本提供了两个操作阶段,对于每个操作,脚本都会管理员发送电子邮件

  • 第一阶段:对于前几次“过犯”$IP将在等于的值的一段时间内禁止该来源$BAN_TIME。此模式使用命令at

  • 第二阶段:当某人的违规次数$IP等于的值时$LIMIT,该$IP地址将通过Iptables 永久禁止,并将被添加到中$BAN_LIST

手动模式

此模式接受以下选项:

  • www-security-assistant.bash <ip-address> --DROP "log notes"

    在文件中创建一个条目,/var/www-security-assistant/iptables-DROP.list并生成如下规则:

    iptables -A GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --DROP-CLEAR "log notes"

    在文件中创建一个条目/var/www-security-assistant/iptables-DROP-CLEAR.list,删除某些Iptables规则,$IP从历史记录和中删除$BAN_LIST

    iptables -D GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --ACCEPT "log notes"

    仅创建文件条目/var/www-security-assistant/iptables-ACCEPT.list

  • www-security-assistant.bash <ip-address> --ACCEPT-CHAIN "log notes"

    在文件中创建一个条目,/var/www-security-assistant/iptables-ACCEPT.list并生成如下规则:

    iptables -A GUARDIAN -s $IP -j ACCEPT
    

依存关系

该脚本使用iptables-save.shiptablesGUARDIAN,将在下一部分中进行说明。它将创建和维护以下文件$WORK_DIR

  • www-security-assistant.history -包含先前IP违规的数据。
  • www-security-assistant.mail -脚本发送的最后一封电子邮件的内容。
  • iptables-ACCEPT.list; iptables-DROP.listiptables-DROP-CLEAR.list

该脚本只需进行最小配置即可发送电子邮件:

sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix  # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com

如果有任何已配置的HTTPS服务,则可以在Postfix服务中使用其TLS证书。

另外脚本使用atsudo apt install at

安装

  • 创建工作目录,我们称之为/var/www-security-assistant。下载www-security-assistant.bash并使其可执行:

    sudo mkdir /var/www-security-assistant
    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
    sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
  • 使www-security-assistant.bash可作为自定义命令:

    sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
  • 通过授予无需密码www-data即可运行的权限。使用以下命令使用附加的' '规则安全地创建和编辑新文件:www-security-assistant.bashsudosudoers

    sudo visudo -f /etc/sudoers.d/www-security-assistant

    在文件内添加以下行-保存文件并退出:

    www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
  • 调整www-security-assistant.bash。至少更改变量的值$EMAIL_TO

检查

  • 代表自己,$AGENT并检查自动模式是否正常工作:

    www-security-assistant.bash 192.168.1.177 Guardian

    然后检查您的电子邮件,键入iptables -L GUARDIAN -n,查看文件www-security-assistant.historywww-security-assistant.mail。运行上述命令5次,并检查文件iptables-DROP.listiptables-CURRENT.conf

  • 检查手动模式是否正常运行-将您的本地主机添加到白名单中:

    www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"

    然后检查文件iptables-ACCEPT.list


本教程的其余部分是如何www-security-assistant与您的系统集成。


iptables –基本配置–保存和还原

基本配置

在添加以下规则之前,请阅读本手册

sudo iptables -F

sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT

在执行下一步操作之前,请打开一个新的SSH连接,然后尝试登录系统以检查一切是否正常!

保存和还原

这可以通过自定义脚本来实现,该自定义脚本将iptables在系统停止启动(或重新启动)过程中保存和恢复锥度。(如果我们使用UFW设置Iptables规则,则不需要此步骤。)

printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore

建立新链

创建一个名为的新链,GUARDIAN并将其作为数字3插入INPUT链中:

sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN

检查

重新启动系统并检查配置。请使用sudo systemctl reboot(不要使用force选项reboot -f)。当系统重新联机时,我们可以通过以下方式检查新创建的链是否存在:

sudo iptables -L GUARDIAN -n


适用于Apache2的ModEvasive

ModEvasive是Apache的回避操作模块,可在HTTP DoS或DDoS攻击或蛮力攻击时提供回避动作。阅读更多...

安装

  • 安装并启用该模块:

    sudo apt install libapache2-mod-evasive
    sudo a2enmod evasive
  • 创建日志目录,并使其可用于www-data

    sudo mkdir -p /var/log/apache2_mod_evasive
    sudo chown www-data /var/log/apache2_mod_evasive
  • 调整基本配置–取消注释并在配置文件中编辑某些指令:

    /etc/apache2/mods-enabled/evasive.conf
  • 重新启动Apache :sudo systemctl restart apache2.service

检查

  • 从服务器打开网页,然后频繁刷新浏览器窗口几次(按F5)-您必须收到403 Forbidden错误消息。进入日志目录,将生成一个新的锁定文件。应该删除该文件,以便从该IP地址进行进一步的违规检测。


ModEvasive►WSAS►iptables

在这里,我们将配置mod_evasiveiptables通过www-security-assistant.bash上一节中创建的进行对话。

  • /etc/apache2/mods-available/evasive.conf以这种方式编辑:

    <IfModule mod_evasive20.c>
        DOSHashTableSize    3097
        DOSPageCount        9
        DOSSiteCount        70
        DOSPageInterval     2
        DOSSiteInterval     2
        DOSBlockingPeriod   10
    
        #DOSEmailNotify     your@email.foo
        DOSLogDir           "/var/log/apache2_mod_evasive"
        DOSSystemCommand    "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
    </IfModule>
  • 创建日志文件并重新启动Apache:

    sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog

为了检验这一配置中,我们可以通过模拟DDOS攻击F5的方法,如上所述,或者我们可以使用一个命令如abhping3

注意:请小心,因为iptablesWSAS中使用的规则将从源中删除所有连接$IP,包括SSH连接。在测试过程中最好有一种备用方法来连接到服务器。您可以更改此规则以仅与HTTP / HTTPS端口一起使用。


适用于Apache2的ModSecurity 2.9

ModSecurity是一个Web应用程序防火墙引擎,仅靠自身提供很少的保护。为了变得有用,必须为ModSecurity配置规则。为了使用户能够充分利用ModSecurity的优势,Trustwave的Spider Labs提供了免费的经过认证的规则集... 阅读更多...

安装

  • 安装并启用该模块:

    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
  • 创建配置文件:

    sudo cp /etc/modsecurity/modsecurity.conf-推荐/etc/modsecurity/modsecurity.conf

    /etc/modsecurity/modsecurity.conf仔细阅读和编辑!至少添加或更改以下指令:

    # -- Rule engine initialization ----------------------------------------------
    SecRuleEngine On
    
    # -- Debug log configuration -------------------------------------------------
    SecDebugLogLevel 2
    SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
    
    # -- Audit log configuration -------------------------------------------------
    SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
    
    # -- Guardian log configuration -------------------------------------------------
    SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
  • 该文件/etc/apache2/mods-enabled/security2.conf涉及/etc/modsecurity/modsecurity.confApache的配置。在此阶段security2.conf应如下所示:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
    </IfModule>
  • 创建日志目录:

    sudo mkdir -p /var/log/apache2_mod_security
  • 设置日志轮换。首先创建配置文件:

    sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec

    然后以这种方式编辑新文件:

    /var/log/apache2_mod_security/*.log {  }
  • 重新启动Apache。

检查

  • 在中创建一个额外的配置文件/etc/modsecurity,例如以命名z-customrules.conf,并添加以下规则作为其内容:

    # Directory traversal attacks
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"

    重新启动服务器:sudo systemctl restart apache2.service。打开浏览器并输入https://example.com/?abc=../。结果将是:403 Forbidden。检查日志文件以/var/log/apache2_mod_security了解更多详细信息。

  • 为了使事情变得更加有趣,请将脚本放置issues.php在您内部的适当位置DocumentRoot(这里我假设是/var/www/html):

    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php

    然后以以下方式修改上述规则:

    # Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"

    重新启动Apache,然后打开浏览器并键入https://example.com/?abc=../;-)这个想法是从SE的脚本中借用的BotLovin.cs

  • /etc/modsecurity/z-customrules.conf再次编辑并注释(禁用)规则-这只是测试示例,OWASP CRS涵盖了该规则,下一部分将对其进行介绍。

  • 这是另一个示例,我们将重定向所有wp-admin页面请求,但这些请求来自某些IP地址(请注意chain):

    # Block wp-admin access
    SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
        SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"

    在这里,我们有两个破坏性行为:(1)deny, status:403和(2)redirect:'/issues.php'。实际上,我们不需要该deny动作,因为它将被该redirect动作覆盖。


ModSecurity OWASP核心规则集3.x

在Ubuntu 16.04中,您可以安装CSR 2.x :apt install modsecurity-crs。在这里,我们将安装CSR 3.x,在安装手册中提供了详细说明(git必填)。

安装

  • 克隆文件夹中的CSR /usr/share/modsecurity-crs.3

    sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
  • 升级并自动更新GeoIP数据库。(CRS不再包含GeoIP DB。建议您定期下载。)该脚本util/upgrade.py带来了此功能。您可以在cron-中如下使用它sudo crontab -e

    0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
  • 创建配置文件:

    sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}

    仔细阅读和编辑这些文件!至少取消注释SecGeoLookupDB指令:

    SecGeoLookupDB util/geo-location/GeoIP.dat
  • 应用Apache的配置。/etc/apache2/mods-available/security2.conf以这种方式编辑:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
        IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
        IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
    </IfModule>

    保存文件,然后重新启动Apache。


ModSecurity规则白名单

可以通过以下ModSec指令将ModSecurity规则列入白名单,这些指令可以在系统范围内使用,也可以在虚拟主机的配置中使用,也可以全局用于特定目录或位置匹配:

SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById

mod_security2为PhpMyAdmin 禁用。/etc/phpmyadmin/apache.conf以这种方式更改:

<Directory /usr/share/phpmyadmin>
    <IfModule security2_module>
        SecRuleEngine Off
    </IfModule>
</Directory>

禁用某些目录的特定规则:

<Directory /var/www/html>
    <IfModule security2_module>
        SecRuleRemoveById 973301
    </IfModule>
</Directory>

全局禁用规则。为此,我们必须将指令添加到Apache的配置文件/etc/modsecurity/z-customrules.conf中的某个位置:是个好地方。

  • 在整个Apache的配置中禁用规则:

    SecRuleRemoveById 973301 950907
  • 将IP地址列入白名单,以便它可以通过ModSecurity:

    SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
  • 禁用目录匹配中的规则:

    <Directory /var/www/mediawiki/core>
        SecRuleRemoveById 973301 950907
    </Directory>
  • 通过位置匹配项中的ID更新规则的操作

    <LocationMatch "/index.php.*">
        SecRuleUpdateActionById 973301 "pass"
        SecRuleUpdateActionById 950907 "pass"
    </LocationMatch>

在以上示例中,我们假设973301950907是规则ID,这些ID妨碍了我们的网络应用正常工作。通过对的分析,我们可以找到这些规则modsec_audit.log


ModSecurity规则►WSAS►iptables

这里提供了一些更多示例,说明如何创建自定义SecRules,以及如何通过它们调用WWW安全助手脚本(WSAS)。

最初设定

我们需要其他启动脚本- modsecurity-assistant.sh。原因是,ModSecurity的exec操作太简单且语法有限。

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh

如果您查看脚本内部,将看到很少的ModSecurity导出的变量。它们是:$REQUEST_URI$ARGS$SERVER_NAME$REMOTE_ADDR$REMOTE_HOST$UNIQUE_ID。其他变量在脚本内部进行了说明。

创建自定义规则并通过它调用我们的脚本

首先,让我们创建一个规则,该规则将在请求URI包含黑名单中包含的单词时执行modsecurity-assistant.sh(并调用www-security-assistant.bash)。打开/etc/modsecurity/z-customrules.conf并将以下行添加到底部:

# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
    "id:150, log, t:lowercase, chain, \
    drop, deny, status:403, redirect:'/issues.php'"
    SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
        "setenv:REMOTE_HOST=%{REMOTE_HOST}, \
         setenv:ARGS=%{ARGS}, \
         exec:/var/www-security-assistant/modsecurity-assistant.sh"
  • REQUEST_URI-此变量包含当前请求的完整URI。规则可能会更宽:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...

  • @pmFromFile将读取modsecurity-uri-black.list包含短语列表的文件,其中每个特定的短语或单词都放在新行中。您可以从日志文件中收集有趣的单词和短语。如果与我们的模式列表之间存在特定的匹配,REQUEST_URI则将应用规则。该文件可能为空,但是您必须创建(touch)它。

  • log操作将使用为此规则在日志文件中创建日志条目id:150

  • dropdeny(带有status)和redirect操作属于破坏性操作组,它们必须位于规则的开头chain(如果有链条)。第二个动作将覆盖第一个动作,而第三个动作将覆盖第二个动作,因此您必须选择要执行的动作并删除其他动作。

  • chain操作将调用该链的下一个规则,请注意第二个规则没有id

  • REMOTE_ADDR 包含请求的IP地址。

  • @ipMatchFromFilemodsecurity-ip-white.list包含IP地址白名单的文件,以新行分隔。CIDR条目也是可以接受的。因为破坏性操作始终位于链的主导规则中,所以它将被应用,但是当某些IP在此白名单中时,该exec操作将不会被应用。该文件可能为空,但是您必须创建(touch)它。

  • exec动作将调用我们的外部脚本。此操作不会造成破坏,将在当前规则返回true时执行。当执行此操作时,将通过我们的脚本处理远程IP。

  • setenv此操作会将某些内部变量 =%{...}导出为envvars,导出的名称可能与内部变量不同。有些变量必须手动导出,另一些变量则自动导出-可能是一个小错误(在某些情况下,使用相同名称的手动导出setenv:REQUEST_URI=%{REQUEST_URI}会导致导出变量的值为空白)。

检查

假设您的服务器上没有Joomla,请编辑文件modsecurity-uri-black.list并添加带有content的行/joomla。然后输入您的浏览器https://exemple.com/joomla。您应该通过Iptables重定向和阻止。清除记录sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note',添加IP,modsecurity-ip-white.list然后再次进行练习。现在,您应该被重定向,但不会被阻止。

将我们的脚本与OWASP Core Rule Set 3.x连接

为此,我们将更新“ 异常模式规则”的默认操作(949110和959100)。为此,请编辑文件,/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf并在底部添加以下几 行:

# -- Anomaly Mode - Update actions by ID -----
#

SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#

SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
    "id:'999010', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
    "id:'999020', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

检查

不要忘记重启(或重新加载)Apache以应用配置更改。不要忘记在测试过程中定期清除记录,否则您将被永久阻止:-)

模拟目录遍历攻击:

https://example.com/?abc=../../../                         # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../  # This should pass because of the whitelist rule

模拟SQL注入攻击:

https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo


ModSecurity和Apache日志文件

可以将Apache Web服务器配置为向服务器管理员提供有关其运行方式的重要信息。向管理员提供反馈的主要途径是使用日志文件。阅读更多...

ModSecurity具有强大的日志记录机制。根据指令,SecGuardianLog它提供了专门设计用于与外部脚本一起使用的日志提要。

目前已知的工作,唯一的工具监护人记录httpd-guardian,这是一部分的Apache httpd的工具项目。该httpd-guardian工具旨在防御拒绝服务攻击。它使用blacklist tool来与基于iptables的防火墙进行交互,从而将有问题的IP地址动态列入黑名单。阅读更多...


ModSecurity日志文件►Fail2Ban►Iptables

可以设置Fail2Ban来对Apache日志文件进行数据解析。modsec_audit.log可能是最好的选择,但也请参阅我们所讨论的部分SecGuardianLog

请注意其中SecAuditLogRelevantStatus/etc/modsecurity/modsecurity.conf注释。否则,每个收到404错误页面的人都会被fail2ban阻止。

SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"

当前,该项目中未以任何方式实现Fail2Ban。


ModSecGuardianLog►HTTPD-Guardian►WSAS►Iptables

httpd-guardian通过监视请求来检测DoS攻击Apache Security,2005(Ivan Ristic)版权所有,旨在通过管道日志记录机制监视所有Web服务器请求。它跟踪每个IP地址发送的请求数量... httpd-guardian可以发出警告或执行脚本来阻止IP地址...

该脚本可以使用Apache2的记录机制,或用 ModSecurity的(更好)。

在当前情况下的安装和设置

下载httpd-guardian并使其可执行:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl

阅读各行,98-119以了解该脚本如何与我们的WSAS脚本连接。

在Apache的配置(/etc/modsecurity/modsecurity.conf)中应用以下更改,然后重新启动它:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"

检查

要测试该脚本,请禁用ModEvasive(sudo a2dismod evasive不要忘记稍后再启用它)并重新启动Apache。然后tail执行日志:

tail -F /var/www-security-assistant/www-security-assistant.execlog

并从另一个实例执行DoS攻击,例如ab以这种方式使用:

for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done


ModSecGuardianLog►自定义分析►WSAS►Iptables

这里展示了一个简单的脚本,名为httpd-custom-analyze.bash,虽然没有什么特别的地方,但可能是一个很好的示例。其功能在脚本正文中进行了描述。

安装与设定

下载httpd-custom-analyze.bash并使其可执行:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash

在Apache的配置(/etc/modsecurity/modsecurity.conf)中应用以下更改,然后重新启动它:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
  • 达到阈值时,脚本将调用WSAS-读取行8635

  • 要使两个httpd-脚本同时工作,请对其进行编辑modsecurity.conf和管道SecGuardianLog传输。

  • 要执行测试,请遵循以上部分的提示。


请不要经常编辑您的帖子。一天中多次多次不断编辑您的帖子,将其一直推到首页,也给我们的主持人带来麻烦。相反,可以考虑在另一个页面或文本编辑器中起草您的内容,然后进行整体编辑,而不是单独编辑其中的详细信息。(此信息被锁定了一个小时,以限制在此进行的临时编辑的速度)
Thomas Ward

1
感谢您的评论,@ ThomasWard。我会记住的!在“ 用户资料”页面中的“编辑个人资料和设置”旁边有一个沙盒是不是一个好主意?
pa4080

1
它已经被提出,我相信被拒绝了。我建议您在保存的情况下进行更改,然后将问题的副本原样存储在系统的文本文件中,然后可以对其进行编辑,并在需要编辑帖子时将其复制回去,然后修复降价等。同样,所有删除线都使……难以阅读。考虑只删除这些部分。(修订历史记录将保留数据)
Thomas Ward

太荒谬的是,Stack Exchange不允许不修改首页内容
Franck Dernoncourt

1

我意识到pa4080会提供详细且可能非常有用的响应,以帮助您自行解决所有问题。自己解决问题可能会很愉快,但这也可能需要很多时间

  1. 熟悉Cloudflare,因为它们提供免费的DDoS保护。
  2. 如果您当前仅使用Apache,请考虑学习NGINX如何平衡负载。NGINX是伟大的负载均衡Apache作为展示在这里这里
  3. 查看其文档中有关安全性的Apache技巧
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.