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 ? 就可以正常执行 命令说明 为了便于理解,这个 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 满足条件后要执行的动作
–connlimit-above 20 -j REJECT 每个IP最多20个初始连接 iptables -I INPUT -p tcp –syn -m connlimit –connlimit-above –remove #在列表里删除相应地址,后跟列表名称及地址 connlimit功能: connlimit模块允许你限制每个客户端IP的并发连接数,即每个IP同时连接到一个服务器个数。 connlimit模块主要可以限制内网用户的网络使用,对服务器而言则可以限制每个IP发起的连接数 –connlimit-above n #限制为多少个 –connlimit-mask n #这组主机的掩码 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP 2、防止DOS攻击 a、利用recent模块抵御DOS攻击 iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP b、单个ip对多连接3个会话 iptables -I INPUT -p tcp --
iptables限制单个地址的并发连接数量: iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT 5、限制C类子网并发数 使用iptables限制单个c类子网的并发链接数量: iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 24 -j REJECT 6、限制单位时间内连接数 设置如下: iptables -t filter -A INPUT -p tcp --dport 80 -m - 每个地址60个包,ip_list_tot最大为8100,超过这个数值会导致iptables错误 8、限制单个地址最大连接数 iptables -I INPUT -p tcp --dport 80 -m connlimit
--connlimit-above 50 --connlimit-mask 0 -j DROP -A INPUT -m state --state NEW -m tcp -p tcp --dport -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 50 --connlimit-mask 0 -j DROP 说明输入的目标端口是 22,也就是访问sftp本机22端口的流量,如果连接数大于50,则DROP流量,connlimit-above这个是连接数的统计, 如果大于50就满足条件,connlimit-mask这个是定义那组主机 ,此处跟的一个数值是网络位,即子网掩码,也就是connlimit-mask 0 这个ip组的连接数大于connlimit-above 50则DROP掉! 也就是说connlimit-above 3这个的数量所限制的区域是由--connlimit-mask 0而定!
--connlimit-above n 如果现有的TCP连接数高于(不高于)n,则匹配。 --connlimit-mask bits 使用掩码对主机进行分组 允许每个客户主机有2个telnet连接 iptables -p tcp --syn --dport 23 -m connlimit - -connlimit-above 2 -j REJECT 你也可以反过来匹配。 --connlimit-above 2 -j ACCEPT 限制每个C类网络(24位网络掩码)中并行http请求的数量为16个 iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REECT 删除iptables规则 1,根据编号删除 iptables -t filter -nv --line
NEW -m recent –set –name DEFAULT –rsource #控制单个IP的最大并发连接数为20 iptables -I INPUT -p tcp –dport 80 -m connlimit –connlimit-above 20 -j REJECT 1 #每个IP最多20个初始连接 iptables -I INPUT -p tcp –syn -m connlimit –connlimit-above –remove #在列表里删除相应地址,后跟列表名称及地址 connlimit功能: connlimit模块允许你限制每个客户端IP的并发连接数,即每个IP同时连接到一个服务器个数。 connlimit模块主要可以限制内网用户的网络使用,对服务器而言则可以限制每个IP发起的连接数。 –connlimit-above n #限制为多少个 –connlimit-mask n #这组主机的掩码,默认是connlimit-mask 32 ,即每个IP. 1 1 参考链接
set -j ACCEPT /sbin/iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT 具体脚本 #! set -j ACCEPT /sbin/iptables -t filter -A INPUT -p tcp --dport 80 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT while [ true ]; do #sleep 1 for IP in
--connlimit-above n 如果现有的TCP连接数高于(不高于)n,则匹配。 --connlimit-mask bits 使用掩码对主机进行分组 允许每个客户主机有2个telnet连接 iptables -p tcp --syn --dport 23 -m connlimit - -connlimit-above 2 -j REJECT 你也可以反过来匹配。 --connlimit-above 2 -j ACCEPT 限制每个C类网络(24位网络掩码)中并行http请求的数量为16个 iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REECT 删除iptables规则 1,根据编号删除 iptables -t filter -nv --line
syn-flood -j REJECT #防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃 iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables版本:1.3.7 2、配置相应的iptables规则 示例如下: (1)控制单个IP的最大并发连接数 iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT #允许单个IP的最大连接数为 30 。 #默认iptables模块不包含connlimit,需要自己单独编译加载 (2)控制单个IP在一定的时间(比如60秒)内允许新建立的连接数 iptables -A INPUT -p tcp --dport
iptables -A syn-flood -j REJECT 防ddos***: iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED --syn -m limit --limit 1/s -j ACCEPT 防cc***: iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT # 允许单个IP的最大连接数为30 iptables -A INPUT -p tcp --dport 80 -m
#5. connlimit扩展:根据每客户端IP(也可以是地址块)做并发连接数数量匹配; --connlimit-upto n: 如果现有连接数小于或等于n,则进行匹配。 --connlimit-above n: 如果现有连接数大于n,则匹配。 --connlimit-mask prefix_length: 使用前缀长度对主机进行分组。 --connlimit-saddr: 将此限制应用于源组。如果未指定—connlimit-daddr,则为默认值。 --connlimit-daddr: 将限制应用于目标组。 #例如: iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT #如果现有连接大于 2个则拒绝 iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT #如果现有连接小于
syn-flood -j REJECT #防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃 iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT limit 1/s -j ACCEPT #防御CC #控制单个IP的最大并发连接数 #允许单个IP的最大连接数为 30 iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j REJECT #默认iptables模块不包含connlimit,需要自己单独编译加载 #控制单个IP在一定的时间(比如60秒)内允许新建立的连接数
-j REJECT #防止DOS太多连接进来,可以允许外网网卡每个IP最多15个初始连接,超过的丢弃 iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
--connlimit-above 100 -j REJECT [root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j ACCEPT # 只允许每组C类IP同时100个http连接 [root@localhost ~]# iptables -p tcp --syn -- dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT # 只允许每个IP同时5个80端口转发,超过的丢弃 [root@localhost ~]# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP --connlimit-above 10 -j DROP iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10
--src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -m connlimit --connlimit-above n 连接数的上限 允许您限制每个服务器的并行连接数量,客户端地址(或客户端地址块)。 同一个地址允许同时发起多少个连接。 iptables -t filter -A INPUT -d 172.16.1.3 -p tcp 90 -m connlimit ! --connlimit-above 2 -j ACCEPT 服务器的cpu,内存,网卡带宽有限。瞬间涌入大量的请求,后面的请求就是等待。
模块 常用的扩展匹配条件如下: –connlimit-above:单独使用此选项时,表示限制每个IP的链接数量。 –connlimit-mask:此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对”某类IP段内的一定数量的IP”进行连接数量的限制,如果不明白可以参考上文的详细解释 #示例 iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT iptables -I INPUT - p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask 27 -j REJECT limit 模块 connlimit
可以通过以下步骤实现:安装iptables,例如使用yum命令:sudo yum install iptables新增以下规则:iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j DROP以上规则表示,在端口80上,限制每个IP地址的连接数量不超过10个。
利用iptables的recent模块来抵御DOS攻击 ssh: 远程连接, iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值; 2.利用recent和state模块限制单IP在300s内只能与本机建立3个新连接。
j ACCEPT #为局域网用户开启MySQL访问 # iptables -I INPUT -p tcp –dport 3306 -j ACCEPT 20.限制客户端IP的并发连接数 我们可以使用connlimit 下面的命令允许每个客户端只能并发3个ssh连接: # iptables -A INPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above 3 -j REJECT 设置HTTP并发连接为20个: # iptables -p tcp –syn –dport 80 -m connlimit –connlimit-above 20 –connlimit-mask 24 -j DROP 参数说明: –connlimit-above 3:连接数超过3个自动匹配 –connlimit-mask 24:子网掩码匹配 更好的使用iptables 首先,我们要学会查看man
模块 常用的扩展匹配条件如下: –connlimit-above:单独使用此选项时,表示限制每个IP的链接数量。 –connlimit-mask:此选项不能单独使用,在使用–connlimit-above选项时,配合此选项,则可以针对”某类IP段内的一定数量的IP”进行连接数量的限制,如果不明白可以参考上文的详细解释 #示例 root@mirrors:~# iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT root @mirrors:~# iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT root@mirrors:~# iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 10 --connlimit-mask