1
ryd994 2015-10-21 07:02:00 +08:00 via Android
iptables-save 看看
vps 是 openvz 的么 一般不需要 |
2
michaelOoO 2015-10-21 08:45:20 +08:00
要看 iptable 的版本是否支持了。 可以用 man iptable 看一下,是否有 limit 功能。
http://man.chinaunix.net/network/iptables-tutorial-cn-1.1.19.html#TABLE.LIMITMATCH https://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#LIMITMATCH |
3
itsme OP 谢谢两位。我对比了几个 vps ,不同 linux 内核版本,使用 iptables 相关含模块的规则,也没报错,估计是内置。不过效果比如 limit 模块,不同 vps 上明显效果不一样,不知道是否内核版本差别。
我继续学习中。谢谢回复。现在就想怎么对不断开新端口的 BT 连接进行限制。我看到一个 ip 应该用了 BT ,随机占用端口 2xxxx 开始到 5xxxx ,嗯, ss 的连接,不知道只能有效阻止这种。 |
4
fredcc 2015-10-21 10:06:05 +08:00 via Android
我想说 7 开始已经不用 iptables 了
|
5
coreos 2015-10-21 11:04:21 +08:00
内核编绎可选
|
6
datocp 2015-10-21 12:33:34 +08:00 via Android
limit 肯定比 connlimit 好, connlimit 实际测试在打开网页方面会导致断开白页。但是这属于全局限制,需要具体指定 ip ,用 hashlimit 吧,可以通过限制并发来限制流量。更高级的有 quota 。
|
7
itsme OP @datocp quota 我也用了,流量能限制住,但是速度限不了,我那个 vps , hk 的带宽很小峰值 3M ,如果有一个人下载, ping 这个 vps 就可能几百上千的 ms 值了。
connlimit 我目前是想限制住 bt 程序的连接数量,超过 50 就 drop ; limit 我是想用来限制下速度,不过在不同 vps 上,效果不太一样。不清楚原因了。 |
8
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 握手的过程,通过限制数据包来达到限制流量的过程。 |
9
itsme OP @datocp 你楼上的例子 80/sec --hashlimit-burst 350 这些数字的单位是 packets 包?
实际就是 1500x80=120000bytes 最高峰值可以 1500x350=512K 是大概这意思吧 我现在最想解决就是限制 BT 程序通过 SS ,我发现 BT 程序会不断的请求端口, tail ss 的日志,会发现连续不断请求,我曾经观察过请求的端口号从 20000 多一直到 50000 多, ss 里面我不知道如何限制。所以想看 iptables 是否可以阻止这种情况。 |
10
itsme OP @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 |
11
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 。然后再试试。 |
12
itsme OP @datocp 谢谢详细说明。我再去调整测试下。除了 tc (似乎很复杂,而且 vps 估计用不了),应该也就 iptables 能稍微限制一下速度了吧。
|
13
itsme OP @datocp -m multiport 使用这个 match 后,后面的--hashlimit 80/sec --hashlimit-burst 100 ,这个数是对于之前 multiport 列举的每个端口都是这个值还是之前列举端口的总和?
感觉有点像是端口合计。又有点不确定。 |
14
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 我也答不上来了。。。 |