简介:

Fail2ban 能够监控系统日志,匹配日志中的错误信息(使用正则表达式),执行相应的屏蔽动作(支持多种,一般为调用 iptables ),是一款很实用、强大的软件。

如:攻击者不断尝试穷举 SSH 、SMTP 、FTP 密码等,只要达到预设值,fail2ban 就会调用防火墙屏蔽此 IP ,并且可以发送邮件通知系统管理员。

功能、特性:

1、支持大量服务:sshd 、apache 、qmail 等
2、支持多作动作:iptables 、tcp-wrapper 、shorewall 、mail notifications 等
3、logpath 选项中支持通配符
4、需要 Gamin 支持(Gamin 用于监控文件和目录是否更改)
5、如果需要邮件通知,则系统事先要确保能够正常发送邮件

1、fail2ban 安装

shell > yum -y install epel-release

shell > yum -y install fail2ban

2、fail2ban 结构

/etc/fail2ban                  ## fail2ban 服务配置目录
/etc/fail2ban/action.d     ## iptables 、mail 等动作文件目录
/etc/fail2ban/filter.d       ## 条件匹配文件目录,过滤日志关键内容
/etc/fail2ban/jail.conf     ## fail2ban 防护配置文件
/etc/fail2ban/fail2ban.conf   ## fail2ban 配置文件,定义日志级别、日志、sock 文件位置等

3、fail2ban.conf 配置

shell > grep -v ^# /etc/fail2ban/fail2ban.conf

[Definition]

loglevel =  ## 定义日志级别,默认

logtarget = /var/log/fail2ban.log ## 定义 fail2ban 日志文件

socket = /var/run/fail2ban/fail2ban.sock ## sock 文件存放位置,默认

pidfile = /var/run/fail2ban/fail2ban.pid ## pid 文件存放位置,默认

4、jail.conf 防护配置

shell > grep -v ^# /etc/fail2ban/jail.conf

[DEFAULT] ## 全局设置,优先级最小

ignoreip = 127.0.0.1/ ## 不受限制的 IP ,多组用空格分割

bantime =  ## 非法 IP 被屏蔽时间(秒),- 代表永远封锁

findtime =  ## 设置多长时间(秒)内超过 maxretry 限制次数即被封锁

maxretry =  ## 最大尝试次数

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

usedns = warn

[ssh-iptables] ## 分类设置(基于 SSHD 服务的防护)

enabled = true ## 是否开启防护,false 为关闭

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

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 ## 检测系统登陆日志文件 maxretry = ## 最大尝试次数

## 默认此配置文件中还有大量的服务防护配置,只不过默认都是关闭(false)状态,不用理会。

5、fail2ban 启动、测试 SSHD 防护

shell > service fail2ban start ## 如果重启 iptables ,必须重启 fail2ban

