云网牛站
所在位置:首页 > Linux安全 > 使用stunnel保护telnet连接的方法

使用stunnel保护telnet连接的方法

2019-05-22 21:23:23作者:范义稿源:云网牛站

Telnet是一种客户端服务器协议,通过23端口上的TCP连接到远程服务器,Telnet不加密数据,被认为是不安全的,密码很容易被嗅探,因为数据是以明文形式发送的,但是仍有遗留系统需要使用它。Stunnel旨在为具有不安全连接协议的程序添加SSL加密,本文将以telnet为例介绍如何使用它。参考在CentOS Minimal中安装telnet服务与xinetd服务

使用stunnel保护telnet连接的方法

 

服务器安装

使用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 ~]$

 

相关主题

使用nc、nmap、telnet命令检查端口是否在远程Linux系统上打开

精选文章
热门文章