对通过 SSH 成功连接的任何人自动打开防火墙

hou*_*oft 6 linux firewall ufw arch-linux iptables

我有一台运行一些服务的服务器。但是,出于安全原因,我配置了服务器,以便从外部访问除 SSH 之外的任何内容。

不过,我想做的是让服务器允许任何成功通过 SSH 登录的人访问其所有服务(一旦该人断开连接,再次关闭所有端口,除了 SSH 端口应该保持打开状态)。

有没有办法做到这一点?

我在服务器上使用 Arch Linux 并ufw管理防火墙。

hou*_*oft 0

我为此写了一个解决方案。它并不完美,欢迎改进。特别是,我认为~/.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."
Run Code Online (Sandbox Code Playgroud)

~/.bash_logout

ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
echo "=> Closing the firewall for $ip..."
sudo ufw delete allow from $ip
echo "=> Bye."
Run Code Online (Sandbox Code Playgroud)

不过,这只会在您正确终止会话的情况下重新关闭端口。如果有人知道如何在连接退出/死亡/任何情况下关闭它,请使用您的解决方案编辑此答案。