SSH远程访问控制

重点:SSH服务的安全控制

   TCPWrappers访问策略

5.1SSH远程管理

  Ssh(Secure  shell) 是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能.SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的口令.于早期的telnet(远程登录)rsh(远程执行命令)rcp(远程文件复制)等应用相比,SSH协议提供更好安全性。

5.1.1配置 OpenSSH服务端

RHEL 5系统中,openssh服务器由openssh openssh-server等软件包提供(默认已安装),并已将sshd添加标准的系统服务,执行“service sshd  start”即可按默认配置启动sshd服务,包括root在内的大部分用户(只要拥有合法的登录shell)都可以远程登录系统。

Sshd的配置文件的默认位于/etc/ssh/sshd_config

1.服务监听选项

Sshd使用的默认端口22,,必要时建议修改此端口,并制定监听服务的具体IP地址,以提高在网络中的隐蔽性。

列:vim  /etc/ssh/sshd_config

Port  22       //监听端口为22

Protocol   2     //使用 ssh v2协议

listenAddress    192.168.4.254   //监听地址为192.168.4.254

UseDNS    no   //禁用dns反向解析

Service   sshd  reload

2.用户登录控制

Sshd服务默认允许root用户登录,在当前internet环境非常不安全,更普遍的做法:以普通用户远程登录,进入安全shell环境后,根据实际需要使用su命令切换为root用户。

Ssh服务用户登录控制,通常应禁止root用户或密码为空的用户登录,另外可以限制登录验证时间(默认两分钟)及最大重试次数,若超过限制后仍未登录则断开连接

列:vim   /etc/sshd/ssh_config

 PermitRootLogin     no    //禁止root用户登录

 PermitEmptyPasswords    no   //禁止空密码用户登录

  LoginGraceTime       2m    //登录验证时间为2分钟

  MaxAuthTries      6         //最大重试次数为6

Service sshdreload

当只允许或禁止某些用户登录时,可以使用AllowUsersDenyUsers配置,两者类似(注意不要同时使用)列:只允许jerryadmin用户登录,且其中admin用户仅能够从IP地址为61.23.24.25的主机远程登录

Vim /etc/ssh/sshd_config

AllowUsers jerry  admin@61.23.24.25       //多个用户以空格分隔

Service sshd  reload

3.登录验证方式

Sshd服务支持两种验证方式:密码验证、密钥对验证,可以设置其中一种方式,也可以两种方式都启用

l密码验证:以服务器中本地系统用户的登录名称、密码进行验证。从服务器来说,当遭遇到密码穷举(暴力破解)***时防御能力较弱。

l密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户机中创建一对密钥文件(公钥、私钥),然定后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密、解密关联验证,大大增强了远程管理的安全性。

注:当密码验证、密钥对验证都使用时,服务器将优先将使用密钥对验证。

对于安全性较高的服务器,建议将密码验证方式禁用,只允许密钥对验证方式;若没有特殊要求,则两种方式都可以启用。

列:vim  /etc/ssh/sshd_config

        PasswordAuthentication    yes                 //启用密码验证

        PubkeyAuthentication      yes                 //启用密钥对验证

        AuthoorizedKeyFile    ./ssh/authorized_keys       //指定公钥库数据文件

        Service  sshd  reload

注:公钥库文件用来保存各客户机上传的公钥文本,以便与客户机本地的私钥文件进行匹配

5.1.2  使用SSH客户端程序

rhel系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程程序命令,以及scpsftp远程复制和文件传输命令。实际上,任何支持ssh协议的客户端程序都可以与oopenssh服务器进行通信,列入,windows平台中的puttywinscpsecureCRT等图形工具。

1.命令程序sshscpsftp

1)ssh远程登录

客户端登录方式:ssh  user@host   -p 22     ssh  -l  user  host

ssh命令可以远程登录到sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。

列: ssh  tsengyia@192.168.4.254

    Are yousure  you want to continue connecting yes /no?yes     //接受密钥

tsengyia@192.168.4.254s  password                      //输入密码

注:当用户第一次登录ssh服务器时,必须接受服务器发来的RSA密钥(根据提示输入yes

后才能继续验证,接收的密钥信息保存到~/.ssh/known_hosts文件中。

列:whoami           //确认当前用户

/sbin/ifconfigeth0 | grep  “inet  addr”        //确认当前主机的IP地址

-p 选项:指定端口号(非默认端口号)

列: ssh  -p 2345 jerry@192.168.4.2

2)scp远程复制

scp远程安全复制 :  scp   user@host:file1  file2 -p   22    scp file1 user@host:file2  

:下载:读取权限上传:写入权限

通过scp命令可以利用SSH 安全连接与远程主机相互复制文件。使用scp命令时必须指定复制源、目标外,还应指定目标主机地址、登录用户、执行后提示验证口令即可。

列:  scp  root@192.168.4.254/etc/passwd   /root/pwd254.txt

    Scp  -r  /etc/vsftpd root@192.168.4.254:/opt/

3)sftp安全ftp

格式:sftp   user@host  -oport=22  (非默认时加端口)

通过sftp命令可以利用ssh安全连接与远程主机上传、下载文件,采用了与ftp类似的登陆过程和交互式环境,便于目录资源管理。

列: sftp  tsengyia@192.168.4.254

     Ls

 Put /boot/config-2.6.18-194.el5       //上传文件

 Bye                                //退出登录

2.图型工具puttyCNwinSCP

1)puttyCN 远程登录

puttyCN是一款跨平台的telnet/ SSH图形客户端软件,能够在windows  32平台模拟xterm终端环境。

