银河麒麟桌面操作系统下telnet服务的快速部署与安全优化
1. 为什么还需要telnet从基础到实战很多人觉得telnet是个老古董现在都用SSH了干嘛还要折腾这个其实在企业内网环境中telnet依然有它的用武之地。比如某些老旧的工控设备、网络设备只支持telnet协议或者需要快速搭建临时调试通道时telnet的轻量级特性就派上用场了。我在某次机房迁移时就遇到过这种情况新采购的国产银河麒麟系统需要管理一批只支持telnet的老式交换机。当时SSH根本连不上最后还是靠telnet解决了问题。不过要注意的是telnet最大的问题是明文传输就像用明信片寄密码一样危险。所以我们必须做好安全加固这个后面会详细说。先说说银河麒麟这个系统。它是基于Linux的国产操作系统很多命令和Ubuntu、CentOS类似但又有自己的特色。我实测下来它的包管理工具是apt-get和Debian系基本一致这对我们安装telnet服务很方便。2. 5分钟快速部署telnet服务2.1 安装前的准备工作在银河麒麟上装telnet前建议先更新下软件源。我吃过亏有一次直接安装发现版本太老后来排查才发现是本地软件缓存没更新。执行这个命令sudo apt-get update sudo apt-get upgrade -y更新完系统后建议检查下23端口是否被占用。有次我装完发现起不来折腾半天才发现是被某个监控程序占用了端口。用这个命令检查netstat -tuln | grep 23如果没有任何输出说明端口空闲。如果看到类似tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN的输出就要先处理占用程序。2.2 安装telnet服务组件银河麒麟用的是openbsd-inetd来管理telnet服务安装很简单sudo apt-get install -y openbsd-inetd telnetd安装完成后系统会自动在/etc/inetd.conf里添加配置。我建议手动检查下这个文件cat /etc/inetd.conf | grep telnet应该能看到类似这样的输出telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd如果没有这一行可能是安装出了问题需要重新安装。2.3 启动服务与验证装好之后需要重启inetd服务让配置生效sudo /etc/init.d/openbsd-inetd restart这时候可以用netstat检查服务是否正常启动netstat -a | grep telnet看到tcp 0 0 0.0.0.0:telnet 0.0.0.0:* LISTEN就说明服务起来了。本地测试下telnet 127.0.0.1如果看到类似Connected to 127.0.0.1的提示接着出现登录界面说明安装成功了。按Ctrl]然后输入quit可以退出。3. 企业级安全加固方案3.1 防火墙基础防护telnet默认用23端口就像把家门钥匙放在门垫下面一样危险。我建议做这几件事修改默认端口比如改成8023 编辑/etc/services文件找到telnet那行把23改成8023配置防火墙只允许特定IP访问sudo iptables -A INPUT -p tcp --dport 8023 -s 192.168.1.100 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 8023 -j DROP设置连接频率限制防止暴力破解sudo iptables -A INPUT -p tcp --dport 8023 -m state --state NEW -m recent --set sudo iptables -A INPUT -p tcp --dport 8023 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP3.2 认证安全强化明文密码传输是telnet最大的软肋。我常用的解决方案是强制使用复杂密码 编辑/etc/login.defs修改PASS_MIN_LEN 12 PASS_MAX_DAYS 90安装fail2ban防暴力破解sudo apt-get install -y fail2ban然后创建/etc/fail2ban/jail.d/telnet.conf[telnet] enabled true port 8023 filter telnet logpath /var/log/auth.log maxretry 3 bantime 36003.3 日志监控策略没有日志的安全防护就像没有摄像头的保险箱。建议配置增强日志记录 编辑/etc/rsyslog.conf添加auth.* /var/log/telnet-auth.log authpriv.* /var/log/telnet-auth.log设置日志轮转 创建/etc/logrotate.d/telnet/var/log/telnet-auth.log { weekly missingok rotate 12 compress delaycompress notifempty create 640 root adm }4. 常见问题排坑指南4.1 连接超时问题排查有用户反馈telnet连不上我总结了几种常见情况服务未启动ps aux | grep inetd如果没有inetd进程需要手动启动服务。端口冲突lsof -i :23查看是否有其他程序占用端口。防火墙拦截sudo iptables -L -n检查防火墙规则是否放行了telnet端口。4.2 登录失败问题处理如果telnet能连上但登录失败可以检查PAM配置cat /etc/pam.d/login确保没有奇怪的限制规则。测试本地登录 先在本地用相同账号密码登录确认账号有效。查看日志tail -f /var/log/auth.log实时监控登录失败原因。4.3 性能优化技巧当并发连接较多时可以调整修改inetd并发数 编辑/etc/inetd.conf在telnet行添加telnet stream tcp nowait.100 telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd这里的100表示最大并发数。调整TCP参数echo net.ipv4.tcp_keepalive_time 300 /etc/sysctl.conf sysctl -p5. 替代方案与进阶建议虽然我们讲了很多telnet的用法但在可能的情况下我强烈建议考虑更安全的替代方案。比如在银河麒麟上配置SSH服务它默认就支持加密传输。如果必须用telnet可以考虑在这些方面加强使用VPN建立加密通道后再连接telnet配置双因素认证定期更换端口号设置访问时间段限制有次我给某银行做系统迁移他们的安全规范就要求所有telnet访问必须通过跳板机并且会话要全程录像。这种企业级的安全方案虽然复杂但对于重要系统确实有必要。