禁用Telnet和FTP需停服务、删配置、封端口、换SSH/SFTP:停telnet.socket与vsftpd,禁自启,改xinetd disable=yes,卸载软件包,防火墙封21/23端口,并启用密钥认证的SSH与SFTP替代。
禁用 Telnet 和 FTP 不是关个端口就完事,核心在于彻底停服务、删配置、锁入口、换安全替代方案。这两个协议全程明文传输账号密码,一旦被截获,等于直接交出系统控制权。
停止并禁用服务进程
现代 Linux 多数用 systemd 管理,Telnet 通常以 socket 方式运行:
- 停当前实例:sudo systemctl stop telnet.socket
- 禁止开机自启:sudo systemctl disable telnet.socket
- 确认状态:sudo systemctl status telnet.socket(应显示 inactive 或 not found)
若系统用 xinetd 托管(常见于老旧 CentOS/RHEL),编辑 /etc/xinetd.d/telnet,把 disable = no 改为 disable = yes,再执行 sudo systemctl restart xinetd。
FTP 服务名依安装而异(vsftpd、pure-ftpd、proftpd),以 vsftpd 为例:
- 停服务:sudo systemctl stop vsftpd
- 禁自启:sudo systemctl disable vsftpd
- 检查配置:grep anonymous_enable /etc/vsftpd.conf,若为 YES,改为 NO 并重启;无业务需求,直接卸载:sudo apt remove --purge vsftpd(Debian/Ubuntu)或 sudo yum remove vsftpd(RHEL/CentOS)
清理残留配置与启动方式
有些系统通过 xinetd 启动 FTP,需同步检查 /etc/xinetd.d/ftp 或 /etc/xinetd.d/vsftpd,设 disable = yes;还可能遗留 /etc/inetd.conf,注释或删除对应行(如 telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd),再执行 sudo killall -HUP inetd 生效。
也可用自动化脚本批量检测:
- 查是否安装:dpkg -l | grep ftp 或 rpm -qa | grep -i ftp
- 查是否监听:sudo ss -tuln | grep -E ':21|:23'
- 查活跃进程:ps aux | grep -E '(telnet|ftp)'
防火墙封端口,兜底防御
即使服务已停,防火墙能防止误启或残留监听:
- ufw(Ubuntu/Debian):sudo ufw deny 23/tcp && sudo ufw deny 21/tcp
- firewalld(RHEL/CentOS):sudo firewall-cmd --permanent --remove-service=telnet --remove-service=ftp && sudo firewall-cmd --reload
- iptables(通用):sudo iptables -A INPUT -p tcp --dport 23 -j DROP && sudo iptables -A INPUT -p tcp --dport 21 -j DROP
执行后再次运行 sudo ss -tuln | grep -E ':(21|23)',应无输出。
必须切换到 SSH + SFTP 替代
禁掉 Telnet/FTP 后,远程管理必须有安全落地方案:
- 确认 SSH 正常:sudo systemctl is-active sshd(Debian/Ubuntu)或 sshd(RHEL/CentOS)
- 关闭密码登录:sudo nano /etc/ssh/sshd_config,设 PasswordAuthentication no,保存后 sudo systemctl restart sshd
- 密钥登录配好后,所有文件传输统一走 SFTP——命令行用 sftp user@host,GUI 工具(FileZilla、WinSCP)选 SFTP 协议即可,无需额外部署
不复杂但容易忽略。