1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
#!/usr/sbin/nft -f
# 清空所有规则
flush ruleset
table inet filter {
# ============================================================
# Cloudflare CDN IP 集合 (Sets)
# ============================================================
set cloudflare_v4 {
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
}
}
set cloudflare_v6 {
type ipv6_addr; flags interval;
elements = {
2400:cb00::/32, 2606:4700::/32, 2803:f800::/32, 2405:b500::/32,
2405:8100::/32, 2a06:98c0::/29, 2c0f:f248::/32
}
}
# ============================================================
# INPUT 链 (入站)
# ============================================================
chain input {
type filter hook input priority filter; policy drop;
# 放行回环接口和已建立的连接
iif "lo" accept
ct state { established, related } accept
ct state invalid drop
# 合并 Alpine 默认的关键 ICMPv4 规则,防止 PMTU 黑洞
ip protocol icmp icmp type { echo-reply, destination-unreachable, echo-request, time-exceeded, parameter-problem } accept
# 合并 Alpine 默认的关键 ICMPv6 规则
icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-request, echo-reply } accept
# 允许 IPv6 SLAAC 和邻居发现
icmpv6 type { nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } ip6 hoplimit 255 accept
# 允许 SSH 服务
tcp dport 22122 accept
# 仅限 Cloudflare IP 段访问 80/443
ip saddr @cloudflare_v4 tcp dport { 80, 443 } accept
ip6 saddr @cloudflare_v6 tcp dport { 80, 443 } accept
}
# ============================================================
# FORWARD 链 (转发)
# ============================================================
chain forward {
type filter hook forward priority filter; policy drop;
ct state { established, related } accept
ct state invalid drop
# qBitTorrent Docker 端口放行
# tcp dport 10880 accept
# udp dport 10880 accept
# 允许 Docker 容器出站及互通
iifname "docker0" accept
iifname "br-*" accept
iifname "docker0" oifname "docker0" accept
iifname "br-*" oifname "br-*" accept
}
# ============================================================
# OUTPUT 链 (出站)
# ============================================================
chain output {
type filter hook output priority filter; policy accept;
}
}
# 引入外部依赖配置
include "/var/lib/nftables/*.nft"
include "/etc/nftables.d/*.nft"
|