我的WordPress博客使用的域名托管在Cloudflare上,为了提高VPS的安全性,可以配置VPS上的防火墙仅允许来自Cloudflare的IP访问80/443端口。我使用的是ufw防火墙,具体脚本如下:
#!/bin/bash
echo "开始执行▶️"
# 下载最新 Cloudflare IP 列表
cf_ips_v4=$(curl -s https://www.cloudflare.com/ips-v4)
cf_ips_v6=$(curl -s https://www.cloudflare.com/ips-v6)
# 给新规则添加特殊标记 comment,便于识别
RULE_COMMENT="cf-update-$(date +%s)"
# 先添加新的 Cloudflare IP规则(带标记)
for ip in $cf_ips_v4; do
ufw allow proto tcp from $ip to any port 80 comment $RULE_COMMENT
ufw allow proto tcp from $ip to any port 443 comment $RULE_COMMENT
done
for ip in $cf_ips_v6; do
ufw allow proto tcp from $ip to any port 80 comment $RULE_COMMENT
ufw allow proto tcp from $ip to any port 443 comment $RULE_COMMENT
done
# 等待1-2秒,确保新规则生效
sleep 2
# 删除旧的 Cloudflare 80/443 端口规则(但排除刚刚加的)
EXISTING_RULES=$(ufw status numbered | grep -E '80\/tcp|443\/tcp' | grep -v "$RULE_COMMENT" | awk -F'[][]' '{print $2}' | sort -rn)
for rule in $EXISTING_RULES; do
ufw --force delete $rule
done
# 设置默认拒绝 80/443 的外来访问(如果没有就添加一次)
ufw status | grep -q "DENY.*80" || ufw deny 80/tcp
ufw status | grep -q "DENY.*443" || ufw deny 443/tcp
echo "✅ Cloudflare IP 更新完成(零中断),80/443 只允许 Cloudflare访问。其他端口规则未受影响。"
使用firewalld防火墙的可以自行修改适配。
文章评论