在Debian系统上,telnet和rlogin这两个远程登录服务默认情况下会以明文方式传输用户名、密码以及所有会话数据,这意味着任何能够截获网络流量的攻击者都能直接获取你的登录凭证。要彻底禁用这两个不安全的服务,最直接的方法就是卸载对应的软件包、禁用相关的inetd或xinetd服务条目,并通过防火墙规则封锁23端口(telnet)和513端口(rlogin)。下面我会把每一步操作、原理分析、替代方案以及加固建议全部讲清楚,你照着做就行。

为什么telnet和rlogin必须禁用

telnet协议诞生于上世纪60年代,当时网络环境相对封闭,安全性并不是设计重点。它把所有数据——包括你输入的用户名和密码——都以纯文本形式在网络上裸奔。rlogin的情况更糟糕,它不仅不加密,还基于rsh信任机制,允许无密码登录,一旦被利用,攻击者可以直接获得root权限。在2024年的安全标准下,这两个协议已经属于"高危遗留服务",任何安全审计、等保测评、CIS基准检查都会把它们列为必须整改项。

第一步:确认服务是否正在运行

在动手禁用之前,先检查系统上是否真的装了这两个服务以及它们是否处于运行状态。打开终端执行以下命令:

systemctl status telnet.socket 2>/dev/null || echo "telnet.socket not found"
systemctl status rlogin.service 2>/dev/null || echo "rlogin.service not found"
ss -tlnp | grep -E ':23|:513'

如果输出显示有进程在监听23或513端口,说明服务确实在跑。如果没有找到对应的socket或service文件,也不代表安全——可能是通过inetd/xinetd管理的,需要进一步检查。

第二步:卸载telnet相关软件包

Debian系统上telnet服务通常由telnetd软件包提供,rlogin则由rsh-server或rsh-client相关包提供。直接卸载是最干净的方式:

apt-get purge -y telnetd inetutils-telnetd
apt-get purge -y rsh-server rsh-client rsh-redone-server rsh-redone-client

purge参数会连同配置文件一起删除,比remove更彻底。如果你只是想禁用而不卸载,可以用dpkg命令设置hold状态:

echo "telnetd hold" | dpkg --set-selections
echo "rsh-server hold" | dpkg --set-selections

第三步:检查并清理xinetd/inetd配置

有些老版本的Debian或者手动安装的场景下,telnet和rlogin可能不是作为独立服务运行,而是由xinetd或inetd超级守护进程管理。需要检查配置文件:

grep -r "telnet\|rlogin" /etc/xinetd.d/ 2>/dev/null
grep -r "telnet\|rlogin" /etc/inetd.conf 2>/dev/null

如果找到了对应的配置文件,比如/etc/xinetd.d/telnet或/etc/xinetd.d/rlogin,直接删除或将其中的disable = no改为disable = yes:

sed -i 's/disable.*=.*no/disable = yes/' /etc/xinetd.d/telnet
sed -i 's/disable.*=.*no/disable = yes/' /etc/xinetd.d/rlogin

修改后重启xinetd服务使配置生效:

systemctl restart xinetd

第四步:用防火墙封锁危险端口

即使卸载了软件包,也建议在防火墙层面加上双重保险。Debian常用的防火墙工具是iptables或nftables,如果你用的是ufw,操作更简单:

ufw deny 23/tcp
ufw deny 513/tcp
ufw reload

如果你用的是nftables,可以编辑/etc/nftables.conf添加规则:

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        tcp dport 23 drop
        tcp dport 513 drop
    }
}

第五步:验证禁用结果

所有操作完成后,务必做一次全面验证,确保没有遗漏:

ss -tlnp | grep -E ':23|:513'
systemctl list-unit-files | grep -iE 'telnet|rlogin|rsh'
dpkg -l | grep -iE 'telnetd|rsh-server'

如果三条命令都没有输出,说明telnet和rlogin已经被彻底清除。如果还有残留,根据输出信息继续排查。

替代方案:用SSH取代不安全的远程登录

禁用telnet和rlogin之后,你需要一个安全的远程管理方式。SSH(Secure Shell)是目前的行业标准,它使用强加密算法保护所有传输数据,支持密钥认证、双因素认证等高级安全机制。Debian默认就自带openssh-server,安装和配置非常简单:

apt-get install -y openssh-server
systemctl enable ssh
systemctl start ssh

建议进一步加固SSH配置,编辑/etc/ssh/sshd_config:

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2

把默认22端口改成非标准端口可以减少自动化扫描的攻击,禁用root密码登录和密码认证(只允许密钥登录)能大幅提升安全性。修改后重启SSH服务:

systemctl restart sshd

深层安全建议:不只是禁用两个服务

禁用telnet和rlogin只是基础操作,真正的安全加固需要系统性思维。以下几点值得注意:

第一,定期扫描开放端口。可以用nmap从外部对自己的服务器做端口扫描,确认没有意外暴露的高危服务:

nmap -sT -p 1-65535 your_server_ip

第二,启用系统审计。Debian自带auditd工具,可以监控对敏感配置文件的修改和异常登录行为:

apt-get install -y auditd
systemctl enable auditd
auditctl -w /etc/passwd -p wa -k identity_changes
auditctl -w /etc/ssh/sshd_config -p wa -k ssh_config_changes

第三,使用fail2ban自动封禁暴力破解。这个工具可以监控登录日志,对多次失败的登录尝试自动添加防火墙规则:

apt-get install -y fail2ban
systemctl enable fail2ban

第四,保持系统更新。Debian的安全更新非常及时,定期执行apt-get update && apt-get upgrade能修补已知漏洞,防止攻击者利用旧版本软件的弱点绕过你的防护。

关于CIS基准和合规性的说明

如果你的Debian服务器需要通过安全合规检查,比如CIS Debian Benchmark,那么禁用telnet和rlogin是明确列出的要求项。CIS基准的第2.1.1条和第2.1.2条分别要求确保telnet和rlogin服务未安装或未激活。在实际审计中,检查人员会同时验证软件包状态、服务状态、端口监听情况和防火墙规则四个维度。只做其中一两项是不够的,必须形成完整的证据链。

特殊场景:如果你真的需要telnet怎么办

在极少数情况下,比如某些老旧的工业控制设备或嵌入式系统只支持telnet协议,你无法直接替换。这种情况下,至少要做到以下几点:用stunnel或socat做一层TLS加密隧道把telnet流量包起来;把telnet服务绑定到本地回环地址或内网接口,绝不暴露到公网;配合防火墙严格限制访问来源IP;启用详细日志记录以便事后追溯。但说实话,能换成SSH就换,这是最省心的方案。

总结与行动清单

把整个操作浓缩成一个可执行的清单,方便你快速上手:卸载telnetd和rsh-server软件包;检查并清理xinetd/inetd中的相关配置;用ufw或nftables封锁23和513端口;安装并加固openssh-server作为替代;用nmap验证端口关闭状态;部署fail2ban和auditd做持续防护;定期更新系统补丁。这套流程走下来,你的Debian服务器在远程登录安全这一块就达到了相当扎实的水平。安全不是一次性的工作,而是持续的习惯,把这些步骤变成你部署新服务器时的标准操作流程,才是真正的长久之计。