分享一个简单实用的shell脚本

我的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防火墙的可以自行修改适配。

Avatar photo
帅秃顶

告别的年代,分开的理由,终不须诉说出口

文章: 23

2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注