• 2-3 sshd服务---暴力破解应对策略


     

    sshd服务暴力破解步骤

    sshd暴力破解方法

    防止暴力破解调优

    1. 变更默认端口

    2. 变更root用户

    3. 日志监控-->防止暴力破解(fail2ban应用)

    fail2ban详解

    在初始化的服务器中,20种ssh服务调优方法!

    技术来源于生活!!!

    ===============================================

    sshd服务暴力破解步骤

    第一步:确认目标IP地址

    第二步:确认目标端口--->根据目标开放端口,确定其操作系统

    第三步:运行暴力破解程序,破解密码

    为了防止我们的密码被暴力破解,服务器的密码一定不要使用弱口令!!!而且在企业中,一般会要求半个月或多长时间变更一次密码(公司中运维工程师会要求的)

    弱口令:简单的密码,如下:

    123456

    awp@host

    12HLad^

    强口令:  ---> 密码长度大于8位(最好不少于14位),且有字母 数字 和特殊符号混合构成的高复杂度的字符串

    防止暴力破解调优

    安装sshd-server

    查询服务是否安装:

    rpm -qa | grep openssh-server

    wps2DBD.tmp

    若没有安装,可使用如下命令进行安装:

    yum -y install openssh* #安装所有openssh软件包

    通过如下命令,查看openssh生成的文件列表:

    rpm -ql openssh

    1. 变更默认端口

    sshd服务配置文件位于/etc/ssh目录下!

    ls /etc/ssh

    wps2DBE.tmp

    ssh_config ---> 客户端配置文件

    sshd_config  ---> 服务器端配置文件

    我们修改服务器端文件(别人访问我们时,我们是sshd服务器!!!)

    vim /etc/ssh/sshd_config

    修改默认端口配置:

    #Port 22

    改为:

    Port 123

    wps2DBF.tmp

    保存退出,并重启sshd服务:

    service sshd restart

    /etc/init.d/sshd restart

    wps2DCF.tmp

    查看监听端口是否生效:

    netstat -anlpt | grep ssh

    wps2DD0.tmp

    通过本机远程连接测试!(本机远程连接本机!)本机即使客户端,也是服务端

    ssh 192.168.31.222 -p 123 #指定端口远程连接

    wps2DD1.tmp

    ------------------------------

    使用nmap命令扫描服务器开放端口

    1.查看并安装nmap软件包

    which nmap

    yum -y install nmap

    wps2DD2.tmp

    2. 扫描某IP地址开放端口

    nmap 192.168.171.120

    wps2DD3.tmp

    这里我发现,当设置ssh开放端口在1000以内是扫描不出来的!!!而且若是指定到其他服务的端口上时,扫描到的服务名称就是该服务的名称!!!

    wps2DD4.tmp

    这就是为什么我们要修改端口的意思!!!让别人不知道我们的哪个端口是sshd服务的端口!

    ------------------------------

    2. 变更root用户

    但是别人可以一个一个的端口来测试啊!?我们该怎么办呢?

    别人测试后的时候,他最可能测试的用户是root用户(因为其他的用户名他不知道啊)

    我们可以通过禁止root用户登录来实现,但是系统中很多服务都需要root用户来进行安装和维护!!

    我们可以创建一个普通用户,将其UID和GID设置为rootID即可(因为linux系统是根据用户id来判断用户权限的!!!)

    useradd xg && echo 123456 | passwd xg --stdin #创建普通用户

    编辑/etc/passwd文件,修改如下:

    修改:root:x:0:0:root:/root:/bin/bash

    为:root:x:0:0:root:/root:/bin/nologin #禁止root用户登录

    修改:xg:x:500:500::/home/xg:/bin/bash

    为:xg:x:0:0::/home/xg:/bin/bash #普通用户提权

    远程连接测试:

    root用户连接测试

    wps2DE5.tmp

    xg用户连接测试:

    wps2DE6.tmp

    另外,改下面内容后,xg用户也是登录不上的。只判断UID是否为0,不查看用户名的:

    vim /etc/ssh/sshd_config

    改:

    #PermitRootLogin yes

    为:

    PermitRootLogin no

    service sshd restart

    测试:

    ssh xg@192.168.31.222

    xg@192.168.31.222's password:

    Permission denied, please try again.

    一般情况这个就可以解决了暴力破解的问题了。

    到目前为止小的暴力破解已经解决了!!!

    3. 日志监控-->防止暴力破解(fail2ban应用)

    但是,虽然我们有效的降低了别人破解我们系统的可能性,但是,别人在攻击时,会造成sshd服务器系统资源占用(可能导致瘫痪!)

    为有效防止系统资源无辜被占用导致系统缓慢或瘫痪,我们可以使用防火墙!!!---->一般公司不使用防火墙.

    我们还可以使用fail2ban软件,实现一些规则的制定!!避免别人恶意攻击服务器造成不必要的损失!

    fail2ban  ---> 系统日志监控

    通过匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好 很实用 很强大!

    #ban (bæn)禁令

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

    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH  --update --seconds 1800 --hitcount 5 -j DROP

    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name ROUTER-SSH --set -j ACCEPT

    两种安装方式

    Way 1. yum安装

    rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

    yum -y install fail2ban

    Way 2. 源码安装

    下载地址:

    http://www.fail2ban.org

    尽量使用稳定版本(推荐0.8.14或0.9.4)

    下载下来后,怎么安装呢?!

    第一步:上传压缩包到虚拟机,并解压

    tar -zxf fail2ban-0.8.14.tar.gz -C /usr/src

    第二步:查看解压目录下的配置文档

    vim /usr/src/fail2ban-0.8.14/README.md

    17 Installation:

    18 -------------

    19

    20 **It is possible that Fail2ban is already packaged for your distribution.      In

    21 this case, you should use it instead.**

    22

    23 Required:

    24 - [Python >= 2.4](http://www.python.org)

    25

    26 Optional:

    27 - [pyinotify >= 0.8.3](https://github.com/seb-m/pyinotify)

    28   - Linux >= 2.6.13

    29 - [gamin >= 0.0.21](http://www.gnome.org/~veillard/gamin)

    30

    31 To install, just do:

    32

    33     tar xvfj fail2ban-0.8.12.tar.bz2

    34     cd fail2ban-0.8.12

    35     python setup.py install

    由配置文档得知,安装本源码程序需要

    1. Python版本为2.4或以上

    2. pyinotify版本为0.8.3或以上

    3. gamin版本为0.0.21或以上

    4. Linux内核版本在2.6.13或以上

    wps2DE7.tmp

    查看依赖关系已满足条件!

    切换到源码文档目录,进行安装,执行如下命令:

    python setup.py install

    wps2DE8.tmp

    安装完成后,为了便于后期的管理操作,以及添加开机启动等,我们需要将fail2ban启动脚本复制到/etc/init.d目录下. 根据/etc/init.d目录下的文件特点,他们都存在chkconfig配置项,在源码目录中通过grep查找

    grep chkconfig ./* -R --color #在当前目录下,查找所有文件中,存在chkconfig字段的文件

    cp files/redhat-initd /etc/init.d/fail2ban #拷贝启动脚本到目标位置

    chkconfig --add fail2ban #添加开机启动项fail2ban

    chkconfig --list fail2ban #查看

    wps2DE9.tmp

    ------------------------------

    拓展:

    1)grep的用法

    grep  ssh   /etc/passwd

    2)

    echo -e  “this is a world nest line” |grep word

    3)打印除包含 math_pattern 行之外的所有的行

    grep -v match_pattern file

    4)统计文件或文本中包含匹配字符串的行数:

    grep -c “test” filename

    5)忽略大小写

    echo ”hello world” |grep -I ”HELLO”

    ------------------------------

    fail2ban配置文件:

    相关主要文件说明:

    /etc/fail2ban/action.d  #动作文件夹,内含默认文件。iptables以及mail等动作配置

    /etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置

    /etc/fail2ban/filter.d      #条件文件夹,内含默认文件。过滤日志关键内容设置

    /etc/fail2ban/jail.conf     #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值

    # jail   [dʒeɪl]  监狱

    /etc/rc.d/init.d/fail2ban   #启动脚本文件

    fail2ban主要配置文件详解:

    ============= /etc/fail2ban/fail2ban.conf =============

    loglevel = 4 #日志级别

    logtarget = /var/log/fail2ban.log #日志文件路径

    socket = /var/run/fail2ban/fail2ban.sock #socket文件位置

    pidfile = /var/run/fail2ban/fail2ban.pid #fail2ban服务进程ID

    =======================================================

    ============= /etc/fail2ban/jail.conf =============

    [DEFAULT]               #全局设置

    ignoreip = ipaddress/prefix #忽略监控ip

    ignoreip = 127.0.0.1/8 10.10.10.0/24   #忽略的IP列表,不受设置限制  如果有二组以上用空白做为间隔

    ignorecommand = #忽略命令

    bantime = 600 #屏蔽时间,单位:秒(设置IP被封锁的时间)

    findtime = 600 #这个时间段内超过规定次数会被ban掉(设定多长时间内达到最大次数就解锁。)

    maxretry = 3 #在被ban之前,发生错误的最大次数

    backend = auto #日志修改检测机制(pyinotify、gamin、polling和auto这三种)

    usedns = warn #yes/warn/no 处理方式

    ===================================================

    [] #剩下的配置信息是模块设置,发送信息等

    格式如下:

    [ssh-iptables] #ssh配置设置 #单个服务检查设置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置。

    enabled = false #是否启用该模块

    filter = sshd #监控字符串 过滤规则filter的名字,对应filter.d目录下的sshd.conf

    action = iptables[name=SSH, port=ssh, protocol=tcp] #事件

    #动作的相关参数,对应action.d/iptables.conf文件  SSH服务名称 ssh端口好 protocol协议

    logpath = /var/log/sshd.log  #日志文件路径,检测的系统的登陆日志文件。

    # 这里要写sshd服务日志文件。

    # 默认为logpath  = /var/log/sshd.log ,可在/etc/rsyslog.conf文件中查看

    # ----- /etc/ssh/sshd_config -----

    # 36 #SyslogFacility AUTH

    # 37 SyslogFacility AUTHPRIV

    # ----- /etc/rsyslog.conf -----

    # 44 # The authpriv file has restricted access.

    # 45 authpriv.*                                              /var/log/secure

    maxretry = 5  #最大错误次数

    实战:通过修改配置文件实现以下要求

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

    修改配置文件如下:

    [sshd]

    enabled  = true             #是否激活此项(true/false)修改成 true

    #5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下

    bantime  = 3600   #禁止用户IP访问主机1小时

    findtime  = 300    #在5分钟内内出现规定次数就开始工作

    maxretry = 3    #3次密码验证失败

    wps2E09.tmp

    保存退出后,重启fail2ban服务

    /etc/init.d/fail2ban restart #重启服务

    ssh远程连接,测试是否生效

    ssh 192.168.31.222 -p 123 #故意三次输错密码后,重新连接!

    [root@xiaogan120 ~]# ssh 192.168.31.222 -p 123

    ssh: connect to host 192.168.31.222 port 123: Connection refused

    wps2E1A.tmp

    1. 查看防火墙规则:

    iptables -L |tail -4

    2. 查看fail2ban状态:

    fail2ban-client status

    3. 查看fail2ban详情:

    fail2ban-client status sshd

    4. 查看fail2ban日志文件:

    tail /var/log/fail2ban.log

     

    [root@xiaogan120 ~]# iptables -L |tail -4

    Chain fail2ban-SSHD (1 references)

    target     prot opt source               destination        

    REJECT     all  --  192.168.31.222       anywhere            reject-with icmp-port-unreachable

    RETURN     all  --  anywhere             anywhere           

    [root@xiaogan120 ~]# fail2ban-client status

    Status

    |- Number of jail: 1

    `- Jail list: sshd

    [root@xiaogan120 ~]# fail2ban-client status sshd

    Status for the jail: sshd

    |- filter

    |  |- File list: /var/log/secure

    |  |- Currently failed: 0

    |  `- Total failed: 3

    `- action

       |- Currently banned: 1

       |  `- IP list: 192.168.31.222

       `- Total banned: 1

    [root@xiaogan120 ~]# tail /var/log/fail2ban.log

    2016-09-19 18:12:51,624 fail2ban.server [1629]: INFO    Changed logging target to /var/log/fail2ban.log for Fail2ban v0.8.14

    2016-09-19 18:12:51,624 fail2ban.jail   [1629]: INFO    Creating new jail 'sshd'

    2016-09-19 18:12:51,624 fail2ban.jail   [1629]: INFO    Jail 'sshd' uses poller

    2016-09-19 18:12:51,636 fail2ban.jail   [1629]: INFO    Initiated 'polling' backend

    2016-09-19 18:12:51,637 fail2ban.filter [1629]: INFO    Added logfile = /var/log/secure

    2016-09-19 18:12:51,637 fail2ban.filter [1629]: INFO    Set maxRetry = 3

    2016-09-19 18:12:51,638 fail2ban.filter [1629]: INFO    Set findtime = 300

    2016-09-19 18:12:51,639 fail2ban.actions[1629]: INFO    Set banTime = 600

    2016-09-19 18:12:51,724 fail2ban.jail   [1629]: INFO    Jail 'sshd' started

    2016-09-19 18:12:52,756 fail2ban.actions[1629]: WARNING [sshd] Ban 192.168.31.222

    [root@xiaogan120 ~]#

    解除IP限制:

    1. 重启fail2ban服务

    wps2E1B.tmp

    2. 等待超过时间限制

    拓展配置文件:

    0.9.4配置文件

    ls /etc/fail2ban/

    [root@xiaogan121 fail2ban-0.9.4]# ls /etc/fail2ban/

    action.d       filter.d   paths-common.conf  paths-freebsd.conf

    fail2ban.conf  jail.conf  paths-debian.conf  paths-opensuse.conf

    fail2ban.d     jail.d     paths-fedora.conf  paths-osx.conf

    [DEFAULT]

    bantime  = 3600       禁止此用户IP访问主机1小时

    findtime  = 300 在5分钟内内出现规定次数就实施动作,默认时间单位:秒

    maxretry = 3 密码验证失败次数最大值为3

    filter = sshd

    protocol = tcp 协议为TCP

    action = iptables[name=SSH, port=ssh, protocol=tcp]  所采用的工作,按照名字可在action.d目录下找到

    [sshd]

    port    = ssh

    logpath = /var/log/secure  检测的系统的登陆日志文件,这里要写sshd服务日志文件的路径

    最后保存设置

    ssh使用密钥登录

    密钥登录,其实就是生成一个密钥对

    一个公有密钥,一个私有密钥

    将公有密钥保存到服务器,私有密钥保存在本地客户端.

    这样就可以实现我们的密钥登录了!!!

    原理:公钥加密,私钥解密(其实就是相当于给服务器上了一个锁,公有密钥就是这个锁,而钥匙就保存在我们客户端中,当需要连接时,客户端中的钥匙就可以开启服务器端的锁!)

    第一步:生成密钥对 公钥-私钥

    ssh-keygen #默认回车即可

    wps2E1C.tmp

    第二步:上传公有密钥到服务器

    ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.171.121

    wps2E1D.tmp

    第三步:尝试远程连接服务器

    ssh 192.168.171.121

    wps2E1E.tmp

    看到了么?没有输入密码,就直接登录了!!!

    ################## scp 命令 ##################

    简介:

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时,用scp可以帮你把文件移出来。另外,scp还非常不占资源,不会提高多少系统负荷,在这一点上,rsync就远远不及它了。虽然 rsync比scp会快一点,但当小文件众多的情况下,rsync会导致

    1.命令格式:

    scp [参数] [原路径] [目标路径]

    2.命令功能:

    scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录。

    3.命令参数:

    -1  强制scp命令使用协议ssh1 

    -2  强制scp命令使用协议ssh2 

    -4  强制scp命令只使用IPv4寻址 

    -6  强制scp命令只使用IPv6寻址 

    -B  使用批处理模式(传输过程中不询问传输口令或短语) 

    -C  允许压缩。(将-C标志传递给ssh,从而打开压缩功能) 

    -p 保留原文件的修改时间,访问时间和访问权限。 

    -q  不显示传输进度条。 

    -r  递归复制整个目录。 

    -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。  

    -c cipher  以cipher将数据传输进行加密,这个选项将直接传递给ssh。  

    -F ssh_config  指定一个替代的ssh配置文件,此参数直接传递给ssh。 

    -i identity_file  从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。   

    -l limit  限定用户所能使用的带宽,以Kbit/s为单位。    

    -o ssh_option  如果习惯于使用ssh_config(5)中的参数传递方式,  

    -P port  注意是大写的P, port是指定数据传输用到的端口号  

    -S program  指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

    4.使用实例:

    scp命令的实际应用概述: 

    从本地服务器复制到远程服务器:

    (1) 复制文件:

    命令格式:

    1). scp local_file remote_username@remote_ip:remote_folder 

    或者

    2). scp local_file remote_username@remote_ip:remote_file 

    或者

    3). scp local_file remote_ip:remote_folder 

    或者

    4). scp local_file remote_ip:remote_file 

    第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名 

    第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名  

    (2) 复制目录:

    命令格式:

    1). scp -r local_folder remote_username@remote_ip:remote_folder

    或者

    2). scp -r local_folder remote_ip:remote_folder

    第1个指定了用户名,命令执行后需要输入用户密码; 

    第2个没有指定用户名,命令执行后需要输入用户名和密码;硬盘I/O非常高,而scp基本不影响系统正常使用。

    从远程服务器复制到本地服务器:

    从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。

    实例:

    scp root@192.168.171.121:/root/fail2ban-0.9.4.tar.gz  /root

    #已root用户身份,从192.168.171.121拷贝/root/fail2ban-0.9.4.tar.gz文件到/root目录下!

    wps2E1F.tmp

    scp /root/sshd_config 192.168.171.121:/root

    #拷贝/root/sshd_config文件到192.168.171.121地址/root目录下

    #############################################

    20种调优方式--->刚建好的服务器?!

  • 相关阅读:
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之六 多点触控
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之九 定位
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之七 重力感应
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之五 保存数据的几种方式
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之八 照相机
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之三 Application 配置详解
    Adobe Flash Builder 4.5 Android Air 程序开发系列 之四 打开与关闭应用程序是的保存数据
    ADOBE FLASH BUILDER 4.6 IOS 开发之部署与调试
    [译] 高性能JavaScript 1至5章总结
    页签及盒子的web标准实现
  • 原文地址:https://www.cnblogs.com/xiaogan/p/5884441.html
Copyright © 2020-2023  润新知