zoukankan      html  css  js  c++  java
  • sshd服务搭建与管理

    1 sshd 服务安装

    SSH(Secure Shell)建立在应用层和传输层基础上的安全协议。它使用加密验证来确认用户身份,并对两台主机之间的所有通信加密。

    SSH主要的组件有:一个服务器守护进程sshd,一个用于远程登录的ssh,还有用户主机之间复制文件的 sftp/scp。SSH其它组件:生成公钥对的 ssh-keygen 命令。

    SSHD服务安装

    方法一:利用挂载系统镜像软件包
    openssh 软件包提供了服务端后台程序与客户端工具,用来加密远程控制和文件传输过程的数据,并由此来代替原来类似服务 telnet、ftp。
    需要安装 openssh 三个安装包:
    openssh-8.0p1-3.el8.x86_64.rpm        包含openssh服务端和客户端需要的核心文件
    openssh-clients-8.0p1-3.el8.x86_64.rpm openssh      客户端软件包
    openssh-server-8.0p1-3.el8.x86_64.rpm openssh       服务端软件包

    方法二:yum安装
    yum install openssh openssh-clients openssh-server -y

    2  sshd 服务配置和管理

    openssh的配置文件
    /etc/ssh/ssh_config         与客户端相关的配置文件
    /etc/sshd/sshd_config      与服务端相关的配置文件
    注:sshd在配置文件中,参数前面#号表示是默认值,当然也表示注释。

    ssh启动与开机自启
    如果不是显示enabled,则执行systemctl enable sshd.service命令

    [root@web ~]# systemctl list-unit-files|grep sshd.service    
    sshd.service enabled 
    [root@web ~]# systemctl status sshd.service

    3 sshd 优化安全参数

    修改sshd默认监听端口
    大家都知道sshd预设22端口,容易被黑客利用进行扫描22端口进行暴力破解服务器的账户密码。最安全的做法是修改成非22端口。
    [root@web ~]# grep Port /etc/ssh/sshd_config
    Port 22999
    注:比如我的sshd改成监听22999端口,也可以使用多个端口。

    Protocol
    使用最新的SSH 2协议版本

    [root@web ~]# grep Protocol /etc/ssh/ssh_config 
    # Protocol 2

    SyslogFacility AUTHPRIV
    当客户端使用ssh登录系统,ssh会记录日志,这个日志类型为AUTHPRIV,ssh服务日志存放:/var/log/secure

    [root@web ~]# grep SyslogFacility /etc/ssh/sshd_config 
    #SyslogFacility AUTH
    SyslogFacility AUTHPRIV

    LoginGraceTime
    当客户端内规定时间内没有成功登录就强迫断线,若无单位则默认为秒

    [root@web ~]# grep LoginGraceTime /etc/ssh/sshd_config 
    #LoginGraceTime 2m

    PermitRootLogin no
    是否允许root直接登录系统,默认是允许的,真实的生产环境服务器是不允许root账户直接登录,仅允许普通用户登录,需要用到root再从切换到root用户,或者给普通用户提权。

    [root@web ~]# grep PermitRootLogin /etc/ssh/sshd_config 
    PermitRootLogin no

    PasswordAuthentication yes

    是否需要密码验证,默认是yes,根据不同安全级别要求,有的通过秘钥验证登录,有时候设置不需要密码登录。

    PermitEmptyPasswords no
    默认no,不允许空密码登录。

    [root@web ~]# grep PermitEmptyPasswords /etc/ssh/sshd_config 
    #PermitEmptyPasswords no

    4 sshd 服务防止暴力破解

    防止暴力破解方法有两种

    配置安全的sshd服务(方法一)

    1) 设置复杂密码
    2) 修改默认端口
    3) 不予许root直接登录到系统
    4) 不予许密码登录,设置秘钥认证登录系统

    通过秘钥认证实现sshd认证

    实例环境

    服务端ip:192.168.136.131

    客户端ip:192.168.136.132

    服务端操作

    [root@localhost ~]# ssh-keygen           # 客户端同样也需要执行此命令生成秘钥对
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):    # 提示输入秘钥文件的保存路径,回车选择默认
    Enter passphrase (empty for no passphrase):      # 这里的密码是对生成的秘钥文件的保护口令,回车不设置
    Enter same passphrase again: 
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:u8KmvbOAJXxGIUjU1rPbSctsgEJJKcoD/g5E60qqdtg root@localhost.localdomain
    The key's randomart image is:
    +---[RSA 3072]----+
    |+== o            |
    |+= + +           |
    |O o o o          |
    |.O o o .         |
    |o * + B S        |
    | + B . B .       |
    |+ * ... .        |
    |oo E o=  .       |
    |+ . .o+=.        |
    +----[SHA256]-----+
    [root@localhost ~]# ls ~/.ssh   # id_rsa是私钥,id_rsa.pub是公钥
    id_rsa  id_rsa.pub  known_hosts
    [root@localhost ~]# ssh-copy-id -i 192.168.136.131   # 把公钥复制给服务端
    /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    The authenticity of host '192.168.136.131 (192.168.136.131)' can't be established.
    ECDSA key fingerprint is SHA256:RrtsYZi3En9ZT5Xw6PJfu0MyJYhjnSQgWn3tvJj3q7k.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    root@192.168.136.131's password:      # 这里输入的是服务端主机的密码
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh '192.168.136.131'"
    and check to make sure that only the key(s) you wanted were added.
    
    [root@localhost ~]# 

    登录服务端验证

    [root@localhost ~]# cat ~/.ssh/authorized_keys 
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDSZShpC4YV0aI4gEUabkNwFPAX+BAQmNqUDNMx7DyAi0yw2IDwSZ+InaUqAnY1KYTQxfUaTfj2om9zXQBthUwpKhmofn0rsP0SSKMm/wZq98g9NhCBkRPAwDYRSLEseHIdvXKcQFLP/V209bIMAdFnf9nk5W6jtmh4uLUrl5gCXSqtNwh+Pn0iQTAT+bvbl+qvyyX/PTjczS6Ex7CUp/B6F/O5rLm4qCEae8cDEMzUhSa8jj2LcckyVkOXtaoBFoejFoISPqDFcRNRk3O4+xvqkjeUQ63aI10OU3NeVP/dqGiVlyGChj7cSuSBMAJYUdbUl0SQMHYBNNAyTCLqQJhCw0zyFSQF/GrYMzD74m6gdChlpUGg+F1dHivQBX1lDGyHRziTOMx0owFRyFMqwDAtXMePPpfW7tBNnMQT/BA14Y2Fezzzh44/mvdycNVcxFBr58fzy+c0S97pQZTWndAOfCenCjRsbcHzg+UYOc2qkjJ/D+FncN/eUYXYz0YSoEs= root@localhost.localdomain

    登录客户端主机192.168.136.132,验证是否可以正常连接登录服务端192.168.136.131

    [root@localhost ~]# ssh root@192.168.136.131
    Activate the web console with: systemctl enable --now cockpit.socket
    
    Last login: Mon Jun  1 09:34:28 2020 from 192.168.136.1
    [root@localhost ~]# hostname -I   #正常登录,不需要密码验证
    192.168.136.131 192.168.122.1 

    通过开源的防护软件来防护安全(方法二)

    优点:使用简单、灵活、功能强大

    实战背景:

      最近公司网站一直被别人暴力破解sshd服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。然后fail2ban程序可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很实用、很强大!

      简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内相关服务日志,将满足动作的相关ip利用iptables/firewalld加入到drop列表一定时间。

    官方地址:http://www.fail2ban.org

    安装

    [root@localhost ~]# yum install -y epel-release
    [root@localhost ~]# yum --enablerepo=epel install -y fail2ban

    相关主要文件说明

    [root@localhost ~]# ls /etc/fail2ban/
    action.d  fail2ban.conf  fail2ban.d  filter.d  jail.conf  jail.d  paths-common.conf  paths-fedora.conf

    /etc/fail2ban/action.d           #动作文件夹,内含默认文件。firewall以及mail等动作配置
    /etc/fail2ban/fail2ban.conf   #定义了fail2ban日志级别,日志位置及sock文件位置
    /etc/fail2ban/filter.d              #条件文件夹,内含默认文件。过滤日志关键内容设置。
    /etc/fail2ban/jail.conf           #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值。

    应用实例

    设置条件:ssh远程登录5分钟3次密码验证失败,禁止用户ip访问主机1小时,1小时该限制自动解除,用户可重新登录。

      因为动作文件(action.d/firewallcmd-ipset)以及日志条件匹配(filter.d/sshd.conf)安装后是默认存在的,基本不用做任何修改,所有主要需要配置的就只有jail.conf文件。启用sshd服务的日志分析,指定动作阀值即可。

    vim /etc/fail2ban/jail.conf

    [DEFAULT]
    ignoreip = 127.0.0.1/8 #忽略的ip列表,不受设置限制
    bantime  = 86400    #屏蔽时间,单位秒
    findtime = 600        #在这个时间段内超过规定次数会被ban掉
    maxretry = 3    #最大尝试次数
    banaction = firewallcmd-ipset  #禁止的动作,iptables-multiport
    backend = auto  #日志检测机制(gamin、polling、auto三种)
    
    [sshd]
    enabled = true
    filter  = sshd
    port    = 22
    logpath = /var/log/secure
    action = firewallcmd-ipset[name=SSH, port=ssh, protocol=tcp]   #动作的相关参数,对应action.d/firewallcmd-ipset文件
    bantime = 3600
    findtime = 300
    maxretry = 3

    启动

    systemctl restart fail2ban

    systemctl restart firewalld

    测试

    故意输错三次密码

    [root@server01 ~]# ssh root@192.168.136.131
    root@192.168.136.131's password: 
    Permission denied, please try again.
    root@192.168.136.131's password: 
    Permission denied, please try again.
    root@192.168.136.131's password: 
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
    [root@server01 ~]# ssh root@192.168.136.131
    ssh: connect to host 192.168.136.131 port 22: Connection refused

  • 相关阅读:
    POJ 1002 487-3279
    Sicily 1732 Alice and Bob (二进制最大公约数)
    左右linuxserver自己主动重启过程监控和简单的解决方案
    php禁用一些重要功能
    JAVA于Get和Post差异请求
    小强HTML5手机发展之路(52)——jquerymobile触摸互动
    《剑指offer》 相应 在线测试地址
    winform 实现选择的城市名单
    linux-ubuntu关闭防火墙
    445port入侵具体解释
  • 原文地址:https://www.cnblogs.com/wenwei-blog/p/13027478.html
Copyright © 2011-2022 走看看