Debian/Ubuntu Server高效禁用海外IP访问的一种方法

面对越来越多的海外IP扫描、攻击,让服务器损失大量的性能,影响服务器提供正常的对外服务,同时给自己的服务器处理风险之中,本文讲述了一种使用ufw防火墙的方式高效阻止海外IP的一种方法。

阻止IP访问的方法有很多种,这里介绍一个小巧实用的方案ufw+ipset。IPSet是一个用于创建、管理和查询IP地址集合的工具。它支持多种集合类型,如哈希、树、布尔和地理IP集合。这些集合可以用于防火墙规则,实现更复杂的网络访问控制。

一:IPSET

1、安装ipset

复制代码
sudo apt-get update
sudo apt-get install ipset

2、ipset的一些基本操作

我们以ipset集合hr-ip为例讲述一些通用的操作方法

复制代码
#创建集合
ipset create hr-ip hash:net

#向集合中添加IP地址
ipset add hr-ip 192.168.1.1

#从集合中删除IP地址
ipset del hr-ip 192.168.1.1

#查看集合中的IP地址
ipset list hr-ip

#删除集合
ipset destroy hr-ip

二:安装UFW及相关依赖

复制代码
apt install curl perl unzip ufw

禁用某个IP我们只需要修改相关的规则就可以了,这里有两个地方可以修改,一个是before.rules和user.rules。修改两个文件中的任何一个都可以达到禁用某个IP的效果,但他们的启动顺序有不同。

1、before.rules:文件用于定义在 UFW 的默认规则之前 应用的规则。UFW 加载规则时,它首先加载 before.rules 中的规则,然后加载 UFW 的内置规则(默认允许建立的和相关连接,以及拒绝其他入站连接),最后加载 usr.rules 中的规则。

2、user.rules:文件用于定义在 UFW 的默认规则之后 应用的规则。UFW 加载规则时,它在加载完默认规则后,才会加载 usr.rules 中的规则。

通常情况下,如果你只需要简单的防火墙规则,例如允许 SSH 访问,只需要在 usr.rules 中添加规则即可。 如果你需要修改 UFW 的底层配置,或者添加更高级的规则,需要编辑 before.rules 文件。

3、支持IPV6的文件名为:before6.rules和user6.rules,如果你的服务器同时提供IPV6服务,则这两个文件也是需要修改的

4、添加规则

复制代码
vim /etc/ufw/before.rules

增加以下行:

-A ufw-before-input -m set --match-set hr-ip src -j DROP

其中hr-ip就是你的ipset集合

三:下载国家IP集合

这里推荐给大家两个网站

1、IP2Local

Block Visitors by Country | IP2Location

2、IPDeny

IPdeny IP country CIDR blocks

你可以在这两个网站下载你想禁止访问的海外IP集合,注意下载格式选用CIDR。

3、如何批量处理IP

以禁用myanmar的IP为例,先下载国家IP集合

wget https://www.ipdeny.com/ipblocks/data/countries/mm.zone

然后编写下面的脚本,文件名可以随便起,比如config-ip.sh,进行批处理:

复制代码
#!/bin/bash
for i in `cat mm.zone`
do
echo "ipset add Myanmar $i" >> ipset_result_mm.sh
done

运行脚本

复制代码
bash config-ip.sh

于是得到文件:ipset_result_mm.sh

4、创建ipset集合

复制代码
ipset create Myanmar hash:net hashsize 1024 maxelem 65535

5、执行脚本

复制代码
bash ipset_result_mm.sh

此时所有IP已经写入到Myanmar的IPSET集合中,你可以执行ipset list查看

复制代码
ipset list Myanmar

四:修改ufw的规则文件

1、修改规则文件,这里我习惯使用before.rules

复制代码
vim /etc/ufw/before.rules

2、添加规则,添加下面一行:

-A ufw-before-input -m set --match-set Myanmar src -j DROP

3、使规则起作用:

复制代码
ufw reload

当然这里如果你重启服务器,以上配置就会失效,下一章我们介绍如何让配置持久化。

相关推荐
JZC_xiaozhong2 小时前
数据不互通、审批慢?企业多系统智能协同与流程自动化解决方案
运维·自动化·流程管理·流程自动化·数据集成与应用集成·流程监控·流程可视化设计
爱学习的小囧2 小时前
ESXi 8.0 原生支持 NVMe 固态硬盘吗?VMD 配置详解教程
linux·运维·服务器·esxi·esxi8.0
坚持就完事了3 小时前
Linux中的变量
linux·运维·服务器
hERS EOUS3 小时前
nginx 代理 redis
运维·redis·nginx
Cat_Rocky3 小时前
利用Packet Tracer网络实验
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志3 小时前
Linux 驱动实战:SR501 人体红外传感器驱动开发与调试全记录
linux·运维·驱动开发
正点原子3 小时前
【正点原子Linux连载】第三章 U-Boot使用 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南
linux·运维·驱动开发
忍冬行者4 小时前
MongoDB 三节点副本集离线部署运维手册
运维·数据库·mongodb
爱学习的小囧4 小时前
ESXi VMkernel 端口 MTU 最佳设置详解
运维·服务器·网络·php·虚拟化
程序员老邢5 小时前
【技术底稿 19】Redis7 集群密码配置 + 权限锁死 + 磁盘占满连锁故障真实排查全记录
java·服务器·经验分享·redis·程序人生·微服务