我有一个备份服务器,我想知道如果我设置一个 cron 作业以允许来自 IPTables 中的服务器的连接,那么一旦它与 rsync 连接,我可以使用 IPTables 关闭端口以阻止连接吗?
这样做的目的是当主服务器受到威胁时阻止备份被擦除的机会(是的,它是安全的,但我不会冒险。)
编辑:在尝试了一些东西并了解了它的工作原理后,我决定最好的办法是设置第二个服务器,它只从第一个服务器拉取数据。
答案1
假设它通过 ssh 而不是 rsyncd 连接,你可以使用这样的规则来处理这个问题
iptables -A INPUT -s <server> -p tcp --dport ssh -m connlimit --connlimit-saddr --connlimit-upto 1 -j ACCEPT
只要没有其他规则允许,并且 INPUT 的策略是 REJECT 或 DROP,它就会起作用。
如果你还想将其限制在特定时间,还可以使用-m time --timestart 01:00:00 --timestop 01:02:00
- ,这将从每天凌晨 1 点开始提供两分钟的窗口
答案2
首先,直接回答你的问题:是的,这当然是可能的,而且非常简单。
你只需要一个 cron 作业允许来自该服务器的流量:
-A Firewall-1-INPUT -p tcp -m state --state NEW -s 1.2.3.4 -j ACCEPT
然后使用另一个 cron 作业来删除该规则:
-D Firewall-1-INPUT -p tcp -m state --state NEW -s 1.2.3.4 -j ACCEPT
但...
您是否使用本机 rsync 协议进行连接?如果是这样,您真的不应该这样做,因为它的身份验证较弱且未加密。相反,请使用 SSH 上的 rsync,并关闭密钥身份验证和密码身份验证(无论如何,您应该已经在服务器上执行此操作)。通过使用 rsync+ssh,所有流量都将被加密,并且使用密钥身份验证,也不需要执行 iptables 操作,因为有人暴力破解您的用户名和密钥对的可能性微乎其微。
此外,正如 Skaperen 在下文中提到的那样,您的备份服务器应该是启动与其正在备份的系统连接的服务器,而不是相反。
答案3
为了实现您的目标,我会考虑另一种想法,即让备份服务器隔离在防火墙后面的私有 IP 子网上,并通过私有 IP 和基于 ssh 密钥(而非密码)的连接发起互联网连接服务器的备份。这样,可以执行强大操作的密钥与互联网更加隔离。