使用puttyCN时,只需运行putty.exe,然后再窗口中指定远程主机的IP地址/端口号等信息,在打开,根据提示接受密钥,验证密码即可成功登陆到目标主机。

2)winscp远程复制

winscp是一款用于windows平台的ssh图形客户端软件,用来通过SCP/sftp方式在本地与远程计算机之间安全的复制文件。

使用winscp时,只需运行主程序winscpexe,然后再窗口中制定远程主机的ip地址/端口号等相关信息,在单击“登录”,根据提示

5.1.3构建密钥对验证的ssh体系

密钥对验证方式可以为远程登陆提供更好的安全性,客户机中构建密钥对验证ssh体系的基本过程,如图

191744284.jpg

                   Ssh密钥的实现流程

1.在客户端创建密钥对

linux客户机中,通过ssh-keygen工具为当前用户创建密钥对文件.可用的密钥算法为RSADSA(ssh-keygen命令的-t选项用于指定算法类型).

:ssh-keygen  -t  rsa

Enter  file  in which to save the key(/home/zhangsan/.ssh/id_rsa): //指定私钥位置(回车)

Enter passphrase (empty  for no passphrase):       //设置私钥短语(至少5)

Enter  same passphraseagain:       //确认所设置的短语

公共文件夹默认存放在宿主目录中的隐藏文件夹.ssh/,私钥短语用来对私钥文件进行保护,当使用该密钥验证登陆时必须正确提供此处所设置的短语.

: ls  -lh ~/.ssh/id_rsa*      //确认生成的密钥文件

新生成的密钥文件中,id_rsa是私钥文件,权限默认为600,对于私钥文件必须妥善保管,不能泄露给他人;id_rsa.pub是公钥文件,用来提供给SSH服务器.

2.将公钥文件上传给服务器

将上一步生成的密钥文件发送给服务器,并部署到服务器段用户的公钥数据库中,上传公钥文件可以选择ftp/http/samba甚至发送邮件等方式.

:  scp   ~/.ssh/id_rsa.pub  root@192.168.4.254:/tmp/   //通过scp的方式将文件上传至服务器的/tmp/目录中.

3.在服务器中导入公钥文本

在服务器中,目标用户(指用来远程登陆的帐号)的弓公钥数据库位于”.ssh/”目录,默认的文件名是authorrized_keys,当获得客户机发送过来的公钥文件以后,可以通过重定向将公钥文本内容追加到目标用户的公钥数据库

:mkdir   -p  /home/lisi/.ssh/

 Cat/tmp/id_rsa.pub  >>  /home/lisi/.ssh/authorized_keys

 Tail  -1 /home/lisi/.ssh/authorized_keys

 Chown  -R lisi.lisi  .ssh/

 Chmod  700 .ssh/

  Ls  -l /home/lisi/.ssh/authorized_keys

4.在客户端使用密钥对验证

:  ssh  lisi@192.168.4.254

5.2 TCP wrappers 访问控制

TCP wrappers概述

TCP wrappers将其他的tcp服务程序包裹起来,增加了安全检测的过程,外来的来接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序.如图, TCP wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料.

191746510.jpg


                 TCP Warppers 的工作原理

对于大多数linux 发行版来说, TCP wrappers是默认提供的功能

RHEL5使用的软件包为tcp_wrappers_7.6-40.7.el5,该软件包提供了tcpd和共享连接库文件libwrap.so*,对应TCPwrappers保护机制的两种实现方式直接使用tcpd对其他服务程序进行保护,需要运行tcpd;由其他网络服务程序调用libwrap.so*链接库,不需要运行tcpd

:  rpm  -ql tcp_wrappers

    Ldd  /usr/sbin/vaftpd  | grep “libwrap”      //调用ldd命令可以查看程序共享库

    Ldd  /usr/sbin/sshd  | grep “libwrap”

    Ldd  /usr/sbin/xinetd  | grep “libwrap”

注意 :xinetd是一个特殊的服务管理程序,通常称为超级服务,xinetd通过/etc/xinet.

d/目录下为每一个被保护的程序建立一个配置文件,调用TCPwrappers机制来提供额外的访问控制保护

5.2.2TCP wrappers的访问策略

1.策略的配置格式:<服务程序列表><客户机地址列表>

1)服务程序列表

可分为几类为:ALL:代表所有服务

单个服务程序:如“vsftpd

多个服务程序组成的列表:如“vsftpdsshd

2)客户机地址列表:ALL:代表人和客户机地址

 LOCAL:代表本机地址

单个IP地址:如192.168.4.1

网络段地址:如192.168.4.0/255.255.255.0

以“.”开始的域名:如“.benet.com”匹配.benet.com域中的所有主机

以“.”结束的网络地址,如192.168.4.匹配整个192.168.4.0/24网段

嵌入通配符* ?:前者代表任意长度字符,后者仅代表一个字符,:”10.0.8.2*”匹配以10.0.8.2开头的所有IP地址,不可与以.开始或结束的模式混用 ?代表0-9

多个客户机地址组成的列表,”192.168.1.,172.17.17.,.benet.com”

2.访问控制的基本规则

应用时遵循以下规则:

首先检查/额头从/hosts.allow文件,如找到相匹配的策略,则允许访问

否则继续检查/额头从/hosts.deny文件,如找到相匹配的策略,则拒绝访问

如检查上述两个文件都找不到想匹配的策略,则允许访问

3.TCP wrappers 配置实列:

若允许61.63.65.67的主机或位于192.168.2.0/24网段的主机访问sshd服务,其他所有地址被拒绝

:vi  /etc/hosts.allow

sshdd:61.63.65.67,192.168.2.*

Vi /etc/hosts.deny

Sshd:ALL