我正在尝试在 Ubuntu 中设置一个简单的路由器。有两个网络接口:eth0 - 连接到互联网的有线网络接口,wlan0 - 配置为 IP 地址为 10.0.9.1 的 AP。
IPv4 转发已启用。
我使用 dnsmasq 进行以下配置:
interface=wlan0
dhcp-range=10.0.9.2,10.0.9.30,255.255.255.0,12h
dhcp-host=40:a3:6b:c1:9a:54,10.0.9.100
设备连接到我的 AP 并正确获取分配的 IP 地址。
现在配置 NAT。我的 nftables 配置如下所示:
table ip nat {
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
iif "eth0" tcp dport 8010 dnat to 10.0.9.100:80
iif "eth0" tcp dport 9001 dnat to 10.0.9.100:9001
}
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oif "eth0" masquerade
}
}
此设置按预期工作:
- 连接到 wlan0 的设备可以通过 eth0 访问互联网
- 连接到 wlan0 的设备可以连接到路由器上 10.0.9.1 的服务器
- 可以通过 eth0 在端口 8010 和 9001 上访问 IP 10.0.9.1.100 的设备
但是,我想设置一个简单的防火墙来保护设备免受未经授权的访问。这是我添加到 nftables 配置中的内容:
table inet filter {
chain input {
type filter hook input priority filter; policy drop;
ct state vmap { established : accept, related : accept, invalid : drop }
iifname lo accept
icmp type echo-request limit rate 5/second accept
ip protocol icmp drop
iif "eth0" tcp dport { ssh, 8080 } accept
}
chain forward {
type filter hook forward priority 0; policy drop;
ct status dnat accept
iif "wlan0" oif "wlan0" accept
iif "wlan0" oif "eth0" accept
iif "eth0" oif "wlan0" ct state established,related accept
}
chain output {
type filter hook output priority filter; policy accept;
}
}
此设置未按预期工作:
- 连接到 wlan0 的设备不能通过 eth0 访问互联网
- 连接到 wlan0 的设备不能连接到路由器上的服务器 10.0.9.1
- 可以通过 eth0 在端口 8010 和 9001 上访问 IP 10.0.9.1.100 的设备
如果我禁用 nfconfig 中的所有保护,它会按预期工作:
table inet filter {
chain input {
type filter hook input priority filter; policy accept;
}
chain forward {
type filter hook forward priority 0; policy accept;
}
chain output {
type filter hook output priority filter; policy accept;
}
}
当我编辑该chain input
部分时,事情就停止了。
我对 nftables 完全陌生,我花了一整天的时间试图弄清楚如何让它工作。有任何想法吗?
谢谢!
答案1
这向前链确实允许从无线 LAN 转发到互联网。整个规则集不允许的是查询域名解析路由器上的内置 DNS 服务器无线局域网0。默认情况下,此 DNS 服务器是为 DHCP 部分中的客户端配置的域名解析。
此类 DNS 流不会被转发,因此不会使用向前钩。这是接收到的传入流输入钩。如果没有 DNS,无线节点虽然可以连接到 Internet,但无法解析连接到何处,因此总体效果将相同:没有 Internet。
允许路由器的服务在查询时可用无线局域网0,从而包括 DNS 查询:
nft add rule inet filter input iif wlan0 accept
除非放置在规则之前,否则这将获得 ping 的速率限制ip protocol icmp
。无论如何,这条ip protocol icmp drop
规则是不需要的,并且可以删除,因为默认策略已经是降低,除非打算过滤从无线节点接收到的流量。
如果使用 (a) 更严格的规则仅允许少数服务,则至少 53/TCP+UDP 用于 DNS,端口 67/UDP 用于 DHCP,以防万一域名解析不完全依赖于 DHCP 的原始套接字应该被允许无线局域网0。