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
当只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者类似(注意不要同时使用)列:只允许jerry和admin用户登录,且其中admin用户仅能够从IP地址为61.23.24.25的主机远程登录
Vim /etc/ssh/sshd_config
AllowUsers jerry [email protected] //多个用户以空格分隔
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远程程序命令,以及scp、sftp远程复制和文件传输命令。实际上,任何支持ssh协议的客户端程序都可以与oopenssh服务器进行通信,列入,windows平台中的putty、winscp、secureCRT等图形工具。
1.命令程序ssh、scp、sftp
1)ssh远程登录
客户端登录方式:ssh user@host -p 22 或 ssh -l user host
ssh命令可以远程登录到sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。
列: ssh [email protected]
Are yousure you want to continue connecting (yes /no)?yes //接受密钥
[email protected]’s password : //输入密码
注:当用户第一次登录ssh服务器时,必须接受服务器发来的RSA密钥(根据提示输入yes)
后才能继续验证,接收的密钥信息保存到~/.ssh/known_hosts文件中。
列:whoami //确认当前用户
/sbin/ifconfigeth0 | grep “inet addr” //确认当前主机的IP地址
-p 选项:指定端口号(非默认端口号)
列: ssh -p 2345 [email protected]
2)scp远程复制
scp远程安全复制 : scp user@host:file1 file2 -p 22 或 scp file1 user@host:file2
注:下载:读取权限上传:写入权限
通过scp命令可以利用SSH 安全连接与远程主机相互复制文件。使用scp命令时必须指定复制源、目标外,还应指定目标主机地址、登录用户、执行后提示验证口令即可。
列: scp [email protected]:/etc/passwd /root/pwd254.txt
Scp -r /etc/vsftpd [email protected]:/opt/
3)sftp安全ftp
格式:sftp user@host -oport=22 (非默认时加端口)
通过sftp命令可以利用ssh安全连接与远程主机上传、下载文件,采用了与ftp类似的登陆过程和交互式环境,便于目录资源管理。
列: sftp [email protected]
Ls
Put /boot/config-2.6.18-194.el5 //上传文件
Bye //退出登录
2.图型工具puttyCN、winSCP
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体系的基本过程,如图
Ssh密钥的实现流程
1.在客户端创建密钥对
在linux客户机中,通过ssh-keygen工具为当前用户创建密钥对文件.可用的密钥算法为RSA或DSA(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 [email protected]:/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 [email protected]
5.2 TCP wrappers 访问控制
TCP wrappers概述
TCP wrappers将其他的tcp服务程序包裹起来,增加了安全检测的过程,外来的来接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序.如图, TCP wrappers还可以记录所有企图访问被保护服务的行为,为管理员提供丰富的安全分析资料.
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”
多个服务程序组成的列表:如“vsftpd,sshd”
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
本文出自 “敏而好学” 博客,谢绝转载!