保留运行 OpenVPN 的 SSH 防火墙规则

保留运行 OpenVPN 的 SSH 防火墙规则

我有一台可以通过 SSH 访问的服务器(Ubuntu 20.04)通常情况下。我在此服务器上设置了 OpenVPN,并且运行正常……

除了当我启动 OpenVPN 时,我失去了通过 SSH 进入服务器的能力。

我发现有关设置防火墙规则的答案在一定程度上解决了该问题:

https://serverfault.com/a/918441/602437

我将这些规则放入脚本中然后执行:sudo ./set-ssh-rules.sh && sudo service openvpn start并且它按预期工作。

问题是,这是一个手动的步骤,因为在我重新启动后规则似乎就消失了,我必须重新完成整个过程。

我如何才能让这些规则持续存在?或者在更现实的情况下,OpenVPN 服务已“启用”,在启动时设置规则,但初始化系统(systemd?)启动 OpenVPN 服务。

我确信这个问题的答案散布在互联网上,但我无法将它们拼凑起来 - 抱歉。

提前谢谢了。

答案1

我发现最简单的方法是创建如下服务:

# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html

[Unit]
Description=Setup Firewall on each reboot
Before=network.target

[Service]
Type=oneshot
WorkingDirectory=~
RemainAfterExit=yes
ExecStart=/usr/sbin/set-ssh-rules.sh
User=root
Group=root

[Install]
WantedBy=multi-user.target

# vim: syntax=dosini

您的脚本必须放在可以使用完整路径引用的位置,如上所示。

要安装该文件,您可以将其复制到这里:

/lib/systemd/system/my-firewall.service

当您手动添加新文件时,您需要使用以下命令唤醒系统:

systemctl daemon-reload

如果您编辑 .service 文件,systemd 命令还会告诉您运行该命令,以便它可以在尝试运行其他命令之前根据需要进行自我更新。当您安装/卸载软件包时,此操作会自动完成,但当您手动执行此操作时则不会。

然后您可以启用它并且它将在每次重启时启动。

systemctl enable my-firewall

要查看它是否有效,请检查状态:

systemctl status my-firewall

您还可以手动启动/停止以验证脚本是否按预期运行:

systemctl start my-firewall
systemctl stop my-firewall

由于我没有脚本来停止防火墙,所以什么也不会发生stop,但如果已经在运行,则start不会执行任何操作......所以您需要stop执行start。 (您也可以使用restart

相关内容