美文网首页
第四章:SSH安全协议

第四章:SSH安全协议

作者: chenkang | 来源:发表于2019-10-16 11:41 被阅读0次

第一节:SSH基本概述

SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。
1.提供远程连接服务器的服务
2.对传输的数据进行加密

远程连接: ssh telnet RDP(Windows) MAc--RDP-->Windows

ssh 主要是提供给服务器使用(Linux) 安全 数据包都是加密的 22/tcp
telnet 主要是提供给路由器\交换机\防火墙 明文 数据包不进行加密 23/tcp

以下服务对应的端口号
    ftp         20/tcp 21/tcp
    http        80/tcp
    https       443/tcp
    ssh         22/tcp
    telnet      23/tcp
    dns .........   53/tcp 53/udp
    
以下端口对应的服务
    80          http
    443         https
    22          ssh
    3306        mysql
    9000        后端(php-fpm)
    10050       zabbix-agent
    10051       zabbix-server

第二节:验证 ssh 与 telnet 的区别?

1.安装telnet服务

[root@nfs ~]# yum install telnet-server -y

2.启动telnet服务

[root@nfs ~]# systemctl start telnet.socket

3.准备普通用户进行远程链接测试 (开启抓包工具)

[root@nfs ~]# useradd oldboy
[root@nfs ~]# echo "1" | passwd --stdin oldboy

4.验证方式区别

    telnet验证结果:
        1.不支持root直接登录
        2.所有的传递的数据都是明文
        
    ssh验证结果:    
        1.支持root直接登录
        2.所有传递的数据都是密文

第三节:SSH相关命令

1.scp命令详解

ssh客户端命令: 远程连接
[root@nfs ~]# ssh 172.16.1.41               #当前客户端是root,则登录的服务端也使用root
[oldboy@nfs ~]$ ssh root@172.16.1.41        #链接对端服务器,并写上链接服务器的用户身份
[root@nfs ~]# ssh -p22 root@172.16.1.41     #链接服务器,指定用户,并指定端口
[root@nfs ~]# ssh -p2222 root@172.16.1.41   
ssh: connect to host 172.16.1.41 port 2222: Connection refused
sftp客户端命令:  文件传输
    命令:
    图形界面: xftp FileZilla
    xftp:
        1.能上传文件夹
        2.能支持断点续传
        3.能支持上传大于4个G的文件
        
    rz:
        1.只能上传小于4G的文件
        2.不支持断点续传
        3.不能传文件夹
scp客户端命令: 远程拷贝
    scp--->rsync  都是用来远程拷贝
    scp是全量
    rsync是增量

2.scp 支持数据的推送和拉取

1.文件的推送和拉取

windows也有scp工具      winscp

推送文件
[root@nfs ~]# scp 12312321 root@172.16.1.41:/root
root@172.16.1.41's password: 
12312321                                         100%   49    44.2KB/s   00:00 

拉取文件
[root@nfs ~]# scp root@172.16.1.41:/root/2 ./
root@172.16.1.41's password: 
2                                                100%    4     0.5KB/s   00:00   

2.目录的推送和拉取

推送目录
[root@nfs ~]# scp -rp /etc root@172.16.1.41:/root
    大量的小文件传输
        real    0m59.852s
        user    0m9.821s
        sys     0m21.730s
        
    打包之后的效果对比
        real    0m7.654s
        user    0m0.040s
        sys     0m0.065s

3.命令参数

限速 -l   单位是kb-->KB-->
[root@nfs ~]# dd if=/dev/zero of=/root/file bs=1M count=500

传输的速度 74MB/s   占用实际带宽 1000兆带宽
[root@nfs ~]# scp file 172.16.1.41:/root
root@172.16.1.41's password: 
file                                             100%  500MB  74.0MB/s   00:06

80960kb/8KB/1024=10MB/s  占用实际带宽 100兆 带宽
[root@nfs ~]# scp -l 80960 file 172.16.1.41:/root
root@172.16.1.41's password: 
file                                             100%  500MB  10.0MB/s   00:50

