限制每个用户的传出SSH

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

例如,让我们说我的机器M可以访问服务器S1,S2,S3,… S8。 我在机器M上有三个用户A,B和C.我要A只能对S2进行SSH连接,B只能对S1,S5和S6进行SSH连接,而C能够连接到S2 ,S3,S4,S5和S8。

我如何做到这一点?

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

在源机器上,您可以尝试使用iptables“owner”模块来执行此操作。 这可能是一些维护工作,但它会做的伎俩。 它检查用户的UID并允许(或拒绝)连接。

假设用户的UID是1,2和3.用户A可以通过SSH连接到1.1.1.1,用户B连接到2.2.2.2,用户C连接到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 

为了让它更“可pipe理”,你可以为每个用户创build一个“链”,并在那里定义他所允许的所有访问。

创build链:

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

转发来自用户的出站stream量到链中:

 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 

你应该能够通过一个iptablefilter(所有者匹配)来完成这个任务来限制每个用户的networking访问。 请参阅下面的“如何”。

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