Linux科普-扫除盲区(你应该知道的Telnet)

简介: Linux科普-扫除盲区(你应该知道的Telnet)

前言


对于Telnet的认识,不同的人持有不同的观点,可以把Telnet当成一种通信协议,但是对于入侵者而言,Telnet只是一种远程登录的工具。一旦入侵者与远程主机建立了Telnet连接,入侵者便可以使用目标主机上的软、硬件资源,而入侵者的本地机只相当于一个只有键盘和显示器的终端而已。

 为什么需要telnet?

 telnet有两个主要功能,一个是,查看某个端口是否可访问。我们在搞开发的时候,经常要用的端口就是 8080。那么你可以启动服务器,用telnet 去查看这个端口是否可用。说人话就是端口嗅探功能。

另一个功能就是远程登录服务器啦,和ssh协议一样,远程登录使得服务器的物理距离不是主要的问题了。

 Telnet协议是TCP/IP协议家族中的一员,是Internet远程登陆服务的标准协议和主要方式。这里,多提一句,telnet协议是比ssh协议更早的,并不是特别安全的一个协议。在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。

它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。

telnet的组成:

telnet是c/s 架构的一组程序,通常client端是连接服务端的专有工具,server端是提供侦听client端服务,如果client端验证通过,就可以登录服务器了。

telnet的安装不管是centos7还是6 安装方式都是一样的:

[root@master nginx-offline]# yum install telnet telnet-server -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package telnet.x86_64 1:0.17-64.el7 will be installed
---> Package telnet-server.x86_64 1:0.17-64.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
======================================================================================================================================================
 Package                               Arch                           Version                                Repository                          Size
======================================================================================================================================================
Installing:
 telnet                                x86_64                         1:0.17-64.el7                          local-http                          64 k
 telnet-server                         x86_64                         1:0.17-64.el7                          local-http                          41 k
Transaction Summary
======================================================================================================================================================
Install  2 Packages
Total download size: 105 k
Installed size: 168 k
Downloading packages:
(1/2): telnet-0.17-64.el7.x86_64.rpm  

功能介绍:


一。端口嗅探功能


该功能是由telnet的client端完成,也就是说,如果不需要远程登录,仅仅做端口嗅探,安装client即可。centos系统下安装命令为:(不管要嗅探的服务器是否有安装telnet都可以嗅探)

yum install telnet -y

比如,client已经安装好了,那么,随意连接一个不在线的服务器:

[root@master nginx-offline]# telnet 192.168.0.17 80
Trying 192.168.0.17...
telnet: connect to address 192.168.0.17: No route to host

以上输出告诉我们,192.168.0.17这个服务器没有开启。那么,嗅探百度的服务器,看是否开启了80端口(其实必须是开启的嘛,浏览器输入www.baidu.com 已经表明了是80端口服务,只是省略了而已)

[root@master nginx-offline]# ping baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=52 time=54.1 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=52 time=53.6 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 53.676/53.902/54.129/0.324 ms
[root@master nginx-offline]# telnet 220.181.38.148 80
Trying 220.181.38.148...
Connected to 220.181.38.148.
Escape character is '^]'.
Connection closed by foreign host.

再次嗅探百度的8080和8081端口,从结果可以看到,嗅探端口大概率是被百度阻拦,也就是说端口是开的,但不让你侦测,因为是timeout了嘛。说人话就是端口状态不明,也许是被阻拦了,也许是根本没开。(大厂这一点安全意识还是肯定有的,未知的迷雾才是让人难受的哦)

root@master nginx-offline]# telnet 220.181.38.148 8080
Trying 220.181.38.148...
telnet: connect to address 220.181.38.148: Connection timed out
[root@master nginx-offline]# telnet 220.181.38.148 8081
Trying 220.181.38.148...
telnet: connect to address 220.181.38.148: Connection timed out

嗅探自身的8081端口,可以看到端口并没有开启,因此是refuse。(refused是可以明确的没有开启端口)

[root@master nginx-offline]# telnet 127.0.0.1  8081
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

二,远程登录功能


远程登录需要安装telnet的server端。

由于telnet是一个远古的程序,因此,centos7和centos7以前的telnet远程登录配置是有所不同的。

实验环境概述:

两台服务器,操作系统都为centos7,IP分别为192.168.0.16和192.168.0.17, 实验目的是16服务器可以使用telnet的client端登录到17服务器上。

在192.168.0.17服务器上执行安装命令:

yum install telnet telnet-server -y

telnet-server 在centos7下启动方式为(在17服务器上执行):

systemctl enable telnet.socket

systemctl start telnet.socket

启动之后,我们会发现一个守护进程,该进程ID为1,由systemd进程守护,此服务的端口是23,因此,我们要远程17的话,就需要在16服务器上通过23端口telnet

[root@slave2 ~]# netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      988/sshd            
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:8670            0.0.0.0:*               LISTEN      1063/python         
tcp        0      0 192.168.0.18:23         192.168.0.17:51496      ESTABLISHED 1/systemd           
tcp        0      1 192.168.0.18:24698      192.168.0.16:8440       SYN_SENT    1063/python         
tcp        0     52 192.168.0.18:22         192.168.0.11:49593      ESTABLISHED 1163/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      988/sshd            
udp        0      0 192.168.0.18:123        0.0.0.0:*                           765/ntpd            
udp        0      0 127.0.0.1:123           0.0.0.0:*                           765/ntpd            
udp        0      0 0.0.0.0:123             0.0.0.0:*                           765/ntpd            
udp6       0      0 :::123                  :::*                                765/ntpd

在16服务器上安装Telnet客户端,安装命令为:

yum install telnet -y

安装完成后,就可以愉快的使用telnet远程登录17服务器了,此时我们会发现使用root账号并不能登录服务器,而使用普通账号则可以,这里,是telnet的一个保护措施。

[root@master ~]# telnet 192.168.0.17 23
Trying 192.168.0.17...
Connected to 192.168.0.17.
Escape character is '^]'.
Kernel 3.10.0-693.el7.x86_64 on an x86_64
slave1 login: root
Password: 
Login incorrect
slave1 login: Connection closed by foreign host.

那么,如何可以使用root账号也登录服务器呢?此时,需要编辑/etc/securetty  将以后可能用到的tty终端名称写入就可以了。

pts/0
pts/1
pts/2
pts/3
pts/4
pts/5
pts/6
pts/7
pts/8
pts/9

此时,使用root账号telnet登录就可以正常了:

[root@master ~]# telnet 192.168.0.17 23
Trying 192.168.0.17...
Connected to 192.168.0.17.
Escape character is '^]'.
Kernel 3.10.0-693.el7.x86_64 on an x86_64
slave1 login: root
Password: 
Last failed login: Thu Mar 31 20:20:22 CST 2022 from master on pts/1
There were 11 failed login attempts since the last successful login.
Last login: Thu Mar 31 20:12:01 from master
[root@slave1 ~]# 

telnet的默认端口是23,如果有人恶意的爆破这个端口,那也是比较危险的,因此,我们应该更改telnet服务的端口,比如,43278,随机定义一个不常用的端口。

ListenStream 后的数字改成自己想要的端口,保存即可。

[root@slave1 ~]# cat /usr/lib/systemd/system/telnet.socket 
[Unit]
Description=Telnet Server Activation Socket
Documentation=man:telnetd(8)
[Socket]
ListenStream=23
Accept=true
[Install]
WantedBy=sockets.target

此时执行以下命令即可:(重载systemd的配置,然后重启服务,)

[root@slave1 ~]# systemctl daemon-reload
[root@slave1 ~]# systemctl restart telnet.socket
[root@slave1 ~]# netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      990/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1145/master         
tcp        0      0 0.0.0.0:8670            0.0.0.0:*               LISTEN      1140/python         
tcp        0     52 192.168.0.17:22         192.168.0.11:49592      ESTABLISHED 1233/sshd: root@pts 
tcp        0      0 192.168.0.17:60272      192.168.0.16:8441       ESTABLISHED 1140/python         
tcp6       0      0 :::43278                :::*                    LISTEN      1/systemd           
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd

 此时通过netstat命令可以看到有43278端口了。这个时候,在16服务器上telnet远程命令应该是这样的:

[root@master ~]# telnet 192.168.0.17 43278
Trying 192.168.0.17...
Connected to 192.168.0.17.
Escape character is '^]'.
Kernel 3.10.0-693.el7.x86_64 on an x86_64
slave1 login: 

此时,我们可以试验把17的sshd服务停掉,这个时候telnet将会是的一个后手(即使xshell等等ssh工具都连接不上也没事,有telnet ,你将后顾无忧)

[root@master ~]# ssh slave1
ssh: connect to host slave1 port 22: Connection refused
[root@master ~]# telnet 192.168.0.17 43278
Trying 192.168.0.17...
Connected to 192.168.0.17.
Escape character is '^]'.
Kernel 3.10.0-693.el7.x86_64 on an x86_64
slave1 login: root
Password: 
Last login: Thu Mar 31 20:20:45 from master
目录
相关文章
|
Linux 网络安全
linux端口连通性测试telnet、wget、ssh、curl
linux端口连通性测试telnet、wget、ssh、curl
135 0
|
6月前
|
Kubernetes Ubuntu 安全
Linux|科普扫盲帖|配置网络软件源---阿里云镜像仓库服务使用(centos,Ubuntu)
Linux|科普扫盲帖|配置网络软件源---阿里云镜像仓库服务使用(centos,Ubuntu)
2943 0
|
3月前
|
Linux
linux xshell telnet 进去后如何退出
【8月更文挑战第27天】Telnet协议支持用户远程登录并操控另一台计算机。在Linux系统中结束Telnet会话可采用多种方式:直接输入"exit";利用快捷键Ctrl + ]后跟"quit";同样可通过Telnet命令结合快捷键"Ctrl + ]q"实现;此外,图形界面下直接关闭窗口也是一个简便的选择。用户可根据个人习惯及客户端类型选取合适的方法退出会话。
235 4
|
4月前
|
Linux
Linux telnet安装及端口测试联通性
Linux telnet安装及端口测试联通性
131 10
|
6月前
|
安全 Ubuntu Linux
Linux 网络操作命令Telnet
Linux 网络操作命令Telnet
235 0
Linux 网络操作命令Telnet
|
6月前
|
网络协议 Shell Linux
【Shell 命令集合 网络通讯 】⭐Linux 远程登录工具 telnet 命令 使用指南
【Shell 命令集合 网络通讯 】⭐Linux 远程登录工具 telnet 命令 使用指南
180 0
|
6月前
|
安全 网络协议 Linux
linux命令之telnet
linux命令之telnet
301 4
|
6月前
|
Ubuntu Unix Linux
Unix/Linux操作系统的最强入门科普(经典)
Unix/Linux操作系统的最强入门科普(经典)
406 0
|
6月前
|
Linux Shell
mac/linux提示bash: telnet: command not found
mac/linux提示bash: telnet: command not found
|
6月前
|
运维 网络协议 Linux
linux/windows如何退出telnet
linux/windows如何退出telnet
319 0