我有一台运行一些服务的服务器。但是,出于安全原因,我将服务器配置为除了 SSH 之外,其他任何服务都无法从外部访问。
不过,我想要做的是让服务器允许任何通过 SSH 成功登录的人访问其所有服务(并且一旦该人断开连接,再次关闭所有端口,但 SSH 端口应保持打开状态)。
有没有办法做到这一点?
我在服务器上使用 Arch Linux 来ufw
管理防火墙。
答案1
您可以在中输入命令~/.bashrc
,其中的任何内容都会在用户每次登录时执行。
为了使您的命令仅在通过 ssh 登录时运行(而不是在物理登录时运行),您可以测试SSH_CONNECTION
环境变量是否存在。
答案2
我为此写了一个解决方案。它并不完美,欢迎改进。特别是,我认为~/.bash_logout
如果连接中断,则不会调用该解决方案,但我也希望防火墙在这些情况下自行关闭。
无论如何,首先,配置文件,sudoers
以便您的用户ufw
无需输入密码即可运行二进制文件。
然后,在~/.bashrc
:
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
echo "=> Opening the firewall for $ip..."
sudo ufw allow from $ip
echo "=> Done."
在~/.bash_logout
:
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
echo "=> Closing the firewall for $ip..."
sudo ufw delete allow from $ip
echo "=> Bye."
不过,这只会在您正确终止会话时重新关闭端口。如果有人知道如何在连接退出/中断/发生其他情况时关闭它,请使用您的解决方案编辑此答案。