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

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

相关推荐
Logan Lie43 分钟前
Web服务监听地址的取舍:0.0.0.0 vs 127.0.0.1
运维·后端
Y淑滢潇潇1 小时前
RHCE 防火墙实验
linux·运维·rhce
wadesir2 小时前
当前位置:首页 > 服务器技术 > 正文Linux网络HSRP协议(实现路由器热备份与高可用性的实用指南)
linux·服务器·网络
稻谷君W2 小时前
Ubuntu 远程访问 Win11 WSL2 并固定访问教程
linux·运维·ubuntu
泡沫·2 小时前
4.iSCSI 服务器
运维·服务器·数据库
胡八一2 小时前
解决PHP未检测到您服务器环境的sqlite3数据库扩展报错
服务器·数据库·php
不解不惑2 小时前
OpenAI whisper 语音识别服务器搭建
服务器·whisper·语音识别
gaize12132 小时前
适合业务规模较大的场景的服务器测评
服务器
悠悠121383 小时前
告别Zabbix?我用Netdata只花10分钟就搞定了50台服务器的秒级监控(保姆级实战)
运维·服务器·zabbix
天庭鸡腿哥3 小时前
大小只有4K的软件,可让系统瞬间丝滑!
运维·服务器·windows·microsoft·everything