一、背景

开放到公网的主机无时无刻不在遭受攻击,其中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即可

最新文章

  1. Swift 04.Functions
  2. javascript学习第四课函数
  3. hadoop2.6---常用命令
  4. SpringMVC解析4-DispatcherServlet逻辑脉络
  5. [转] CentOS单独安装Apache Benchmark压力测试工具的办法
  6. 装个centos虚拟机之设置桥接网络
  7. css配合js模拟的select下拉框
  8. Mac下搭建php开发环境
  9. 高性能MySql学习笔记——锁、事务、隔离级别(转)
  10. 使用kettle工具将文本文件的内容插入Linux虚拟机下的mysql表中
  11. Docker 新网络 overlay 网络
  12. 纯js实现html转pdf
  13. 记一次内存溢出的分析经历——thrift带给我的痛orz
  14. CWMP开源代码研究——stun的NAT穿透
  15. 第一册:lesson seventy three.
  16. python使用gevent实现并发下载器
  17. python获取esxi的磁盘使用率信息
  18. 小学四则运算APP 第一个冲刺 第七天
  19. 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
  20. 从零开始一起学习SLAM | 相机成像模型

热门文章

  1. YII框架的自定义布局(嵌套式布局,版本是1.1.20)
  2. Andrew Ng机器学习算法入门(三):线性回归算法
  3. Problem: package docker-ce-3:18.09.9-3.el7.x86_64 requires containerd.io &gt;= 1.2.2-3, but none of the providers can be installed
  4. Elastic-Job原理
  5. SpringBoot端口和上下文路径
  6. 学javaweb 先学Servlet 应用理论很重要
  7. OO随笔之纠结的第二单元——多线程电梯
  8. MySQL中MyISAM为什么比InnoDB查询快
  9. NPM包管理器入门(附加cnpm : 无法加载文件错误解决方案)
  10. 变量覆盖-高级篇(动态覆盖,extract综合)