Telnet是一种客户端-服务器协议,通过TCP端口23连接到远程服务器。Telnet不加密数据,因此被认为是不安全的,因为数据以明文形式发送,因此密码可以容易闻到。但是,仍然有遗留系统需要使用它。这就是stunnel的用武之地。stunnel旨在为使用不安全连接协议的程序添加SSL加密。本文将以telnet为例介绍其使用方法。服务器安装使用sudo安装stunnel和telnet服务器和客户端:sudodnf-yinstallstunneltelnet-servertelnet添加防火墙规则,提示时输入密码:firewall-cmd--add-service=telnet--permfirewall-cmd--reload接下来,生成RSA私钥和SSL证书:opensslgenrsa2048>stunnel.keyopensslreq-new-keystunnel.key-x509-days90-outstunnel.crt系统将提示您一次输入以下信息。当询问CommonName时,您必须输入正确的主机名或IP地址,但您可以按Enter键跳过其他所有内容。您将被要求输入将合并到您的证书请求中的信息。您要输入的是所谓的专有名称或DN。字段比较多,但可以留空一些字段会有默认值,如果输入'.',该字段将留空。-----国家名称(2个字母代码)[XX]:StateorProvinceName(fullname)[]:LocalityName(eg,city)[DefaultCity]:OrganizationName(eg,company)[DefaultCompanyLtd]:OrganizationalUnitName(eg,section)[]:CommonName(例如,您的姓名或服务器的主机名)[]:EmailAddress[]将RSA密钥和SSL证书合并到一个.pem文件中,并将其复制到SSL证书目录:catstunnel.crtstunnel.key>stunnel.pemsudocpstunnel.pem/etc/pki/tls/certs/now是时候定义用于加密连接的服务和端口了。选择一个未使用的端口。此示例使用端口450进行隧道telnet。编辑或创建/etc/stunnel/telnet.conf:cert=/etc/pki/tls/certs/stunnel.pemsslVersion=TLSv1chroot=/var/run/stunnelsetuid=nobodysetgid=nobodypid=/stunnel.pidsocket=l:TCP_NODELAY=1socket=r:TCP_NODELAY=1[telnet]accept=450connect=23accept选项是服务器将侦听传入的telnet请求的接口。connect选项是telnet服务器的内部监听接口。接下来,创建systemd单元文件的副本以覆盖原始版本:sudocp/usr/lib/systemd/system/stunnel.service/etc/systemd/system编辑/etc/systemd/system/stunnel.service以添加两个好。这些行在启动时为服务创建一个chrootjail。[Unit]Description=TLStunnelfornetworkdaemonsAfter=syslog.targetnetwork.target[Service]ExecStart=/usr/bin/stunnelType=forkingPrivateTmp=trueExecStartPre=-/usr/bin/mkdir/var/run/stunnelExecStartPre=/usr/bin/chown-Rnobody:nobody/var/run/stunnel[Install]WantedBy=multi-user.target接下来,配置SELinux以在您刚刚指定的新端口上侦听telnet:sudosemanageport-a-ttelnetd_port_t-ptcp450***,添加新的防火墙规则:firewall-cmd--add-port=450/tcp--permfirewall-cmd--reload现在您可以启用和启动telnet和stunnel。systemctlenabletelnet.socketstunnel@telnet.service--现在注意systemctl命令是顺序的。systemd和stunnel包默认提供额外的模板单元文件。此模板允许您在/etc/stunnel中放置多个stunnel配置文件并使用文件名启动服务。例如,如果您有一个foobar.conf文件,您可以使用systemctlstartstunnel@foobar.service启动该stunnel实例,而无需自己编写任何单元文件。如果需要,可以将此stunnel模板服务设置为在启动时启动:systemctlenablestunnel@telnet.service客户端安装本文的这一部分假定您以普通用户身份(具有sudo权限)登录到客户端系统。安装stunnel和telnet客户端:dnf-yinstallstunneltelnet将stunnel.pem从远程服务器复制到客户端的/etc/pki/tls/certs目录。本例中远程telnet服务器的IP地址为192.168.1.143。sudoscpmyuser@192.168.1.143:/etc/pki/tls/certs/stunnel.pem/etc/pki/tls/certs/创建/etc/stunnel/telnet.conf:cert=/etc/pki/tls/certs/stunnel.pemclient=yes[telnet]accept=450connect=192.168.1.143:450accept选项是用于telnet会话的端口。连接选项是远程服务器的IP地址和它正在侦听的端口。接下来,启用并启动stunnel:systemctlenablestunnel@telnet.service--now来测试您的连接。由于已建立连接,您将远程登录到本地主机,而不是远程远程登录服务器的主机名或IP地址。[user@client~]$telnetlocalhost450Trying::1...telnet:connecttoaddress::1:ConnectionrefusedTrying127.0.0.1...Connectedtolocalhost.Escapecharacteris'^]'.Kernel5.0.9-x86_64(0)服务器登录上的301.fc30.x86_64:myuser密码:XXXXXXX上次登录:5月5日星期日14:28:22来自localhost[myuser@server~]$
