https://blog.csdn.net/u011871037/article/details/52438845
下面模拟一个iptables的应用场景
场景描述
有两台机器 A 和 B
A 上运行WEB服务,B 向 A 发送大量请求
A 想限制 B 的并发数量,通过 iptables 配置实现:
当 B 发送的并发数大于10时,拒绝对其提供服务
模拟过程
A 的 IP:192.168.31.158
B 的 IP:192.168.31.207
B 上执行 ab 命令,模拟大量请求
ab -n 10000 -c 20 http://192.168.31.158/test.html
完成后,到 A 中查看负载状况,执行 w 命令
# w
A 的压力太大,得限制 B 了,执行 iptables 命令
iptables -I INPUT -p tcp --dport 80 -s 192.168.31.207 -m connlimit --connlimit-above 10 -j REJECT
再到 B 中执行之前的 ab 命令
ab -n 10000 -c 20 http://192.168.31.158/test.html
发现已经被拒绝了
如果把参数 -c 的值改为 9,就可以正常执行
命令说明
为了便于理解,这个 iptables 命令可以分为几个部分
iptables
-I INPUT
-p tcp --dport 80 -s 192.168.31.207
-m connlimit --connlimit-above 10
-j REJECT
-I INPUT
表示要插入一条 INPUT 链的规则
-p tcp --dport 80 -s 192.168.31.207
是针对来自 192.168.31.207 这个IP对于本机80端口的tcp请求
-m connlimit --connlimit-above 10
表示匹配条件,并发数大于10时成立
-j REJECT
满足条件后要执行的动作:拒绝
针对所有的ip
[root@iZbp1fna7ky0qz2jbj7gfpZ logs]# iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j REJECT
[root@iZbp1fna7ky0qz2jbj7gfpZ logs]# service iptables save
[root@iZbp1fna7ky0qz2jbj7gfpZ logs]# service iptables restart