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

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

相关推荐
esabby3 分钟前
253个原生IP + 40M独享回国带宽:香港站群服务器的硬核拆解
服务器·网络协议·tcp/ip
zcmodeltech37 分钟前
智慧城市沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的园区-城市-数字孪生联动方案
服务器·数据库·人工智能·stm32·嵌入式硬件·信息可视化·智慧城市
程序猿小玉兒39 分钟前
Quartz定时任务偶尔不执行
服务器·windows·microsoft
酷可达拉斯44 分钟前
Linux操作系统-tcpdump抓包定位网络问题实战
linux·运维·服务器·网络·tcpdump
Dontla11 小时前
预置known_hosts如何防止中间人攻击(MITM)?(服务器公钥、服务器私钥)Runner、DNS污染、BGP劫持、同网络ARP欺骗、SSH握手
服务器·网络·ssh
Lonely 净土11 小时前
Rocky Linux 安装教程
linux·运维·服务器
光影少年12 小时前
RN的Fabric 渲染流程
运维·前端·javascript·react native·react.js·fabric
A 糖醋排骨12 小时前
grafana loki alloy轻量级日志采集
运维·grafana·loki
林间码客15 小时前
从DevOps到DevSecOps:构建现代软件交付的基石与护城河
大数据·运维·devsecops·devops
Lust Dusk16 小时前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全