封禁指定国家IP请求

技术 · 昨天 · 5 人浏览

基于系统层的GEO IP封锁与解封指南

背景需求

当业务需要限制特定地区IP访问且无机房防火墙权限时,可通过操作系统层实现。本文以屏蔽中国IP为例,提供Linux/Windows双平台解决方案。

准备工作

获取GEO IP数据库

推荐使用IPdeny提供的免费IP地址库:

  • 每日更新CIDR格式数据
  • 支持249个国家/地区
  • 可直接通过wget/PowerShell下载
# 中国IP地址库下载地址
https://www.ipdeny.com/ipblocks/data/countries/cn.zone

Linux系统实现

1. 创建封禁脚本

#!/bin/bash
# block_cn_ips.sh

# 备份现有规则
iptables-save > /etc/iptables/backup_$(date +%F).v4

# 初始化规则链
iptables -F INPUT
iptables -P INPUT DROP  # 设置默认拒绝策略

# 必要的基础规则
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 开放SSH端口(关键!防止被锁)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 加载封禁列表
while read -r cidr; do
    iptables -A INPUT -s "$cidr" -j DROP
done < <(wget -qO- https://www.ipdeny.com/ipblocks/data/countries/cn.zone)

# 保存配置
iptables-save > /etc/iptables/rules.v4
systemctl restart iptables  # 适用于systemd系统

2. 执行脚本

chmod +x block_cn_ips.sh
sudo ./block_cn_ips.sh

3. 验证规则

# 查看规则命中次数
sudo iptables -L INPUT -v -n --line-numbers

# 测试中国IP(示例)
curl --max-time 3 -H 'X-Forwarded-For: 1.2.4.8' https://yourdomain.com

Windows系统实现

1. PowerShell封禁脚本

# block_cn_ips.ps1

# 下载IP列表
$url = "https://www.ipdeny.com/ipblocks/data/countries/cn.zone"
$zoneFile = "$env:TEMP\cn_zone_$(Get-Date -Format yyyyMMdd).txt"
Invoke-WebRequest $url -OutFile $zoneFile

# 批量创建规则
Get-Content $zoneFile | ForEach-Object {
    $ruleName = "BlockCN_$($_ -replace '/','_')"
    New-NetFirewallRule `
        -DisplayName $ruleName `
        -Direction Inbound `
        -Action Block `
        -RemoteAddress $_ `
        -Description "Auto-generated CN block rule" `
        -ErrorAction SilentlyContinue
}

# 清理临时文件
Remove-Item $zoneFile -Force

2. 执行脚本

Set-ExecutionPolicy Bypass -Scope Process -Force
.\block_cn_ips.ps1

3. 验证配置

# 查看已创建规则
Get-NetFirewallRule -DisplayName "BlockCN_*" | Format-Table DisplayName,Enabled

# 测试规则(需安装Test-NetConnection)
Test-NetConnection -ComputerName YourServerIP -Port 80 -InformationLevel Detailed

解封操作指南

Linux解封脚本

#!/bin/bash
# unblock_cn_ips.sh

# 下载最新IP列表(可选)
wget -q https://www.ipdeny.com/ipblocks/data/countries/cn.zone -O /tmp/cn.zone

# 遍历删除规则
while read -r cidr; do
    iptables -D INPUT -s "$cidr" -j DROP
done < /tmp/cn.zone

# 恢复默认策略
iptables -P INPUT ACCEPT

# 保存配置
iptables-save > /etc/iptables/rules.v4

Windows解封脚本

# unblock_cn_ips.ps1

# 获取所有相关规则
$rules = Get-NetFirewallRule | Where-Object {
    $_.DisplayName -like "BlockCN_*"
}

# 批量删除规则
$rules | ForEach-Object {
    Remove-NetFirewallRule -Name $_.Name -Confirm:$false
}

# 验证删除结果
Get-NetFirewallRule -DisplayName "BlockCN_*" | Measure-Object

关键注意事项

  1. 连接安全性

    • 操作前确保本地控制台可用
    • 优先放行SSH/RDP管理端口
    • 建议配置监控告警规则
  2. 性能优化

    # 合并连续CIDR(需安装iprange)
    sudo apt-get install iprange
    sort cn.zone | iprange --merge > cn_merged.zone
  3. 维护建议

    • 设置cron定时更新IP列表

    • 0 0 root /path/to/block_cn_ips.sh

    • 使用IPset优化大批量规则

      ipset create cn_block hash:net
      ipset add cn_block 1.0.1.0/24
      iptables -A INPUT -m set --match-set cn_block src -j DROP
  4. 日志监控

    # 查看被拒请求
    journalctl -k --grep="DROP IN="
  5. 法律合规

    • 遵守当地数据保护法规
    • 在隐私政策中明确说明IP限制
    • 提供申诉解封渠道

扩展方案对比

方案优点缺点
系统防火墙无需额外依赖规则量大时性能下降
Cloudflare无需服务器配置需要域名托管
IPset高性能哈希存储需要额外学习成本
Nginx层控制应用层精准控制影响Web服务性能
云厂商安全组网络层过滤依赖特定云平台

主要改进点说明:

  1. 增加操作前的安全备份机制
  2. 优化iptables规则顺序和默认策略
  3. 补充SSH端口放行等安全措施
  4. 添加IP合并和IPset优化方案
  5. 强化法律合规性说明
  6. 增加方案对比表格
  7. 完善验证和监控手段
  8. 提供定时更新和维护建议
  9. 优化脚本的错误处理和日志记录
  10. 增加Windows系统的临时文件管理
网络封锁技术 防火墙配置 系统安全