Port
22
将其改为 Port 31337
要验证这些改变是否能发生作用,重新启动OpenSSH,并且再次运行netstat:
# netstat -anp | grep sshd
tcp 0 0 192.168.0.1:31337 0.0.0.0:* LISTEN 330/sshd
最后,要以SSH方式登录到SSH进程在一个非标准端口监听的一台主机上,需要使用-p选项:
ssh -p 31337 user@192.168.0.1
三、使用tcp封装器(tcp wrapper)
Tcp封装器(tcp wrapper)用于限制对你机器上TCP服务的访问。如果你没有听说过TCP封装器,你可能听说过/etc/hosts.allow 和 /etc/hosts.deny:这两个是TCP封装器的配置文件。在SSH的环境中,TCP封装器允许你决定哪些特别的地址或 网络
能够访问SSH服务。
要使TCP封装器用于SSH,你需要确定OpenSSH用TCP封装器构建而成。在任何现代的Linux发行版本中情况确实是这样的。
正如笔者前面所叙述的那样,TCP封装器是通过编辑/etc/hosts.deny 和 /etc/hosts.allow文件来配置的。典型情况下,你告诉hosts.deny禁止一切服务,然后向hosts.allow增加条目以允许特定的主机访问特定的服务,例如:
#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET
services, as decided
# by the '/usr/sbin/tcpd ' server.
#
ALL: ALL
#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd ' server.
#
sshd: 207.46.236. 198.133.219.25
在上面的例子中,对SSH的访问仅限于网络207.46.236.0/24和地址198.133.219.25。从任何其它地址对任何其它服务的请求都通过hosts.deny中的“ALL:ALL”拒绝。如果你试图以SSH方式连接到一台机器,而TCP封装器拒绝了你的访问,你会看到如下内容的消息:
ssh_ exchange
_identification: Connection closed by remote host
这个简单的配置极大地增强了你的安装的 安全
性,在安装得当后,来自敌对客户端的任何数据包在TCP会话的初期,在这些数据包对一个有漏洞的进程造成真实的破坏之前就会被轻易地丢弃。
四、 公共密钥认证
笔者要谈的最后一个问题是公共密钥的认证。用户强化SSH 安全
性的最好方法之一是禁用口令验证,取而代之以公共密钥认证。口令验证并非最佳标准,这有很多原因,不过最重要的是因为人们选择的口令很差,攻击者经常设法采用强力攻击的方法获取你的口令。如果系统管理员已经选择了一个糟糕的口令,那他就是在允许黑客以root身份登录,这样一来也就是将系统拱手交给了黑客。
几乎每一个Linux发行版本都支持公共密钥验证,不过还是从下面的内容开始为妙:
RSAAuthentication yes
PubkeyAuthentication yes
这两个选项默认都设置为“yes”,而“RSAAuthentication”选项适用于SSHv1,“PubkeyAuthentication选项适用于sshv2。如果你打算独占性地使用这种验证方法,你可能需要禁用口令验证:
PasswordAuthentication no
在你进行之前,要确保在目标机器上打开一个终端。一旦你重新启动了SSH进程,如果不输入密钥你将不能登录进入,不过我们还没有生成密钥呢:
在你确定之前,重新启动SSH进程:
# /etc/init.d/sshd restart
[ SUCCESSFUL ] Secure Shell Daemon
[ SUCCESSFUL ] Secure Shell Daemon
现在,你从桌面设法以SSH方式进入目标机器:
$ ssh rwm@brainy
Permission denied (publickey,keyboard-interactive).
我们被封锁在外面了!这是一件好事情。下一步就是要在你的桌面上生成一个密钥:
$ ssh-keygen -t dsa -C "Ryan 's SSHv2 DSA Key (Jan 2008)"
Generating public/private dsa key pair.
Enter file in which to save the key (/home/rwm/.ssh/id_dsa):
Enter passphrase (empty for no passphrase): **********
Enter same passphrase again: **********
Your identification has been saved in /home/rwm/.ssh/id_dsa.
Your public key has been saved in /home/rwm/.ssh/id_dsa.pub.
The key fingerprint is:
98:4d:50:ba:ee:8b:79:be:b3:36:75:8a:c2:4a:44:4b Ryan 's SSHv2 DSA Key (Jan 2008)
五、 注释小结