Linux系统防火墙批量封锁与解封指定国家的全部ip

服务器

浏览数:20

2019-10-9

一、前言
就在我写这篇文章之前的半个小时之前,博主所在公司的IDC机房打开电话说:紧急通知你一下,IDC机房检测报告说发现大量IP地址在DDOSgongji你们的服务器,gongji源来自俄罗斯,如果不及时处理,ISP会封锁你们IP。我这一听,知道了事情的严重性,但是博主不怕,博主轻轻松松的几行shell脚本就压制住了gongji,下面博主带你们看一下我解决的过程,大牛们可能觉得我的方法low,如果有更好的办法,请大牛在下面留言讨论,谢谢合作!
二、解决过程
首先告诉大家一个网址:
http://www.ipdeny.com/ipblocks/data/countries/
这个网址下面有很多.zone结尾的文件,每个文件的名字就是每个国家的英语单词的缩写,如果大家想找对应的国家ip,则只需知道那个国家的英文缩写即可,俄罗斯的简写就是:ru
如果想得到地球上全部国家的网段,请下载,链接如下:
http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
1)封锁指定国家ip访问(centos6/7都适用)
①创建脚本并保存规则(这里我就以封俄罗斯全国的ip为例

vim blockip.sh

以下是centos6的写法

#/bin/bash
wget -O /tmp/ru.zone http://www.ipdeny.com/ipblocks/data/countries/ru.zone
for ip in `cat /tmp/ru.zone`
do
iptables -I INPUT -s $ip -j DROP
done

以下是centos7的写法

#/bin/bash
wget -O /tmp/ru.zone http://www.ipdeny.com/ipblocks/data/countries/ru.zone
for ip in `cat /tmp/ru.zone`
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=$ip drop"
firewall-cmd --reload
done

②执行脚本即可立即执行封锁

bash blockip.sh

③等脚本执行完毕,保存防火墙规则(只针对centos6,如果是centos7请忽视这个步骤)

service iptables save

2)解封指定国家ip(centos6/7都适用)
①查看已经drop掉的国家网段的ip序列号

iptables -L -n –line-number

②删除规则
⑴如果ip段较少(小国家),一个一个的删

执行:iptables -D INPUT 序列号

⑵如果ip段较多(大国家,比如俄罗斯,IP网段有9690行),用脚本删

以下是centos6的方法:

vim ip_del.sh

#!/bin/bash
for ((i=1; i<=9690; i++))
do
echo "$i"
iptables -D INPUT 1
done

执行脚本:bash ip_del.sh
最后再次保存规则:service iptables save

以下是centos7的方法:
直接进public.xml里面删除
vim /etc/firewalld/zones/public.xml
先set nu看看有多少行类似下面,4行为一个整体

有多少个这样的行,就执行 “num行 dd” 删除多少行即可。
然后保存退出,执行“firewall-cmd –reload”即可

作者:Mr大表哥