!/bin/sh

!/bin/sh

这是关于 cPanel 服务器的,与大多数服务器一样,它不断受到来自远方的攻击。考虑到我只接待美国和加拿大的客户,因此没有理由允许完全进入亚洲和南美等地区。

防火墙规则过多会增加延迟,更糟的是,防火墙会崩溃。不过,由于每天有大量攻击,我已将 CSF 配置为最多管理 7000 条规则。有些日子攻击较少,但在 1 日,有 671 个 IP 在尝试访问 SMTP(669)和 cPanel(2)时被阻止。

为了尝试更好地控制此问题,我考虑只允许每个人访问 Web,并阻止特定的大块访问 FTP 或 SMTP。因此,这是我在 CSF 预规则 [/usr/local/csf/bin/csfpre.sh] 中放置的内容。

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 21:25 -s 1.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 2.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 112.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 113.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 117.0.0.0/8 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -s 190.0.0.0/8 -j DROP

现在,我对我的 iptables 技能并不完全有信心,所以我想得到关于这方面的意见,当然如果这样做有什么不好的话,我想得到反馈。

我确实意识到这会阻止大量潜在的好电子邮件以及这些领域受雇在服务器托管的网站上工作的任何网络开发人员。我的想法是,任何有效电子邮件来自这些 IP 范围的可能性要小得多。另外,我根据攻击次数选择了区块。

例如,我不必为俄罗斯加载 6000-7000 个实际 IP 块,而是可以通过仅专注于批量阻止整个 A 类块来大幅减少防火墙规则并保持简单。

我使用这个网站来检查哪些国家将被封锁: tcpiputils.com

答案1

垃圾邮件软件可以更好地处理这种情况吗?每天 670 个主机并不是一个庞大的主机数量。在这种规模下,您还可以考虑仅对主机进行速率限制,以便允许所有人,但如果有人反复连接并尝试发送垃圾邮件,您可以阻止他们。这可以通过连接跟踪来完成。请注意,如果有数百万个主机与您联系,连接跟踪可能会出现严重错误,但每天 670 次应该没问题。这意味着类似这样的事情(未经测试,抱歉):

iptables -A INPUT -p tcp --dport 21:25 -i eth0 -m conntrack --ctstate NEW -m recent  --update --seconds 300 --hitcount 20 -j DROP
iptables -A INPUT -p tcp --dport 21:25 -i eth0 -m conntrack --ctstate NEW -m recent --set

(当然,您可能希望将向您发送大量电子邮件的人列入白名单。)

答案2

好吧,我还没有得到任何好的回应,我需要反复试验,并进行监控来确定实现这一目标的有效方法。

我发现据说需要一些东西,因此上面的示例可能不适用于所有系统,因为应在可执行文件上使用完整路径。另外,在指定端口范围时,需要添加 --match multiport 否则它将完全忽略该规则。最后,我在顶部添加了一个 shebang,以确保 shell 能够正确运行该脚本。

所以这是最终版本:

/usr/local/csf/bin/csfpre.sh

#!/bin/sh
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p all -s 60.168.112.0/20 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 1.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 112.0.0.0/7 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 116.96.0.0/12 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 116.118.0.0/16 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26,110,465,587,995 -s 117.0.0.0/8 -j DROP

现在详细介绍一下安装了 CSF 防火墙的 cPanel 服务器上发生的情况。

  1. CSF 允许添加在单独组中运行的自定义规则。所有组最终都由 iptables 运行。首先是 csfpre.sh,然后是 CSF,然后是 csfpost.sh。

  2. 如果 csfpre.sh 文件不存在,则创建它。您也可以将其放在 /etc/ 文件夹中的某个位置,但它始终会优先考虑 /usr/local/csf/bin/ 中的版本。

  3. 在顶部添加 shebang:

    !/bin/sh

  4. 我的计划是通过 csfpre.sh 进行一些端口阻止,但不是让它运行所有规则,而是首先检测连接是否用于网页访问。通过首先检查这一点,可以减少延迟/响应时间。

端口 80 和 443 用于 HTTP 和 HTTPS 协议,首先,如果输入用于这些端口中的任何一个,请接受并停止检查此 csfpre 组的规则:

/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
  1. 现在,如果下一行如下所示,我们可以完全阻止除 80 和 443 之外的所有其他端口:

    /sbin/iptables -A 输入 -p 所有 -s 60.168.112.0/20 -j 删除

由于所有网络流量均已被接受,因此这不会阻止该范围内的网站流量。如果此行首先出现,那么它将阻止所有流量,包括网络流量。我不想通过阻止好用户所在的整个子网来阻止他们查看网站。

  1. 如果阻塞减少到特定端口,那么我们可以阻塞特定端口、范围、列表或这些端口的组合。

仅阻止 FTP:

/sbin/iptables -A INPUT -p tcp --dport 21 -s 1.0.0.0/8 -j DROP

FTP 实际上使用几个不同的端口来建立连接,还有 SFTP/SSH,其标准端口为 22,因此最好使用由冒号分隔的起始端口和结束端口来阻止范围:

/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 1.0.0.0/8 -j DROP

如果使用范围或列表,则必须使用 --match 多端口。列表的端口数不能超过 15 个,范围内的每个端口都计入 15 个总端口数。

您还可以阻止标准 SMTP 电子邮件端口:

/sbin/iptables -A INPUT -p tcp --match multiport --dport 110,465,587,995 -s 117.0.0.0/8 -j DROP

而且,您确实可以使用列表中的范围来阻止一条规则中的 FTP 和邮件端口:

/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26,110,465,587,995 -s 117.0.0.0/8 -j DROP
  1. 保存脚本,然后重新启动防火墙。

  2. 让 CSF 和 cpHulk 根据需要阻止各个 IP 地址。

您可以在不使用本地连接进行测试的情况下使用智能手机。获取您手机的 IP 地址,并确保它与您将使用的计算机不同。然后,您可以运行所有场景,假设您已将电话设置为通过服务器和 FTP 程序检查或发送电子邮件。

为了进行阻止,我决定限制整个子网访问 FTP,对于某些子网,还限制访问 SMTP。为了减少它,我分析了所有传入的警报,然后将最差的子网与本网站上列出的国家/地区进行了比较:http://www.tcpiputils.com/browse/ip-address

最终目标是减少被 CSF 阻止的单个 IP 的数量。阻止数千个 IP 可能会导致延迟问题,因此通过制定一些标准规则来阻止充满恶意用户的国家,可以减少管理如此大量的单个 IP 的需要。

要重新计算有效子网范围,请使用此工具:http://www.subnet-calculator.com/cidr.php

112.0.0.0/7跨度112.0.0.0113.255.255.255, 但111.0.0.0/7是无效阻塞,所以会是110.0.0.0111.255.255.255。验证您的子网范围非常重要,这样您就不会最终阻止错误的 IP。

相关内容