我有一台开发服务器,我经常使用 rsync 将代码同步到该服务器。为了进一步保护开发服务器,我现在激活了 UFW,它似乎运行良好。问题是它运行得有点太好了,因为我现在在尝试同步时经常会收到错误,如下所示:
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /SourceCache/rsync/rsync-45/rsync/io.c(453) [sender=2.6.9]
根据这篇博文问题是 UFW 对 SSH 连接设置了“速率限制”;如果你在 30 秒内尝试 SSH 连接超过 X 次,它就会将你暂时拒之门外。这当然可以阻止不受欢迎的人,但我想
- 针对特定 IP 地址禁用此功能,
- 或者对成功的连接尝试禁用它(即仅让这个速率限制对不成功的尝试起作用)。
我上面链接的博客文章并没有提出 UFW 的解决方案,而只是用 ip-tables 替换了 UFW。由于我需要花时间完成一些编程,所以我真的不想花时间学习 ip-tables。所以我想知道这里是否有人知道如何使用 UFW 来实现这一点?欢迎提供所有提示!
答案1
虽然不是 UFW 解决方案,但您可以使用 ssh 多路复用减少要建立的 SSH 连接数。SSH 协议允许多个独立流通过同一个 TCP 连接运行,而 OpenSSH 程序ssh
允许一个进程使用多路复用来搭载另一个进程打开的连接。
这样做的通常优点是连接只需验证一次,因此后续流可以跳过该步骤。对于您而言,UFW 应该将其视为单个已连接的流,而不是可能需要进行速率限制的多个连接。
这一页对如何设置多路复用以及如何管理连接进行了很好的描述。基本上,你会在文件中添加类似这样的内容~/.ssh/config
:
Host name-of-rsync-server
ControlPath ~/.ssh/controlmasters/%r@%h:%p
ControlMaster auto
ControlPersist 10m
当您运行 的副本ssh
(或者,在您的情况下,运行为您rsync
运行的副本)时ssh
,它将查找ControlPath
可用于与现有ssh
实例(“控制主机”)通信的套接字,该实例已打开与 rsync 服务器的连接。如果成功,则两个进程将协同工作,通过现有 TCP 连接运行新的 ssh 会话。否则,ssh 实例将打开与 rsync 服务器的新 TCP 连接,并且它将成为其他 ssh 实例的控制主机。
答案2
这个答案可能会有帮助-UFW 防火墙可以设置为“限制”您的 SSH 连接。
由于 rsync 通过 SSH 隧道连接,您可能会达到此限制。
选项是通过在 ssh 速率限制之前插入规则来允许您的服务器 IP 不受限制(最佳);或者完全删除 ssh 限制(这不是最佳安全实践,因此请确保您想这样做!)。