1. 为什么要在Ubuntu上配置telnet服务Telnet作为早期的远程登录协议至今仍在某些特定场景下发挥作用。我最近在帮朋友调试一台老旧的实验室设备时就遇到了必须使用telnet的情况。这台设备固件太老只支持telnet协议SSH根本无法连接。类似的情况在企业内网管理旧服务器、工业控制设备时也经常出现。不过需要特别提醒的是telnet协议本身存在严重的安全缺陷。它所有的通信内容包括用户名和密码都是以明文形式传输的就像用明信片寄送银行密码一样危险。我在2018年就亲眼见过一个案例某公司用telnet管理内网设备结果被黑客用简单的抓包工具窃取了管理员凭证。2. 安装与基础配置2.1 安装必要组件首先需要安装两个关键软件包sudo apt update sudo apt install openbsd-inetd telnetd -y这里有个小技巧我习惯先单独安装openbsd-inetd等它配置完成后再装telnetd。因为有些Ubuntu版本如果两个包同时安装inetd的配置文件可能不会自动生成。遇到过这种情况的朋友可以在评论区分享一下你的解决方法。2.2 验证服务状态安装完成后用这个命令检查服务是否正常运行sudo netstat -tulnp | grep telnet正常应该看到类似这样的输出tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 1234/inetd如果没看到监听状态可能需要手动重启服务sudo systemctl restart openbsd-inetd3. 连接测试与排错3.1 本地连接测试先试试从本机连接telnet 127.0.0.1成功连接后会看到登录提示。这里有个细节如果你用的是非root用户记得先确保这个用户在/etc/passwd中有有效的shell配置。我有次就被这个问题卡了半小时最后发现是用户的shell被设成了/sbin/nologin。3.2 远程连接问题排查当从其他机器连接失败时建议按这个顺序检查防火墙规则后面会详细讲/etc/inetd.conf配置/etc/hosts.allow和hosts.deny文件客户端和服务端的时间是否同步4. 安全加固措施4.1 防火墙配置强烈建议使用UFW限制访问sudo ufw allow from 192.168.1.0/24 to any port 23 sudo ufw enable在企业环境我会更进一步只允许特定管理IP访问sudo ufw allow from 10.0.100.5/32 to any port 234.2 使用TCP Wrapper编辑/etc/hosts.allow增加访问控制telnetd: 192.168.1.100, 192.168.1.101然后在hosts.deny中默认拒绝所有ALL: ALL4.3 会话超时设置在/etc/inetd.conf中添加telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd -h -L /bin/login -t 300这里的-t 300表示5分钟无操作自动断开连接。5. 为什么建议使用SSH替代虽然配置好了telnet但我必须强调只要设备支持SSH永远是更好的选择。去年我做过一个实验在同一网络下用telnet传输的数据包用Wireshark可以轻松看到所有命令和密码而SSH连接则完全无法解密。对于必须使用telnet的场景我有几个建议只在隔离的内网使用使用跳板机中转连接定期更换密码监控/var/log/auth.log的异常登录最后提醒一点完成调试后记得禁用telnet服务sudo systemctl disable openbsd-inetd
Ubuntu系统中telnet服务的配置与安全实践
发布时间:2026/5/27 0:50:48
1. 为什么要在Ubuntu上配置telnet服务Telnet作为早期的远程登录协议至今仍在某些特定场景下发挥作用。我最近在帮朋友调试一台老旧的实验室设备时就遇到了必须使用telnet的情况。这台设备固件太老只支持telnet协议SSH根本无法连接。类似的情况在企业内网管理旧服务器、工业控制设备时也经常出现。不过需要特别提醒的是telnet协议本身存在严重的安全缺陷。它所有的通信内容包括用户名和密码都是以明文形式传输的就像用明信片寄送银行密码一样危险。我在2018年就亲眼见过一个案例某公司用telnet管理内网设备结果被黑客用简单的抓包工具窃取了管理员凭证。2. 安装与基础配置2.1 安装必要组件首先需要安装两个关键软件包sudo apt update sudo apt install openbsd-inetd telnetd -y这里有个小技巧我习惯先单独安装openbsd-inetd等它配置完成后再装telnetd。因为有些Ubuntu版本如果两个包同时安装inetd的配置文件可能不会自动生成。遇到过这种情况的朋友可以在评论区分享一下你的解决方法。2.2 验证服务状态安装完成后用这个命令检查服务是否正常运行sudo netstat -tulnp | grep telnet正常应该看到类似这样的输出tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN 1234/inetd如果没看到监听状态可能需要手动重启服务sudo systemctl restart openbsd-inetd3. 连接测试与排错3.1 本地连接测试先试试从本机连接telnet 127.0.0.1成功连接后会看到登录提示。这里有个细节如果你用的是非root用户记得先确保这个用户在/etc/passwd中有有效的shell配置。我有次就被这个问题卡了半小时最后发现是用户的shell被设成了/sbin/nologin。3.2 远程连接问题排查当从其他机器连接失败时建议按这个顺序检查防火墙规则后面会详细讲/etc/inetd.conf配置/etc/hosts.allow和hosts.deny文件客户端和服务端的时间是否同步4. 安全加固措施4.1 防火墙配置强烈建议使用UFW限制访问sudo ufw allow from 192.168.1.0/24 to any port 23 sudo ufw enable在企业环境我会更进一步只允许特定管理IP访问sudo ufw allow from 10.0.100.5/32 to any port 234.2 使用TCP Wrapper编辑/etc/hosts.allow增加访问控制telnetd: 192.168.1.100, 192.168.1.101然后在hosts.deny中默认拒绝所有ALL: ALL4.3 会话超时设置在/etc/inetd.conf中添加telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd -h -L /bin/login -t 300这里的-t 300表示5分钟无操作自动断开连接。5. 为什么建议使用SSH替代虽然配置好了telnet但我必须强调只要设备支持SSH永远是更好的选择。去年我做过一个实验在同一网络下用telnet传输的数据包用Wireshark可以轻松看到所有命令和密码而SSH连接则完全无法解密。对于必须使用telnet的场景我有几个建议只在隔离的内网使用使用跳板机中转连接定期更换密码监控/var/log/auth.log的异常登录最后提醒一点完成调试后记得禁用telnet服务sudo systemctl disable openbsd-inetd