通过 SSL 配置 rsync

通过 SSL 配置 rsync

我想配置 rsync 以接受来自我服务器上端口 874 的 SSL/TLS 连接。我按照 rsyncd.conf(5) 手册页中的步骤操作,配置了一个域并为其获取了 SSL 证书。但是,当我尝试使用 rsync-ssl 进行连接时,它会产生此错误:

verify depth is 4

---MOTD MESSAGE HERE---

@ERROR: protocol startup error
rsync error: error starting client-server protocol (code 5) at main.c(1833) [Receiver=3.2.4]

我的 nginx.conf 流部分:

stream {
    server {
        listen 874 ssl;
        listen [::]:874 ssl;
        ssl_certificate /{...}/fullchain.cer;
        ssl_certificate_key /{...}/private.key;
        ssl_session_timeout 1440m;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
        ssl_dhparam /{...}/ssl-dhparams.pem;
        proxy_pass localhost:873;
        proxy_protocol on; # Requires "proxy protocol = true"
        proxy_timeout 1m;
        proxy_connect_timeout 5s;
    }
}

我的 rsyncd.conf:

uid = nobody
gid = nobody
use chroot = no
max connections = 20
syslog facility = local5
pid file = /run/rsyncd.pid
lock file = /run/rsync.lock
log file = /var/log/rsync.log
motd file = /etc/rsyncd.motd

--- Directory sections here---

我做错了什么?

更新:我使用 Arch Linux 作为服务器。客户端运行正常(但服务器端/守护进程却不行)。

感谢您的帮助!

答案1

经过大量挖掘,我最终找到了解决方案本网站。它已经过时了,我需要改变一些东西,所以我将解释如何去做:

首先,我的服务器使用 Arch,因此当您按照这些步骤操作时,可能会出现一些变化。

  1. 安装 rsync、openssl 和 stunnel。

  2. 配置 rsyncd(显然),我不会在这里解释。

  3. 编辑/etc/stunnel/stunnel.conf并取消注释(或创建)以下行:include = /etc/stunnel/conf.d。这不是必需的,但它将简化很多其他事情。

  4. 创建文件夹/etc/stunnel/conf.d并在其中创建文件。我将其命名为rsync-ssl.conf

  5. 编辑该文件并写入以下代码(编辑括号之间的部分):

    cert = [PATH_TO_YOUR_CERTIFICATE]
    key = [PATH_TO_YOUR_PRIVATE_KEY]
    
    client = no
    pid = /var/run/stunnel.pid
    
    [rsync]
    accept = 874
    connect = 873
    

    请记住,您需要为您的域名提供有效的 SSL 证书。我建议将 Certbot/acme.sh 与 Let's Encrypt 结合使用。

  6. 运行systemctl disable --now stunnel rsyncdsystemctl enable --now stunnel rsyncd。在某些情况下,您可能需要重新启动整个服务器。

  7. 完成!现在您应该能够使用 rsync-ssl 连接到服务器。请记住,您需要一个包含在您在文件中指定的证书中的域名rsync-ssl.conf。否则它将失败。

相关内容