阻止用户networking访问,除了回到ssh客户端的地址

在Linux服务器上,如何设置权限,以便某个用户组可以通过sshlogin,但是除非连接返回到ssh客户端地址,否则所有进程的networking连接都将被阻止。 例如,我想允许组中的一个用户ssh并启动一个HTTP服务器(在一个高端口上),然后从运行ssh客户端的计算机连接到它,但是互联网上的任何其他客户端都必须无法访问HTTP服务器。

我知道我可以用iptables完全阻止用户的networking访问,但是如何允许stream量来自或来自$SSH_CLIENT的值?

有一件事你可以做的是让他们运行一个suid脚本,在login时修改iptables。 他们不需要传递任何参数,只需调用它。 而.bash_login可以自动调用它。 它可以运行lsof来获取与其父母的UID相关联的ssh连接的IP,获得连接的IP,然后将该IP列入白名单

 iptables -w -A users_input -p tcp -s $ip -m owner --owner-uid $owner -j ACCEPT iptables -w -A users_output -p tcp -d $ip -m owner --owner-uid $owner -j ACCEPT 

如果这些链条放置在filterinput和输出链的适当位置。 当然,也可以使用–owner-uid去除任何先前的规则。 如果你喜欢,你可以只允许某些端口。

Perl与污点模式应该罚款这样的脚本。

这将允许networking在ssh连接断开后继续存在。 如果这是一个问题,您可以使用cronjob或守护进程来解决这个问题,该守护进程会定期检查连接的ssh连接,然后删除与其无关的任何规则。

我意识到在这个答案中有很多“你可以做”,但大部分是咕噜咕噜的工作。 只要获得-m所有者的东西。