zoukankan      html  css  js  c++  java
  • Linux 中提高的 SSH 的安全性

    linux-ssh

    SSH 是远程登录 Linux 服务器的最常见的方式。且 SSH 登录的时候要验证的,相对来讲会比较安全。那只是相对,下面会介绍一些方式提高 SSH 的安全性

    SSH 的验证

    而SSH 登录时有两种验证方式

    1. 密码认证,要求用户每次登录服务器的时候都要输入密码
    2. 密钥认证,客户端的公钥先保存在服务器的.ssh/authorized_keys中,登录时使用该公钥自动验证,认证成功就不用输入密码都能登录

    密码认证的问题

    1. 密码简单容易被人攻破, 密码复杂难记,又比较容易输错。
    2. 容易被人用暴力破解的方式攻击。比如是ncrack。就算没有攻破,服务器各种被人在尝试密码是什么,有种各种被蹂躏的感觉。
    3. 写自动化脚本比较麻烦,需要用 expect 之类的命令

    尝试使用暴力破解ssh

    安装ncrack并下载一份常用的密码

    ncrack -p 22 --user root -P 500-worst-passwords.txt 192.168.31.121
    

    结果如下
    ​```
    Starting Ncrack 0.6 ( http://ncrack.org ) at 2018-01-27 14:20 CST
    Discovered credentials for ssh on 192.168.31.121 22/tcp:
    192.168.31.121 22/tcp ssh: 'root' '123456'
    Ncrack done: 1 service scanned in 96.06 seconds.

    # 保护 ssh 的方法
    
    ## 不要使用简单的密码
    
    上面被人暴力破解密码的主要原因是用了简单的密码,而使用强密码就相对比较难暴力破解 而何为强密码:
    
    *   强密码长度至少有 8 个字符,
    *   不包含全部或部分用户帐户名,不能是连贯的名
    *   至少包含以下四类字符中的三类:大写字母、小写字母、数字,以及键盘上的符号(如 !、@、#)
    
    最好还要定期修改密码
    
    ## 拉黑 ip
    
    若一定要开放密码登录,就有会有人尝试暴力破解
    ```bash
        sudo cat /var/log/secure | awk '/Failed/{print $(NF-3)}' | sort | uniq -c | awk '{print $2" = "$1;}'
    

    用这个命令可以看到有多少“客人”关顾你的服务器. 面对这种情况,就要把这些客人拉进黑名单了。此时我们可以使用DenyHosts这种工具,这个工具的CentosandDebain都有对应有二进制文件,直接yum install denyhosts或者apt-get install denyhosts就行了 配置文件在/etc/denyhosts.conf

        #sshd日志文件,它是根据这个文件来判断的,不同的操作系统,文件名稍有不同。
        SECURE_LOG = /var/log/secure
        
        #控制用户登陆的文件
        HOSTS_DENY = /etc/hosts.deny
        
        #过多久后清除已经禁止的IP,如5m(5分钟)、5h(5小时)、5d(5天)、5w(5周)、1y(一年)
        PURGE_DENY = 5m
        DAEMON_PURGE = 5m
        
        #禁止的服务名,可以只限制不允许访问ssh服务,也可以选择ALL
        BLOCK_SERVICE = sshd
        
        #允许无效用户失败的次数
        DENY_THRESHOLD_INVALID = 5
        
        #允许普通用户登陆失败的次数
        DENY_THRESHOLD_VALID = 10
        
        #允许root登陆失败的次数
        DENY_THRESHOLD_ROOT = 5
        
        #是否做域名反解
        HOSTNAME_LOOKUP=NO
        
        #日志文件
        DAEMON_LOG = /var/log/denyhosts
    

    其中ip白名单在/etc/hosts.allow,禁止访问ssh的名单在/etc/hosts.deny

    • 为防止自己的IP被屏蔽,可以:echo “你的IP” >> /usr/share/denyhosts/allowed-hosts 将你的IP加入白名单,再重启DenyHosts

    手动解禁ip:

    1. wget http://soft.vpser.net/security/denyhosts/denyhosts_removeip.sh
    2. 如果是centos 7 的,将/etc/init.d/ 的转成 systemctl
    3. sduo sh denyhosts_removeip.sh 待解封的ip 搞定

    设置 ssh 不能使用 root 登录

    使用ssh登录root用户,毕竟root用户的权限太大了。禁止root用户ssh后,即使密码泄露了,也不能通过ssh远程登录,提高了服务器的安全性。 相关的操作就是把/etc/ssh/sshd_config中的PermitRootLogin yes修改为PermitRootLogin no 再重启一下服务 systemctl restart sshd

    不使用密码登录

    使用密码登录会有以上的问题,不太安全且不太方便 所以我觉得还是用密钥去认证会比较好。更方便更安全。

    生成密钥对

    如果你没有包含公钥和私钥的密钥对,你需要生成一个。如果你已经有了想要使用的密钥,请跳到复制公钥的步骤。 要生成新的密钥对,请在本地机器终端输入以下命令:

    ssh-keygen
    

    假设你的本地用户叫 localuser ,你会看到的输出如下所示

        Generating public/private rsa key pair.
        Enter file in which to save the key (/Users/localuser/.ssh/id_rsa):
    

    按回车键以接受这文件名和路径(或者输入新的名称) 下一步,系统会提示你输入密码确保密钥的安全。你可以输入密码或者将密码留空。 注意:如果你将密码留空,你可以用私钥进行身份验证,不输入再输入密码。如果你输入密码了,你需要私钥和密码才能登陆。使用密码保护密码会更加安全,但两者都有自己的用途,并且都比基本密码验证更安全。 这会在 localuser 的Home(主)目录的 .ssh 文件夹 中生成一个私钥 id_rsa 和一个公钥 id_rsa.pub。记住私钥不要和任何不该访问你服务器的人共享。

    复制公钥

    复制公钥有两种方式,手动档和自动挡

    手动配置

    做的东西很简单,就是将本机的公钥字符串复制到"~/.ssh/authorized_keys" 若服务器中没有.ssh文件夹则需要自己创建

        cd ~
        mkdir .ssh
        chmod 700 ~/.ssh
        cd ssh
        touch authorized_keys
        chmod 600 authorized_keys
    

    复制公钥内容

        scp id_rsa.pub userName@host:/home/userName/.ssh/wait_to_authorized_key
    

    ssh 登录后

        cat wait_to_authorized_key >> authorized_keys
    

    自动上传密钥

    手动复制密钥太麻烦了,so 懒惰的人会用

        ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
    

    自动生成公钥,并上传为服务器的.ssh/authorized_keys若服务器没有.ssh会自动创建对应的文件和赋予文件对应的权限

    禁止密码登录

    既然已经可以通过密钥去认证,认为那台机器是可以信任的,那么最好就是禁止密码登录,这样的话就不怕暴力破解了。 把/etc/ssh/sshd_config中的PasswordAuthentication yes修改为PasswordAuthentication no 再重启一下服务

    systemctl restart sshd
    

    如果有人想登录,但密钥不对会是这种结果

    参考资料

  • 相关阅读:
    Two strings CodeForces
    Dasha and Photos CodeForces
    Largest Beautiful Number CodeForces
    Timetable CodeForces
    Financiers Game CodeForces
    AC日记——整理药名 openjudge 1.7 15
    AC日记——大小写字母互换 openjudge 1.7 14
    AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
    AC日记——加密的病历单 openjudge 1.7 12
    AC日记——潜伏着 openjudge 1.7 11
  • 原文地址:https://www.cnblogs.com/jojo-feed/p/10171093.html
Copyright © 2011-2022 走看看