如何使用 nftables 添加 CFIP 规则,只允许 Cloudflare 访问
nftables 是一个灵活且强大的防火墙工具,它允许用户使用高级的规则集来控制网络流量。本文将介绍如何通过 nftables 添加 CFIP 规则,只允许 Cloudflare 访问您的服务器。首先,您需要拉取 Cloudflare 的 IP 列表并将其写入到配置文件中。如果 /etc/nftables.d 目录不存在,您需要手动创建它。以下是一个简单的脚本,用于下载 Cloudflare 的 IPv4 和 IPv6 地址,并创建相应的 nftables 配置文件。
#!/usr/bin/env sh
set -eu
DIR="/etc/nftables.d"
OUT4="${DIR}/cf-set-v4.nft"
OUT6="${DIR}/cf-set-v6.nft"
mkdir -p "$DIR"
tmp4="$(mktemp)"
tmp6="$(mktemp)"
# v4 set block
{
echo "set cf_ipv4 {"
echo " type ipv4_addr;"
echo " flags interval;"
echo " elements = {"
curl -fsSL https://www.cloudflare.com/ips-v4 \
| awk 'NF{print " " $0 ","}
echo " }"
echo "}">
} > "$tmp4"
# v6 set block
{
echo "set cf_ipv6 {"
echo " type ipv6_addr;"
echo " flags interval;"
echo " elements = {"
curl -fsSL https://www.cloudflare.com/ips-v6 \
| awk 'NF{print " " $0 ","}
echo " }"
echo "}">
} > "$tmp6"
install -m 0644 "$tmp4" "$OUT4"
install -m 0644 "$tmp6" "$OUT6"
rm -f "$tmp4" "$tmp6"生成的配置文件将类似于以下内容:
set cf_ipv4 {
type ipv4_addr;
flags interval;
elements = {
173.245.48.0/20,
103.21.244.0/22,
103.22.200.0/22,
103.31.4.0/22,
141.101.64.0/18,
108.162.192.0/18,
190.93.240.0/20,
188.114.96.0/20,
197.234.240.0/22,
198.41.128.0/17,
162.158.0.0/15,
104.16.0.0/13,
104.24.0.0/14,
172.64.0.0/13,
131.0.72.0/22,
}
}接下来,您需要修改 /etc/nftables.conf 文件,添加以下内容:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
include "/${DIR}/cf-set-v4.nft"
include "/${DIR}/cf-set-v6.nft"
chain input {
type filter hook input priority filter;
iif lo accept;
ct state established,related accept;
# SSH
tcp dport 22 accept;
# 这里是关键配置,以80为例子,只允许cf的ip访问,其他的drop
tcp dport 80 ip saddr @cf_ipv4 accept;
tcp dport 80 ip6 saddr @cf_ipv6 accept;
tcp dport 80 drop;
}
chain forward {
type filter hook forward priority filter;
}
chain output {
type filter hook output priority filter;
}
}要使配置生效,请运行以下命令:
nft -f /etc/nftables.conf您可以通过以下命令检查规则集合是否正确:
nft list set inet filter cf_ipv6
nft list set inet filter cf_ipv4最后,检查 nftables 是否启动:
systemctl status nftables
systemctl enable nftables
systemctl restart nftables通过以上步骤,您可以成功地设置 nftables 以只允许 Cloudflare 访问您的服务器。这有助于提高服务器的安全性,并确保只有 Cloudflare 的流量能够通过。
评论已关闭