You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从NetworkManager配置文件提取并通过iptables封禁VPN IP

管理NetworkManager VPN IP的iptables封禁脚本

问题根源分析

你当前脚本的核心问题包括:

  • 未过滤普通网络连接文件,误处理非VPN配置
  • grep返回结果包含文件名,导致IP变量是带路径的多值字符串,iptables无法解析
  • 未对IP去重、验证有效性,也没有逐个应用规则

针对性解决方案

1. 筛选VPN配置文件的方法

NetworkManager的VPN配置文件必然包含[vpn]配置段,直接用grep过滤这类文件:

grep -l '\[vpn\]' /etc/NetworkManager/system-connections/*.nmconnection 2>/dev/null
  • -l:仅输出匹配到的文件名
  • 2>/dev/null:忽略无权限或不存在文件的错误提示

2. 提取独立有效IP地址

  • 用grep -h去掉文件名前缀,只保留IP
  • 自定义验证函数过滤合法IPv4(避免匹配999.999.999.999这类无效值)
  • 用sort -u去重,避免重复处理相同IP

3. 遍历封禁每个IP的正确方式

用循环逐个处理IP,同时用iptables -C检查规则是否已存在,防止重复添加冗余规则


完整实现脚本

#!/bin/bash

# 验证IPv4地址合法性的函数
validate_ip() {
    local ip="$1"
    local IFS='.'
    read -r a b c d <<< "$ip"
    # 检查每个段是否为0-255之间的整数
    [[ $a =~ ^[0-9]+$ && $b =~ ^[0-9]+$ && $c =~ ^[0-9]+$ && $d =~ ^[0-9]+$ ]] &&
    [[ $a -ge 0 && $a -le 255 && $b -ge 0 && $b -le 255 && $c -ge 0 && $c -le 255 && $d -ge 0 && $d -le 255 ]]
}

# 第一步:筛选所有VPN配置文件
vpn_files=$(grep -l '\[vpn\]' /etc/NetworkManager/system-connections/*.nmconnection 2>/dev/null)

if [ -z "$vpn_files" ]; then
    echo "未找到任何VPN配置文件"
    exit 0
fi

# 第二步:提取并过滤有效IP地址(去重)
valid_ips=$(grep -h -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' $vpn_files | sort -u | while read -r ip; do
    if validate_ip "$ip"; then
        echo "$ip"
    fi
done)

# 第三步:遍历IP添加iptables封禁规则
for ip in $valid_ips; do
    # 检查INPUT规则是否已存在,不存在则添加
    if ! iptables -C INPUT -s "$ip" -j DROP 2>/dev/null; then
        iptables -A INPUT -s "$ip" -j DROP
        echo "已封禁INPUT方向IP: $ip"
    fi
    # 检查OUTPUT规则是否已存在,不存在则添加
    if ! iptables -C OUTPUT -d "$ip" -j DROP 2>/dev/null; then
        iptables -A OUTPUT -d "$ip" -j DROP
        echo "已封禁OUTPUT方向IP: $ip"
    fi
done

脚本关键说明

  1. 精准过滤VPN文件:通过[vpn]段识别,确保只处理目标配置
  2. IP有效性保障:验证函数排除格式合法但数值无效的IP
  3. 规则冗余避免:iptables -C检查已存在规则,重复执行脚本不会生成重复条目
  4. 错误处理:忽略无权限文件提示,无VPN文件时友好退出

内容的提问来源于stack exchange,提问作者user21379959

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:13:18