实现 动态 IP 白名单 的完整方案

以下是实现 动态 IP 白名单 的完整方案,涵盖主流云平台(Azure、GCP、AWS)的自动化配置方法,支持动态更新 IP 地址列表,适用于远程访问、VPN 或弹性服务的场景!



一、核心思路

动态 IP 白名单通过 自动化脚本 或 云服务 实现,核心步骤:

  1. 获取当前 IP:通过 DDNS、内网 DHCP 或 API 获取动态 IP。
  2. 更新安全组规则:调用云平台 CLI 或 API 动态添加/删除 IP 规则。
  3. 定时任务:使用 Cron、CloudWatch 或 Task Scheduler 定期执行更新。

二、实现方案

方案 1:基于脚本 + 定时任务

步骤 1:获取动态 IP

• 方法 A:通过外部服务(如 DDNS)

# 示例:使用 dig 查询 DNS 记录(如 No-IP)
CURRENT_IP=$(dig +short example.ddns.net @resolver.example.com)

• 方法 B:获取公网 IP

# Azure VM
CURRENT_IP=$(az vm show --resource-group my-rg --name my-vm | jq -r '.networkInterfaces[0].properties.privateIpAddress')

# GCP VM
CURRENT_IP=$(gcloud compute instances describe my-vm --zone us-central1-a --format json | jq -r '.networkInterfaces[0].accessConfigs[0].externalIp')

步骤 2:更新 Azure NSG 规则

# 删除旧规则(假设规则名包含 IP)
OLD_RULE_NAME="allow-ssh-${CURRENT_IP//./-}"
az network nsg rule delete --resource-group my-rg --nsg-name my-nsg --name $OLD_RULE_NAME

# 添加新规则
az network nsg rule create \
  --resource-group my-rg \
  --nsg-name my-nsg \
  --name allow-ssh-dynamic \
  --protocol tcp \
  --direction inbound \
  --priority 100 \
  --source-address-prefix $CURRENT_IP/32 \
  --destination-port-range 22/22 \
  --access allow

步骤 3:设置定时任务(Linux)

# 每 10 分钟执行一次更新
* * * * * sleep 10; /path/to/update_ip.sh >> /var/log/dynamic_ip.log 2>&1

方案 2:云函数触发器(无服务器架构)

以 Azure Function 为例

  1. 编写函数代码(Python):

    import azure.mgmt.network
    from azure.identity import DefaultAzureCredential
    
    def main(req):
        current_ip = req.params.get('ip')  # 通过 API 请求传递当前 IP
        credential = DefaultAzureCredential()
        client = azure.mgmt.network.NetworkManagementClient(credential, "my-subscription-id")
        
        # 删除旧规则
        client.network_security_groups.delete_rule(
            resource_group_name="my-rg",
            network_security_group_name="my-nsg",
            rule_name=f"allow-ssh-{current_ip}"
        )
        
        # 添加新规则
        rule_params = {
            'protocol': 'tcp',
            'direction': 'inbound',
            'priority': 100,
            'source_address_prefix': f"{current_ip}/32",
            'destination_port_range': '22/22',
            'access': 'allow'
        }
        client.network_security_groups.create_or_update_rule(
            resource_group_name="my-rg",
            network_security_group_name="my-nsg",
            rule_name=f"allow-ssh-{current_ip}",
            rule_params
        )
    
  2. 触发方式:
    • 通过 HTTP 触发器 调用函数(如每 5 分钟通过外部服务 POST 当前 IP)。
    • 集成 Azure Event Grid 监听 IP 变化事件。


方案 3:使用云服务托管 DDNS

AWS EC2 Instance Connect

• 自动更新:EC2 实例 connect 服务会自动管理 SSH 白名单,无需手动配置。
• 配置步骤:

  1. 在 EC2 控制台启用 Instance Connect。
  2. 用户通过 AWS Systems Manager (SSM) 临时访问,IP 白名单自动更新。

三、高级场景:动态 IP 池

如果需要同时支持多个动态 IP(如团队成员的居家 IP),可使用 IP 池 动态扩容:

# Azure NSG 批量添加 IP 池
IPS=("192.168.1.100" "192.168.1.101" "192.168.1.102")
for ip in "${IPS[@]}"; do
  az network nsg rule create \
    --resource-group my-rg \
    --nsg-name my-nsg \
    --name allow-ssh-pool-${ip} \
    --protocol tcp \
    --direction inbound \
    --priority 100 \
    --source-address-prefix $ip/32 \
    --destination-port-range 22/22 \
    --access allow
done

四、监控与日志

  1. 启用日志记录:
    • Azure NSG:

    az network nsg set-log-validation --resource-group my-rg --nsg-name my-nsg --enable true
    

    • GCP Firewall:

    gcloud compute firewall-rules set-logging \
      --project my-project --network my-vpc --name allow-ssh \
      --enable true --log-config destination=cloud-storage,bucket=my-log-bucket
    
  2. 分析日志:

    # Azure 日志查询(PowerShell)
    Get-AzNetworkSecurityGroupLogEntry -ResourceGroupName my-rg -Name my-nsg -StartTime "2023-10-01"
    

五、常见问题排查

  1. 规则冲突:
    • 确保动态规则的 priority 优先级高于其他规则。
  2. IP 变化未触发更新:
    • 检查定时任务或触发器的执行频率。
  3. 权限问题:
    • 确认 CLI 或 API 凭证具有 Microsoft.Network/securityGroups/write 权限。

六、工具推荐

• IP Lookup:curl ifconfig.me(快速获取公网 IP)
• Azure CLI:az network nsg(管理 NSG 规则)
• GCP CLI:gcloud compute firewall-rules(管理 GCP 防火墙)
• 自动化平台:Ansible、Terraform(声明式配置安全组)


通过上述方案,你可以实现安全、高效的动态 IP 白名单管理,适用于远程办公、自动化部署等灵活场景!🌐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独隅

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值