首页 归档 关于 learn love 工具

iptables 限速 ,限制并发数

对每个ip限速

iptables -A INPUT -i eth0 -m hashlimit --hashlimit-above 128kb/s --hashlimit-mode srcip --hashlimit-name in -j DROP
iptables -A OUTPUT -o eth0 -m hashlimit --hashlimit-above 128kb/s --hashlimit-mode dstip --hashlimit-name out -j DROP

iptables的命令参数说明

下面关于iptables命令的详细参数简单说明一下:

  • -t(table):指定表
  • -A(append): 追加,一般将新加的规则(策略)是追加到表中链上的末尾规则
  • -I(insert) 插入链 后面加数字可以指定讲规则加到相应的行,默认是所有规则最前面
  • -L(list)查看规则 可以加-n、-v参数效果查看更明显
  • -F(flush) 清除所有规则
  • -D(delete)删除某个规则  可以指定相应链上的规则顺序号去删除,--line-numbers可以查看

匹配数据包的一些条件参数:

  • -i 进入的网卡
  • -o 出去的网卡
  • -s ip源地址IP
  • -d ip 目的地址IP
  • --dport 端口号  目的端口号
  • --sdport 端口号  源端口号

限制并发数

iptables的connlimit模块可限制全局的并发连接数。其用法如下:

iptables -I INPUT -p tcp --syn --dport 8081 -m connlimit --connlimit-above 2 --connlimit-mask 0 -j DROP

命令要点:
-p tcp:针对tcp协议过滤;
--dport 8081:对8081端口起作用;
-m connlimit:使用connlimit模块
--connlimit-above 2:最多不超过2个并发连接
--connlimit-mask 0: 默认ip掩码是32,即限制单ip并发连接数,设置为0则限制全局连接。

用上述命令配置好防火墙后,可用以下方法测试效果:

  1. 用nc监听端口:nc -l 8081 -k;
  2. 打开另外几个终端,测试连接:nc localhost 8081

正确配置情形下,第一个和第二个nc连接是正常的,第三个连接起会出现 broken pipe 错误,即无法连接,说明防火墙达到了预期效果(也可以用netstat -nt | grep 8081查看已建立连接)。

允许单个IP的最大连接数为 3

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 3 -j REJECT

删除规则

  1. 列出防火墙所有规则,并显示行数
iptables -L -n --line-number  
  1. 删除INPUT下行数为 3 的规则
iptables -D INPUT 3     

保存设置及重启自动恢复

iptables设定的规则,掉电重启会清空。若需要保存,最好是使用iptables-save/restore配合重定向,示例如下:

iptables-save > /etc/iptables-rules
iptables-restore < /etc/iptables-rules