CentOS系统中rsync默认使用明文传输,数据在公网或内网都可能被截获,同时默认配置会暴露模块名称,攻击者可能借此探测服务器结构。要解决这两个问题,你需要为rsync配置SSH隧道加密传输数据,并通过隐藏模块名称和限制访问来加固安全。

一、为什么必须加密rsync传输?

rsync本身不加密数据,只高效同步文件,这在备份或跨网络传输时是致命弱点。任何人使用抓包工具都能看到传输的文件内容,如果同步的是配置文件、数据库备份或代码,等于公开所有信息。尤其在云服务器或跨数据中心场景,网络路径不可控,加密是强制要求。解决方案是让rsync通过SSH隧道运行,利用SSH的AES等加密算法保护数据流,同时SSH的身份验证机制还能替代rsync的弱密码认证。

二、配置SSH密钥认证实现加密传输

首先在客户端生成SSH密钥对,将公钥部署到CentOS服务器,实现免密码登录,这是加密传输的基础。以下步骤在客户端执行:

ssh-keygen -t rsa -b 4096

将公钥复制到服务器,假设服务器IP为192.168.1.100,用户为backup:

ssh-copy-id backup@192.168.1.100

测试密钥登录是否成功:

ssh backup@192.168.1.100

成功后,rsync命令通过SSH连接自动加密。例如同步本地目录到服务器的/backup路径:

rsync -avz -e ssh /local/data/ backup@192.168.1.100:/backup/

参数-e ssh指定使用SSH通道,所有传输数据都会被加密。这是最直接有效的加密方法,无需修改rsync守护进程配置。

三、加固rsync守护进程:隐藏模块与访问控制

如果必须使用rsync守护进程模式(例如作为公共备份服务),则需重点加固配置文件/etc/rsyncd.conf。默认配置会暴露模块名,通过rsync your-server::命令可列出所有模块,这是信息泄露风险。隐藏模块的核心是使用list参数:

[secret_backup]
path = /var/backup
comment = Hidden backup module
list = false
auth users = backupuser
secrets file = /etc/rsyncd.secrets

设置list = false后,该模块不会出现在公共列表中,只有知道完整模块名的用户才能访问。同时结合auth userssecrets file进行用户认证,避免未授权访问。

四、设置IP白名单与端口防火墙

仅隐藏模块不够,需从网络层限制访问。在/etc/rsyncd.conf全局或模块内添加hosts allow参数:

hosts allow = 192.168.1.0/24, 10.0.0.100
hosts deny = *

这样只允许指定IP段或单个IP连接。同时,CentOS防火墙需放行rsync端口(默认873),但建议修改为非常用端口,并在firewalld中限制源IP:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="8730" protocol="tcp" accept'
firewall-cmd --reload

将rsync守护进程端口改为8730,并在配置文件中指定port = 8730,可减少端口扫描风险。

五、结合Chroot和只读权限限制文件系统访问

防止rsync进程越权访问系统文件,需启用chroot隔离。在模块配置中添加:

use chroot = yes
read only = yes

use chroot = yes将用户锁定在模块路径内,无法跳转到上级目录。read only = yes确保客户端只能拉取文件,不能推送修改,适用于备份分发场景。若需写入,可设为no,但务必配合严格的文件权限,例如设置模块目录属组为专用用户,并限制为700权限。

六、使用双向验证增强SSH隧道安全

单纯SSH密钥仍有被破解可能,建议启用SSH双向验证(公钥+密码)或证书认证。编辑服务器SSH配置/etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,password

这样要求客户端同时具备密钥和密码才能连接。此外,定期轮换密钥、禁用旧密钥也是必要操作。

七、监控与日志审计策略

安全配置后需持续监控。rsync守护进程可通过syslog记录详细日志,在/etc/rsyncd.conf中设置:

log file = /var/log/rsyncd.log
transfer logging = yes

使用logwatch或自定义脚本分析日志,检测异常连接尝试。例如,频繁来自未知IP的模块名探测可能意味着配置泄露,需立即检查防火墙规则和模块隐藏设置。

八、实战案例:全加密备份管道搭建

假设需每天将Web服务器/var/www/html加密备份到CentOS备份服务器,同时隐藏备份模块。步骤为:

1. 在备份服务器配置rsyncd.conf,设置模块名为web_backup_encryptedlist=false,端口改为8730;

2. 配置客户端通过SSH隧道连接,使用crontab定时任务:

0 2 * * * rsync -avz -e 'ssh -p 2222' /var/www/html/ backup@192.168.1.100::web_backup_encrypted

其中SSH端口也改为非标准2222,双重端口混淆。备份服务器防火墙只开放2222和8730给Web服务器IP,实现端到端加密和最小化网络暴露。

九、常见陷阱与进阶建议

避免将模块路径设置为根目录,即使chroot启用也可能因配置错误导致路径逃逸。不要使用弱密码或默认密码在secrets file中,该文件权限应设为600。进阶方案可考虑使用VPN网络隔离rsync流量,或在传输层叠加TLS加密(通过stunnel包装rsync端口),但这会增加复杂度。对于超敏感数据,可在SSH加密基础上再使用rsync的--password-file配合守护进程认证,形成双因素验证。

总结,CentOS上rsync安全的核心是“加密传输”和“模块隐身”。加密首选SSH隧道,避免守护进程模式暴露在公网;隐藏模块需设置list=false并配合IP白名单。定期审计日志、更新密钥、限制文件权限,才能构建企业级安全的rsync同步管道。