占用10兆带宽-->实际的传输速度1MB-->scp具体换算的单位 8000
[root@nfs ~]# scp -l 8000 file 172.16.1.41:/root
root@172.16.1.41's password: 
file                                              10%   52MB   1.0MB/s   07:22 ETA

安全: 效率就低
性能: 安全就差

第四节:SSH验证方式

方法一: 用户和密码

知道服务器的IP端口,账号密码,即可通过ssh客户端命令登陆远程主机。
    ssh -p22 root@10.0.0.61  
        root用户
        root密码简单: 简单容易被破解
复杂: 复杂又记不住
密码不要设定为一样:
密码三个月更换一次:  lastpass 1passwd keepass

方式二: 秘钥 ( 锁 钥匙 )

​ 降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。

1.在 管理机 生成一对秘钥 ssh-keygen

[root@m01 ~]# ssh-keygen -C xuliangwei@qq.com
[root@m01 ~]# ll ~/.ssh/
总用量 12
-rw-------. 1 root root 1679 5月  24 19:16 id_rsa            #私钥   生活中,钥匙
-rw-r--r--. 1 root root  399 5月  24 19:16 id_rsa.pub       #公钥   生活中,锁

2.在 管理机 上下发公钥给 nfs服务端 (锁 公钥)

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
root@172.16.1.31's password:        #输入需要连接的主机密码

Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'root@172.16.1.31'"

3.管理机 通过ssh命令连接nfs服务器,如果能实现免密码登陆则ok (钥匙 私钥)

[root@m01 ~]# ssh 'root@172.16.1.31'
Last login: Fri May 24 19:24:58 2019 from 172.16.1.61
[root@nfs ~]#

4.将ssh登陆主机的信息放入一个文件,当我执行文件时就自动的链接到该主机了.....

5.将从WIndows下复制好的公钥粘贴至跳板机~/.ssh/authorized_keys中,然后测试

[root@m01 ~]# cd ; umask 077;  mkdir -p .ssh ; cd .ssh
[root@m01 .ssh]# vim authorized_keys  #添加windows公钥

塞key
我: 公钥信息........
你: 公网IP Port root

扩展:

1.测试链接无需密码
    [root@m01 ~]# ssh root@172.16.1.31

2.可以不登录对端主机,执行命令
    [root@m01 ~]# ssh root@172.16.1.31 "ifconfig eth1"
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.1.31  netmask 255.255.255.0  broadcast 172.16.1.255

3.使用scp也无需密码
    [root@m01 ~]# scp oldboy  root@172.16.1.31:/tmp
    oldboy                                           100%   26     1.9KB/s   00:00  

第五节:ssh密码+ Google Authenticator 实现双向认证

简单来说,就是当用户通过ssh登陆系统时,先输入google的随机验证码,然后在输入服务器的ssh密码
[root@m01 ~]# yum -y install wget gcc make pam-devel libpng-devel pam-devel autoconf automake libtool

[root@m01 ~]# cat ~/.google_authenticator 
SKVOCWN23G7AAPSVEDOMWX4H74
" RATE_LIMIT 3 30 1558709812
" WINDOW_SIZE 17
" HOTP_COUNTER 4
47386284
70612256
80548411
83234725
68105428

第六节:SSH安全优化

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。

1.更改远程连接登陆的端口
2.禁止ROOT管理员直接登录     --普通用户--sudo提权   ||    普通用户 --- su - root
3.密码认证方式改为密钥认证
4.重要服务不使用公网IP地址     (  跳板机  |   [ 防火墙 | 负载均衡 ]  )

SSH服务登录防护需进行如下配置调整,先对如下参数进行了解
Port 6666                       # 修改sshd服务监听的端口
PermitRootLogin         no      # no代表禁止root用户直接远程连接
PasswordAuthentication  no      # no代表禁止使用密码的方式连接

UseDNS                  no      # 禁止ssh进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication    no      # 禁止GSS认证,减少连接时产生的延迟

