Telnet是一种客户端服务器协议,通过23端口上的TCP连接到远程服务器,Telnet不加密数据,被认为是不安全的,密码很容易被嗅探,因为数据是以明文形式发送的,但是仍有遗留系统需要使用它。Stunnel旨在为具有不安全连接协议的程序添加SSL加密,本文将以telnet为例介绍如何使用它。参考在CentOS Minimal中安装telnet服务与xinetd服务。
服务器安装 使用sudo安装stunnel以及telnet服务器和客户端: sudo dnf -y install stunnel telnet-server telnet 添加防火墙规则,在提示时输入密码: firewall-cmd --add-service=telnet --perm firewall-cmd --reload 接下来,生成RSA私钥和SSL证书: openssl genrsa 2048 > stunnel.key openssl req -new -key stunnel.key -x509 -days 90 -out stunnel.crt 系统将提示你输入以下信息,当询问公共名称时,你必须输入正确的主机名或IP地址,但是你可以通过按Enter键跳过其他所有内容: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]: State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address [] 将RSA密钥和SSL证书合并到单个.pem文件中,并将其复制到SSL证书目录: cat stunnel.crt stunnel.key > stunnel.pem sudo cp stunnel.pem /etc/pki/tls/certs/ 现在是时候定义服务和用于加密连接的端口了,选择尚未使用的端口,此示例使用450端口进行隧道传输telnet,编辑或创建/etc/stunnel/telnet.conf文件: cert = /etc/pki/tls/certs/stunnel.pem sslVersion = TLSv1 chroot = /var/run/stunnel setuid = nobody setgid = nobody pid = /stunnel.pid socket = l:TCP_NODELAY=1 socket = r:TCP_NODELAY=1 [telnet] accept = 450 connect = 23 accept选项是服务器将侦听传入的telnet请求的端口,connect选项是telnet服务器侦听的内部端口。 接下来,制作一个systemd单元文件的副本,允许你覆盖打包的版本: sudo cp /usr/lib/systemd/system/stunnel.service /etc/systemd/system 编辑/etc/systemd/system/stunnel.service文件以添加两行(即ExecStartPre=-/usr/bin/mkdir /var/run/stunnel和ExecStartPre=/usr/bin/chown -R nobody:nobody /var/run/stunnel),这些行在启动时为服务创建chroot jail: [Unit] Description=TLS tunnel for network daemons After=syslog.target network.target [Service] ExecStart=/usr/bin/stunnel Type=forking PrivateTmp=true ExecStartPre=-/usr/bin/mkdir /var/run/stunnel ExecStartPre=/usr/bin/chown -R nobody:nobody /var/run/stunnel [Install] WantedBy=multi-user.target 接下来,配置SELinux以在你刚刚指定的新端口上侦听telnet: sudo semanage port -a -t telnetd_port_t -p tcp 450 参考:Linux管理员的SELinux安全指南:42个SELinux答案。 最后,添加新的防火墙规则: firewall-cmd --add-port=450/tcp --perm firewall-cmd --reload 现在可以启用并启动telnet和stunnel: systemctl enable telnet.socket stunnel@telnet.service --now 有关systemctl命令的说明是有序的,Systemd和stunnel包默认提供额外的模板单元文件,该模板允许你将stunnel的多个配置文件放入/etc/stunnel,并使用文件名启动该服务,例如,如果你有一个foobar.conf文件,你可以使用systemctl start stunnel@foobar.service启动那个stunnel实例,而不必自己编写任何单元文件。 如果需要,可以将此stunnel模板服务设置为在启动时启动: systemctl enable stunnel@telnet.service
客户端安装 本文的这一部分假定你以客户端系统上的普通用户(具有sudo权限,参考配置Fedora系统以使用sudo的方法)身份登录,安装stunnel和telnet客户端: dnf -y install stunnel telnet 将stunnel.pem文件从远程服务器复制到客户端/etc/pki/tls/certs目录,在此示例中,远程telnet服务器的IP地址为192.168.1.143: sudo scp myuser@192.168.1.143:/etc/pki/tls/certs/stunnel.pem /etc/pki/tls/certs/ 创建/etc/stunnel/telnet.conf文件: cert = /etc/pki/tls/certs/stunnel.pem client=yes [telnet] accept=450 connect=192.168.1.143:450 accept选项是将用于telnet会话的端口,connect选项是远程服务器的IP地址及其正在侦听的端口。 接下来,启用并启动stunnel: systemctl enable stunnel@telnet.service --now 测试你的连接,由于已建立连接,因此将telnet到localhost,而不是远程telnet服务器的主机名或IP地址: [user@client ~]$ telnet localhost 450 Trying ::1... telnet: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Kernel 5.0.9-301.fc30.x86_64 on an x86_64 (0) server login: myuser Password: XXXXXXX Last login: Sun May 19 14:28:22 from localhost [myuser@server ~]$
相关主题 |