在 Ubuntu 24 服务器上,只允许 Cloudflare 的 IP 地址访问 80 和 443 端口可以通过配置防火墙实现,以下是具体步骤:
### 步骤 1: 更新服务器
确保服务器是最新的,运行以下命令:
sudo apt update && sudo apt upgrade -y
### 步骤 2: 获取 Cloudflare 的 IP 地址列表
Cloudflare 的官方 IP 地址范围可以从以下页面获取:[Cloudflare IP Ranges](https://www.cloudflare.com/ips/)。你需要将这些 IP 地址用于防火墙配置。
运行以下命令以下载 Cloudflare 的 IP 列表:
curl https://www.cloudflare.com/ips-v4 -o cloudflare-ips-v4.txt
curl https://www.cloudflare.com/ips-v6 -o cloudflare-ips-v6.txt
### 步骤 3: 配置防火墙
#### 使用 UFW
如果你使用 UFW(Uncomplicated Firewall),可以按照以下步骤:
1. 允许 Cloudflare 的 IP 范围访问端口 80 和 443:
while read ip; do sudo ufw allow from $ip to any port 80; done < cloudflare-ips-v4.txt
while read ip; do sudo ufw allow from $ip to any port 443; done < cloudflare-ips-v4.txt
while read ip; do sudo ufw allow from $ip to any port 80; done < cloudflare-ips-v6.txt
while read ip; do sudo ufw allow from $ip to any port 443; done < cloudflare-ips-v6.txt
2. 拒绝其他来源访问 80 和 443 端口:
sudo ufw deny 80
sudo ufw deny 443
3. 启用或重新加载 UFW:
sudo ufw enable
sudo ufw reload
#### 使用 iptables
如果你使用的是 iptables,可以按照以下步骤:
1. 清除已有规则:
sudo iptables -F
sudo iptables -X
2. 添加 Cloudflare 的 IP 范围规则:
while read ip; do sudo iptables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT; done < cloudflare-ips-v4.txt
while read ip; do sudo iptables -A INPUT -p tcp -s $ip --dport 443 -j ACCEPT; done < cloudflare-ips-v4.txt
while read ip; do sudo ip6tables -A INPUT -p tcp -s $ip --dport 80 -j ACCEPT; done < cloudflare-ips-v6.txt
while read ip; do sudo ip6tables -A INPUT -p tcp -s $ip --dport 443 -j ACCEPT; done < cloudflare-ips-v6.txt
3. 拒绝其他来源访问 80 和 443 端口:
sudo iptables -A INPUT -p tcp --dport 80 -j DROP
sudo iptables -A INPUT -p tcp --dport 443 -j DROP
4. 保存规则:
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
sudo netfilter-persistent reload
### 步骤 4: 验证配置
可以通过以下命令验证防火墙规则是否生效:
- 对于 UFW:
sudo ufw status
- 对于 iptables:
sudo iptables -L -n -v
### 注意事项
1. Cloudflare 的 IP 地址可能会变动,需要定期更新规则。你可以编写一个脚本定期获取最新的 IP 列表并更新防火墙。
2. 确保其他必要的端口(如 SSH 的 22 端口)未被阻止,否则可能会锁定自己。