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

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

相关推荐
Wang's Blog16 小时前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
张洛闻Eren16 小时前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
琥珀色糖16 小时前
SimlpeHttp
linux·服务器
其实防守也摸鱼17 小时前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
第十人i17 小时前
Linux 日志管理系统:journald 配置与优化
linux·服务器
布裘17 小时前
【银河麒麟】V4桌面图标消失,右击鼠标没反应排查
运维·银河麒麟·桌面环境
懂软件的胡子个哥17 小时前
微信机器人为什么需要“回复候选”而不是所有 AI 内容直接发送
运维·微信·自动化·wechatapi·个人微信号二次开发
云贝贝贝18 小时前
腾讯云 TDSQL(MySQL 版)性能优化与慢查询排障实战 6 招
运维·腾讯云
Lsetea18 小时前
证书没到期却报certificate has expired:OpenSSL定位中间证书与系统时间
运维·https·ssl证书·openssl·证书链
小葱运维18 小时前
命名与环境规范
运维·开源·云计算