当前位置: 首页 > ds >正文

debian12拒绝海外ip连接

确保 nftables 已安装: Debian 12 默认使用 nftables 作为防火墙框架。检查是否安装:

sudo apt update
sudo apt install nftables

启用并启动 nftables 服务

sudo systemctl enable nftables
sudo systemctl start nftables

下载maxmind数据库
在这里插入图片描述
将文件解压后放在任意目录
在这里插入图片描述

# 备份 nftables.conf
sudo cp /etc/nftables.conf /etc/nftables.conf.bak# 清空所有规则
sudo nft flush ruleset# 停止服务
sudo systemctl stop nftables删除原配置文件
sudo rm -rf /etc/nftables.conf修改配置文件
sudo vim  /etc/nftables.conf

修改后配置文件如下

#!/usr/sbin/nft -fflush rulesettable inet filter {# 定义中国大陆 IPv4 地址集合set cn_ips {type ipv4_addrflags interval#CN_IPV4_ELEMENTS#}# 定义中国大陆 IPv6 地址集合set cn_ips6 {type ipv6_addrflags interval#CN_IPV6_ELEMENTS#}# 定义局域网 IPv4 地址集合set lan_ips {type ipv4_addrflags intervalelements = { 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12 }  # 替换为你的局域网范围}# 定义局域网 IPv6 地址集合set lan_ips6 {type ipv6_addrflags intervalelements = { fc00::/7 }  # 替换为你的局域网 IPv6 范围}chain input {type filter hook input priority 0; policy drop;# 允许本地回环接口iifname "lo" accept# 允许已建立和相关的连接ct state established,related accept# 允许局域网 IPv4 访问ip saddr @lan_ips accept# 允许局域网 IPv6 访问ip6 saddr @lan_ips6 accept# 允许中国大陆 IPv4 地址访问ip saddr @cn_ips accept# 允许中国大陆 IPv6 地址访问ip6 saddr @cn_ips6 accept# 记录被拒绝的连接(可选)log prefix "[nftables] Blocked: " flags all counter drop# 拒绝所有其他连接counter drop}chain output {type filter hook output priority 0; policy accept;}chain forward {type filter hook forward priority 0; policy drop;}
}

创建替换ip的脚本

sudo vim update_nftables.sh

脚本内容

#!/bin/bash# 提取中国大陆 IPv4 地址
grep '1814991' GeoLite2-Country-Blocks-IPv4.csv | awk -F',' '{print $1}' > cn_ipv4.txt# 提取中国大陆 IPv6 地址
grep '1814991' GeoLite2-Country-Blocks-IPv6.csv | awk -F',' '{print $1}' > cn_ipv6.txt# 转换为 nftables 集合格式(IPv4)
echo "elements = {" > cn_ipv4_nft.txt
awk '{print $1","}' cn_ipv4.txt >> cn_ipv4_nft.txt
echo "}" >> cn_ipv4_nft.txt# 转换为 nftables 集合格式(IPv6)
echo "elements = {" > cn_ipv6_nft.txt
awk '{print $1","}' cn_ipv6.txt >> cn_ipv6_nft.txt
echo "}" >> cn_ipv6_nft.txt# 使用 sed 替换 IPv4 占位符
sudo sed -i '/#CN_IPV4_ELEMENTS#/r cn_ipv4_nft.txt' /etc/nftables.conf
sudo sed -i 's/#CN_IPV4_ELEMENTS#//' /etc/nftables.conf# 使用 sed 替换 IPv6 占位符
sudo sed -i '/#CN_IPV6_ELEMENTS#/r cn_ipv6_nft.txt' /etc/nftables.conf
sudo sed -i 's/#CN_IPV6_ELEMENTS#//' /etc/nftables.conf# 应用规则
sudo nft -f /etc/nftables.conf
# 清理文件
sudo rm cn_ipv4.txt cn_ipv4_nft.txt cn_ipv6.txt cn_ipv6_nft.txt

给权限

sudo chmod +x update_nftables.sh

执行脚本

sudo ./update_nftables.sh

检查规则

sudo nft list ruleset

查看被拒绝的信息

查看系统日志文件
sudo grep "\[nftables\] Blocked:" /var/log/syslog

示例输出:

Jun  8 22:30:45 hostname kernel: [nftables] Blocked: IN=eth0 OUT= MAC=... SRC=203.0.113.1 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=12345 PROTO=TCP SPT=54321 DPT=22 WINDOW=65535 RES=0x00 SYN URGP=0

解释:

  • SRC=203.0.113.1:源 IP(被拒绝的外部 IP)。
  • DST=192.168.1.100:目标 IP(你的服务器)。
  • PROTO=TCP:协议类型。
  • SPT=54321 DPT=22:源端口和目标端口(例如,尝试访问 SSH 的 22 端口)。
  • IN=eth0:入站接口。

实时监控日志: 使用 tail 实时查看新记录的被拒绝连接:

sudo tail -f /var/log/syslog | grep "\[nftables\] Blocked:"

过滤特定信息: 如果日志量大,可以提取特定字段(如源 IP)

sudo grep "\[nftables\] Blocked:" /var/log/syslog | awk '{print $8}' | sort | uniq

这会提取被拒绝的源 IP(SRC=…)并去重。

查看 nftables 计数器
   sudo nft list ruleset
示例输出:
 table inet filter {chain input {type filter hook input priority 0; policy drop;iifname "lo" acceptct state established,related acceptip saddr @lan_ips acceptip6 saddr @lan_ips6 acceptip saddr @cn_ips acceptip6 saddr @cn_ips6 acceptlog prefix "[nftables] Blocked: " flags all counter packets 123 bytes 4560 dropcounter packets 123 bytes 4560 drop}
...
}
  • counter packets 123 bytes 4560 drop:表示有 123 个数据包(共 4560 字节)被拒绝。
  • packets:被拒绝的数据包数量。
  • bytes:被拒绝的数据总字节数。
http://www.xdnf.cn/news/12994.html

相关文章:

  • PyCharm和VS Code哪个更适合初学者
  • idea 启动jar程序并调试
  • 机器学习模型选择指南:从问题到解决方案
  • 华为开源自研AI框架昇思MindSpore应用案例:ICT实现图像修复
  • 前端现行架构浅析
  • 主流嵌入式Shell工具性能对比
  • Python计算字符串距离算法库textdistance详解与应用实战
  • Python_day48随机函数与广播机制
  • Framework开发之IMS逻辑浅析1--关键线程及作用
  • Spring AOP代理对象生成原理
  • 在Unity中Update和Fixedupdate有什么区别
  • 【读论文】OpenAI o3与o4系统模型技术报告解读
  • 数据源指的是哪里的数据,磁盘中还是内存中
  • 调试快捷键 pycharm vscode
  • 掌握Git核心:版本控制、分支管理与远程操作
  • 联邦学习与边缘计算结合
  • 一种停车场自动停车导航器的设计(论文+源码)
  • grpc和http的区别
  • 自动驾驶科普(百度Apollo)学习笔记
  • 【AI智能体】Dify 从部署到使用操作详解
  • 解决limit 1000000加载慢的问题
  • 【每天学点 Go 知识】Go 基础知识 + 基本数据类型快速入门
  • 【大模型RAG】Docker 一键部署 Milvus 完整攻略
  • 基于规则的自然语言处理
  • 基于多维视角的大模型提升认知医疗过程层次激励编程分析
  • 【数据结构】顺序表和链表详解(下)
  • 异步跟栈 webpack
  • 74常用控件_QSpacerItem的使用
  • 01-VMware16虚拟机详细安装
  • jmeter聚合报告中参数详解