设为首页 收藏本站
查看: 836|回复: 0

[经验分享] sshd服务---暴力破解应对策略

[复制链接]

尚未签到

发表于 2017-6-9 07:55:43 | 显示全部楼层 |阅读模式
  sshd服务暴力破解步骤
  sshd暴力破解方法
  防止暴力破解调优
  1. 变更默认端口
  2. 变更root用户
  3. 日志监控-->防止暴力破解(fail2ban应用)
  fail2ban详解
  在初始化的服务器中,20种ssh服务调优方法!
  技术来源于生活!!!
  ===============================================
  第三步:运行暴力破解程序,破解密码
  为了防止我们的密码被暴力破解,服务器的密码一定不要使用弱口令!!!而且在企业中,一般会要求半个月或多长时间变更一次密码(公司中运维工程师会要求的)
  弱口令:简单的密码,如下:
  123456
  awp@host
  12HLad^
  强口令:  ---> 密码长度大于8位(最好不少于14位),且有字母 数字 和特殊符号混合构成的高复杂度的字符串
  防止暴力破解调优
  安装sshd-server
  查询服务是否安装:
  rpm -qa | grep openssh-server
   DSC0000.jpg
  若没有安装,可使用如下命令进行安装:
  yum -y install openssh* #安装所有openssh软件包
  通过如下命令,查看openssh生成的文件列表:
  rpm -ql openssh
  1. 变更默认端口
  sshd服务配置文件位于/etc/ssh目录下!
  ls /etc/ssh
   DSC0001.jpg
  ssh_config ---> 客户端配置文件
  sshd_config  ---> 服务器端配置文件
  我们修改服务器端文件(别人访问我们时,我们是sshd服务器!!!)
  vim /etc/ssh/sshd_config
  修改默认端口配置:
  #Port 22
  改为:
  Port 123
   DSC0002.jpg
  保存退出,并重启sshd服务:
  service sshd restart
  或
  /etc/init.d/sshd restart
   DSC0003.jpg
  查看监听端口是否生效:
  netstat -anlpt | grep ssh
   DSC0004.jpg
  通过本机远程连接测试!(本机远程连接本机!)本机即使客户端,也是服务端
  ssh 192.168.31.222 -p 123 #指定端口远程连接
   DSC0005.jpg
  ------------------------------
  2. 扫描某IP地址开放端口
  nmap 192.168.171.120
   DSC0006.jpg
  这里我发现,当设置ssh开放端口在1000以内是扫描不出来的!!!而且若是指定到其他服务的端口上时,扫描到的服务名称就是该服务的名称!!!
   DSC0007.jpg
  这就是为什么我们要修改端口的意思!!!让别人不知道我们的哪个端口是sshd服务的端口!
  ------------------------------
  编辑/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用户连接测试
   DSC0008.jpg
  xg用户连接测试:
   DSC0009.jpg
  另外,改下面内容后,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.
  一般情况这个就可以解决了暴力破解的问题了。
  到目前为止小的暴力破解已经解决了!!!
  但是,虽然我们有效的降低了别人破解我们系统的可能性,但是,别人在攻击时,会造成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或以上
   DSC00010.jpg
  查看依赖关系已满足条件!
  切换到源码文档目录,进行安装,执行如下命令:
  python setup.py install
   DSC00011.jpg
  安装完成后,为了便于后期的管理操作,以及添加开机启动等,我们需要将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 #查看
   DSC00012.jpg
  ------------------------------
  2)
  echo -e  “this is a world \n nest line” |grep word
  3)打印除包含 math_pattern 行之外的所有的行
  grep -v match_pattern file
  4)统计文件或文本中包含匹配字符串的行数:
  grep -c “test” filename
  5)忽略大小写
  echo ”hello world” |grep -I ”HELLO”
  ------------------------------
  /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   #启动脚本文件
  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  #最大错误次数
  #5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下
  bantime  = 3600   #禁止用户IP访问主机1小时
  findtime  = 300    #在5分钟内内出现规定次数就开始工作
  maxretry = 3    #3次密码验证失败
   DSC00013.jpg
  保存退出后,重启fail2ban服务
  /etc/init.d/fail2ban restart #重启服务
  ssh远程连接,测试是否生效
  ssh 192.168.31.222 -p 123 #故意三次输错密码后,重新连接!
  [iyunv@xiaogan120 ~]# ssh 192.168.31.222 -p 123
  ssh: connect to host 192.168.31.222 port 123: Connection refused
   DSC00014.jpg
  1. 查看防火墙规则:
  iptables -L |tail -4
  2. 查看fail2ban状态:
  fail2ban-client status
  3. 查看fail2ban详情:
  fail2ban-client status sshd
  4. 查看fail2ban日志文件:
  tail /var/log/fail2ban.log
  [iyunv@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            
  [iyunv@xiaogan120 ~]# fail2ban-client status
  Status
  |- Number of jail: 1
  `- Jail list: sshd
  [iyunv@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
  [iyunv@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
  [iyunv@xiaogan120 ~]#
  2. 等待超过时间限制
  拓展配置文件:
  0.9.4配置文件
  ls /etc/fail2ban/
  [iyunv@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-copy-id -i /root/.ssh/id_rsa.pub 192.168.171.121
   DSC00015.jpg
  第三步:尝试远程连接服务器
  ssh 192.168.171.121
   DSC00016.jpg
  看到了么?没有输入密码,就直接登录了!!!
  -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目录下!
   DSC00017.jpg
  scp /root/sshd_config 192.168.171.121:/root
  #拷贝/root/sshd_config文件到192.168.171.121地址/root目录下
  #############################################
  20种调优方式--->刚建好的服务器?!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-385301-1-1.html 上篇帖子: MySQL优化聊两句 下篇帖子: vi/vim使用进阶: 在VIM中使用GDB调试 – 使用vimgdb
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表