shell > fail2ban-client status ## 可以看到有一个实例已经开始监控
Status
|- Number of jail:
`- Jail list: ssh-iptables shell > iptables -nL ## iptables 也加入了一条规则 fail2ban-SSH tcp -- 0.0.0.0/ 0.0.0.0/ tcp dpt:

## 同时,管理员邮箱也收到一封邮件..

[Fail2Ban] SSH: started on localhost.localdomain

发件人:Fail2Ban
收件人:*******
时 间:-- :: Hi, The jail SSH has been started successfully. Regards, Fail2Ban

## 这时客户端尝试登陆本机,故意输入五次密码,就会看到如下日志:

shell > tail - /var/log/fail2ban.log

-- ::, fail2ban.actions[]: WARNING [ssh-iptables] Ban 192.168.214.1

## 可以看到:192.168.214.1 被 Ban 掉了。

shell > cat /var/log/secure ## 系统登陆日志

Jun  :: localhost sshd[]: Failed password for root from 192.168.214.1 port  ssh2
Jun :: localhost sshd[]: Failed password for root from 192.168.214.1 port ssh2
Jun :: localhost sshd[]: Failed password for root from 192.168.214.1 port ssh2
Jun :: localhost sshd[]: Failed password for root from 192.168.214.1 port ssh2
Jun :: localhost sshd[]: Failed password for root from 192.168.214.1 port ssh2
Jun :: localhost login: pam_unix(login:session): session opened for user root by LOGIN(uid=)

## 收到的邮件通知

[Fail2Ban] SSH: banned 192.168.214.1 from localhost.localdomain

发件人:Fail2Ban
收件人:*******
时 间:-- :: Hi, The IP 192.168.214.1 has just been banned by Fail2Ban after
attempts against SSH. Here is more information about 192.168.214.1: missing whois program Regards, Fail2Ban

## 测试成功 !

6、加入 Nginx 防护( httpd 代替 )

## 目的是把规定时间内达到限定访问次数的 IP 封锁(例如,一分钟内有几百次请求)

shell > vim /etc/fail2ban/jail.conf

[nginx] ## nginx 防护

enabled = true
filter = nginx ## 访问规则定义文件,位置在 /etc/fail2ban/filter.d/nginx.conf
action = iptables[name=nginx, port=http, protocol=tcp]
sendmail-whois[name=nginx, dest=*******@.com, sender=fail2ban@aoath.com, sendername="Fail2Ban"] logpath = /var/log/httpd/access_log ## nginx 访问日志 bantime = ## 符合规则的屏蔽一天,如果参数值与全局有冲突,优先级大于全局配置
findtime = ## 分钟内访问超过 maxretry 次数的封锁 IP
maxretry = ## 最大尝试次数 shell > vim /etc/fail2ban/filter.d/nginx.conf [Definition]
failregex =<HOST>.*-.*-.*$ ## <HOST> 表示访问 IP ,其余的其实是最简单匹配了。因为这里没有要匹配精确的 URL ,只是限制访问次数
ignoreregex = shell > fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/nginx.conf ## 可以测试条件规则是否可用 shell > service fail2ban restart ## 重启服务 shell > fail2ban-client status ## 可以看到有两个实例在监控中
Status
|- Number of jail:
`- Jail list: nginx, ssh-iptables

## 开始测试,通过脚本或者不管刷新页面测试 Nginx 防护( 便于测试,可以将 maxretry 的值调为 10 )

shell > fail2ban-client status nginx ## 可以看到被 Ban 掉的 IP
Status for the jail: nginx
|- filter
| |- File list: /var/log/httpd/access_log
| |- Currently failed:
| `- Total failed:
`- action
|- Currently banned:
| `- IP list: 192.168.214.1
`- Total banned:

## 同时也有对应的邮件通知

[Fail2Ban] nginx: banned 192.168.214.1 from localhost.localdomain

发件人:Fail2Ban
收件人:*******
时 间:-- :: Hi, The IP 192.168.214.1 has just been banned by Fail2Ban after
attempts against nginx. Here is more information about 192.168.214.1: missing whois program Regards, Fail2Ban shell > tail - /var/log/fail2ban.log ## fail2ban 的日志信息 -- ::, fail2ban.actions[]: WARNING [nginx] Ban 192.168.214.1

## OK ,这就是 fail2ban 。很强大 !!!

