ITPub博客

首页 > > > 【微学堂】实战!sshd服务防止暴力破解和fail2ban使用方法

【微学堂】实战!sshd服务防止暴力破解和fail2ban使用方法

作者:u_453e1a12781dea 时间:2016-07-08 14:46:56 0 删除 编辑
本文编辑整理自【微学堂】第十五期活动实录。

嘉宾介绍

MK,资深Linux管理方面的高级讲师。7年Linux使用及管理经验,3年IT在线教育培训经验。拥有RHCE、RHCA及Openstack证书。精通Linux、思科、C++等技术。曾任职神州数码、新浪Linux高级运维工程师和高级运维总监。拥有丰富的服务布署、维护及监控经验。对基于linux下开源程序的LB集群技术颇有研究。

直播实录
sshd服务防止暴力破解和fail2ban使用方法

大家好,今天讲的内容是,实战:sshd服务防止暴力破解和fail2ban使用方法。

实验环境:
服务端:xuegod63.cn
IP:192.168.1.63
客户端:xuegod64.cn
IP:192.168.1.64
 
sshd 安全的远程连接服务
 
暴力破解步骤:
1、扫描端口号:22  
2、找到对应的linux服务器
3、暴力破解 :  用户名和IP(root,公网IP地址)
 
防范措施:
 
方法1:

1、密码足够复杂:
密码的长度要大于8位最好大于14位。密码的复杂度是密码要尽可能有数字、大小写字母和特殊符号混合组成。
字典库:密码长度20位
 
