iptables 的 limit 和 connlimit 等模块现在是内置还是需要另外引入?

2015-10-20 23:44:24 +08:00
 itsme
百度还是找不到说明。
自己的 vps 上写相关的规则发现没作用,搞不清是否需要额外引入才能用?
5141 次点击
所在节点    Linux
14 条回复
ryd994
2015-10-21 07:02:00 +08:00
iptables-save 看看
vps 是 openvz 的么
一般不需要
michaelOoO
2015-10-21 08:45:20 +08:00
itsme
2015-10-21 10:05:11 +08:00
谢谢两位。我对比了几个 vps ,不同 linux 内核版本,使用 iptables 相关含模块的规则,也没报错,估计是内置。不过效果比如 limit 模块,不同 vps 上明显效果不一样,不知道是否内核版本差别。

我继续学习中。谢谢回复。现在就想怎么对不断开新端口的 BT 连接进行限制。我看到一个 ip 应该用了 BT ,随机占用端口 2xxxx 开始到 5xxxx ,嗯, ss 的连接,不知道只能有效阻止这种。
fredcc
2015-10-21 10:06:05 +08:00
我想说 7 开始已经不用 iptables 了
coreos
2015-10-21 11:04:21 +08:00
内核编绎可选
datocp
2015-10-21 12:33:34 +08:00
limit 肯定比 connlimit 好, connlimit 实际测试在打开网页方面会导致断开白页。但是这属于全局限制,需要具体指定 ip ,用 hashlimit 吧,可以通过限制并发来限制流量。更高级的有 quota 。
itsme
2015-10-21 18:22:31 +08:00
@datocp quota 我也用了,流量能限制住,但是速度限不了,我那个 vps , hk 的带宽很小峰值 3M ,如果有一个人下载, ping 这个 vps 就可能几百上千的 ms 值了。
connlimit 我目前是想限制住 bt 程序的连接数量,超过 50 就 drop ;
limit 我是想用来限制下速度,不过在不同 vps 上,效果不太一样。不清楚原因了。
datocp
2015-10-21 18:57:38 +08:00
比较理想的是用 tc ,不过 vps 不支持。
connlimit 一直没有好的印象,容易导致网络中断,像打开网页时突然就是白屏页面,在第三方固件和 ros 上测试过,印象一直不好, vps 上还没实际应用过。

limit 是需要一个具体 ip 才能实现效果的,所以如果仅仅使用 limit 需要不断的侦测源 /目的 ip ,然后用脚本动态调用 iptables 进行插值处理才能针对特定 ip 实现连接数匹配,而 hashlimit 则是个增强版至少解决前面这些过程。


-A INPUT -p tcp -m multiport --dport 80,1723,8080,8443,8843 -m hashlimit --hashlimit-name obfs --hashlimit 80/sec --hashlimit-burst 350 --hashlimit-mode srcip,srcport --hashlimit-htable-expire 300000 -j ACCEPT
-A INPUT -p tcp -m multiport --dport 80,1723,8080,8443,8843 -j REJECT

这个 hashlimit 由于是用令牌筒概念实现的,所以匹配的每秒数据包通过数量就有多有少,造成流量的不精确,效果肯定是不如 tc 的。有时候没有别的方法也只能根据 tcp 握手的过程,通过限制数据包来达到限制流量的过程。
itsme
2015-10-22 10:08:24 +08:00
@datocp 你楼上的例子 80/sec --hashlimit-burst 350 这些数字的单位是 packets 包?
实际就是 1500x80=120000bytes 最高峰值可以 1500x350=512K 是大概这意思吧

我现在最想解决就是限制 BT 程序通过 SS ,我发现 BT 程序会不断的请求端口, tail ss 的日志,会发现连续不断请求,我曾经观察过请求的端口号从 20000 多一直到 50000 多, ss 里面我不知道如何限制。所以想看 iptables 是否可以阻止这种情况。
itsme
2015-10-22 19:23:08 +08:00
@datocp 我尝试用下面两种,都限制不了 4011 4016 两个端口的速度。我分开写,就是一次写一个端口号也不行。改限制到 OUTPUT ,同样也限制不到速度。 y2b 播放就是直接满速占用 vps 带宽。

iptables -A INPUT -p tcp -m multiport --dport 4011,4016 -m hashlimit --hashlimit-name portslimit --hashlimit 80/sec --hashlimit-burst 100 --hashlimit-mode srcport --hashlimit-htable-expire 300000 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 4011,4016 -j REJECT

iptables -A INPUT -p tcp --dport 4011 -m limit --limit 80/s --limit-burst 100 -j ACCEPT
iptables -A INPUT -p tcp --dport 4011 -j DROP
datocp
2015-10-22 19:37:44 +08:00
limit 的原理是匹配每秒通过的数据包,根据 tcp 握手的过程通过限制源数据包的数量来同时限制返回的数据包数量,所以原则上不是用来限制流量用途的。一般能调节的就是--hashlimit-burst 100 突发最高可以通过 100 包,然后不断的减少直到 0 ,而 hashlimit 80/sec 是用来产生多少包来补偿--hashlimit-burst 100 减少的,但最高也只能到 100 ,所以它不是用来限流量的,只是因为限制并发而连带的抑制流量过程。

我那两句用 wget 测试的时候, wget 属于单线程可以将流量限制在 200kb-1mb 之间。也许你应该用-hashlimit-mode srcip 限制每 ip ,然后调整 80/sec 为 40/sec 。然后再试试。
itsme
2015-10-23 01:33:39 +08:00
@datocp 谢谢详细说明。我再去调整测试下。除了 tc (似乎很复杂,而且 vps 估计用不了),应该也就 iptables 能稍微限制一下速度了吧。
itsme
2015-10-24 10:57:35 +08:00
@datocp -m multiport 使用这个 match 后,后面的--hashlimit 80/sec --hashlimit-burst 100 ,这个数是对于之前 multiport 列举的每个端口都是这个值还是之前列举端口的总和?

感觉有点像是端口合计。又有点不确定。
datocp
2015-10-24 11:52:27 +08:00
这个 hashlimit 我也研究得少,不知道如何进行测试。你可以通过 hashlimit-name portslimit
通过 cat /proc/net/ipt_hashlimit/portslimit 看看。它的本意做为 limit 的增强版本匹配每个源 ip ,但是多了 srcip srcport dstip dstport 我也答不上来了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/229675

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX