![OpenBSD 的 pf:禁用给定用户的网络访问(ssh 除外)。](https://linux22.com/image/61771/OpenBSD%20%E7%9A%84%20pf%EF%BC%9A%E7%A6%81%E7%94%A8%E7%BB%99%E5%AE%9A%E7%94%A8%E6%88%B7%E7%9A%84%E7%BD%91%E7%BB%9C%E8%AE%BF%E9%97%AE%EF%BC%88ssh%20%E9%99%A4%E5%A4%96%EF%BC%89%E3%80%82.png)
如果我们使用 OpenBSD 的默认防火墙,我们如何修改它以禁用普通用户的所有网络访问,除了一件事:我们想要从随机主机 ssh 到用户!
例如,如果用户想要“wget google.com”,则它不应该具有防火墙权限。如果我们想通过 scp 从随机计算机向用户复制某些内容,防火墙需要允许它。如果用户想要 ssh 到其他一些主机,则它不应该具有访问权限。
答案1
我认为您正在寻找 auhpf。
http://www.openbsd.org/faq/pf/authpf.html
Authpf(8) 是用于验证网关的用户 shell。身份验证网关就像常规网络网关(也称为路由器),只不过用户必须首先向网关验证自己的身份,然后网关才会允许流量通过。当用户的 shell 设置为 /usr/sbin/authpf(即,不是将用户的 shell 设置为 ksh(1)、csh(1) 等)并且用户使用 SSH 登录时,authpf 将对活动 pf(4) 规则集,以便用户的流量通过过滤器和/或使用网络地址转换或重定向进行转换。一旦用户注销或会话断开连接,authpf 将删除为用户加载的任何规则,并终止用户打开的任何有状态连接。因此,只有当用户保持 SSH 会话打开时,用户才能通过网关传递流量。
# macros
wifi_if = "wi0"
ext_if = "fxp0"
dns_servers = "{ 10.0.1.56, 10.0.2.56 }"
table <authpf_users> persist
# filter
block drop all
pass out quick on $ext_if inet proto { tcp, udp, icmp } \
from { $wifi_if:network, $ext_if }
pass in quick on $wifi_if inet proto tcp \
from $wifi_if:network to $wifi_if port ssh
pass in quick on $wifi_if inet proto { tcp, udp } \
from <authpf_users> to $dns_servers port domain
anchor "authpf/*" in on $wifi_if
答案2
答案3
防火墙通常查看网络数据包。他们可以看到数据包来自哪里,但除非通过数据包内省以某种方式揭示,否则他们不知道谁负责这些数据包。
您可以从为每个人锁定所有内容开始,然后根据需要添加经过身份验证的访问。例如,通过所有外部 Web 请求都必须通过的经过身份验证的代理。