一、背景

开放到公网的主机无时无刻不在遭受攻击,其中ssh暴力破解频率最高,会有无数机器不分日夜地搜索公网上的猎物,然后进行弱密码尝试

如果你的公网机器恰巧设的弱密码,估计刚装上系统,没过几小时别人就进来动手脚了

当然我们设置的密码如果够强,8位以上混合大小写+数字,是不会被爆破出来的。攻击者为了效率着想,广撒网,一般只会对你进行三四千次尝试,不过攻击的人会比较多,平均下来你每天也会被攻击8000次这样

如何查看自己有没有被攻击呢?看ssh日志即可

cat /var/log/secure|grep 'Failed password'|wc -l 直接看到你被攻击过多少次,因为历史日志会被自动备份,所以这是你近几天的量

find /var/log -name 'secure*'|xargs ls -l 查看所有ssh日志文件信息

cat /var/log/secure|grep 'Failed password'|tail -10 查看最近10条被攻击记录

一般的防御方法:

  • 密码设得超强,别人爆破我无所谓,还觉得日志文件太大看着不舒服再关闭日志、调整等级

  • 更改端口号,其实不可行,人家会端口扫描

  • 禁止root用户远程登录,增大破解难度。非要超级管理员登录可以添加一个和root一样权限的用户,千万别去改root的用户名,系统软件会出问题

  • 自己写脚本,检查/var/log/secure 内登录失败次数超过某个阈值的ip并将它添加到/etc/hosts.deny,检查secure的频率要够高,秒级别的,不然别人都爆破完了脚本还没反应过来

  • 写脚本难度大可以用别人写的工具,这里推荐fail2ban,他除了能防护ssh,还能防护web服务免于目录爆破,GitHub项目地址

二、fail2ban原理及安装

fail2ban使用python编写,原理简单理解为扫描日志,发现危害行为,然后去配置防火墙规则,把危险ip给ban掉

官方手册指出,fail2ban扫描日志频率是1s

以centos7为例,默认安装了python2.7,无需手动安装。默认防火墙是firewalld,所以安装的版本应该是fail2ban-firewalld。如果你防火墙是iptables,则安装fail2ban即可

yum -y install fail2ban-firewalld

三、配置

使用默认配置的话很简单

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vi /etc/fail2ban/jail.local # 显示行号
:set nu
# 把23、24行的注释给去掉,保存退出
# [sshd]
# enabled = true

到这里就能启动了,如果想修改配置,这里提供一些参考

配置文件虽然有近千行,但是大部分是注释,而用于ssh的就几行

# [DEFAULT] 配置大概从87行开始
#ignoreself = true
#ignoreip = 127.0.0.1/8 ::1
ignorecommand =
# "bantime" is the number of seconds that a host is banned.
bantime = 10m
# A host is banned if it has generated "maxretry" during the last "findtime "
# seconds.
findtime = 10m
# "maxretry" is the number of failures before a host get banned.
maxretry = 5
# "maxmatches" is the number of matches stored in ticket (resolvable via ta g <matches> in actions).
maxmatches = %(maxretry)s # [sshd] 在280行
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s

重要的参数在[DEFAULT]中,意思是扫描日志文件的最后findtime(分钟),发现有maxretry次登录失败记录,则把这个ip拉黑bantime(分钟),时间单位可以是 s、m、h

ignoreip 是白名单,[sshd] 中可以改端口,但没必要

四、启动和状态查看

启动、关闭、重启、状态、开机自启:systemctl start|stop|restart|status|enable fail2ban.service

查看服务具体信息:

# 查看fail2ban正守护着哪些服务
fail2ban-client status
# 查看ssh黑名单
fail2ban-client status sshd

测试规则是否生效:

拿另一台机器 ssh root@your_ip ,密码错误会提示 Permission denied,ip被ban提示 Connection refused。ssh密码错误会再让你输两次,这其中恰好被ban的话会卡住,ctrl+c即可

fail2ban防护ssh免于暴力破解的更多相关文章

  1. 开源服务专题之------ssh防止暴力破解及fail2ban的使用方法

    15年出现的JAVA反序列化漏洞,另一个是redis配置不当导致机器入侵.只要redis是用root启动的并且未授权的话,就可以通过set方式直接写入一个authorized_keys到系统的/roo ...

  2. 拒绝ssh远程暴力破解

    拒绝ssh远程暴力破解 简介 在网络技术日益发展的今天,网络上的安全问题日益严重.当你在公网上使用Linux服务器时,很有可能你的服务器正在遭受ssh暴力破解. 曾经有一次我的同伴将给客户提供监控服务 ...

  3. SSH密码暴力破解及防御实战

    SSH密码暴力破解及防御实战 一.Hydra(海德拉) 1.1 指定用户破解 二.Medusa(美杜莎) 2.1 语法参数 2.2 破解SSH密码 三.Patator 3.1 破解SSH密码 四.Br ...

  4. ssh防止暴力破解之fail2ban

    1.利用sshd服务本身防止暴力破解 2.sshd服务防止暴力破解和fail2ban使用方法 先说说一般的防范措施: 方法1: 1.密码足够复杂: 密码的长度要大于8位最好大于14位.密码的复杂度是密 ...

  5. SSH防止暴力破解--fail2ban

    一.ssh密钥对无交互登录 实战1:通过密钥进行sshd服务认证 服务端:linl_S    IP:10.0.0.15 客户端:lin_C    IP:10.0.0.16   1)在客户端生成密钥对 ...

  6. 服务器如何防ssh服务暴力破解??

     如图: 当我们遭到暴力破解ssh服务该怎么办 内行看门道 外行看热闹  下面教大家几招办法: 1 密码足够的复杂,密码的长度要大于8位最好大于20位.密码的复杂度是密码要尽可能有数字.大小写字母和特 ...

  7. Linux 安装DenyHost防止ssh被暴力破解

    DenyHosts介绍 当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描).如果遇到这个问题,一款非常有用的工具D ...

  8. Centos 拒绝ssh远程暴力破解方法

    佳木斯SEO摘要 有一天突然收到一封邮件,邮件内容告知我的ECS服务器作为肉鸡在攻击别的机器,期初一想,一定是我机器的账号密码被泄露,或者是被人暴力破解,于是乎,我就查询了一下我机器的账号登录记录. ...

  9. DenyHosts 安全限制ssh防暴力破解

    DenyHosts是Python语言写的一个程序,它会分析sshd的日志文件(/var/log/secure),当发现重 复的攻击时就会记录IP到/etc/hosts.deny文件,从而达到自动屏IP ...

随机推荐

  1. 绕过网站WAF(图片绕过)

    当我们在渗透一个网站的时候,很多时候,会遇到下面这种情况.网站装有WAF,把我们的SQL注入语句给拦截了. 这就是网站的安全狗 此时,我们的渗透会陷入僵局.到底应该如何才能让我们的语句绕过安全狗的检查 ...

  2. Redis数据结构—链表与字典的结构

    目录 Redis数据结构-链表与字典的结构 链表 Redis链表节点的结构 Redis链表的表示 Redis链表用在哪 字典 Redis字典结构总览 Redis字典结构分解 Redis字典的使用 Re ...

  3. web.xml 基本配置(SSM maven项目)

    <web-app> <display-name>Archetype Created Web Application</display-name> <!--we ...

  4. mysql安装_图文详细安装步骤_让你轻松安装并使用(超详细步骤)

    mysql的下载就不用说了,自行到官网下载..(本人下载的是mysql5.0版本) 下面开始正式安装 1.双击mysql_setup.exe后,直接点击Next 2.选择"I accept ...

  5. 那些好用的 VS Code 插件,究竟是如何提高编码效率的?

    在上一篇文章中我们已经对 vscode 插件有了一个初步的认识与了解了,接下去我们就要"揭秘"一下市面上那些好用的 vscode 插件究竟是如何帮我们提高工作效率的. 本文首发于「 ...

  6. MindSpore模型验证

    技术背景 在前面一篇博客中,我们介绍了MindSpore在机器学习过程中保存和加载模型的方法.这种将模型存储为静态文件的做法,使得我们可以更灵活的使用训练出来的模型,比如用于各种数据集的验证,或者是迁 ...

  7. QFNU 10-09 training

    1.F - Three displays 题意:就是给出了两个数组,然后第一组数中找到i,j,k满足i<j<k,第二组数中找到a[i],a[j],a[k],满足a[i]<a[j]&l ...

  8. [BUAA2021软工助教]结对项目-第二阶段小结

    一.作业链接 结对项目-第二阶段 二.优秀作业推荐 本次博客作业虽然是简单总结,但是以下作业中都不乏有思考.有亮点的精彩内容,推荐给同学们阅读学习. 磨练,结对编程!(中) zzx 和 zzy 同学实 ...

  9. BUAA软件工程_结对编程

    1.写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 结对项目作业 课程目标 培养软件开发能力 本作业对实现目标的具体作用 培养结对编程开发项目的能力 ...

  10. Can’t update table ‘xxx’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger

    MySQL: Solution for ERROR 1442 (HY000): Can't update table 'xxx' in stored function/trigger because ...