如何防cc攻击,其中一种方法是禁止国外ip访问,可以有所缓解,因此有了如下脚本,在centos 6下调试通过。
准备
先运行如下语句获取国内ip网段,会保存为/root/china_ssr.txt
wget -q --timeout=60 -o- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -f\| '/cn\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/china_ssr.txt
将下面脚本保存为/root/allcn.sh
,设置可执行权限
mmode=$1 #下面语句可以单独执行,不需要每次执行都获取网段表 #wget -q --timeout=60 -o- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -f\| '/cn\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /root/china_ssr.txt cnip="/root/china_ssr.txt" gen_iplist() { cat <<-eof $(cat ${cnip:=/dev/null} 2>/dev/null) eof } flush_r() { iptables -f allcnrule 2>/dev/null iptables -d input -p tcp -j allcnrule 2>/dev/null iptables -x allcnrule 2>/dev/null ipset -x allcn 2>/dev/null } mstart() { ipset create allcn hash:net 2>/dev/null ipset -! -r <<-eof $(gen_iplist | sed -e "s/^/add allcn /") eof iptables -n allcnrule iptables -i input -p tcp -j allcnrule iptables -a allcnrule -s 127.0.0.0/8 -j return iptables -a allcnrule -s 169.254.0.0/16 -j return iptables -a allcnrule -s 224.0.0.0/4 -j return iptables -a allcnrule -s 255.255.255.255 -j return #可在此增加你的公网网段,避免调试ipset时出现自己无法访问的情况 iptables -a allcnrule -m set --match-set allcn src -j return iptables -a allcnrule -p tcp -j drop } if [ "$mmode" == "stop" ] ;then flush_r exit 0 fi flush_r sleep 1 mstart
运行
/root/allcn.sh
运行后国外ip无法访问网站
停止
/root/allcn.sh stop
运行后国外ip恢复访问网站