原因:
如标题,iptables-persistent 和 ufw 只能有一个。 usw 主机在公网上直连,安全最重要。保留 ufw后, openxxv的路由就有问题。
如果使用 iptables 设置规则转发,因为没有 iptables-persistent 来保存规则 ,重起后配置丢失,OpenXXN 连接的主机,不能访问外网。
需要再次添加 ip 转发规则:
sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
环境:
Mermaid 代码见:附1
US 主机是直接到公网,主机要有防火墙来屏蔽有危险访问。
US主机(主要)网口信息如下:
- 主网口:eth0 公网 IP
- OpenxxN:tun0 网段 10.9.0.0/24
- tailscale:tailscale0 网段 100.0.0.90/32
- docker:docker0 网段 172.17.0.1/16
在公网服务器上正确配置 UFW 防火墙的步骤
1. 安装 ufw
apt update
apt install ufw
2. 开放必要端口
ufw allow ssh
ufw default deny incoming # 默认拒绝所有入站连接
ufw default allow outgoing # 默认允许所有出站连接
ufw allow https # 允许连接 443端口
ufw allow 1194/udp # 允许连接 OpenXXN
3. 配置转发规则
1) 修改默认转发策略为允许
sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/g' /etc/default/ufw
2) 编辑 /etc/ufw/before.rules 配置 NAT 规则
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
COMMIT
一定要在开头添加, 这是的 IP 是 OpenXXN 的网段
4. 开启 IP 转发
echo 1 > /proc/sys/net/ipv4/ip_forward
5. 启用防火墙 ufw
ufw enable
6. 测试
# 查看防火墙状态
ufw status verbose
# 查看 NAT 规则
iptables -t nat -L
# 检查转发策略
grep FORWARD /etc/default/ufw
总结:
UFW (Uncomplicated Firewall) 是一款在 Linux 系统上广泛使用的简单易用的防火墙工具。防火墙作为保护服务器的第一道防线,能够有效地阻止未经授权的访问和潜在的网络攻击。正确配置 UFW 防火墙,以提高服务器的安全性。请记住,根据您的实际需求,开放必要的端口和服务,并定期检查防火墙配置,以确保服务器始终处于安全状态。
注意事项
- 在配置防火墙时,请务必谨慎操作,避免因配置错误导致无法登录服务器。
- 建议定期更新 UFW 和其他安全软件,以获取最新的安全补丁。
- 除了 UFW,如 Fail2ban,来进一步提高服务器的安全性。
附件:
附1:
<!DOCTYPE html>
<html>
<head>
<title>Network Topology</title>
<!-- 从 CDN 加载 Mermaid -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.6.1/mermaid.min.js"></script>
</head>
<body>
<div class="mermaid">
graph LR
Client[OpenXXN 客户端]
XXN[OpenXXN 服务器\n10.9.0.0/24]
Docker[Docker 网络\n172.17.0.0/16]
Internet[互联网\n8.8.8.9/24]
WG[Tailscale 私有网络\n100.0.0.90/10]
Client -->|XXN 隧道| XXN
XXN -->|NAT| Internet
Tailscale网络客户端 -->|WG 隧道| Internet
Docker -->|NAT| Internet
Internet -->|WG 隧道| WG
subgraph US主机
XXN
Docker
Tailscale网络客户端
end
style US主机 fill:#f9f,stroke:#333,stroke-width:2px
</div>
<script>
mermaid.initialize({
startOnLoad: true,
theme: 'default',
themeCSS: '.node rect { fill: #fff; }',
flowchart: {
curve: 'basis'
}
});
</script>
</body>
</html>