大多数企业服务器是通过远程登录的方式来进行管理的,如何更加安全、高效的远程管理网络中的各种服务器是作为网络管理人员的必修课。这里将针对Linux环境使用安全的SSH远程管理途径,以及通过TCP Wrappers机制为应用提供访问控制
SSH(secure shell)是一种安全的通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,与早期的TELNET、RSH、RCP等应用相比,SSH协议提供了更好的安全性
配置OpenSSH服务端
在RHEL系统中,OpenSSH服务器的openssh等软件包默认已经安装,并已添加为系统服务,只需配置并启动sshd服务,大部分用户(拥有合法的登录shell)都可以远程登录系统。sshd的配置文件位于/etc/ssh/sshd_config目录下,正确调整相关配置项,有助于提高sshd远程登录的安全性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<code>[root@localhost ~]</code><code># vim /etc/ssh/sshd_config </code>
<code>Port 22 </code><code>//</code><code>默认端口号22,必要时可修改</code>
<code>ListenAddress 192.168.1.1 </code><code>//</code><code>监听地址</code>
<code>Protocol 2 </code><code>//</code><code>使用SSH v2协议,比v1更安全</code>
<code>UseDNS no </code><code>//</code><code>禁用DNS反向解析,提高服务器响应速度</code>
<code>LoginGraceTime 2m </code><code>//</code><code>登录验证时间为2分钟</code>
<code>PermitRootLogin </code><code>yes</code> <code>//</code><code>禁止root用户登录,用普通用户登录后,</code><code>su</code><code>切换为root更加安全</code>
<code>MaxAuthTries 6 </code><code>//</code><code>最大重试次数为6</code>
<code>PermitEmptyPasswords no </code><code>//</code><code>禁止空密码用户登录</code>
<code>AllowUsers ysf [email protected] </code><code>//</code><code>当只允许某些用户登录时</code>
<code>DenyUsers yangshufan </code><code>//</code><code>当只禁止某些用户登录时,注意两者不要同时使用</code>
<code>PasswordAuthentication </code><code>yes</code> <code>//</code><code>启用密码验证</code>
<code>PubkeyAuthentication </code><code>yes</code> <code>//</code><code>启用密钥对验证</code>
<code>AuthorizedKeysFile .</code><code>ssh</code><code>/authorized_keys</code> <code>//</code><code>指定公钥库数据文件</code>
<code>[root@localhost ~]</code><code># service sshd reload //配置完后,需要更新服务</code>
<code>重新载入 sshd: [确定]</code>
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性较高的服务器,建议禁止密码验证方式,只允许密钥对验证方式;若没有特殊要求,则两种都可以启用
使用SSH客户端程序
在Linux系统中,SSH客户端默认已安装,其中包括ssh、scp、sftp等命令。实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如Windows平台中的Xshell、SecureCRT、Putty等图形工具。
(1)ssh远程登录
通过ssh命令,可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护
<code>[root@localhost ~]</code><code># ssh [email protected] //如果不是默认端口,需要使用"-p 端口号"</code>
<code>Are you sure you want to </code><code>continue</code> <code>connecting (</code><code>yes</code><code>/no</code><code>)? </code><code>yes</code> <code>//</code><code>第一次连接,必须输入</code><code>yes</code>
<code>[email protected]'s password: </code><code>//</code><code>输入密码</code>
<code>Last login: Thu Dec 28 05:01:52 2017 from 192.168.1.2</code>
<code>[ysf@localhost ~]$</code>
(2)scp远程复制
通过scp命令可以利用SSH安全连接与远程主机互相复制文件
<code>[root@localhost ~]</code><code># scp /etc/passwd [email protected]:/root/passwd.txt //将本地文件复制到远程主机</code>
<code>[email protected]'s password: </code>
<code>passwd</code> <code>100% 1915 1.9KB</code><code>/s</code> <code>00:00 </code>
<code>[root@localhost ~]</code><code># scp -r [email protected]:/home/ /opt //将远程主机的home目录复制到本地</code>
<code>.bash_profile 100% 176 0.2KB</code><code>/s</code> <code>00:00 </code>
<code>.bash_logout 100% 18 0.0KB</code><code>/s</code> <code>00:00 </code>
<code>[root@localhost ~]</code><code>#</code>
(3)sftp安全FTP
通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件,采用了与FTP类似的登陆过程和交互式环境,便于管理资源
<code>[root@localhost ~]</code><code># sftp [email protected]</code>
<code>Connecting to 192.168.1.1...</code>
<code>[email protected]'s password: </code>
<code>sftp</code><code>> help</code>
<code>sftp</code><code>> bye</code>
使用密钥对验证SSH的方式
密钥对验证方式可以为远程登录提供更好的安全性,下面将介绍在Linux服务器、客户机中构建密钥对验证SSH体系的基本过程,如下图所示:
1. 在客户机创建密钥对
<code>[yang@localhost ~]$ </code><code>ssh</code><code>-keygen -t rsa </code><code>//ssh-keygen</code><code>工具为当前用户创建密钥对文件,rsa为加密算法,也可以为dsa加密算法</code>
<code>Generating public</code><code>/private</code> <code>rsa key pair.</code>
<code>Enter </code><code>file</code> <code>in</code> <code>which</code> <code>to save the key (</code><code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>): </code><code>//</code><code>指定私钥位置,按Enter键确定</code>
<code>Created directory </code><code>'/home/yang/.ssh'</code><code>.</code>
<code>Enter passphrase (empty </code><code>for</code> <code>no passphrase): </code><code>//</code><code>设置私钥密码,也可以设置为空,实现无密码登录,但使用密码更加安全</code>
<code>Enter same passphrase again: </code><code>//</code><code>确认密码</code>
<code>Your identification has been saved </code><code>in</code> <code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.</code>
<code>[yang@localhost ~]$ </code><code>ls</code> <code>-lh ~/.</code><code>ssh</code><code>/id_rsa</code><code>* </code><code>//</code><code>确认生成的密钥文件</code>
<code>-rw-------. 1 yang yang 1.8K 12月 29 08:47 </code><code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code> <code>//</code><code>私钥文件,不能泄露</code>
<code>-rw-r--r--. 1 yang yang 408 12月 29 08:47 </code><code>/home/yang/</code><code>.</code><code>ssh</code><code>/id_rsa</code><code>.pub </code><code>//</code><code>公钥文件,用来提供给服务器</code>
2. 将公钥上传至服务器
3. 在服务器中导入公钥文本
上面两个步骤有两种方式完成导入:
方式一:命令格式如下
ssh-copy-id -i 公钥文件 目标主机用户@目标主机
<code>[yang@localhost ~]</code><code># ssh-copy-id -i .ssh/id_rsa.pub [email protected]</code>
<code>[email protected]'s password: </code><code>//</code><code>输入ysf的密码</code>
<code>Now try logging into the machine, with </code><code>"ssh '[email protected]'"</code><code>, and check </code><code>in</code><code>:</code>
<code> </code><code>.</code><code>ssh</code><code>/authorized_keys</code>
<code>to </code><code>make</code> <code>sure we haven</code><code>'t added extra keys that you weren'</code><code>t expecting.</code>
<code>[ysf@localhost ~]</code><code># //验证密码后,会将公钥自动添加到宿主目录下的.ssh/authorized_keys</code>
方式二:使用FTP、scp等方式上传到服务器,在将文件导入到目标用户的公钥数据库
<code>[yang@localhost ~]$ </code><code>scp</code> <code>.</code><code>ssh</code><code>/id_rsa</code><code>.pub [email protected]:</code><code>/tmp</code> <code>//</code><code>使用</code><code>scp</code><code>命令上传到服务器</code>
<code>[email protected]'s password: </code><code>//</code><code>输入服务器root的密码</code>
<code>Could not chdir to home directory </code><code>/home/ysf</code><code>: No such </code><code>file</code> <code>or directory</code>
<code>id_rsa.pub 100% 408 0.4KB</code><code>/s</code> <code>00:00 </code>
<code>[yang@localhost ~]$ </code><code>ssh</code> <code>[email protected] </code><code>//</code><code>远程登录到服务器</code>
<code>[root@localhost ~]</code><code># mkdir /home/ysf/.ssh //将公钥导入到公钥数据库</code>
<code>[root@localhost ~]</code><code># cat /tmp/id_rsa.pub >> /home/ysf/.ssh/authorized_keys </code>
<code>[root@localhost ~]</code><code># ls -l /home/ysf/.ssh/authorized_keys //注意:公钥库文件的权限必须是root用户或宿主用户</code>
<code>-rw-rw-r--. 1 root root 408 12月 29 10:01 .</code><code>ssh</code><code>/authorized_keys</code>
4. 在客户端上使用密钥对验证
<code>[yang@localhost ~]$ </code><code>ssh</code> <code>[email protected]</code>
<code>Enter passphrase </code><code>for</code> <code>key </code><code>'/home/yang/.ssh/id_rsa'</code><code>: </code><code>//</code><code>输入私钥密码,如未设置密码,则直接登录服务器</code>
<code>Last login: Fri Dec 29 10:57:12 2017 from 192.168.1.2</code>
TCP Wrappers访问控制
TCP Wrappers将其他TCP服务程序包裹起来,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。对于大多数Linux发行版,TCP Wrappers是默认提供的功能。
1. 策略的配置格式
TCP Wrappers机制的保护对象为各种网络服务程序,针对访问服务程序的客户机地址进行访问控制。对应的策略文件为/etc/hosts.allow和/etc/hosts.deny,分别提供允许和拒绝的要求
配置格式如下:
服务程序列表:客户机地址列表
其中,
(1)服务程序列表分为以下几类:
ALL:代表所有服务
单个服务程序:如“sshd”
多个服务程序组成的列表:如“httpd,sshd”,以逗号分隔
(2)客户机地址列表分为以下几类:
ALL:代表任何客户机服务
LOCAL:代表本机地址
单个IP地址:如“192.168.1.1”
网络段地址:如“192.168.1.0/255.255.255.0”或者“192.168.1.”
域名:如“.ysf.com”匹配ysf.com域中的所有主机
通配符*、?:前者代表任意长度字符,后者仅代表一个字符
多个客户机地址组成的列表:如“192.168.1.1,172.16.10.,.ysf.com”
2. 访问控制的基本原则
(1)

先检查hosts.allow,找到匹配则允许访问
(2)

否则再检查hosts.deny,找到则拒绝访问
(3)

若两个文件中均无匹配策略,则默认允许访问
实际使用TCP Wrappers机制时,较为宽松的策略可以是“允许所有,拒绝个别”,较为严格的可以是“允许个别,拒绝所有”。前者只需在hosts.deny文件中添加相应的策略;而后者需要在hosts.allow中添加允许策略外,还要在hosts.deny文件中添加“ALL:ALL”的拒绝策略
例如:
1)

仅允许从主机61.63.65.67,网段192.168.2.0/24 地址访问sshd服务 ,

禁止其他所有地址访问受保护的服务
2)拒绝192.168.2.2访问httpd服务
<code>[root@localhost ~]</code><code># vim /etc/hosts.allow</code>
<code>sshd:61.63.65.67,192.168.2.*</code>
<code>[root@localhost ~]</code><code># vim /etc/hosts.deny</code>
<code>sshd:ALL</code>
<code>httpd:192.168.2.2</code>
<code></code>
本文转自 杨书凡 51CTO博客,原文链接:http://blog.51cto.com/yangshufan/2055727,如需转载请自行联系原作者