我有一台 CentOS 6 服务器,需要通过 rsh 访问我们的一台不支持 ssh 的旧服务器。
RSH 连接到远程服务器上的端口 514,然后在 512-1023 之间的端口上创建另一个与客户端的连接。我目前的防火墙技能水平是“端口打开/端口关闭”,打开所有端口不会留下太多防火墙。允许传出 RSH 连接的最严格方法是什么?
答案1
我会使用 来限制来自服务器范围的传入信息iptables -A INPUT --src {IP address or range}/{netmask} -m state --state NEW -m tcp -p tcp --dport 514:1023 -j ACCEPT
。
然后,您可以将传入端口范围限制到正确的服务器
除非您需要限制来自特定服务器的传出数据,否则我不会担心设置出站规则。
我使用 webmin 设置基本规则,然后手动复制它们(这样更快,而且省去了我查找不经常使用的所有信息的麻烦)。Webmin 支持各种规则 - 入站、出站和 mangle。您可以在测试机上设置 webmin,然后编辑并编写规则,并将其复制到适当的服务器。
答案2
在安装了 rsh-redone-client/server 软件包的 Ubuntu 18.04 上,rsh/rlogin 到 LAN 中的另一台主机(运行 CentOS 6)被阻塞了很长时间(大约 30 秒),直到我在本地防火墙中打开端口 113(身份验证)以接收来自 LAN 的传入连接。我不确定在没有打开端口 113 的情况下,它最终(在那约 30 秒之后)是如何工作的。无论如何,服务器可能在超时后允许连接。
答案3
一些旧服务包含一项功能,即在每次传入连接时将用户名查询发送回客户端主机。我见过包含此功能的服务:
- 旧的专有 Unix 服务器上的 FTP
- rsh/rlogin/rexec
- IRC
用户名查询的目标 TCP 端口为 113,最初称为auth
端口,后来更名为,ident
因为人们认识到它与任何实际身份验证无关。在互联网的早期,当大多数 TCP/IP 连接系统都是多用户 Unix 系统时,此服务将另一个 TCP 连接的 IP 地址和源 + 目标端口号作为输入,并查找与该连接关联的客户端用户名。
如今,如此盲目信任、容易被欺骗的用户名泄露显然不是一件好事。
ident
在大多数情况下,发出/查询的服务auth
将接受信息不可用 - 但您必须接受或拒绝查询:如果您直接放弃它,用户将看到长达 30 秒的连接延迟,直到服务器端放弃。最佳拒绝类似于主机没有防火墙,但没有服务在 TCP 端口 113 上侦听时发生的情况,即 TCP 重置数据包。
对于 iptables 规则,这意味着如果您正在使用任何仍在发送查询的旧服务,则应该使用REJECT
规则而不是TCP 端口 113。DROP
ident
类似这样的操作应该可以ident
以最小化延迟的方式拒绝查询:
iptables -I INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
如果您担心有人会滥用此功能来发起拒绝服务攻击,您可以在此规则之前添加 TCP 端口 113 的速率限制规则。但据我所知,大多数现代网络驱动程序默认将发送 TCP 重置响应作为一项非常低优先级的任务来处理,因此这可能不是一个很大的风险。