海运的博客

Iptables模块recent应用

发布时间:May 3, 2012 // 分类:Iptables // 17 Comments

recent这个模块很有趣,善加利用可充分保证您服务器安全。
设定常用参数:

#https://www.haiyun.me
--name #设定列表名称,默认DEFAULT。
--rsource #源地址,此为默认。
--rdest #目的地址
--seconds #指定时间内
--hitcount #命中次数
--set #将地址添加进列表,并更新信息,包含地址加入的时间戳。
--rcheck #检查地址是否在列表,以第一个匹配开始计算时间。
--update #和rcheck类似,以最后一个匹配计算时间。
--remove #在列表里删除相应地址,后跟列表名称及地址。

示例:
1.限制80端口60秒内每个IP只能发起10个新连接,超过记录日记及丢失数据包,可防CC及非伪造IP的syn flood。

iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix 'DDOS:' --log-ip-options
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT

备忘:每个IP目标端口为80的新连接会记录在案,可在/proc/net/xt_recent/目录内查看,rcheck检查此IP是否在案及请求次数,如果超过规则就丢弃数据包,否则进入下条规则并更新列表信息。
2.发送特定指定执行相应操作,按上例如果自己IP被阻止了,可设置解锁哦。

#https://www.haiyun.me
iptables -A INPUT -p tcp --dport 5000 --syn -j LOG --log-prefix "WEBOPEN: "
#记录日志,前缀WEBOPEN:
iptables -A INPUT -p tcp --dport 5000 --syn -m recent --remove --name webpool --rsource -j REJECT --reject-with tcp-reset
#符合规则即删除webpool列表内的本IP记录

3.芝麻开门,默认封闭SSH端口,为您的SSH服务器设置开门暗语。

iptables -A INPUT -p tcp --dport 50001 --syn -j LOG --log-prefix "SSHOPEN: "
#记录日志,前缀SSHOPEN:
iptables -A INPUT -p tcp --dport 50001 --syn -m recent --set --name sshopen --rsource -j REJECT --reject-with tcp-reset
#目标端口tcp50001的新数据设定列表为sshopen返回TCP重置,并记录源地址。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
#开启SSH端口,15秒内允许记录的源地址登录SSH。
nc host 50001  #开门钥匙
telnet host 50001
nmap -sS host 50001

指定端口容易被破解密钥,可以使用ping指定数据包大小为开门钥匙。

iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -j LOG --log-prefix "SSHOPEN: "
#记录日志,前缀SSHOPEN:
iptables -A INPUT -p icmp --icmp-type 8 -m length --length 78 -m recent --set --name sshopen --rsource -j ACCEPT
#指定数据包78字节,包含IP头部20字节,ICMP头部8字节。
iptables -A INPUT -p tcp --dport 22 --syn -m recent --rcheck --seconds 15 --name sshopen --rsource -j ACCEPT
ping -s 50 host #Linux下解锁
ping -l 50 host #Windows下解锁

分析nginx日记用iptables封IP防CC

发布时间:April 14, 2012 // 分类:Shell,网络安全 // 3 Comments

此方法用于被动分析nginx日记找出请求数较大的IP,并用iptables封掉,如需主动限制,可参考通过nginx限制ip连接数防CC

#!/bin/bash
#Created by https://www.haiyun.me
num=100 #上限
cd /home/wwwlogs
for i in `tail access.log -n 1000|awk '{print $1}'|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'`
#读取最新1000条记录,如果单IP超过100条就封掉。
do
      iptables -I INPUT -p tcp -s $i --dport 80 -j DROP
done

加入crontab计划任务

crontab -e
*/5 * * * * sh /path/file.sh #5分钟执行一次

用iptables自动封连接数较大的IP防CC

发布时间:April 14, 2012 // 分类:Shell,网络安全 // No Comments

此方法用于被动统计IP连接数,对连接数较大的IP用iptables封掉,如需主动限制,可参考通过iptables限制ip连接数防CC
Shell脚本如下:

#!/bin/bash
#Created by https://www.haiyun.me
num=100 #上限
list=`netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk '{if ($1>$num){print $2}}'`
for i in $list
do
      iptables -I INPUT -s $i --dport 80 -j DROP
done

加入crontab计划任务

crontab -e
*/5 * * * * sh /path/file.sh #5分钟执行一次

Nginx限制IP请求数防CC攻击

发布时间:April 6, 2012 // 分类:Nginx,网络安全 // No Comments

适用于Nginx服务器,如需通过自带防火墙限制请参考iptables防CC
编辑Nginx配置文件在http段添加:

limit_req_zone $binary_remote_addr zone=req:10m rate=2r/s;
#定义会话存储区,名字为reg,每秒2个请求

server添加:

location /path/ #限制的目录
{
  limit_req_zone zone=reg burst=2; #突发最高每秒2个请求数
}

Iptables限制同一IP连接数防CC/DDOS

发布时间:March 24, 2012 // 分类:网络安全 // No Comments

1.限制与80端口连接的IP最大连接数为10,可自定义修改。

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP

2.使用recent模块限制同IP时间内新请求连接数,recent更多功能请参考:Iptables模块recent应用

iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j LOG --log-prefix 'DDOS:' --log-ip-options
#60秒10个新连接,超过记录日志。
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --rcheck --seconds 60 --hitcount 10 -j DROP
#60秒10个新连接,超过丢弃数据包。
iptables -A INPUT -p tcp --dport 80 --syn -m recent --name webpool --set -j ACCEPT
#范围内允许通过。
分类
最新文章
最近回复
  • chainofhonor: 感谢,用dnsmasq设置自动判断BIOS和UEFI成功了
  • 海运: 不好意思,这个是很多年前的,现在也许已经不适用,我现在也不用多线了。
  • CQ: -m state --state NEW 替换成-m conntrack --ctstate NEW
  • CQ: 你好,我入站已经成功分流,但是不知道出站怎么设置,PREROUTING替换成POSTROUTI...
  • K: 好的,谢谢,我去试试!
  • 海运: 可以试试3proxy
  • daha: PHP的怎么使用???
  • 海运: 换回了5.3内核,5.8用5.3 dtb虽然能开机且负载正常,但也有其它问题,不建议使用。
  • shangyatsen: 后面的内核高精度计时器的问题使用5.4或者5.3的dtb会正常吗?我也发现有这个日志出现。感觉...
  • 海运: 缺少相应模块?