将如下具体配置添加至/etc/ssh/sshd_config文件中,参数需根据实际情况进行调整
###SSH###
#Port 6666
#PasswordAuthentication no
#PermitRootLogin no
GSSAPIAuthentication no
UseDNS no
###END###
--------------------------------------------------------------
Port 6666                        #减少被扫描到的几率
PermitRootLogin no               #禁止root直接通过远程连接
PasswordAuthentication no       #禁止所有用户使用密码远程连接

变更端口为6666,防止别人轻易的被扫描.
root用户无法通过密码登录,也无法通过秘钥登录,总之就是不行.
普通用户仅能通过秘钥登录,无法通过密码登录.
--------------------------------------------------------------
ssh-keygen生成秘钥非交互,注意,如果存在则会提示是否覆盖.
ssh-keygen -P "" -f ~/.ssh/id_rsa

第七节:SSH安全防护

fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用Firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。

1.开启Firewalld防火墙

[root@bgx ~]# systemctl start firewalld
[root@bgx ~]# systemctl enable firewalld

2.修改firewalld规则,启用Firewalld后会禁止一些服务的传输,但默认会放行常用的22端口, 如果想添加更多,以下是放行SSH端口(22)示例,供参考:

#放行SSHD服务端口
[root@bgx ~]# firewall-cmd --permanent --add-service=ssh --add-service=http 
#重载配置
[root@bgx ~]# firewall-cmd --reload
#查看已放行端口
[root@bgx ~]# firewall-cmd  --list-service

3.安装fail2ban,需要有epel

[root@bgx ~]# yum install fail2ban fail2ban-firewalld mailx -y

4.配置fail2ban规则.local会覆盖.conf文件

[root@bgx fail2ban]# cat /etc/fail2ban/jail.local
[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s

[sshd]
enabled = true
filter  = sshd
port    = 22
action = %(action_mwl)s
logpath = /var/log/secure

5.启动服务,并检查状态

[root@bgx ~]# systemctl start fail2ban.service
[root@bgx ~]# fail2ban-client status sshd

6.清除被封掉的IP地址

[root@bgx ~]# fail2ban-client set sshd unbanip 10.0.0.1

7.如果有ssh秘钥无法正常连接的情况,可以尝试使用如下的调试模式.开启ssh debug调试模式。

(1)31服务器上开启临时ssh服务 /usr/sbin/sshd -p 10001 -d
(2)61服务器上访问 ssh -vvv -p 10001 root@10.0.0.31
(3)31服务器上查看debug日志,发现身份验证被拒绝,目录的所有权错误。
    Authentication refused: bad ownership or modes for directory /root

相关文章

  • SSH远程登录

    SSH协议 概述 ssh协议, 安全壳协议, 可以安全远程登录Linux主机, 专为远程登录会话和其他网络服务提供...

  • 4- 快速上手Linux玩转典型应用- ssh工具介绍

    5-ssh工具 ssh是什么 SSH:secure shell 安全外壳协议 建立在应用层基础上的安全协议 可靠,...

  • 01-搭建逆向环境

    一、SSH介绍:SSH、OpenSSh SSH 为Secure Shell 的缩写,意为“安全外壳协议”;SSH ...

  • 逆向2-Mac登录iPhone

    SSH Secure Shell的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议 使用SSH,...

  • iOS逆向学习之二(Mac远程操控iPhone)

    SSH、OpenSSH SSH 是Secure的缩写,意为“安全外壳协议”,是一种可以为远程登录提供安全保障的协议...

  • SSH免密登录服务器

    什么是SSH?   Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络...

  • 重拾iOS-SSH

    一. 什么是SSH Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络...

  • day4--远程连接服务器(基于ubuntu)

    主讲ssh远程登录协议 ssh简单介绍 所谓ssh就是secure shell的缩写,也就是安全外壳协议,是建立在...

  • Linux重点知识

    ## SSH(secure shell)协议 单词含义 安全的外壳 SSH客户端<-----------...

  • Day33 ssh远程服务

    什么是SSH?ssh是一个应用层安全协议

网友评论

      本文标题:第四章:SSH安全协议

      本文链接:https://www.haomeiwen.com/subject/hnbymctx.html