目录
一、SSH协议定义及特点
1.什么是SSH
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH是建立在应用层和传输层基础上的安全协议
2.SSH特点
(1)加密传输:
SSH协议通过使用加密算法(如AES、3DES等)对通信数据进行加密,确保在网络上传输的数据不会被非法获取或篡改,从而保证通信的安全性
(2)身份验证:SSH支持多种身份验证方式,如基于密码的身份验证、基于公钥的身份验证和基于证书的身份验证。这些方式可以确保通信的两端是合法的,并且授权的用户才能够建立连接
(3)端到端连接:SSH协议建立的连接是端到端的,通信双方直接进行数据交换,中间不经过明文传输的中继节点,因此可以防止数据在传输过程中被窃听或篡改
(4)端口灵活性:SSH协议通常使用TCP协议,而且默认端口号是22,但是也可以通过配置来更改端口号,以增加安全性或避免端口冲突
(5)终端访问:除了安全远程连接外,SSH还可以提供安全的终端访问使用户可以在远程系统上进行命令行操作,如执行命令、编辑文件等
(6)文件传输:SSH协议也可以用于安全文件传输,通过SCP(SecureCopy Protocol)或SFTP(SSH File Transfer Protocol)实现文件的加密传输和管理
(7)隧道功能:SSH还可以通过建立安全隧道(SSH tunneling)来实现端口转发,将不安全的网络流量通过安全的连接进行转发,增加网络应用的安全性
总之,SSH协议通过加密通信、身份验证和安全访问控制等特点,为远程登录、文件传输和安全隧道等网络应用提供了强大的安全保障
二、SSH传输原理
(1)建立连接:
#客户端发起连接请求,通常使用TCP协议,默认端口号是22,但可以配为其他端口
#服务器监听端口,接受来自客户端的连接请求
(2)协议协商:
#客户端和服务器之间进行协议版本协商,确认双方都支持的SSH协议版本
#协商完成后,双方确认使用的加密算法、身份验证方法和其他协议参数
(3)身份验证:
#客户端向服务器发送身份验证请求,可以选择使用密码、公钥或其他认证方法
#服务器验证客户端提供的凭证(如密码或公钥),确认客户端的身份
(4)建立加密会话:
#一旦身份验证成功,客户端和服务器开始协商加密会话密钥
#客户端生成会话密钥并使用服务器的公钥进行加密,然后将加密后的会话密钥发送给服务器
#服务器使用自己的私钥解密客户端发来的会话密钥,从而双方都获得了相同的会话密钥
(5)加密通信:
#客户端和服务器使用协商好的会话密钥对通信数据进行加密和解密
#数据在传输过程中经过加密,只有知道会话密钥的双方才能解密数据,确保数据的安全性和完整性
(6)数据传输:
#客户端和服务器之间可以安全地传输命令、文件和其他数据
#SSH支持多种数据传输协议,如SSH-2协议中的SCP(Secure Copy Protocol)和SFTP(SSH File Transfer Protocol),这些协议保证了文件传输的家全性
(7)会话管理:
#SSH可以维持长时间的会话,允许用户在远程系统上执行多个命令或操作
#会话结束时,双方关闭连接,会话密钥被丢弃,确保下次会话使用新的密钥总结来说,SSH通过使用加密算法保护数据的机密性,通过身份验证确保通信双方的身份合法性,同时提供了安全的数据传输和管理机制,使得远程登录和文件传输变得安全可靠
三、公钥密钥以及加密解密
公钥传输原理
公钥传输是非对称加密算法的核心应用之一,它的原理相对简单但非常有效公钥和私钥公钥 :就像一把用来锁上数据的钥匙,任何人都可以获得这把钥匙私钥 :是一把用来解开数据的钥匙,只有特定的个人或系统知道它加密和解密如果你想给某人发送加密信息,你会使用接收者的公钥来加密这条信息接收者收到你加密的信息后,使用他们自己的私钥来解密这条信息
具体过程1.生成密钥对 :接收者生成一对密钥:一个是公钥,一个是私钥。这两个密钥是数学相关的,但是公钥可以公开,私钥必须保密2.分享公钥 :接收者把他们的公钥公开发布出去,可以给任何人使用3.加密信息 :发送者想给接收者发送一条加密信息。发送者获取接收者的公钥(这是公开的),然后使用这个公钥来加密他们要发送的信息4.传输加密数据 :发送者把使用接收者公钥加密后的信息发送给接收者5.解密信息 :接收者收到加密的信息后,使用他们自己的私钥来解密它。只有持有私钥的接收者才能解密这条信息
四、加密算法的两种模式
1.对称加密
(1)概念采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用(2)常用算法在对称加密算法中常用的算法有: DES 、 3DES 、 TDEA 、 Blowfish 、 RC2 、 RC4 、 RC5 、 IDEA 、 SKIPJACK等(3)优缺点优点:速度快:
对称加密算法通常非常快速,因为加密和解密过程使用相同的密钥,并且涉及的计算量相对较少高效性:
相对于非对称加密算法,对称加密更加高效,特别适合于大数据量的加密和解密操作广泛应用:
由于速度快和高效性,对称加密广泛应用于网络安全、数据库加密、文件加密等实际场景中实现简单:
实现对称加密算法相对简单,不需要复杂的数学运算,可以轻松在各种平台和系统中部署和使用缺点:密钥管理困难:
对称加密需要发送方和接收方在通信前共享密钥,而且必须确保密钥的安全性。密钥的生成、存储、传输和更新是一个挑战,特别是在分布式系统或者多用户环境下
缺乏非对称加密的某些特性:
对称加密无法提供非对称加密那样的数字签名、密钥交换和安全性验证等特性,这在某些场景下可能是必需的
密钥分发问题:
对称加密中,密钥的安全分发是一个关键问题。如果密钥在传输或存储过程中被截获或泄露,可能导致加密数据的安全性受到威胁缺乏前向保密性:
一旦密钥被泄露,以前加密的所有数据都将面临威胁,这种特性称为缺乏前向保密性
2. 非对称加密
(1)概念非对称加密算法需要两个密钥:公开密钥( publickey: 简称公钥)和私有密钥( privatekey: 简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法(2)常用算法RSA ( RSA algorithm ):目前使用最广泛的算法DSA ( Digital Signature Algorithm ):数字签名算法,和 RSA 不同的是 DSA 仅能用于数字签名, 不能进行数据加密解密,其安全性和RSA 相当,但其性能要比 RSA 快ECC ( Elliptic curve cryptography ,椭圆曲线加密算法)ECDSA( Elliptic Curve Digital Signature Algorithm ,椭圆曲线签名算法)是 ECC 和 DSA 的结合, 相比于RSA 算法, ECC 可以使用更小的秘钥,更高的效率,提供更高的安全保障(3)原理首先 ssh 通过加密算法在客户端产生密钥对(公钥和私钥),公钥发送给服务器端,自己保留私钥,如果要想连接到带有公钥的SSH 服务器,客户端 SSH 软件就会向 SSH 服务器发出请求,请求用联机的用户密钥进行安全验证。SSH 服务器收到请求之后,会先在该 SSH 服务器上连接的用户的家目录下(4)优缺点优点:密钥管理简单:
每个实体只需维护自己的私钥,并将公钥分发给通信方,无需像对称加密那样频繁地交换密钥安全性高:
公钥可以安全地公开,私钥保持机密,因此不易受到中间人攻击或密钥泄露的影响数字签名和身份验证:
非对称加密不仅可以用于加密消息,还可以用私钥生成数字签名,公钥验证签名的真实性,从而实现身份验证和数据完整性验证密钥交换宏全:
通过非对称加密可以安全地交换对称加密的密钥,从而解决了对称加密中密钥分发的安全性问题缺点:计算速度慢:
非对称加密的加密和解密速度通常比对称加密慢得多,因为其涉及到复杂的数学运算,适用于少量数据或者密钥交换,而不适合加密大量数据
资源消耗大:
相比对称加密,非对称加密需要更多的计算资源和内存空间,特别是在嵌入式系统或者移动设备上可能会有一定的性能影响
不适合大数据加密:
由于速度慢和资源消耗大,非对称加密不适合用来加密大量数据,例如大文件或者多媒体数据流
密钥长度问题:
非对称加密算法的密钥长度通常要比对称加密算法长得多,这可能会增加密文的大小,降低通信效率
五、SSHD服务的两种验证方式
密码验证:
对服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在连接的服务器有可能被假冒;从服务器角度来 看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱
18位密码复杂性(大写、小写、字符、数字) 端口(1023以上叫做高位端口1922) 做好安全
密钥对验证:
要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。该方式不易被假冒,且可以免交互登录,在Shell中被广泛使用
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用
六、基本用法
1.直接连接
默认连接root用户
ssh IP地址
第一次和服务端机器连接时,会询问是否要验证公钥,同意或后就会自动获取服务端的公钥
cd .ssh/
ls
cat known_hosts
验证是否连接到正确的服务机器,可以查看服务端的公钥
2.连接指定用户
ssh 用户名@主机名 /也可以使用-l指定用户名
#要是不能连接可以做一个映射
vim /etc/hosts
然后添加目标的IP地址以及用户名
3.指定端口号
sshd服务默认使用的端口号是22,如果不是端口号,需要-p 指定端口号
将服务端的端口号修改成非22端口
vim /etc/ssh/sshd_config
修改之后重启服务
systemctl restart sshd 使配置文件生效
再使用客户机去连接就需要指定端口号了
4.黑白名单
白名单:默认拒绝所有,只有白名单允许的人才可以访问
黑名单:默认允许所有,只有黑名单外的用户才可以访问
先创建3个用户
zhangsan、lisi、luoxiang
然后给与权限
七、基于密钥验证
1.创建密钥
使用密码验证终归会存在着被骇客暴力破解或嗅探监听的危险,其实也可以让 ssh 服务基于密钥进行安全验证(可无需密码验证)
在实验之前,将之前设置的黑白名单删除,或者使用新的客户机实验
做实验之前
ssh-keygen -t rsa 生成密钥对 拷贝出rsa
2.传输到远程主机
拷贝密钥
ssh-copy-id root@172.16.58.10
在服务端查看已经收到的密钥文件,会生成一个authorized_keys的文件
cat /root/.ssh/authorized_keys
3.登录验证
这个时候我们再登录的话,会使用密钥文件进行验证
八、SCP复制
SCP复制又称:安全性复制
scp:scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,而且scp传输是加密的
九、SFTP传输
SFTP传输又称:安全性传输
sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的网络的加密方法
sftp与ftp有着几乎一样的语法和功能。SFTP为SSH的其中一部分,其实在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作
所以,使用SFTP是非常安全的。但是由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP
查看可用命令
help #查看sftp可使用的命令和用途打印服务器当前位置
pwd #打印当前服务器所在位置
lpwd #打印当前本地位置切换目录、查看文件
cd #切换服务器上的目录
ls #查看当前目录下文件列表下载文件、退出sftp
get #下载文件
get -r #下载目录
quit #退出sftp
put #上传文件
退出命令:quit、exit、bye都可以
十、TCP wrappers
TCP Wrappers访问控制
TCP Wrappers ( TCP封套)
将TCP服务程序“包裹"起来,代为监听TCP服务程序的端口,增加了一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正的服务程序
大多数Linux发行版,TCP Wrappers是默认提供的功能rpm -q tcp_ wrappers
TCP Wrappers保护机制的两种实现方式
(1)直接使用tcpd程序对其他服务程序进行保护,需要运行tcpd程序
(2)由其他网络服务程序调用libwrap.so.* 链接库,不需要运行tcpd 程序。此方式的应用更加广泛,也更有效率使用ldd命令可以查看程序的libwrap.so. *链接库
ldd $ (which ssh)
语法格式:<服务程序列表>: <客户端地址列表>
(1)服务程序列表 服务程序列表可分为以下几类。
ALL:代表所有的服务。 单个服务程序:如“vsftpd”。 多个服务程序组成的列表:如“vsftpd,sshd”
访问控制的基本原则
首先检查 /etc/hosts.allow 文件,如果找到相匹配的策略,则允许访问;
否则继续检查/etc/hosts.deny 文件,如果找到相匹配的策略,则拒绝访问;
如果检查上述两个文件都找不到相匹配的策略, 则允许访问“允许所有,拒绝个别”
只需在/etc/hosts.deny文件中添加相应的拒绝策略“允许个别,拒绝所有"
除了在/etc/hosts.allow中添加允许策略之外还需要在/etc/hosts.deny文件中设置"ALL:ALL"的拒绝策略
这里用IP地址为172.16.58.30的客户机来测试连接
发现172.16.58.30可以成功连接而没有被允许的客户机则不能连接
扩展
Linux用户方面的安全加固:
设定密码策略
对用户密码强度的设定
对用户的登录次数进行限制
禁止ROOT用户远程登录
设置历史命令保存条数和账户超时时间
设置只有指定用户组才能使用su命令切
换到root用户
对Linux账户进行管理
对重要的文件进行锁定,即使ROOT用户也无法删除
建立日志服务器