ybbnew
关于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连接,即同时连接到一个服务器个数.
Examples: 例子:
# 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,是怎么的一个时间概念??同时不知道该何理解!
ssffzz1
按照我的理解,应该就是每个IP最多5条链接,譬如5条TCP会话。
但是不清楚尚未建立的会话算不算,应该是不算的。
ybbnew
iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
那比如上面这条规则,不可能我每台电脑永远就只允许5个新的连接吧??
这样的理论好像不对啊,我用光5个只后,就不能再用了?我觉得应该有个时间概念或范围吧!
platinum
[quote]iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP
那比如上面这条规则,不可能我每台电脑永远就只允许5个新的连接吧??
这样的理论好像不对啊,我用光5个只后,就不能再用了?我觉得应该有个时间概念或范围吧![/quote]
ipt_connlimit.c 里面的注释说得很清楚
当链接关闭或者因为超时而关闭的话,自动删除记录
[table=95%][tr][td][color=#000000] [color=#0000FF]if[/color] [color=#0000CC]([/color]found[color=#0000CC]-[/color][color=#0000CC]>[/color]ctrack[color=#0000CC]-[/color][color=#0000CC]>[/color]proto[color=#0000CC].[/color]tcp[color=#0000CC].[/color]state [color=#0000CC]=[/color][color=#0000CC]=[/color] TCP_CONNTRACK_TIME_WAIT[color=#0000CC])[/color] [color=#0000CC]{[/color]
[color=#FF9900]/* we don't care about connections which are
closed already -> ditch it */[/color]
lh [color=#0000CC]=[/color] lh[color=#0000CC]-[/color][color=#0000CC]>[/color]prev[color=#0000CC];[/color]
list_del[color=#0000CC]([/color]lh[color=#0000CC]-[/color][color=#0000CC]>[/color]next[color=#0000CC])[/color][color=#0000CC];[/color]
kfree[color=#0000CC]([/color]conn[color=#0000CC])[/color][color=#0000CC];[/color]
nf_conntrack_put[color=#0000CC]([/color][color=#0000CC]&[/color]found[color=#0000CC]-[/color][color=#0000CC]>[/color]ctrack[color=#0000CC]-[/color][color=#0000CC]>[/color]infos[color=#0000CC][[/color]0[color=#0000CC]][/color][color=#0000CC])[/color][color=#0000CC];[/color]
[color=#0000FF]continue[/color][color=#0000CC];[/color]
[color=#0000CC]}[/color][/color][/td][/tr][/table]
[[i] 本帖最后由 platinum 于 2007-7-2 23:46 编辑 [/i]]
ybbnew
多谢老大,经过实际测试,确实如此,谢谢!!
这个功能很实用,呵呵
xuledw
[quote]原帖由 [i]platinum[/i] 于 2007-7-2 21:54 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6364541&ptid=902468][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
ipt_connlimit.c 里面的注释说得很清楚
当链接关闭或者因为超时而关闭的话,自动删除记录
if (found->ctrack->proto.tcp.state == TCP_CONNTRACK_TIME_WAIT) {
... [/quote]
我的如下,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是都OK 但是当打开第四个的时候就会话超时了
这该怎么理解?
busyant
继续讨论这个问题:
如果我要限制,且仅限制192.168.100IP段中的任何一个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 [color=Red]--connlimit-mask 32 [/color]-j DROP?
关键在于,--connlimit-mask有多灵活!!!
busyant
[quote]原帖由 [i]busyant[/i] 于 2008-2-20 17:36 发表 [url=http://linux.chinaunix.net/bbs/redirect.php?goto=findpost&pid=6513921&ptid=902468][img]http://linux.chinaunix.net/bbs/images/common/back.gif[/img][/url]
………………
2、直接用:
iptabels -A INPUT -p tcp [color=Red]-s 192.168.100.0/24[/color] -m connlimit --connlimit-above 3 [color=Red]--connlimit-mask 32 [/color]-j DROP?
………………
[/quote]
在RHEL 3上验证成功。