iptables限制每个IP的连接
时间:2020-01-09 10:41:04 来源:igfitidea点击:
如何使用iptables限制单个IP地址到服务器的端口80和25使用的连接数?
您需要使用connlimit模块,该模块允许您限制每个客户端IP地址(或地址块)与服务器的并行TCP连接数。
语法
语法如下:
/sbin/iptables -A INPUT -p tcp --syn --dport $port -m connlimit --connlimit-above N -j REJECT --reject-with tcp-reset # save the changes see iptables-save man page, the following is redhat and friends specific command service iptables save
示例:限制每个IP /主机的SSH连接
每个客户端主机仅允许3个ssg连接:
/sbin/iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT # save the changes see iptables-save man page, the following is redhat and friends specific command service iptables save
示例:限制每个IP /主机的HTTP连接
每个IP仅允许20个http连接(在httpd.conf中将MaxClients设置为60):
警告!请注意,大型代理服务器可能会合法地与您的服务器建立大量连接。
您可以使用!语法
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset # save the changes see iptables-save man page, the following is redhat and friends specific command service iptables save
从这种限制中跳过代理服务器IP 1.2.3.4:
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -d ! 1.2.3.4 -m connlimit --connlimit-above 20 -j REJECT --reject-with tcp-reset
示例:C类限制
在此示例中,将并行http请求限制为每个C类大小的网络20个(24位网络掩码)
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT --reject-with tcp-reset # save the changes see iptables-save man page service iptables save
示例:每秒限制连接
如果IP在100秒内对端口80进行了10次以上的连接尝试,则以下示例将丢弃传入连接(将规则添加到iptables shell脚本中)
#!/bin/bash IPT=/sbin/iptables # Max connection in seconds SECONDS=100 # Max connections per IP BLOCKCOUNT=10 # .... # .. # default action can be DROP or REJECT DACTION="DROP" $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set $IPT -A INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds ${SECONDS} --hitcount ${BLOCKCOUNT} -j ${DACTION} # .... # ..
如何测试防火墙正常工作?
使用以下shell程序脚本连接到托管在192.1.2.3上的Web服务器:
#!/bin/bash ip="192.1.2.3" port="80" for i in {1..100} do # do nothing just connect and exit echo "exit" | nc ${ip} ${port}; done