CentOS7安装Fail2Ban防止SSH被暴力破解

准备工作
1、检查Firewalld防火墙是否启用

# 如果您已经安装iptables建议先关闭
service iptables stop
# 查看Firewalld状态
firewall-cmd --state
# 启动firewalld
systemctl start firewalld
# 设置开机启动
systemctl enable firewalld

2、启用Firewalld后默认--remove-port禁止所有端口,需手动开放,以下是开放SSH端口(22)示例:

# 放行22端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
# 重载配置
firewall-cmd --reload
# 查看已放行端口
firewall-cmd --list-all

安装软件

# 安装EPEL源
yum install -y epel-release
# 安装软件
yum install -y fail2ban-all

一、只封禁IP
增加配置
1、编辑

vi /etc/fail2ban/jail.local

2、配置

[DEFAULT]
#IP白名单
ignoreip    = 127.0.0.1/8 ::1 

#封禁时间
bantime     = 24h

#在这个时间段内,超过最大重试次数,就封禁该操作的IP
findtime    = 1h

#最大重试次数
maxretry    = 3

#使用的防火墙规则
#Firewall(firewallcmd-ipset);
#Iptables(iptables-multiport);
#对应/etc/fail2ban/action.d目录下的文件
banaction  = firewallcmd-ipset

#触发规则后的选择行为:
#只封禁IP:action_
#封禁IP+邮件通知:action_mw 
#封禁IP+邮件通知+报告相关日志:action_mwl 
action      = %(action_)s



[sshd]
#需要监听的项,对应/etc/fail2ban/filter.d目录下的文件
filter      = sshd
enabled     = true
port        = 22

#监听的日志路径:
#Debian系:/var/log/auth.log
#RedHat系:/var/log/secure
logpath     = /var/log/secure

意思是如果在1小时内,同一IP登陆失败3次,则将其封禁24小时,具体根据实际情况修改。

启动程序

# 启动程序
systemctl start fail2ban

# 开机自启
systemctl enable fail2ban
#查看日志
tail -f /var/log/fail2ban.log

查看黑名单
1、执行命令

fail2ban-client status sshd

2、显示内容

Status for the jail: sshd
|- Filter
|  |- Currently failed: 4
|  |- Total failed: 18
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 2
   |- Total banned: 2 
   `- Banned IP list:   121.4.236.90 45.164.128.3

设置黑名单

# 添加黑名单
fail2ban-client set sshd banip IP_ADDRESS

# 删除黑名单
fail2ban-client set sshd unbanip IP_ADDRESS

二、封禁IP+发送邮箱
安装邮箱

yum install -y mailx

配置Mailx
1、编辑 (Debian系:/etc/s-nail.rc;RedHat系:/etc/mail.rc)

vim /etc/mail.rc

2、在文件末尾增加配置

#发件人邮箱
set from=xxxxx@qq.com
#发件人邮箱的SMTP地址
set smtp=smtps://smtp.qq.com:465
#发件人邮箱登陆账号
set smtp-auth-user=xxxxx@qq.com
#发件人邮箱的授权码
set smtp-auth-password=e8765ds78c23
#认证方式
set smtp-auth=login   
#忽略证书警告
set ssl-verify=ignore
#证书所在目录
set nss-config-dir=/etc/pki/nssdb

3、测试

echo '邮件内容' | mail -v -s '邮件标题' 收件人邮箱@qq.com

多个收件人用,分隔,刚刚发送的邮件在收件箱或垃圾箱中。

配置Fail2ban
1、编辑

vi /etc/fail2ban/jail.local

2、配置

[DEFAULT]
ignoreip    = 127.0.0.1/8 ::1 
bantime     = 24h
findtime    = 1h
maxretry    = 3
banaction = firewallcmd-ipset

#邮件发送软件
mta         = mail
#发件人地址
sender      = xxxxx@qq.com
#收件人地址
destemail   = yyyyy@qq.com
#封禁IP+邮件通知:action_mw 
action      = %(action_mw)s


[sshd]
filter      = sshd
enabled     = true
port        = 22
logpath     = /var/log/secure

配置警告内容
1、编辑

vim /etc/fail2ban/action.d/mail-whois.conf

2、配置

[INCLUDES]
before = mail-whois-common.conf

[Definition]
actionban = printf "警告!!!\n
            被攻击机器名:`uname -n` \n
            被攻击机器IP:`/bin/curl ifconfig.co` \n
            攻击服务:<name> \n
            时间范围:<findtime> 内 \n
            攻击次数:<failures> 次 \n
            攻击者IP:<ip> \n
            攻击方式:暴力破解,尝试弱口令。\n
            处理方式:已将<ip>加入防火墙黑名单,封禁时间为 <bantime> 秒。\n\n
            \t                                          ——来自fail2ban邮箱
            " | /bin/mailx -s "[<name>]服务器遭到<ip>暴力攻击" <dest>

[Init]
name = default
dest = root

重载配置

fail2ban-client reload

三、自定义拦截规则
防止CC攻击
以Nginx为例,使用fail2ban来监视nginx日志,匹配短时间内频繁请求的IP,并使用firewalld将其IP屏蔽,达到CC防护的作用。

增加规则
1、编辑

vi /etc/fail2ban/filter.d/nginx-cc.conf

2、配置

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =

追加配置
1、编辑

vi /etc/fail2ban/jail.local

2、配置

[nginx-cc]
filter      = nginx-cc
enabled     = true
port        = http,https
bantime     = 2h
findtime    = 60s
maxretry    = 120
action      = %(action_)s
logpath     = /usr/local/nginx/logs/access.log

意思是如果在60秒内,同一IP达到120次请求,则将其封禁2小时,具体根据实际情况修改。

重载配置

fail2ban-client reload

查看状态
1、执行命令

fail2ban-client status nginx-cc

2、显示内容

Status for the jail: nginx-cc
|- Filter
|  |- Currently failed: 4
|  |- Total failed: 18
|  `- Journal matches:  _SYSTEMD_UNIT=nginx.service + _COMM=nginx-cc
`- Actions
   |- Currently banned: 2
   |- Total banned: 2 
   `- Banned IP list:   121.4.236.90 45.164.128.3

检测规则
1、使用正则规则检测

fail2ban-regex /usr/local/nginx/logs/access.log "<HOST> -.*- .*HTTP/1.* .* .*$"

2、使用规则文件检测

fail2ban-regex /usr/local/nginx/logs/access.log /etc/fail2ban/filter.d/nginx-cc.conf 

评论区 0