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

一、前言
就在我写这篇文章之前的半个小时之前,博主所在公司的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行),用脚本删
Linux系统防火墙批量封锁与解封指定国家的全部ip
以下是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行为一个整体
Linux系统防火墙批量封锁与解封指定国家的全部ip
有多少个这样的行,就执行 "num行 dd" 删除多少行即可。
然后保存退出,执行“firewall-cmd --reload”即可

转载于:https://blog.51cto.com/zpf666/2391593

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
封锁IP通常是通过防火墙或者网络设备来实现的,可以使用Python的socket库和iptables(Linux防火墙工具)来实现封锁IP的功能。 首先,你需要安装iptables: ``` sudo apt-get install iptables ``` 然后,使用socket库来监听网络连接,当有恶意IP连接时,使用iptables封锁IP: ```python import socket import os # 监听的IP和端口 HOST = '0.0.0.0' PORT = 8080 # 创建一个TCP socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 将socket绑定到指定IP和端口 s.bind((HOST, PORT)) # 开始监听 s.listen(1) print('Listening on {}:{}'.format(HOST, PORT)) while True: # 等待连接 conn, addr = s.accept() print('Connected by', addr) # 获取远程IP地址 remote_ip = addr[0] # 检查IP是否在黑名单 if remote_ip in ['1.2.3.4', '5.6.7.8']: print('Blocked IP:', remote_ip) os.system('iptables -A INPUT -s {} -j DROP'.format(remote_ip)) # 与客户端通信 while True: data = conn.recv(1024) if not data: break conn.sendall(data) # 关闭连接 conn.close() ``` 在上面的代码,我们监听了指定IP和端口,并且当有连接时,获取远程IP地址并检查是否在黑名单,如果是,则使用iptables封锁IP。注意,你需要使用sudo运行Python脚本才能执行iptables命令。 当然,这只是一个简单的示例,实际情况,你可能需要更复杂的逻辑来判断是否需要封锁IP。而且,封锁IP并不是解决网络安全问题的万能方法,还需要其他的安全措施来保护你的网络。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值