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 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容