彻底禁用Telnet、Rlogin和FTP需四层同步清理:卸载相关软件包、停用并禁用xinetd/inetd托管服务、显式封禁21/23/513/514端口,最后逐层验证进程、包、配置均为空。

彻底禁用 Telnet、Rlogin 和 FTP 不是「停个服务」就完事,必须从软件包、服务托管、端口监听、防火墙四层同时清理,否则残留任一环节都可能被绕过或误启。
检查是否真没装,别信“默认不带”
新系统虽常不预装,但升级/运维过程可能引入。不能只看 systemctl status,得查包管理器:
- RHEL/CentOS/Fedora:
rpm -qa | grep -i -E 'telnet|rsh|ftp'—— 关注telnet-server、rsh-server、vsftpd、pure-ftpd - Debian/Ubuntu:
dpkg -l | grep -i -E 'telnet|rsh|ftp'—— 留意telnetd、rsh-redone-server、proftpd-basic - 若输出非空,说明包已安装,下一步必须卸载,而非仅 disable
停服务 + 卸载包,两步缺一不可
只 systemctl disable --now telnet.socket 或只 systemctl stop xinetd 都不保险:前者对直接运行的 in.telnetd 无效,后者一旦重启 xinetd 就恢复。
- Telnet:
systemctl disable --now telnet.socket(systemd) +apt purge telnetd inetd或yum remove telnet-server xinetd - Rlogin/Rsh:卸载
rsh-server及其变体;若用 xinetd 托管,还需编辑/etc/xinetd.d/rlogin,把disable = no改成yes,再systemctl restart xinetd - FTP:卸载
vsftpd、proftpd等服务器端包;客户端如ftp命令可保留(运维排查需要),但服务端必须清零
封端口不能靠“感觉”,要显式 DROP
即使服务已停,513/514(rlogin/rsh)、21(FTP)、23(Telnet)端口仍可能因配置残留或误启而暴露。防火墙规则必须显式拒绝,而非依赖“没服务就不响应”。
- firewalld:
firewall-cmd --permanent --remove-service=telnet --remove-service=ftp不够 —— 这些 service 配置可能未启用;应直接删端口:firewall-cmd --permanent --remove-port=21/tcp --remove-port=23/tcp --remove-port=513/tcp --remove-port=514/tcp,再firewall-cmd --reload - iptables:
iptables -A INPUT -p tcp --dport 23 -j DROP等四条规则必须存在;保存后验证:iptables -L INPUT -n | grep -E ':(21|23|513|514)' - 注意:ufw 的
deny 23/tcp有效,但需确认 ufw 已启用且策略为 default deny
验证是否真干净,别被“Connection refused”骗了
telnet localhost 23 返回 Connection refused 只说明端口没监听,不代表服务没装、没配、没可能被拉起。真正验证要分三层:
- 进程层:
ss -tuln | grep -E ':(21|23|513|514)'输出必须为空 - 包层:
rpm -q telnet-server rsh-server vsftpd或dpkg -l | grep -E 'telnet|rsh|ftp'必须无结果 - 配置层:检查
/etc/xinetd.d/下有无rlogin、telnet文件;/etc/inetd.conf是否含对应行;systemctl list-unit-files | grep telnet是否为 disabled
最易忽略的是 xinetd 子服务配置文件权限和 reload 行为 —— 改完 /etc/xinetd.d/rlogin 后忘了 systemctl restart xinetd,等于白改。


















