使用 stunnel 保护 telnet 连接 | Linux 中国

2019 年 6 月 6 日 Linux中国
stunnel 旨在为使用不安全连接协议的程序增加 SSL 加密。本文将以 telnet 为例介绍如何使用它。
-- Curt Warfield

Telnet 是一种客户端-服务端协议,通过 TCP 的 23 端口连接到远程服务器。Telnet 并不加密数据,因此它被认为是不安全的,因为数据是以明文形式发送的,所以密码很容易被嗅探。但是,仍有老旧系统需要使用它。这就是用到 stunnel 的地方。

stunnel 旨在为使用不安全连接协议的程序增加 SSL 加密。本文将以 telnet 为例介绍如何使用它。

服务端安装

使用 sudo 安装 stunnel 以及 telnet 的服务端和客户端:

   
   
     
  1. sudo dnf -y install stunnel telnet-server telnet

添加防火墙规则,在提示时输入你的密码:

   
   
     
  1. firewall-cmd --add-service=telnet --perm
  2. firewall-cmd --reload

接下来,生成 RSA 私钥和 SSL 证书:

   
   
     
  1. openssl genrsa 2048 > stunnel.key
  2. openssl req -new -key stunnel.key -x509 -days 90 -out stunnel.crt

系统将一次提示你输入以下信息。当询问 Common Name 时,你必须输入正确的主机名或 IP 地址,但是你可以按回车键跳过其他所有内容。

   
   
     
  1. You are about to be asked to enter information that will be
  2. incorporated into your certificate request.
  3. What you are about to enter is what is called a Distinguished Name or a DN.
  4. There are quite a few fields but you can leave some blank
  5. For some fields there will be a default value,
  6. If you enter '.', the field will be left blank.
  7. -----
  8. Country Name (2 letter code) [XX]:
  9. State or Province Name (full name) []:
  10. Locality Name (eg, city) [Default City]:
  11. Organization Name (eg, company) [Default Company Ltd]:
  12. Organizational Unit Name (eg, section) []:
  13. Common Name (eg, your name or your server's hostname) []:
  14. Email Address []

将 RSA 密钥和 SSL 证书合并到单个 .pem 文件中,并将其复制到 SSL 证书目录:

   
   
     
  1. cat stunnel.crt stunnel.key > stunnel.pem
  2. sudo cp stunnel.pem /etc/pki/tls/certs/

现在可以定义服务和用于加密连接的端口了。选择尚未使用的端口。此例使用 450 端口进行隧道传输 telnet。编辑或创建 /etc/stunnel/telnet.conf

   
   
     
  1. cert = /etc/pki/tls/certs/stunnel.pem
  2. sslVersion = TLSv1
  3. chroot = /var/run/stunnel
  4. setuid = nobody
  5. setgid = nobody
  6. pid = /stunnel.pid
  7. socket = l:TCP_NODELAY=1
  8. socket = r:TCP_NODELAY=1
  9. [telnet]
  10. accept = 450
  11. connect = 23

accept 选项是服务器将监听传入 telnet 请求的接口。connect 选项是 telnet 服务器的内部监听接口。

接下来,创建一个 systemd 单元文件的副本来覆盖原来的版本:

   
   
     
  1. sudo cp /usr/lib/systemd/system/stunnel.service /etc/systemd/system

编辑 /etc/systemd/system/stunnel.service 来添加两行。这些行在启动时为服务创建 chroot 监狱。

   
   
     
  1. [Unit]
  2. Description=TLS tunnel for network daemons
  3. After=syslog.target network.target
  4. [Service]
  5. ExecStart=/usr/bin/stunnel
  6. Type=forking
  7. PrivateTmp=true
  8. ExecStartPre=-/usr/bin/mkdir /var/run/stunnel
  9. ExecStartPre=/usr/bin/chown -R nobody:nobody /var/run/stunnel
  10. [Install]
  11. WantedBy=multi-user.target

接下来,配置 SELinux 以在你刚刚指定的新端口上监听 telnet:

   
   
     
  1. sudo semanage port -a -t telnetd_port_t -p tcp 450

最后,添加新的防火墙规则:

   
   
     
  1. firewall-cmd --add-port=450/tcp --perm
  2. firewall-cmd --reload

现在你可以启用并启动 telnet 和 stunnel。

   
   
     
  1. systemctl enable telnet.socket stunnel@telnet.service --now

要注意 systemctl 命令是有顺序的。systemd 和 stunnel 包默认提供额外的模板单元文件。该模板允许你将 stunnel 的多个配置文件放到 /etc/stunnel 中,并使用文件名启动该服务。例如,如果你有一个 foobar.conf 文件,那么可以使用 systemctl start stunnel@foobar.service 启动该 stunnel 实例,而无需自己编写任何单元文件。

如果需要,可以将此 stunnel 模板服务设置为在启动时启动:

   
   
     
  1. systemctl enable stunnel@telnet.service

客户端安装

本文的这部分假设你在客户端系统上以普通用户(拥有 sudo 权限)身份登录。安装 stunnel 和 telnet 客户端:

   
   
     
  1. dnf -y install stunnel telnet

将 stunnel.pem 从远程服务器复制到客户端的 /etc/pki/tls/certs 目录。在此例中,远程 telnet 服务器的 IP 地址为 192.168.1.143

   
   
     
  1. sudo scp myuser@192.168.1.143:/etc/pki/tls/certs/stunnel.pem
  2. /etc/pki/tls/certs/

创建 /etc/stunnel/telnet.conf

   
   
     
  1. cert = /etc/pki/tls/certs/stunnel.pem
  2. client=yes
  3. [telnet]
  4. accept=450
  5. connect=192.168.1.143:450

accept 选项是用于 telnet 会话的端口。connect 选项是你远程服务器的 IP 地址以及监听的端口。

接下来,启用并启动 stunnel:

   
   
     
  1. systemctl enable stunnel@telnet.service --now

测试你的连接。由于有一条已建立的连接,你会 telnet 到 localhost 而不是远程 telnet 服务器的主机名或者 IP 地址。

   
   
     
  1. [user@client ~]$ telnet localhost 450
  2. Trying ::1...
  3. telnet: connect to address ::1: Connection refused
  4. Trying 127.0.0.1...
  5. Connected to localhost.
  6. Escape character is '^]'.
  7. Kernel 5.0.9-301.fc30.x86_64 on an x86_64 (0)
  8. server login: myuser
  9. Password: XXXXXXX
  10. Last login: Sun May 5 14:28:22 from localhost
  11. [myuser@server ~]$

via: https://fedoramagazine.org/securing-telnet-connections-with-stunnel/

作者:Curt Warfield 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出


登录查看更多
0

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【干货书】现代数据平台架构,636页pdf
专知会员服务
253+阅读 · 2020年6月15日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
谷歌足球游戏环境使用介绍
CreateAMind
33+阅读 · 2019年6月27日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
A Survey on Deep Learning for Named Entity Recognition
Arxiv
26+阅读 · 2020年3月13日
Arxiv
35+阅读 · 2019年11月7日
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
8+阅读 · 2018年4月8日
VIP会员
相关资讯
用 Python 开发 Excel 宏脚本的神器
私募工场
26+阅读 · 2019年9月8日
通过Docker安装谷歌足球游戏环境
CreateAMind
11+阅读 · 2019年7月7日
谷歌足球游戏环境使用介绍
CreateAMind
33+阅读 · 2019年6月27日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
Pupy – 全平台远程控制工具
黑白之道
43+阅读 · 2019年4月26日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
I2P - 适用于黑客的Android应用程序
黑白之道
30+阅读 · 2019年3月6日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
Top
微信扫码咨询专知VIP会员