rdp不支持tcp wrapper,因其为windows专有协议且未链接libwrap;ssh需确认sshd链接libwrap.so并启用usetcpwrappers,规则须严格按sshd:ip格式写入hosts.allow/deny,且优先级为allow→deny→默认放行。

TCP Wrapper 本身只对 Linux/Unix 系统上的服务有效,RDP(Remote Desktop Protocol)是 Windows 专有协议,不支持 TCP Wrapper。所以“用 TCP Wrapper 限制 RDP 接入”在技术上不可行——它既没有 libwrap 链接,也不读取 /etc/hosts.allow 或 /etc/hosts.deny。
SSH 接入:用 TCP Wrapper 做源地址控制的前提与配置
并非所有 OpenSSH 版本都启用 TCP Wrapper 支持。必须先确认 sshd 是否链接了 libwrap.so:
- 运行
ldd $(which sshd) | grep libwrap,有输出(如libwrap.so.0 => /lib64/libwrap.so.0)才表示支持 - 检查
/etc/ssh/sshd_config中是否含UseTCPWrappers yes(默认常为 yes,但建议显式确认) - 若无输出或配置为 no,则后续 hosts.allow/deny 规则完全无效
SSH 的 hosts.allow / hosts.deny 实际写法
规则格式严格:服务名 + 冒号 + 客户端地址,中间不能有空格,CIDR 表示法(如 /24)不被原生支持,需转换:
- 允许网段
192.168.5.0/24:写成sshd:192.168.5.(用点号通配)或sshd:192.168.5.0/255.255.255.0 - 允许多个 IP 或段:用空格分隔,如
sshd:192.168.5.100 192.168.10. 10.0.0. - 拒绝其余所有:
sshd:ALL写入/etc/hosts.deny(注意:此行必须存在,否则未匹配项将默认放行) - 优先级固定:系统先查
hosts.allow,匹配即放行;不匹配再查hosts.deny;都不匹配则默认放行
为什么你改了 hosts.allow 却没生效?常见原因
规则写完不重启 sshd,但可能仍不生效,关键排查点:
- 服务名写错:必须是
sshd(不是ssh、openssh或大小写混用) - 用了中文标点或不可见字符:冒号必须是英文半角,文件保存为 UTF-8 无 BOM
- 日志无记录:查
/var/log/secure或journalctl -u sshd | grep tcpd,若完全无 tcpd 相关日志,基本可判定未调用 libwrap - 测试命令可用:
tcpdmatch sshd 192.168.5.100模拟判断结果,比盲试更可靠
RDP 的访问控制需改用 Windows 自带机制,如组策略中的 IP 安全策略、Windows Defender 防火墙入站规则,或前置网络设备 ACL。Linux 上的 TCP Wrapper 只管得着 sshd、vsftpd、telnetd 这类明确链接了 libwrap 的服务。










