网络安全
防火墙、NAT、VPN、零信任。
网络安全:ACL、VPN 与零信任
这一课你将能做到
- 写出正确的 ACL:放行该放的、默认拒绝其余、并验证生效
- 说清三种 VPN(IPSec / WireGuard / SSL)的层次与取舍
- 用零信任的「永不信任、始终验证」重审自己的服务暴露面
为什么要学
网络安全的 80% 是「少开几个口」。数据库挂公网、Redis 未授权访问、K8s API 裸奔,每年都在批量上新闻。本课给你三件武器:ACL(边界)、VPN(通道)、零信任(方法论),并落在 Nginx + K8s + 云的真实场景里;学完请立刻回到自己的服务,跑一遍步骤 4 的暴露面审计。
先建立图像
传统边界模型(城堡 + 护城河):
Internet ══[防火墙]══ 内网(进来后基本畅通)→ 内部一失守 = 全域沦陷
零信任模型(每个门都验票):
用户 ──认证──▶ 应用A │ 每次访问都验:身份 + 设备 + 上下文
用户 ──认证──▶ 应用B │ 服务之间同样互相验(mTLS)
数据库只对「明确授权的应用账号」开放,不对网段开放
跟着做
步骤 1:写一条白名单式 ACL(iptables 版)
# 只允许办公网段访问 SSH,其余拒绝
sudo iptables -A INPUT -p tcp --dport 22 -s 203.0.113.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables -L INPUT -n --line-numbers # 顺序即优先级
云上等价:安全组里「来源 203.0.113.0/24,端口 22,允许」+ 默认拒绝。
步骤 2:Nginx 层再加一道(应用层 ACL)
location /admin/ {
allow 203.0.113.0/24;
deny all;
proxy_pass http://backend;
}
sudo nginx -t && sudo systemctl reload nginx
curl -s -o /dev/null -w '%{http_code}\n' https://你的域名/admin/ # 异地应返回 403
步骤 3:搭一条 WireGuard 隧道(现代 VPN 首选)
sudo apt install wireguard
wg genkey | tee privatekey | wg pubkey > publickey
/etc/wireguard/wg0.conf:
[Interface]
PrivateKey = <服务端私钥>
ListenPort = 51820
Address = 10.66.0.1/24
[Peer]
PublicKey = <客户端公钥>
AllowedIPs = 10.66.0.2/32
sudo systemctl enable --now wg-quick@wg0
sudo wg show # 看 latest handshake 与 transfer 是否增长
内核级实现、代码量小、性能高;对比:IPSec 重但适合网关对网关,SSL VPN 免客户端适合浏览器直达应用。
步骤 4:审计自己的暴露面
ss -tlnp | awk '$4 ~ /0.0.0.0|::/ {print $4, $6}' # 全网监听的口
nmap -Pn -p 22,80,443,3306,6379,8080 你的公网IP # 从外部看
预期只看到 80/443;3306 / 6379 / 22 出现在结果里 = 立即处理。
讲清楚要点
- ACL 顺序即逻辑:从上到下首个命中生效;「先 deny all 再 accept」永远不生效——白名单是 accept 在前、默认拒绝兜底。
- 分层设防:网络层(安全组 / ACL)管端口,应用层(Nginx / WAF)管内容,主机层(最小权限 + 补丁)管进程;任何单层都可能被绕过。