centos7安装Fail2ban防暴力破解

Fail2ban防暴力破解

发现总是有人尝试ssh暴力破解密码:

grep 'Failed' /var/log/secure
Mar 30 00:40:25 JD sshd[20486]: Failed password for root from 114.80.157.167 port 35427 ssh2
Mar 30 00:40:32 JD sshd[20617]: Failed password for invalid user gqm from 111.230.19.43 port 42054 ssh2
Mar 30 00:42:00 JD sshd[22103]: Failed password for invalid user tsj from 111.230.19.43 port 59534 ssh2
Mar 30 00:42:32 JD sshd[22684]: Failed password for invalid user mzm from 106.12.94.65 port 45340 ssh2
Mar 30 00:43:09 JD sshd[23413]: Failed password for invalid user gku from 14.63.168.78 port 34882 ssh2
Mar 30 00:47:04 JD sshd[27459]: Failed password for root from 218.234.16.17 port 43020 ssh2
Mar 30 00:47:08 JD sshd[27466]: Failed password for root from 118.130.133.161 port 57198 ssh2
Mar 30 00:48:10 JD sshd[28548]: Failed password for invalid user vpn from 14.63.168.78 port 46326 ssh2

频繁登陆不仅危险,而且造成大量日志消耗性能,所以使用Fail2ban防止暴力破解

简介

  Fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙),例如当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的IP自动屏蔽工具!

  简洁的说,就是fail2ban通过对日志的监控, 发现具有破坏性的行为IP调用防火墙将它屏蔽一段时间生产环境fail2ban常被放在跳板机上使用,将入口保护起来,如果不带公网地址就不需要每台安装,如果都有公网的话就都可以使用fail2ban

功能、特性

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

安装

yum -y install fail2ban

目录结构

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

配置fail2ban实现防暴力破解

配置

  官方的文档写到:在配置时,我们应该避免修改由fail2ban安装创建的文件,我们应该去编写具有.local扩展名的新文件。在.local新文件里配置的内容会覆盖jail.conf内容里相同的值。当我们的配置发生改变了我们可以使用  fail2ban-client reload ,来加载新的配置。

nano /etc/fail2ban/jail.d/00-firewalld.conf

 文件内容:

# defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。
[DEFAULT]
# 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。
ignoreip = 127.0.0.1/8
# ssh客户端主机被禁止的时长(默认单位为秒)
bantime  = 3600
# 过滤的时长(秒)
findtime  = 600
# 匹配到的阈值(允许失败次数)
maxretry = 3


[ssh-iptables]
# 是否开启
enabled  = true
# 过滤规则
filter   = sshd
# 动作
action   = iptables[name=SSH, port=ssh, protocol=tcp]
# 日志文件的路径
logpath  = /var/log/secure
# 匹配到的阈值(次数)
maxretry = 3

在这里需要注意一点就是:我们上面的action设置的时候,port=ssh,如果我们更改了sshd服务的端口号,我能需要在这里设置对应的端口号,否则配置不生效。

启动:

systemctl start fail2ban.service
systemctl restart fail2ban.service

如果修改了配置需要重启生效:

fail2ban-client reload

我们可以查看当前被禁止登陆的ip:

[root@jd]# fail2ban-client status ssh-iptables 
Status for the jail: ssh-iptables
|- Filter
|  |- Currently failed: 0                   # 当前失败次数      
|  |- Total failed:     3                   # 总失败次数
|  `- File list:        /var/log/secure     # 日志文件路径列表
`- Actions
   |- Currently banned: 1                   # 当前禁止访问的IP数量
   |- Total banned:     1                   # 禁止IP总数
   `- Banned IP list:   192.168.1.77        # 被禁IP列表

Fail2ban常用命令

启动/重启/停止/状态

systemctl start/restart/stop/status fail2ban.service 

fail2ban-client常用命令

start 启动fail2ban server和监狱
reload 重新加载配置文件
stop 暂停fail2ban和监狱
status 查看运行的监控服务数量和列表
set loglevel  设置日志等级,有 CRITICAL, ERROR, WARNING,NOTICE, INFO, DEBUG
get loglevel 获取当前日志的等级
set <JAIL> idle on|off  设置某个监控(监狱)的状态。
set <JAIL> addignoreip <IP> 设置某个监控(监狱)可以忽略的ip
set <JAIL> delignoreip <IP> 删除某个监控(监狱)可以忽略的ip
set <JAIL> banip <IP> 将ip加入 监控(监狱)
set <JAIL> unbanip <IP> 将ip从监控(监狱)移除

示例:fail2ban-client  set  ssh-iptables  banip  192.168.1.77

fail2ban-regex

测试筛选规则设否匹配当前的日志格式:

fail2ban-regex /var/log/secure  /etc/fail2ban/filter.d/sshd.conf

Fail2ban邮件报警

配置mail.rc

nano /etc/mail.rc   最后插入:
set [email protected] smtp=smtp.163.com
set smtp-auth-user=xxxxxxxx smtp-auth-password=xxxxxxxx

测试:echo test | mailx -v -s "test"  [email protected]

然后在jail.local(自己的配置文件里),加入:

mail-whois[name=SSH, [email protected]]

dest 是填入收件人邮箱

最后重新加载下配置即可。

史前巨坑

邮件配置一定要在action后面,而且一定要是下面的格式,否则你会折腾一下午找收不到邮件的原因,fk

# 动作
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           mail-whois[name=SSH, [email protected]]

时区问题:

http://www.fail2ban.org/wiki/index.php/FAQ_english:If time reference is not the same everywhere, then fail2ban won't ban any IP!

当我们更改了时区后,然后日志的时间并没有修改过来,导致两者的时间不一致,这样fail2ban的工作就失效了

解决办法:重启日志服务:systemctl restart rsyslog,保证两者的时间一致。

修改端口问题:

sshd更改端口号后使用fail2ban需要注意在填写配置的时候也需要更改端口号。否则会出现就算会将ip添加到防火墙,但是由于我更改了端口号,是起不到禁止作用的。

解决方法:配置文件中  action = iptables[name=SSH, port=ssh, protocol=tcp] ,port位置修改为新的端口。

结语

防止服务器被入侵还有很多方法,比如:

  1.  用密钥登陆,不用密码登陆
  2.  尽量不给服务器外网IP
  3.  修改SSH端口号
  4.  开启SSH只监听内网地址,通过VPN登陆跳板机,然后登陆
  5.  对外只开放80及443端口
  6.  最小化安装(因为软件安装要给它授权)

其实包括fail2ban等等这些操作还是很有必要的,因为入侵者会用nmap扫描开放的端口然后会尝试登陆,一是,频繁登陆会生成日志浪费系统性能,二是,万一密码被破解后果不堪设想,而责任都在身为运维的你身上

猜你喜欢

转载自blog.csdn.net/hailangnet/article/details/105190605