iptables怎么限制连接数,kmod-connlimit限制ip连接数

发布时间:2020-06-27编辑:脚本学堂
在iptables中使用kmod-connlimit包限制连接数的方法,限制局域网内每个用户的连接数为50,限制指定局域网用户IP地址的连接数为50,限制除用户IP地址以外的IP连接数为50等。

首先,安装kmod-connlimit包,可以使用yum安装 使用的 alt.ru更新源;
 

复制代码 代码示例:
#yum install kmod-connlimit
Resolving Dependencies
--> Running transaction check
---> Package kmod-connlimit.i686 0:0.1-1.el5 set to be installed
---> Package kmod-connlimit-PAE.i686 0:0.1-1.el5 set to be installed
---> Package kmod-connlimit-xen.i686 0:0.1-1.el5 set to be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================
 Package            Arch Version   Repository                               Size
===================================================================================
Installing:
 kmod-connlimit     i686 0.1-1.el5 CentALT 5.2 k
 kmod-connlimit-PAE                             i686 0.1-1.el5 CentALT 5.3 k
 kmod-connlimit-xen                               i686 0.1-1.el5 CentALT 5.3 k
Transaction Summary
==================================================================================
Install       3 Package(s)
Upgrade       0 Package(s)
 

 
安装完成后重启iptables 服务


---三种限制方式-----
1、限制局域网内每个用户的连接数为50
 

iptables -I FORWARD -p tcp -m connlimit --connlimit-above 50 -j REJECT

2、限制指定局域网用户XXX.XXX.XXX.XXX的连接数为50(这里的XXX.XXX.XXX.XXX改成大家要限制的用户的IP)
 

iptables -I FORWARD -p tcp -s XXX.XXX.XXX.XXX -m connlimit --connlimit-above 50 -j REJECT
 

例子,比如要限制192.168.1.2这个用户的连接数为50
 

iptables -I FORWARD -p tcp -s 192.168.1.2 -m connlimit --connlimit-above 50 -j REJECT

3、限制除用户XXX.XXX.XXX.XXX以外的IP连接数为50 (也就是除了XXX.XXX.XXX.XXX用户不限制其它的都限,这个好吧,可以给自己开特权^_^)
 

iptables -I FORWARD -p tcp -s !XXX.XXX.XXX.XXX -m connlimit --connlimit-above 50 -j REJECT
 

例子,除了不限制192.168.1.2外,限制其它所有用户的连接数为50
 

iptables -I FORWARD -p tcp -s !192.168.1.2 -m connlimit --connlimit-above 50 -j REJECT

关于connlimit的时间期限

关于connlimit的解释:
This adds an iptables match which allows you to restrict the number of parallel TCP connections to a server per client IP address(or address block).
翻译:这个增加一个iptables匹配允许你限制每个客户IP地址的并发tcp连接,即同时连接到一个服务器个数.

例子:
 

# allow 2 telnet connections per client host (允许每个客户机同时两个telnet连接)
iptables -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
# you can also match the other way around:(你也可以匹配其他的方法:)
iptables -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT
# limit the nr of parallel http requests to 16 per class C sized (这下面例子限制80端口最多同时16个连接请求)
# network (24 bit netmask)
iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT

模块 connlimit 作用:连接限制
--connlimit-above n 限制为多少个
--connlimit-mask n 这组主机的掩码,默认是connlimit-mask 32 ,即每ip.
可以限制内网用户的网络使用,对服务器而言则可以限制每个ip发起的连接数...比较实用

例如,只允许每个ip同时5个80端口转发,超过的丢弃:
 

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

例如,只允许每组C类ip同时10个80端口转发:
 

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP

例如,为了防止DOS太多连接进来,那么可以允许最多15个初始连接,超过的丢弃.
 

/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP
/sbin/iptables -A INPUT -s 192.186.1.0/24 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

比如这条规则例如:只允许每个ip同时5个80端口转发,超过的丢弃:
 

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP

有没有时间概念的?每个ip同时5个80,是怎么的一个时间概念??同时不知道该何理解!

按照我的理解,应该就是每个IP最多5条链接,譬如5条TCP会话。
但是不清楚尚未建立的会话算不算,应该是不算的。
 

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
 

那比如上面这条规则,不可能我每台电脑永远就只允许5个新的连接吧??
这样的理论好像不对啊,我用光5个只后,就不能再用了?我觉得应该有个时间概念或范围吧!
 

iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
 

那比如上面这条规则,不可能我每台电脑永远就只允许5个新的连接吧??
这样的理论好像不对啊,我用光5个只后,就不能再用了?我觉得应该有个时间概念或范围吧![/quote]
ipt_connlimit.c 里面的注释说得很清楚
当链接关闭或者因为超时而关闭的话,自动删除记录

当链接关闭或者因为超时而关闭的话,自动删除记录
iptables默认允许一切
 

iptables -A FORWARD -p tcp -s 192.168.1.224 --syn --dport 80 -m connlimit --connlimit-above 2 -j DROP

但是实际测试时客户机192.168.1.224能打开N多个服务器的80页面
 

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j DROP

当通过securecrt打开3个ssh都可以,但是有超时:
如果要限制,且仅限制192.168.100 IP段中的任何一个IP,访问23端口的链接数不能超过3个,策略怎么写?
1、用脚本循环,把192.168.100.1-254的所有IP都加一遍?

2、直接用:
 

iptabels -A INPUT -p tcp -s 192.168.100.0/24 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP
 

关键在于,--connlimit-mask有多灵活。

2、直接用:
 

iptabels -A INPUT -p tcp -s 192.168.100.0/24 -m connlimit --connlimit-above 3 --connlimit-mask 32 -j DROP