2、修改默认端口号
sshd 默认端口号: 22
使用nmap工具扫描端口号:
[root@xuegod63 ~]# rpm -ivh /mnt/Packages/nmap-5.21-4.el6.x86_64.rpm
[root@xuegod63 ~]# nmap 192.168.1.63  #扫描服务开放了哪些端口
Starting Nmap 5.21 ( http://nmap.org ) at 2015-05-18 09:48 CST
Nmap scan report for xuegod63.cn (192.168.1.63)
Host is up (0.000027s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind
 
Nmap done: 1 IP address (1 host up) scanned in 0.30 seconds
 
将默认端口号22改为?
[root@xuegod63 ~]# vim /etc/ssh/sshd_config
改Port 22为:Port 81
[root@xuegod63 ~]# /etc/init.d/sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
 
再次扫描:
[root@xuegod63 ~]# nmap 192.168.1.63
Starting Nmap 5.21 ( http://nmap.org ) at 2015-05-22 21:13 CST
Nmap scan report for xuegod63.cn (192.168.1.63)
Host is up (0.000019s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
81/tcp  open  hosts2-ns
111/tcp open  rpcbind
 
 
测试:
[root@xuegod63 ~]# ssh root@192.168.1.63
ssh: connect to host 192.168.1.63 port 22: Connection refused

正确的方法:
[root@xuegod63 ~]# ssh root@192.168.1.63 -p 81
注:改端口号的目的是为了,避免扫描
 
3、不使用root用户名登录,这样黑客猜不到你的用户名。

不使用用户名为root的帐号登录系统,但是要获得root超级管理员权限。

注:判断一个用户是不是超级管理员,看的是用户的ID是否为0。
 
例:创建一个普通帐号

[root@xuegod63 ~]# useradd mk
[root@xuegod63 ~]# echo 123456 | passwd --stdin mk
Changing password for user mk.
passwd: all authentication tokens updated successfully.
[root@xuegod63 ~]# vim /etc/passwd

改:root:x:0:0:root:/root:/bin/bash
为:root:x:0:0:root:/sbin/nologin   #不让root登录系统
 
改:mk:x:500:500::/home/mk:/bin/bash
为:mk:x:0:0::/home/mk:/bin/bash  #改ID500为0,mk就成root身份
 
测试:
[root@xuegod63 ~]# ssh root@192.168.1.63 -p 81   #root登录不成功
root@192.168.1.63's password: 123456
Last login: Sun May 10 09:43:55 2015 from xuegod63.cn
This account is currently not available.
Connection to 192.168.1.63 closed.
 
[root@xuegod63 ~]# ssh mk@192.168.1.63 -p 81
mk@192.168.1.63's password:
Last login: Sun May 10 09:49:02 2015 from xuegod63.cn
 
[root@xuegod63 ~]# whoami   #查看当前登录系统的用户名
root
[root@xuegod63 ~]# id mk
uid=0(root) gid=0(root) groups=0(root)
 
以上三种方法:
1、密码足够复杂:
2、修改默认端口号
3、不使用root用户名登录

一般情况这个就可以解决了暴力破解的问题了。
 
实战背景:
最近公网网站一直被别人暴力破解sshd服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢。
 
银行卡 输错3次密码 , 结果?
 
fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是防火墙),而且可以发送e-mail通知系统管理员,很好、很实用、很强大!
 
fail2ban运行机制:简单来说其功能就是防止暴力破解。工作的原理是通过分析一定时间内的相关服务日志,将满足动作的相关IP利用iptables加入到dorp(丢弃)列表一定时间。
 
应用实例
 
设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,此IP可以重新登录。
 
下载软件包:
官方地址:http://www.fail2ban.org


http://www.fail2ban.org/wiki/index.php/Downloads


还原环境:
[root@xuegod63 ~]# vim /etc/passwd
改:root:x:0:0:root:/root:/sbin/nologin
为:root:x:0:0:root:/root:/bin/bash
 
[root@xuegod63 ~]# vim /etc/ssh/sshd_config
改:Port 81
为:Port 22
 [root@xuegod63 ~]# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
 
上传软件包fail2ban到linux服务器上:
rz  : 上传命令


安装:fail2ban
[root@xuegod63 ~]# tar  -zxvf fail2ban-0.8.14.tar.gz
[root@xuegod63 fail2ban-0.8.14]# cd fail2ban-0.8.14
[root@xuegod63 fail2ban-0.8.14]# vim README.md  #查看以下内容


需要安装python开发环境,并且版本要大于2.4

查看当前系统中python的版本:
[root@xuegod63 fail2ban-0.8.14]# python -V
Python 2.6.6

安装:
[root@xuegod63 ~]# cd fail2ban-0.8.14
[root@xuegod63 fail2ban-0.8.14]#python setup.py install
 
扩展:
Linux源码包安装方式一般为: 编译后再安装
1、语言: 编译型语言,  比如:c,c++ ,java
2、解释型语言, 比如: python,shell脚本
 
生成服务启动脚本:
[root@xuegod63 fail2ban-0.8.14]# cp files/redhat-initd /etc/init.d/fail2ban
[root@xuegod63 fail2ban-0.8.14]# chkconfig --add fail2ban
[root@xuegod63 fail2ban-0.8.14]# chkconfig  --list fail2ban
fail2ban         0:off       1:off       2:off       3:on       4:on       5:on       6:off
 
生成服务启动脚本:
[root@xuegod63 fail2ban-0.8.14]# cp files/redhat-initd /etc/init.d/fail2ban

你怎么知道要复制这个文件?找规律

在fail2ban的源码文件中,过滤关键字: chkconfig    
只要脚本中包含chkconfig 就是一个redhat的开机启动脚本。
 
[root@xuegod63 fail2ban-0.8.14]# vim /etc/init.d/network
[root@xuegod63 fail2ban-0.8.14]# vim /etc/init.d/sshd
[root@xuegod63 fail2ban-0.8.14]# vim /etc/init.d/httpd
 
以上三个服务启动脚本都有:
# chkconfig: 2345       10           90
注: 2345系统级  10启动顺序  关机时,关闭服务的顺序
 
过滤关键字:chkconfig
 
应用实例
 
设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,此IP可以重新登录。
 
[root@xuegod63 ~]# vim /etc/fail2ban/jail.conf  #改以下红色标记内容
[ssh-iptables]
 
enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.com, sendername="Fail2Ban"]
logpath  = /var/log/secure
findtime  = 300
maxretry = 3
bantime  = 3600
 
注释:
enabled  = true  #是否激活此项(true/false)修改成 true
logpath  = /var/log/secure #检测的系统的登陆日志文件。这里要写sshd服务日志文件。
#完成:5分钟内3次密码验证失败,禁止用户IP访问主机1小时。 配置如下
findtime  = 300  #在5分钟内内出现规定次数就开始工作,默认时间单位:秒
maxretry = 3    #3次密码验证失败
bantime  = 3600         #禁止用户IP访问主机1小时  
 
启动服务:
[root@xuegod63 fail2ban-0.8.14]#service fail2ban start
Starting fail2ban:                                         [确定]
 
[root@xuegod63 ~]# ssh root@192.168.1.63  #只有密码对, 就可以正常登录
root@192.168.1.63's password:
Last login: Wed May  6 14:58:02 2015 from xuegod63.cn
[root@xuegod63 ~]#
 
测试:故意输入错误密码3次,再进行登录时,会拒绝登录

[root@xuegod63~]# ssh 192.168.1.63
root@192.168.1.63's password:
Permission denied, please try again.
root@192.168.1.63's password:
Permission denied, please try again.
root@192.168.1.63's password:
Permission denied (publickey,password).
[root@xuegod63~]# ssh 192.168.1.63
ssh: connect to host 192.168.1.63 port 22: Connection refused
 
哪台机器在暴力破解你的服务器?
 
查看fail2ban服务运行状态:
[root@xuegod63 fail2ban]# fail2ban-client status  #配置好之后我们检测下fail2ban是否工作。
Status
|- Number of jail:       1
`- Jail list:            ssh-iptables
 
[root@xuegod63 fail2ban]# fail2ban-client status ssh-iptables 
#具体看某一项的状态也可以看,如果显示被ban的ip和数目就表示成功了,如果都是0,说明没有成功。
Status for the jail: ssh-iptables
|- filter
|  |- File list: /var/log/secure
|  |- Currently failed: 0
|  `- Total failed: 3
`- action
   |- Currently banned:   1
   |  `- IP list:     192.168.1.63
   `- Total banned:    1
 
总结:
1、密码足够复杂:
2、修改默认端口号
3、不使用root用户名登录
一般情况这个就可以解决了暴力破解的问题了。
4、使用fail2ban防止SSHD服务被暴力破解

互动筛选

Q1:请问下只允许用key的方式访问,禁止密码登录的话,会更安全吗?

A1:会的,fail2ban解决的问题是快速找出有问题的IP,减轻暴力破解带来的开销。

Q2:如果我暴力破解成功后,如何留后门?

A2:一个用户名root对应两个密码:一个正常密码,一个后门密码,而且后门密码不在passwd和shadow中。且系统中只有一个id为0的用户。

只为一场完美的技术盛宴!
SACC2016
作为国内最受欢迎的架构师盛会,2016第八届中国系统架构师大会(SACC)将于2016年10月27日-29日在北京万达索菲特大酒店撼世来袭!

大会以"架构创新之路"为主题,共设置两个主场分享时段,24个技术交流专场时段;邀请来自互联网、电子商务、金融、电信、政府、行业协会等20多个领域,150多位技术专家及行业领袖来分享他们的经验;并将吸引4000多名系统运维、架构师、及各种企业的IT决策人士参会,为他们提供最具价值的交流平台。
最优折扣来袭!
7月28日前,订购SACC2016门票可立享6.8折优惠!团购更有折上折!
点击“阅读原文”立即购票!

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    1982
  • 访问量
    17892