准备工作
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