除了端口 80 之外,阻止美国以外的所有连接是否会导致服务器负载过高?

Big*_*ron 15 iptables

像大多数服务器(我假设)一样,我们有人试图 24/7 全天候暴力破解我们的服务。我有 cpHulk 将他们的 IP 列入黑名单,但如果他们一开始就没有走那么远似乎会更好。我和我的主机是唯一通过 80 以外的端口连接到服务器的人,所以我想阻止来自美国以外所有国家/地区的连接,端口 80 除外。我联系了我的主机进行设置,但他们犹豫不决,因为他们说这会造成异常高的服务器负载。它是一个专用的 Xeon 1230 服务器,具有 32GB RAM,运行 CentOS 6.6 和 iptables。

首先,有什么理由不这样做?其次,我的主人告诉我的是否正确?第三,有没有办法在不影响高性能的情况下实现这一点?

jle*_*nen 32

设置特定规则来阻止每个 IP 范围(通过列出每个范围)是错误的方法。

在 iptables 中设置默认规则以丢弃所有流量到您的管理端口。然后添加规则以仅允许来自您信任的 IP(您的和您的主机)的访问。

默认情况下阻止所有内容并仅允许已批准的流量通常称为“显式拒绝全部”,并被认为是最佳实践。在这种情况下,也有助于避免您的主机所关注的性能影响。


Mic*_*ton 9

为了做到这一点,您必须添加数以万计的防火墙规则,每个网络块一个,一个国家可能有一个到数千个与之相关的网络块。

当一个请求进来时,它必须根据每条规则进行检查,对于几十条甚至几百条规则,这需要很少的时间,但是如果你需要使用尽可能多的规则,(1) 每请求将显着减慢,并且 (2) 它将使用大量 CPU。

在没有显着性能影响的情况下执行此操作的方法是执行您已经在执行的操作:仅阻止那些有问题的特定地址。

  • @BigIron 当然不是。美国也有数以万计的网络区块。无论哪种方式,你都会输。 (2认同)

小智 5

你需要的是一个叫做 ipsets 的工具

IP 集是 Linux 内核中的一个框架,可由 ipset 实用程序管理。根据类型,当前 IP 集可能以某种方式存储 IP 地址、(TCP/UDP)端口号或带有 MAC 地址的 IP 地址,以确保在将条目与集匹配时闪电般的速度。

这里要注意的重要一点是它快如闪电!那是因为大量的 ip 网络可以由单个哈希表示,而不是数百或数千行 iptables 规则。

对于阻止国家,请参阅此示例