在当今复杂的网络环境中,保护服务器安全是每个系统管理员和开发者的重要任务。对于部署在公网上的Debian系统,来自境外的恶意扫描、暴力破解和攻击行为屡见不鲜。因此,通过配置防火墙禁止国外IP访问,只允许中国大陆或特定地区的流量,是一种高效且实用的安全策略。

本文将详细介绍如何在 Debian 12 系统中,利用现代防火墙工具 nftables 实现“只允许国内IP,封禁所有境外IP”的安全配置,帮助您显著提升服务器的抗攻击能力。
为什么选择 nftables?
自 Debian 10 起,nftables 已逐步取代传统的 iptables 成为默认的防火墙框架。相比 iptables,nftables 具有更简洁的语法、更高的性能和更强的可扩展性,尤其适合处理大规模IP地址集合(如国家IP段)。
✅ 提示:虽然
ufw(Uncomplicated Firewall)对初学者更友好,但在处理复杂的地理IP过滤时,直接使用nftables更加灵活高效。
实现原理:基于GeoIP的IP地址过滤
要封禁国外IP,核心思路是:
获取中国大陆(CN)的官方IPv4地址段列表。
在防火墙中创建一个“中国IP集合”。
配置规则:只允许该集合内的IP访问服务器,其余所有IP一律拒绝。
我们将使用 MaxMind 的 GeoLite2 数据库来获取最新的IP地理信息。
详细配置步骤(Debian 12 + nftables)
第一步:安装并启用 nftables
第二步:获取中国大陆IP地址段
访问 MaxMind 官网(https://www.maxmind.com)注册账号。
获取免费的 GeoLite2 City 数据库下载链接(需申请 License Key)。
使用
wget或curl下载数据库(.mmdb格式)。
🔧 替代方案:可使用开源项目如 17mon/china_ip_list 提供的纯文本IP段列表,简化处理流程。
第三步:生成中国IP集合
安装辅助工具 iprange 来处理IP段:
假设你已将中国IP列表保存为 cn.txt,每行一个CIDR地址(如 1.0.4.0/22),可通过以下命令生成 nftables 可用的格式:
第四步:编写 nftables 配置文件
编辑 /etc/nftables.conf:
替换为以下内容:
⚠️ 注意:请将
# 此处粘贴...部分替换为实际的中国IP段列表,每行以逗号结尾。
第五步:加载并启用规则
验证与测试
本地测试:使用国内手机4G网络或家庭宽带访问服务器,确认SSH、Web服务等正常。
远程测试:可通过境外VPS尝试
ping或telnet目标端口,应无法连接。日志监控:查看
/var/log/nftables.log或使用dmesg观察被拒绝的连接。
自动化与维护建议
定期更新IP库:中国IP段会动态调整,建议每月更新一次
cn.txt并重载规则。脚本化部署:编写Shell脚本自动下载IP列表、生成配置并重启防火墙。
备用访问通道:配置前请确保有应急管理方式(如云平台VNC),避免误封导致失联。
其他方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| nftables + GeoIP | 高效、精准、系统级控制 | 配置复杂,需维护IP库 |
| ufw + 地址集 | 简单易用 | 不原生支持GeoIP,灵活性差 |
| iptables + ipset | 成熟稳定 | 性能低于nftables,语法复杂 |
通过在 Debian 系统中配置 nftables 实现“只允许国内IP访问”,是提升服务器安全性的有效手段。虽然初期配置稍显复杂,但一旦部署成功,即可长期自动抵御大量境外恶意流量。
📢 温馨提示:此策略适用于主要服务国内用户的场景。若您有海外业务需求,请谨慎使用,或采用“白名单+端口限制”等更精细化的策略。





















