限制每个用户的传出 SSH

限制每个用户的传出 SSH

我有一台由我管理的服务器。它可以通过端口 22 访问许多机器。我想将它用作某些用户的堡垒主机。问题是我希望服务器上的每个用户都有自己的 IP/地址白名单,可以通过 SSH 连接到这些 IP/地址。

例如,假设我的机器 M 可以访问服务器 S1、S2、S3、... S8。机器 M 上有 3 个用户,A、B 和 C。我希望 A 只能通过 SSH 连接到 S2,B 只能通过 SSH 连接到 S1、S5 和 S6,C 能够通过 SSH 连接到 S2、S3、S4、S5 和 S8。

我如何实现这个目标?

答案1

在目标服务器上,您可以通过 /etc/ssh/sshd_config 文件中的用户名限制 SSH 访问,但我不认为这是您在此处寻找的内容。

在源机器上,您可以尝试使用 iptables“所有者”模块来执行此操作。这可能需要一些维护工作,但可以解决问题。它会检查用户的 UID,然后允许(或拒绝)连接。

假设您的用户的 UID 为 1、2 和 3。用户 A 可以通过 SSH 连接到 1.1.1.1,用户 B 可以通过 SSH 连接到 2.2.2.2,用户 C 可以通过 SSH 连接到 3.3.3.3

iptables -A OUTPUT -m owner --owner-uid 1 -d 1.1.1.1/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 1 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 2 -p tcp --dport 22 -j DROP
iptables -A OUTPUT -m owner --owner-uid 3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m owner --owner-uid 3 -p tcp --dport 22 -j DROP

为了使其更“易于管理”,您可以为每个用户创建一个“链”,并在其中定义他允许的所有访问。

创建链:

iptables -N USER1
iptables -N USER2
iptables -N USER2

将用户的传出流量转发到链:

iptables -A output -m owner --owner-uid 1 -J USER1
iptables -A output -m owner --owner-uid 2 -J USER2
iptables -A output -m owner --owner-uid 3 -J USER3

为每个用户添加其链的规则:

iptables -A USER1 -d 1.1.1.1/32 -p tcp --dport 22 -m comment --comment "allow ssh to 1.1.1.1" -j ACCEPT
iptables -A USER1 -p tcp --dport 22 -j DROP
iptables -A USER1 -j ACCEPT
iptables -A USER2 -d 2.2.2.2/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER2 -p tcp --dport 22 -j DROP
iptables -A USER3 -d 3.3.3.3/32 -p tcp --dport 22 -j ACCEPT
iptables -A USER3 -p tcp --dport 22 -j DROP

检查用户的访问权限(显示链)

iptables -L USER1

所有者模块也适用于 gid:

iptables -A USER3 -m owner --owner-gid 3 -p tcp --dport 22 -j DROP

答案2

您应该能够使用 iptable 过滤器(所有者匹配)来限制每个用户的网络访问。请参阅下面的“操作方法”。

http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html

相关内容