Shell脚本实现自动添加CDN域名IP到防火墙白名单

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

shell自动添加cdn域名对应的IP到防火墙白名单,已添加过的IP跳过不添加

回答:

要实现自动添加CDN域名对应的IP到防火墙白名单,并跳过已添加过的IP,可以编写一个Shell脚本来完成这个任务。以下是一个示例脚本:

#!/bin/bash

# 定义CDN域名
CDN_DOMAIN="your.cdn.domain"

# 获取域名对应的IP地址列表
IP_LIST=$(dig +short $CDN_DOMAIN)

# 防火墙命令(以iptables为例)
FIREWALL_CMD="iptables"

# 白名单链(假设你有一个名为WHITELIST的链)
WHITELIST_CHAIN="WHITELIST"

# 获取当前白名单中的IP地址
CURRENT_WHITELIST=$(iptables -L $WHITELIST_CHAIN -n | grep 'ACCEPT' | awk '{print $4}')

# 遍历IP地址列表
for IP in $IP_LIST; do
    # 检查IP是否已经在白名单中
    if echo "$CURRENT_WHITELIST" | grep -q "$IP"; then
        echo "IP $IP 已在白名单中,跳过添加。"
    else
        # 添加IP到白名单
        $FIREWALL_CMD -A $WHITELIST_CHAIN -s $IP -j ACCEPT
        echo "IP $IP 已添加到白名单。"
    fi
done

说明:

  1. CDN_DOMAIN: 替换为你的CDN域名。
  2. dig: 用于获取域名对应的IP地址列表。
  3. iptables: 假设你使用的是iptables防火墙。如果你使用的是其他防火墙(如firewalld),需要相应地调整命令。
  4. WHITELIST_CHAIN: 假设你有一个名为WHITELIST的链,用于存放白名单规则。你可以根据实际情况调整。
  5. CURRENT_WHITELIST: 获取当前白名单中的IP地址列表。
  6. for循环: 遍历IP地址列表,检查每个IP是否已经在白名单中,如果不在则添加��

使用方法:

  1. 将脚本保存为一个文件,例如add_cdn_ip_to_whitelist.sh
  2. 给脚本添加执行权限:
    chmod +x add_cdn_ip_to_whitelist.sh
    
  3. 运行脚本:
    ./add_cdn_ip_to_whitelist.sh
    

注意事项:

  • 确保你有足够的权限来修改防火墙规则(通常需要root权限)。
  • 根据你的实际防火墙配置,可能需要调整脚本中的命令和链名称。
  • 如果你��CDN域名解析出的IP地址较多,可能需要考虑防火墙规则的数量