如何在ufw中临时打开特定IP地址的端口?

use*_*951 4 ufw

我在我的 Web 服务器上使用 ufw(简单防火墙)。现在我已将其设置为允许 SSH 连接到世界,并使用 fail2ban 来防止大量登录尝试。Web 服务器已打开端口 80 和 443。

我想要做的是关闭 SSH 访问,直到我需要它,然后只让它对我当前定期更改的公共 IP 地址可用。我正在考虑通过 HTTPS 验证我的访问权限的 PHP 脚本,然后将请求放入数据库。然后,一个 cron 作业运行一个脚本来读取数据库并运行 ufw 来为我的 IP 地址打开 SSH 端口。30 分钟后,规则将被删除,SSH 将再次无法访问。我还希望允许多个 IP 进行临时访问,并且我最终希望扩展到 SSH 之外的其他端口。

我前面提到的自动化脚本应该运行哪些 ufw 命令来临时添加和删除单个 IP 地址的 SSH 端口访问?

Rad*_*ius 5

在我看来,更好的解决方案是使用端口敲门,基本上你会“敲门”一系列随机端口,然后在服务器上触发一个动作,动作是允许你的 IP 地址通过 SSH 进入。你可以甚至设置一个超时时间,这样一段时间后端口就会关闭。

对于端口敲门,您可以使用knockd。当然,在另一边你也需要一个敲门客户端。敲击配置如下所示:

[options]
   logfile = /var/log/knockd.log

[SSH]
  sequence    = 7000,8000,9000
  seq_timeout = 5
  start_command = ufw allow from %IP% to any port 22
  tcpflags    = syn
  cmd_timeout   = 10
  stop_command  = ufw delete allow from %IP% to any port 22
Run Code Online (Sandbox Code Playgroud)