⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0310telnetssh.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
		如此一来, 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 + -