Fail2ban 阻止暴力破解的更多相关文章

  1. Centos6.4 安装fail2ban防暴力破解

    Centos6.4 安装fail2ban防暴力破解 一. 安装 curl -O https://codeload.github.com/fail2ban/fail2ban/tar.gz/0.9.0 m ...

  2. 教你用免费的hihttps开源WEB应用防火墙阻止暴力破解密码

    教你用免费的hihttps开源WEB应用防火墙阻止暴力破解密码 很多企业都有自己的网站,需要用户登录后才能访问,但有大量的黑客攻击软件可以暴力破解网站密码,即使破解不了也非常恶心.有没有免费的解决办法 ...

  3. Fail2ban 防止暴力破解centos服务器的SSH或者FTP账户

    次尝试登陆root账户失败的情况.[说明服务器被攻击了]   logtarget = SYSLOG  #我们需要做的就是把这行改成/var/log/fail2ban.log,方便用来记录日志信息 so ...

  4. fail2ban 防暴力破解总结

    公司服务器安全问题一直是个令人头疼的问题,许多运维的小伙伴一直在用脚本来监控服务器登录状态,然而脚本编写比较麻烦,今天就给大家推荐一款小而精致的防暴力破解工具 fail2ban ,他可以监控系统日志, ...

  5. CentOS 7 Fail2ban防暴力破解

    1.安装 yum install epel-release -y yum install fail2ban fail2ban-systemd -y 2.配置 //新建配置 vim /etc/fail2 ...

  6. fail2ban防止暴力破解

    安装fail2ban: 将fail2ban 上传到服务器,解压: [root@xuegod1 tmp]# tar -zxvf fail2ban-0.8.14.tar.gz [root@xuegod1 ...

  7. linux centos7 防止暴力破解

    系统 centos 7.4 系统, 不知道的可以用 cat /etc/redhat-release 查看 利用到了linux 系统的日志,每次我们登陆服务器时,如果有登陆认证失败的情况,会在服务器的/ ...

  8. DVWA Brute Force:暴力破解篇

    DVWA Brute Force:暴力破解篇 前言 暴力破解是破解用户名密码的常用手段,主要是利用信息搜集得到有用信息来构造有针对性的弱口令字典,对网站进行爆破,以获取到用户的账号信息,有可能利用其权 ...

  9. Linux用root强制踢掉已登录用户;用fail2ban阻止ssh暴力破解root密码

    Linux用root强制踢掉已登录用户   首先使用w命令查看所有在线用户: [root@VM_152_184_centos /]# w 20:50:14 up 9 days, 5:58, 3 use ...

随机推荐

  1. linux自学(三)之开启虚拟机

    上一篇:linux自学(二)之centos7镜像安装 前面都已经铺垫好了,下面就是开始安装镜像了,真正的开启一台linux机器. 点击开启此虚拟机,如图: 之后就是等待了,然后就是开始配置,首先如下图 ...

  2. java project 项目在 linux 下面部署方法

    1.前提是安装好了响应的开发和部署环境,例如jdk. 2.在Linux下运行可执行Jar包,首先准备jar包,一般的编译工具Eclipse,jbuilder都提供export功能,可以生成jar包. ...

  3. Codeforces 280C Game on tree【概率DP】

    Codeforces 280C Game on tree LINK 题目大意:给你一棵树,1号节点是根,每次等概率选择没有被染黑的一个节点染黑其所有子树中的节点,问染黑所有节点的期望次数 #inclu ...

  4. BZOJ4689 Find the Outlier 【高斯消元】*

    BZOJ4689 Find the Outlier Description Abacus教授刚刚完成了一个制作数表的计算引擎的设计.它被设计用于同时计算一个多项式在许多点的取值.例如对于多项式 f(x ...

  5. thinkphp5 下 的Nginx 伪静态

    server { listen 80; server_name all.bjed.com; root "F:\www\asdata"; location / { index ind ...

  6. 再谈zabbix 邮件通知配置(不用脚本,简单配置就可以了)

    备注: 安装过zabbix 的人,大家都应该了解,后者查询网上的资料邮件通知一般是编写一个脚本,即报警媒介类型,创建一个script类似的 然后编写脚本,进行发送,但是实际上,系统内置的邮件发送还是比 ...

  7. Linux下gdb线程的调试

    多线程的调试命令 1.info threads: 这条命令显示的是当前可调试的所有线程,GDB会给每一个线程都分配一个ID.前面有*的线程是当前正在调试的线程. 2.thread ID: 切换到当前调 ...

  8. 服务器用 git 进行部署出现代码冲突的处理

    服务器用 git 进行部署出现代码冲突的处理 起因: 由于项目是之前很久之前上传的,且并没上线.使用 git pull 进行代码更新时出现很多冲突. 因为服务器上的代码有移动过位置,不知道为什么就冲突 ...

  9. bzoj4557侦查守卫

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4557 树形DP.和“河流”有点像,也有一个类似“承诺”的东西. 就是用 f 表示当前节点向下 ...

  10. 关于2B的转义问题

    最近碰到了一个中文乱码问题,话说是这样的:模块A调模块B的1接口,B把A带过来的用户ID加密后返回一个链接,当用户点击该链接时,A解密该用户ID后再调B的2接口.简而言之,我们用流程看下:模块A -& ...