当前位置: 首页 > news >正文

SSH防止暴力破解

案例:最近公司网站一直被别人暴力破解sshd服务密码。虽然没有成功,但会导致系统负载很高,原因是在暴力破解的时候,系统会不断地认证用户,从而增加了系统资源额外开销,导致访问公司网站速度很慢


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

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

  注:重启iptables服务的话,所有DORP将重置


1)下载软件包: 

 官方地址:    http://www.fail2ban.org
2)解压文件,查看readme文件,有安装手册
tar zxvf fail2ban-0.8.14.tar.gz 

fail2ban-0.8.14/
fail2ban-0.8.14/.coveragerc
fail2ban-0.8.14/.gitignore
fail2ban-0.8.14/.project
fail2ban-0.8.14/.pydevproject
fail2ban-0.8.14/.pylintrc
fail2ban-0.8.14/.travis.yml
fail2ban-0.8.14/.travis_coveragerc
fail2ban-0.8.14/COPYING
fail2ban-0.8.14/ChangeLog
fail2ban-0.8.14/DEVELOP
fail2ban-0.8.14/FILTERS
fail2ban-0.8.14/MANIFEST
fail2ban-0.8.14/README.Solaris
fail2ban-0.8.14/README.md

需要安装python开发环境,并且版本要大于2.4(默认大于2.4)
 
查看当前系统中python的版本:

python -V

Python 2.7.5

3)安装fail2ban
python setup.py install

4)生成服务启动脚本:
cp files/redhat-initd /etc/init.d/fail2ban

chkconfig fail2ban on

5)应用实例
设置条件:ssh远程登录5分钟内3次密码验证失败,禁止用户IP访问主机1小时,1小时该限制自动解除,用户可重新登录。
实例文件/etc/fail2ban/jail.conf及说明如下:
[DEFAULT]        #全局设置

ignoreip = 127.0.0.1/8    #忽略的IP列表,不受设置限制

bantime = 600       #屏蔽时间,单位:秒

findtime = 600       #这个时间段内超过规定次数会被ban掉

maxretry = 3        #最大尝试次数

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

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

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

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

action  = iptables[name=SSH, port=ssh, protocol=tcp]       #动作的相关参数,对应action.d/iptables.conf文件

sendmail-whois[name=SSH, dest=you@example.com, sender=fail2ban@example.c

om, sendername="Fail2Ban"]#触发报警的收件人

logpath = /var/log/secure  #检测的系统的登陆日志文件。这里要写sshd服务日志文件。 默认为logpath = /var/log/sshd.log

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

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

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

maxretry = 3  #3次密码验证失败
6)启动服务
[root@localhost fail2ban-0.8.14]# /etc/init.d/fail2ban start
Starting fail2ban (via systemctl):                         [  OK  ]
[root@localhost fail2ban-0.8.14]# >/var/log/secure   #清空日志开启收集信息
[root@localhost fail2ban-0.8.14]# /etc/init.d/fail2ban restart
Restarting fail2ban (via systemctl):                       [  OK  ]

7)查看防火墙
iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
fail2ban-SSH  tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-SSH (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere      #会多生成一个规则链
8)测试:故意输入错误密码3次,再进行登录时,会拒绝登录
ssh 192.168.1.106
The authenticity of host '192.168.1.106 (192.168.1.106)' can't be established.
ECDSA key fingerprint is SHA256:u+aD8xanvdC/1mQJj43hoCTnmeAqxAxY5yeROsyQJ9Q.
ECDSA key fingerprint is MD5:93:9f:43:af:9f:18:35:ca:0e:16:1f:b8:50:41:2e:96.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.106' (ECDSA) to the list of known hosts.
root@192.168.1.106's password: 
Permission denied, please try again.
root@192.168.1.106's password: 
Permission denied, please try again.
root@192.168.1.106's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

[root@localhost ~]# ssh root@192.168.1.106
ssh: connect to host 192.168.1.106 port 22: Connection refused

9)查看fail2ban的状态
[root@localhost fail2ban-0.8.14]# fail2ban-client status
Status
|- Number of jail:    1
`- Jail list:        ssh-iptables
[root@localhost fail2ban-0.8.14]#
#配置好之后我们检测下fail2ban是否工作。


#具体看某一项的状态也可以看,如果显示被ban的ip和数目就表示成功了,如果都是0,说明没有成功
[root@localhost fail2ban-0.8.14]# fail2ban-client status ssh-iptables
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.10 
   `- Total banned:    1
通过其他方式防止暴力破解ssh

通过pam 模块来防止暴力破解ssh

[root@hopu ~]# vim /etc/pam.d/sshd

在第一行下面添加一行:

auth  required  pam_tally2.so  deny=3  unlock_time=600 even_deny_root root_unlock_time=1200

 说明:尝试登陆失败超过3次,普通用户600秒解锁,root用户1200秒解锁

手动解除锁定

查看某一用户错误登陆次数:
 pam_tally2 –-user
 例如,查看work用户的错误登陆次数:
 pam_tally2 –-user work
 清空某一用户错误登陆次数:
 pam_tally2 –-user –-reset
 例如,清空 work 用户的错误登陆次数,
 pam_tally2 –-user work –-reset 

相关文章:

  • 2024东湖高新下半年水测公示名单啦
  • 把命令的语气改成聊天的方式
  • 部署Activiti Modeler全流程(工作流引擎Activiti设计插件)
  • 软件测试CNAS实验室认证|检测报告三级审核,每一级审核什么?
  • tensorflow底层架构
  • 恢复丢失的数据:恢复数据库网络解决方案
  • 水平分库分表的方法策略
  • Android开发小贴士
  • 高级java每日一道面试题-2024年9月26日-运维篇[分布式篇]-如何保证每个服务器的时间都是同步的?
  • 【网络安全】网络基础第一阶段——第三节:网络协议基础---- VLAN、Trunk与三层交换技术
  • 【WPF】多屏幕展示
  • 【QGIS】软件下载安装及GIS4WRF插件使用
  • 百度amis框架经验分享
  • 第二十节:学习Redis缓存数据库实现增删改查(自学Spring boot 3.x的第五天)
  • 给子组件传递dom元素引用实例方案
  • hexo+github搭建个人博客
  • 30天自制操作系统-2
  • exif信息对照
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Javascript基础之Array数组API
  • LeetCode29.两数相除 JavaScript
  • Magento 1.x 中文订单打印乱码
  • vue:响应原理
  • 动态魔术使用DBMS_SQL
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 悄悄地说一个bug
  • ​​​​​​​​​​​​​​Γ函数
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #include
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (4)(4.6) Triducer
  • (k8s)kubernetes集群基于Containerd部署
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (五)c52学习之旅-静态数码管
  • .bat批处理出现中文乱码的情况
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net refrector
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .net连接oracle数据库
  • .NET中的Exception处理(C#)
  • .sh 的运行
  • @ResponseBody
  • @Responsebody与@RequestBody
  • [20190113]四校联考
  • [3]Opengl ES着色器
  • [BJDCTF2020]Easy MD51
  • [BSidesCF 2019]Kookie1
  • [CISCN2019 华东南赛区]Web11
  • [Day 26] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • [DL]深度学习_Feature Pyramid Network