📄 0310telnetssh.htm
字号:
如此一来, root 将可以直接进入 Linux 主机了!不过,既然我们可以透过 su 或 sudo 来切换身份,
那么干嘛还需要开放 root 用 telnet 登入主机呢?真是没必要~所以,
<span class=text_import1>还是不建议如此做的</span>!<br /><br />
</div>
<li><span class=text_import1>加上防火墙 iptables∶</span></li>
<div class=block2>
针对 telnet 加设防火墙 iptables 是一个好主意!如果您已经参考了前面章节提到的『
<a href="0250simple_firewall.php">简易防火墙架设</a> 』一文,并且使用里面的
scripts 的话,那么不用担心 telnet 啦!基本上,他原本就仅对内部开放 telnet
,外部是无法连上您的 telnet 的!但是,若是您自己设定了自己的防火墙机制之后,那么想要针对
192.168.0.0/24 这个网域,及 61.xxx.xxx.xxx 这个 IP 进行 telnet 的开放呢?可以增加这几行在您的
iptables 规则之内(请注意∶防火墙的规则顺序是很重要的!所以再回头看看
<a href="0250simple_firewall.php">简易防火墙架设</a> 一文是有必要的!)<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_write>iptables -A INPUT -p tcp -i $INIF -s 192.168.0.0/24 --dport 23 -j ACCEPT
iptables -A INPUT -p tcp -i $EXTIF -s 61.xxx.xxx.xxx --dport 23 -j ACCEPT
iptables -A INPUT -p tcp -i $EXTIF --dport 23 -j DROP</span>
</pre></td></tr></table>
上面的规则中,$EXTIF 指的是对外的连线介面,$INIF 则是对内的介面。
第一、二行是针对来源的 IP 来开放 port 23 亦即是 telnet 的协定啦!
而最后一行则是将其他的所有来源的,想要连上
telnet 的连线封包都丢掉的意思!怎么样!很简单吧!<br /><br />
</div>
<li><span class=text_import1>加上防火墙 /etc/hosts.allow(deny) 机制∶</span></li>
<div class=block2>
防火墙的机制是越多越好!永远也不嫌多的啦!这里也可以使用 TCP_Wrappers
的机制呢!刚刚是开放了 192.168.0.0/24 这个网段,但是如果您只想要其中的
192.168.0.1 ~ 192.168.0.5 进入呢?而其他的 IP 只要一经连线,就会被记录该
IP ,以提供 root 查询呢?可以这样做∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/hosts.allow</span>
in.telnetd: 192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4
in.telnetd: 192.168.0.5
[root@linux ~]# <span class=term_command>vi /etc/hosts.deny</span>
in.telnetd : ALL : spawn (/bin/echo Security notice from `/bin/hostname`; \
/bin/echo; /usr/sbin/safe_finger @%h ) | \
/bin/mail -s "%d -%h security" root@localhost & \
: twist ( /bin/echo -e "\n\nWARNING connectin not allowed. \n\n\n" )
</pre></td></tr></table>
</div>
<li><span class=text_import1>建议事项∶</span></li>
<div class=block2>
事实上, telnet 最大的不安全在于资料是以明码传输,所以在 Internet
这个大家都能够连上的地方来传输资料时,实在很不安全!所以∶
<ol><span class=text_import2>
<li>非必要时,不要启动 telnet ,如果真的需要启动 telnet
,那么也请在启动并且使用完毕之后,立即将他关掉!</li>
<li>如果确定真的要启动 telnet 时,请确定好限制的连线范围,使用
iptables 来设定连线的限制区域;</li>
<li>加上 TCP_Wrappers 的辅助,加强防火墙的功能!</li>
<li>随时注意登录档案里面关于 login 的事项!并且不要让
root 能以 telnet 登入 Linux 主机!</li>
</span></ol>
</div>
</div>
</div>
<hr /><a NAME="ssh"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">SSH 伺服器</span><br />
<div class=block1>
既然 telnet 的资料在 Internet 上不是很安全,那么我又需要以远端连线服务来操控我的 Linux
主机,那么应该怎么办呀?最好的方法当然就是以较为安全的连线机制来解决连线的问题棉!
那么该如何解决这样的问题呢?这也不难啦,使用
SSH 即可。那么 SSH 是什么呢?他有什么特异功能?<br /><br />
简单的来说,<span class=text_import2>SSH
是 <b>S</b>ecure <b>SH</b>ell protocol 的简写</span>,他可以经由将连线的封包加密的技术,
来进行资料的传递,因此,资料当然就比较安全棉!这个
SSH 可以用来取代 Internet 上面较不安全的 finger, R Shell (rcp, rlogin,
rsh 等指令), talk 及 telnet 等连线模式。底下我们将先简介一下 SSH 的连线模式,来说明为什么
SSH 会比较安全呢!<br /><br />
特别注意∶这个 SSH 协定,在预设的状态中,本身就提供两个伺服器功能∶
<ol><span class=text_import2>
<li>一个就是类似 telnet 的远端连线使用 shell 的伺服器,亦即是俗称的 ssh ;</li>
<li>另一个就是类似 FTP 服务的 sftp-server !提供更安全的 FTP 服务。</li>
</span></ol><br />
<hr /><a name="ssh_connect"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>连线加密技术简介∶</span><br />
<div class=block2>
什么是『资料加密』呢?简单的说,就是将人们看的懂得电子资料,经过一些运算,
让这些资料变成没有意义的(至少对人类来说)咚咚,然后这个咚咚可以在网路上面传输,
而当使用者想要查阅这个资料时,再透过反向运算,将这些咚咚反推出原始的电子资料。
由于这些资料已经被重新处理过,所以,即使资料在 Internet 上被 cracker
监听而窃取,他们也不容易就推算得出来原始资料内容的。<br /><br />
网路封包的加密技术通常是藉由所谓的『<span class=text_import2>一对公钥与私钥</span>』
亦即『<span class=text_import2>Public and Private 组合成的 key pair</span>』
来进行加密与解密的动作!如下图所示。主机端所要传给 client 端的资料,会先经由公钥加密后才到网路上传输。
而到达 client 端之后,再经由私钥将加密的资料解开来~由于在 Internet 上面跑的资料是加密过后的,
所以你的资料内容当然就比较安全啦!<br /><br />
<center><img src="0310telnetssh/0310telnetssh-1.jpg"
title="公钥与私钥在进行资料传输时的角色示意图"
alt="公钥与私钥在进行资料传输时的角色示意图"><br />
图一、公钥与私钥在进行资料传输时的角色示意图</center><br />
<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen"> 资料加密的技术真的相当的多,也各有其优缺点,有的运算速度快,
但是不够安全;有的够安全,但是加密/解密的速度较慢~
目前在 SSH 使用上,主要是利用 RSA/DSA/Diffie-Hellman 等机制喔!
</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>
那么这些公钥与私钥是如何产生的呢?底下我们来谈一谈目前
SSH 的两种版本的连线模式棉!<br /><br />
<li><span class=text_import1>SSH protocol version 1</span>∶</li>
<div class=block2>
每一部 SSH 伺服器主机都可以使用 RSA 加密方式来产生一个 1024-bit 的 RSA Key ,
这个 RSA 的加密方式,主要就是用来产生公钥与私钥的演算方法!这个
version 1 的整个连线的加密步骤可以简单的这么看∶
<ol><span class=text_import2>
<li>当每次 SSH daemon (sshd) 启动时,就会产生一支 768-bit
的公钥(或称为 server key)存放在 Server 中;</li>
<li>若有 client 端的 ssh 连线需求传送来时,那么 Server 就会将这一支公钥传给
client ,此时 client 也会比对一下这支公钥的正确性。比对的方法为利用
/etc/ssh/ssh_known_hosts 或 ~/.ssh/known_hosts 档案内容。</li>
<li>在 Client 接受这个 768-bit 的 server key 之后,Client 自己也会随机产生一支
256-bit 的私钥(host key),并且以加密的方式将 server key 与 host key 整合成一对完整的
Key pair,并且将这对 Key pair 也传送给 server ;</li>
<li>之后,Server 与 Client 在这次的连线当中,就以这一对 1024-bit 的 Key pair 来进行资料的传递!</li>
</ol></span>
也就是说,Public Key 是放在 Server 上的,而 Client 端的软体必须要能接受 Public Key 以及计算出
Private Key 以组合成为一把独一无二的 key pair ,因为 Client 端每次的 256-bit 的 Key
是随机取的,所以您这次的连线与下次的连线的 Key 可能就会不一样啦!此外在 Client 端的使用者家目录下的
~/.ssh/known_hosts 会记录曾经连线过的主机的 public key ,用以确认每次来自该主机的连线是正确的。
这个 ~/.ssh/known_hosts 档案的意义后续还会介绍的。<br />
</div>
<li><span class=text_import1>SSH protocol version 2</span>∶</li>
<div class=block2>
在 SSH version1 的连线过程当中,当 server 端接受 client 端的 private key 后,就不再针对该次连线的
key pair 进行检验。此时若有恶意的 cracker 针对该连线给予恶意的程式码时,由于主机端不会检验连线的正确性,
因此可能会接受该程式码,进一步造成系统被黑掉的问题。<br /><br />
为了改正这个缺失,SSH version 2 多加了一个确认连线正确性的 Diffie-Hellman 机制,
在每次资料的传输当中 server 端都会以该机制检查资料的来源是否正确,
所以可以避免连线过程当中被插入恶意程式码的问题!
也就是说, ssh version 2 是比较安全的喔!<br /><br />
</div>
由于 SSH version 1 本身存在著的一些问题,因此,近来我们都希望大家使用 ssh version 2 的连线模式,
会比较安全一点。而连线版本的设定则需要在 ssh 主机端与客户端均设定好才行喔!<br /><br />
</div>
<hr /><a name="ssh_start"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>启动 SSH 服务∶</span><br />
<div class=block2>
事实上,在我们使用的 Linux 系统当中,预设就已经含有 SSH 的所有需要的套件了!
这包含了可以产生密码等协定的 <a href="http://www.openssl.org" target="_blank">OpenSSL</a>
套件与 <a href="http://www.openssh.com/" target="_blank">OpenSSH</a>
套件,所以呢,要启动 SSH 真的是太简单了!就直接给他启动就是了!此外,在目前的
Linux Distributions 当中,<span class=text_import2>都是预设启动 SSH 的</span>,
所以一点都不麻烦,因为不用去设定,他就已经启动了!哇!真是爽快~无论如何,
我们还是得说一说这个启动的方式吧!直接启动就是以
SSH daemon ,简称为 sshd 来启动的,所以,手动可以这样启动∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>/etc/init.d/sshd restart</span>
[root@linux ~]# <span class=term_command>netstat -tlp</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ssh *:* LISTEN 24266/sshd
</pre></td></tr></table>
启动后,利用 <a href="0140networkcommand.php#netstat">netstat</a> 查阅一下
sshd 这个程序是否正确的在 LISTEN 即可!当然,这个时候您的 SSH 伺服器设定值均是使用系统预设值,
能不能够仅用较安全的 version 2 ,则需要进一步的设定呢。
接下来,如果您想要在开机就启动 SSH 的话(预设也是启动的!),可以利用
<a href="../linux_basic/0560daemons.php#chkconfig">chkconfig</a>
来设定开机启动即可。<br /><br />
虽然新的 Linux distributions 都预设会有 SSH 存在的,但是较旧的版本就仅有 telnet 而已。
例如 Red Hat 6.x 之前的版本。那么如果您想要在旧的 distributions 当中安装 SSH 该如何是好?
嘿嘿!可以参考一下鸟哥之前写过的一篇咚咚,有详细的说明 tarball 的安装流程哩!
<ul><a href="0310telnetssh/0310telnetssh-2.php">使用 Tarbal 安装 SSH 以及升级 SSH 可能会遇到的问题说明<br />
(http://linux.vbird.org/linux_server/0310telnetssh/0310telnetssh-2.php)</a></ul>
需要注意的是, SSH 不但提供了 shell 给我们使用,亦即是 ssh protocol
的主要目的,同时亦提供了一个较为安全的 FTP server ,亦即是 ssh-ftp server
给我们当成是 FTP 来使用!所以,<span class=text_import2>这个 sshd 可以同时提供
shell 与 ftp 喔!而且都是架构在 port 22 上面的呢</span>!所以,底下我们就来提一提,那么怎么样由
Client 端连接上 Server 端呢?同时,如何以 FTP 的服务来连接上 Server 并且使用
FTP 的功能呢?<br /><br />
</div>
<hr /><a name="ssh_client"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>ssh 用户端连线∶</span><br />
<div class=block2>
由于 Linux 与 Windows 这两个用户端 Client 连线软体/指令并不一样,所以我们分别来介绍可以使用的指令∶<br /><br />
<li><a name="ssh_client_ssh"></a><span class=text_import1>Linux Client: ssh</span></li>
<div class=block2>
SSH 在 client 端使用的是 ssh 这个指令,这个指令可以指定连线的版本 (version1, version2),
还可以指定非正规的 ssh port (正规 ssh port 为 22)。不过,一般的用法可以使用底下的方式∶<br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -