除端口80之外,阻塞美国境外的所有连接是否会导致较高的服务器负载?


16

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

首先,有什么理由不这样做?其次,房东告诉我的内容正确吗?第三,有什么方法可以在不影响性能的情况下完成此任务?


12
不幸的是,您的托管联系人没有提到“但是有一种行业标准的方法来做您想做的事情,而维护却要少得多,安全性更高,服务器负载也很低,这称为Explicit Deny All。请给我列出需要列入白名单的IP列表。我会在20分钟内为您设置好。” -这就是我所期待从任何系统管理员值得一听到他们坐在椅子上。
corsiKa

只是在他们滥用时阻止他们...以这种方式进行的维护很少...备有完整的表,您必须保持更新
Skaperen 2015年

Answers:


33

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

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

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


如果您知道,当您通过允许防火墙仅显式地允许几个IP隐式拒绝所有人时,为什么要明确拒绝所有人?
2015年

确实没有任何隐含的信息
mr-sk 2015年

列入白名单的一个潜在问题是远程访问。您将需要一个可靠的VPN(与该服务器分开)并允许其IP范围。
Foo Bar

9

为此,您必须添加成千上万的防火墙规则,每个规则对应一个网络块,而一个国家/地区可能与之关联的范围是一到数千个网络块。

收到请求时,必须针对每条规则进行检查,这将花费很少的时间来处理几十个甚至数百个规则,但是使用的规则数量却很多,(1)请求将大大减慢,并且(2)它将使用大量CPU。

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


迈克尔,谢谢你的答复。是否没有办法只允许基于美国的IP,从而只需要检查一个规则?
Big Iron

2
@BigIron当然不是。美国也有成千上万个网块。你输了。
迈克尔·汉普顿

1
@SamuelEdwinWard不,不是。尽管它们分布在各处,但此类阻止列表通常不会超过几百个条目。
迈克尔·汉普顿

1
您是否有参考资料说明减速幅度有多大?尽管所有规则集的线性搜索听起来都非常低效,但是至少二进制搜索将意味着搜索60,000条规则表将只对该表进行16个探测,这比让流量通过网络搜索要快得多,必须执行磁盘I / O来处理请求。我在iptables中找不到大型规则集的任何指标。
约翰尼

1
@Johnny netfilter(iptables)不幸地线性地处理了它的规则:serverfault.com/questions/334885/…–
Ross Ridge

5

您需要的是一个名为ipsets的工具

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

这里要注意的重要一点是闪电快!那是因为大量的ip网络可以用一个散列而不是几百或几千行iptables规则来表示。

对于屏蔽国家,请参见以下示例


1

忽略是否​​以这种方式进行操作是一个好主意,您可以使用iptablesGeoIP模块来完成您所要求的操作

经过建设和安装模块(并保持你的IP列表每月更新一次),你可以做这样的东西来阻止个别国家:

iptables -I INPUT -m geoip --src-cc CN -j DROP

--src-cc US -j ACCEPT如果您想指定要保留的国家或地区,请使用,等等。


即使使用“明确拒绝所有人”并只允许一个国家/地区,这也不会对性能造成影响吗?

@AndréDaniel,我承认我没有看过GeoIP代码本身,但是假设他们使用的是非天真的实现,比顺序比较一堆netblock(例如trie)更聪明,则不必这样做。
Scott Dudley

而且,如果您正在谈论IPv4,并且每个规则有512 Mb的备用空间,则使用查找表的理论实现可以在O(1)中完成工作。
Scott Dudley

1

如果您想保留从任何地方进行连接而无需维护地理位置黑名单/白名单的能力,则可以实施port-knocking。这将停止大多数自动尝试,同时允许您仍然从任何地址进行连接。

注意:请勿将端口敲到打开的旁边,否则顺序端口扫描将激活您的规则。


0

偶尔您的堆栈中有一两个支持BGP的路由器,并且对您正在做的到底有什么想法/与知道他们正在做什么或正在做的事情的人一起工作也许在DDoS预防提供程序足够强大以帮助实现此目标的背后,有一种相对较新的方法将流量限制到地理区域,称为选择性黑洞,我认为值得一看。

https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf

http://mailman.nanog.org/pipermail/nanog/2014-February/064381.html

http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/

由于此方法可以处理路由,因此可以绕开任何服务器负载问题。

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.