当前使用 Centos6.7,并希望设置一些限制,以阻止来自 ip y 的用户 x 建立超过 5 个连接。假设他登录了 5 次,那 5 次将建立,但第 6 次将被拒绝。
正在考虑使用 connlimit 来执行此操作,但感觉我遗漏了一些东西,并且在制定规则时我有点犹豫,因为我过去曾无意中将自己锁在服务器之外,将规则放在了错误的位置(哎呀)。
注意:不希望指定端口。 xxx1 和 xxx2 的 IP 限制较高,为 50,所以我将这些规则放在第一位,我相信这是正确的吗?
我有以下内容:
-A INPUT -p tcp -s x.x.x.1 --syn -m connlimit --connlimit-above 50 -j REJECT
-A INPUT -p tcp -s x.x.x.2 --syn -m connlimit --connlimit-above 50 -j REJECT
-A INPUT -p tcp --syn -m connlimit --connlimit-above 5 -j REJECT
这看起来正确吗?有没有不同的方法来解决这个问题?我不想将池限制为总共只有 5 个连接,而是每个 IP 地址 5 个。
答案1
差不多了,但还没有完全实现。您创建的规则将首先拒绝来自x.1
和 的超过 50 个连接x.2
,然后拒绝来自任何地方的任何超过 5 个连接,包括 x.1
和x.2
。ACCEPT
在公共限制器之前,您需要为这两个源制定规则。
反转 上的匹配可能是最简单的connlimit
:
-A INPUT -p tcp -s x.x.x.1 --syn -m connlimit --connlimit-upto 50 -j ACCEPT
-A INPUT -p tcp -s x.x.x.2 --syn -m connlimit --connlimit-upto 50 -j ACCEPT
-A INPUT -p tcp --syn -m connlimit --connlimit-upto 5 -j ACCEPT
-A INPUT -p tcp --syn -j REJECT
您可能希望将这些规则放在自己的链中,这样您就不需要重复公共部分 ( ),并且如果您想在这些规则之后进行其他过滤,也可以使用-p tcp --syn
单独的链替换。那么接受规则需要出现在其他地方。ACCEPT
RETURN
默认情况下connlimit
是按源地址工作,因此它应该是您想要的。但请注意,它iptables
没有任何“登录”的概念,因此如果您确实想在应用程序级别限制登录,则需要在那里执行此操作。
为了防止自己被锁定,您可能需要确保首先有一个单独的规则来允许从您的计算机进行管理访问(也许是 SSH,至少已经建立了连接)。另一种可能性是稍后使用cron
或将防火墙规则重置为某些已知良好的配置,因此即使您确实被锁定,它也不会持续。at
完成后,您只需要记住删除该保护措施即可。