我需要限制对许多我无法控制的networking进行访问,并计划使用跳箱作为进入所有环境的单点。 用户将使用他们的ldap凭证以及他们的ssh密钥login,然后从这里跳转到允许他们访问的一组主机。
核心问题是允许用户访问的限制。 由于这是我们团队中许多成员可以访问的共享资源,因此如何限制此访问权限。 我以为可能有半径方式,但我没有看到。 我想尽可能简化,即
ssh -t user@jumpbox ssh user@remote_host
凡remote_host是一个系统,他们被允许访问。
我的想法如下:
(大部分资源密集型)每个用户的跳箱,并通过木偶集中pipe理路线,以允许他们访问什么。 这可能是最简单的pipe理,因为它将是每个用户的虚拟机。
(对用户来说是最痛苦的)设置一个脚本,这是用户可以运行的唯一select。 这将是一个痛苦,因为用户将不得不从一个可能长的列表中select。 这也可以很容易解决。
其他人做了什么来解决这个问题?
我使用组来做这个,在OUTPUT链中使用iptables -m owner --gid-owner规则。
离开跳箱的stream量按照不同的组来控制:
# timesheet people go to the timesheet rule iptables -A OUTPUT -m owner --gid-owner 401 -j TIMESHEET # debt mgmt people go to the debt rule iptables -A OUTPUT -m owner --gid-owner 402 -j DEBT # end to end testing people iptables -A OUTPUT -m owner --gid-owner 403 -j E2E
然后,每个定制链将实现(有时是相当复杂的)关于匹配该链的系统人员可以访问的一组规则。 一个简单的可能是:
# people in the primary group timesheet can go to the timesheet app http://192.168.12.38:17001/ iptables -A TIMESHEET -p tcp --dport 17001 -d 192.168.12.38 -j ACCEPT # but can't do anything else, with logging iptables -A TIMESHEET -j LOG --log-prefix "TIMESHEET REJECT: " iptables -A TIMESHEET -j REJECT
一旦build立起来,允许访问只是将某人放在401组(对于时间表),402(对于债务pipe理),等等。 如果我想允许高度复杂的话,我可以使用--uid-owner并为每个用户设置一个不同的链,但是通过组织,我可以让自己的生活变得简单一些。
如果我不得不使用SSH作为我的访问控制层,我会要求使用密钥来访问堡垒主机,然后在每个密钥上加上一个force_command来为密钥后面的用户调用一个带有标识符的脚本。 然后,脚本将validation所识别用户的访问控制权限,并启动一个netcat会话到适当的机器。 用户将本地使用ProxyCommand通过堡垒主机代理到实际的目标机器,因此用户可以通过netcat隧道通过SSH连接到感兴趣的机器,最好是再次通过SSH密钥。
您可以在目标上configurationsshd_config,以允许来自特定主机的特定用户使用以下指令。
AllowUsers username@foot
因此,在一台服务器上,您可以限制从跳转服务器访问此用户。 (假设你的跳转服务器地址是192.168.15.15。
AllowUsers [email protected]
并限制从该跳转服务器访问另一个用户:
AllowUsers [email protected]
你也可以使用这个指令的模式匹配(每个人sshd_config)。 请注意,根据员工的用户数量,您可能需要使用configuration文件进行重要的pipe理。 这也会影响您用来login服务器的任何脚本,因为login将被限制在AllowUsers中添加之后的内容。