目录
SSH服务
1.1什么是SSH服务器?
1.2SSH优点
1.3常见的ssh协议
1.3ssh原理
TCP_Wrappers
工作原理
TCP wrappers 的访间策略
SSH服务
1.1什么是SSH服务器?
SSH是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能;
SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令;
SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。
SSH客户端<--------------网络---------------->SSH服务端
1.2SSH优点
-
数据传输是加密的,可以防止信息泄漏 -
数据传输是压缩的,可以提高传输速度
1.3常见的ssh协议
客户端: Linux Client: ssh, scp, sftp,slogin Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient
OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。
执行"systemctl start sshd"命令即可启动sshd 服务
sshd 服务默认使用的是TCP的22端口,安全协议版本sshv2,出来2之外还有1(有漏洞)
sshd服务的默认配置文件是/etc/ssh/sshd_config ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件,后者则是针对服务端的配置文件。
服务名称:sshd 服务端主程序:/usr/sbin/sshd ? 服务端配置文件:/etc/ssh/sshd_config? 客户端配置文件:/etc/ssh/ssh_configan>
1.3ssh原理
公钥传输原理: 客户端发起链接请求
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
客户端生成密钥对
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都
会被加密
登录:
#登录 方法一:
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port
当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。
例子:
[root@localhost ~]#ssh root@192.168.91.101
#默认使用22端口 root(登录对方的用户)加IP 地址,首次登录会询问,并要求输入密码
The authenticity of host '192.168.59.117(192.168.59.107)' can't be established.
ECDSA key fingerprint is SHA256:o72+YjT+8laQRofsv2dFlcx099aeoI92rloek3ZVrUY.
ECDSA key fingerprint is MD5:a7:9c:69:35:16:17:21:cb:0e:4f:0d:42:44:16:3a:f7.
Are you sure you want to continue connecting (yes/no)?
root@192.168.59.101's password:
Last login: Tue Sep 28 22:23:52 2021
[root@localhost ~]#
#登录方法二
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
例子:
[root@localhost ~]#ssh -l root 192.168.59.117
root@192.168.91.101's password:
Last login: Tue Sep 28 22:25:40 2021 from 192.168.59.102
服务端配置:
密码验证: 以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。
密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。
公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
不能根据一个密码来推算出另一个密钥;
公钥对外公开,私钥只有私钥的持有人才知道。
实例配置:
配置密钥对验证 1.在客户端创建密钥对 通过ssh-keygen工具为当前用户创建密钥对文件。可用的加密算法为RSA、ECDSA或DsA等(ssh-keygen命令的"-t"选项用于指定算法类型)。useradd admin echo "123123" l passwd --stdin adminsu - admin ssh-keygen -t ecdsa Generating public/private ecdsa key pair. Enter file in which to save the key(/home/admin/.ssh/id ecdsa):#指定私钥位置,直接回车使用默认位置Created directory '/ home / admin / .ssh' . #生成的私钥、公钥文件默认存放在宿主目录中的隐藏目录.ssh/下 Enter passphrase (empty for no passphrase) : #设置私钥的密码 Enter same passphrase again: #确认输入 ls -l ~/ .ssh/id ecdsa* #id_ecdsa是私钥文件,权限默认为600; id _ecdsa.pub是公钥文件,用来提供给 sSH服务器 2.将公钥文件上传至服务器 scp ~ / .ssh/id_ecdsa.pub root@192.168.159.10 : / opt或 #此方法可直接在服务器的/home /zhangsan/.ssh/目录中导入公钥文本cd ~ / .ssh/ ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.159.10 3.在服务器中导入公钥文本 mkdir /home / zhangsan/ .ssh/ cat /opt/id_ecdsa.pub >>/ home/zhangsan/ .ssh/authorized_keys cat / home / zhangsan / .ssh/authorized_keys 4.在客户端使用密钥对验证 ssh zhangsan@192.168.159.10 Enter passphrase for key '/home / admin/ .ssh/id_ecdsa ' : #输入私钥的密码 5.在客户机设置ssh代理功能,实现免交互登录 ssh-agent bash ssh-add Enter passphrase for /home / admin/ .ssh/id_ecdsa : #输入私钥的密码 ssh zhangsan@192.168.159.10
TCP_Wrappers
TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序就可以受TCP_Wrappers 的安全控制。它的主要功能就是控制谁可以访问,常见的程序有rpcbind、vsftpd、sshd,telnet。
工作原理
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
TCP wrappers 的访间策略
TCP wrappers访问控制 TCP Wrappers (TCp封套)是一 个简单的防火墙机制。用来将TCp服务程序"包裹"起来,代为监听rCP服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序。 大多数Linux 发行版,TCP wrappers是默认提供的功能。rpm -q tcp_ wrappers 1.直接使用Eepd程序对其他服务程序进行保护,需要运行tepd程序 2.由其他网络服务程序调用libwrap.so.* 动态函数库,不需要运行tcpd 程序。此方式的应用更加广泛,也更有效率。 由于支持TCP wrappers 的服务必定包含libwrap这-个动态函数库,因此可以使用ldd来查看服务即可 1ibwrap.so.0 => /1ib64/1ibwrap. so.0 (0x00007f91d0bdb000) ldd S (which vsftpd)| grep libwrap (0x00007f4304 f3b000) 1dd S(which xinetd) 1 grep libwrap libwrap.so.0 => /1ib64/ libwrap.so.0 (0x00007f8b17ec6000) TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。 通过/etc/ hosts.allow,/etc/hosts. deny这两个文件来管理的一个类似防火墙的机制,分别用来设置允许和拒绝的策略。 <服务程序列表> :<客户端地址列表> (1)服务程序列表. All:代表所有的服务 多个服务程序组成的列表:如"vsftpd, ssha". (2)客户端地址列表 ALL:代表任何客户端地址。 多个地址以逗号分隔 允许使用通配符“*”禾 前者代表任意长度字符,后者仅代表-一个字符 区域地址,如".benet. com"匹配benet. com域中的所有主机。 5.0 (掩码只支持netmask 的地址显示方式) TCP wrappers机制的基本原则: 首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问: 否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问: 如果检查_上述两个文件都找不到相匹配的策略,则允许访问。 “允许所有,拒绝个别” 只需在/etc/hosts.deny文件中添加相应的拒绝策略 “允许个别,拒绝所有" 除了在/etc/hosts .allow中添加允许策略之外,还需要在/etc/hosts . deny文件中设置“ALL :ALI"的拒绝策略。 若只希望从IP地址为12.0.0.1的主机或者位于192. 168.80.0/24网段的主机访问sshd服务,其他地址被拒绝。 vi /etc/hosts.allow sshd:192.168.80.*.172.16.0.0/255.255.255.0 vi /etc/hosts . deny sshd:ALL ?
使用ldd命令可以查看程序的libwrap.so.*链接库
只希望从IP地址为12.0.0.1的主机或者位于192. 168.80.0/24网段的主机访问sshd服务,其他地址被拒绝:
实例配置:
?
再次访问发现访问不了,但是其他地址的主机可以正常访问
?
两个文件搭配完成拒绝159段除本机和20地址主机外所有主机访问的效果。
除了sshd服务其余如named,vsftpd等服务同理。
简而言之,先看hosts.allow文件中的策略,匹配上则直接放通,如没有匹配再看hosts.deny文件中的个策略,匹配上则禁止/拒绝访问指定的tcp服务程序,如果也没匹配则默认允许放通。
|