赞
踩
检查Firewalld防火墙是否启用
# 关闭iptables(如果已安装):
service iptables stop
# 检查Firewalld状态:
firewall-cmd --state
# 启动Firewalld:
systemctl start firewalld
# 设置开机启动:
systemctl enable firewalld
开放SSH端口(22)事例:
# 放行22端口 如果改了ssh端口自行修改
firewall-cmd --zone=public --add-port=22/tcp --permanent
# 重载配置
firewall-cmd --reload
#查看已放行端口
firewall-cmd --list-all
1. 安装EPEL源:
yum install -y epel-release
2. 安装Fail2Ban:
yum install -y fail2ban-all
编辑jail.local
文件用来覆盖fail2ban的一些默认规则:
vi /etc/fail2ban/jail.local
配置以下内容:
[DEFAULT] # IP白名单 白名单中的IP不会屏蔽,可填写多个以(,)分隔 ignoreip = 127.0.0.1/8 ::1 # 封禁时间 单位为秒(s)24小时可以设置成24h bantime = 24h # 在这个时间段内,超过最大重试次数就封禁该操作的IP findtime = 3600 # 最大重试次数 maxretry = 6 # 屏蔽IP所使用的方法,这里使用firewalld屏蔽端口,使用的防火墙规则 banaction = firewallcmd-ipset # 触发规则后的选择行为 action = %(action_)s # 名称,可以随便填写 [sshd] # 需要监听的项,规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则 filter = sshd enabled = true # 需要监听的项 port = 22 action = %(action_)s # 监听的日志路径 logpath = /var/log/secure
防止ssh爆破的方法之一就是修改22默认端口,之前龙哥有写过怎么修改了,大家可以回去查阅一下
上面的配置意思是如果同一个IP,在一小时内,如果连续超过6次错误,则使用Firewalld将他IP ban了。
我们输入查看被ban的IP
fail2ban-client status sshd
# 启动
systemctl start fail2ban
# 开机自启
systemctl enable fail2ban
tail -f /var/log/fail2ban.log
执行命令:
fail2ban-client status sshd
显示内容如下:
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
解释:
|- 暂时封禁的IP数:2
|- 总共封禁的IP数:2
`- 黑名单列表:121.4.236.90 45.164.128.3
#添加黑名单:
fail2ban-client set sshd banip IP_ADDRESS
#删除黑名单:
fail2ban-client set sshd unbanip IP_ADDRESS
yum install -y mailx
编辑/etc/mail.rc
文件(Debian系为/etc/s-nail.rc
):
vim /etc/mail.rc
在文件末尾增加以下配置:
# 发件人邮箱
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
测试:
echo '邮件内容' | mail -v -s '邮件标题' 收件人邮箱@qq.com
多个收件人请用逗号分隔。刚刚发送的邮件将会出现在收件箱或垃圾箱中。
编辑jail.local
文件:
vi /etc/fail2ban/jail.local
配置以下内容:
[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 = %(action_mw)s [sshd] filter = sshd enabled = true port = 22 logpath = /var/log/secure
编辑/etc/fail2ban/action.d/mail-whois.conf
文件:
vim /etc/fail2ban/action.d/mail-whois.conf
配置以下内容:
[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邮箱\n " | /bin/mailx -s "[<name>]服务器遭到<ip>暴力攻击" <dest> [Init] name = default dest = root
fail2ban-client reload
以Nginx为例,使用Fail2Ban监视Nginx日志,匹配短时间内频繁请求的IP,并使用Firewalld屏蔽这些IP,以达到CC防护的作用。
编辑/etc/fail2ban/filter.d/nginx-cc.conf
文件:
vi /etc/fail2ban/filter.d/nginx-cc.conf
# 2. 配置以下内容:
[Definition]
failregex = -.*- .*HTTP/1.* .* .*$failregex = ^<HOST>.*".*HTTP.*" 444
ignoreregex =
继续修改和编辑/etc/fail2ban/jail.local
文件:
vi /etc/fail2ban/jail.local
配置以下内容:
[nginx-cc]
enabled = true
filter = nginx-cc
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 100
findtime = 60
bantime = 3600
action = firewallcmd-ipset
上面的配置意思是如果在60s内,同一IP达到100次请求,则将其IP ban 1小时
以上只是龙哥测试用,具体你们按自己的实际情况修改。
logpath为nginx日志路径。
fail2ban-client reload
以上是在CentOS 7上安装和配置Fail2Ban以防止SSH暴力破解的步骤。完成这些配置后,系统会自动监视SSH登录情况,并在检测到异常活动时封禁相应的IP地址。还可以根据需要添加自定义的拦截规则,如防止CC攻击。
要查看Fail2Ban的当前状态和活动的监视规则,可以使用以下命令:
fail2ban-client status
该命令将显示当前封禁的IP地址、活动的Jail(监狱)以及每个Jail中的封禁次数和封禁时间。
要验证Fail2Ban是否能够正确匹配和封禁违规行为,可以使用以下命令进行模拟测试:
fail2ban-client set JAILNAME banip IP_ADDRESS
将JAILNAME
替换为目标Jail的名称,IP_ADDRESS
替换为要模拟封禁的IP地址。这将模拟一个违规行为,并将该IP地址加入封禁列表。
为了解除对模拟IP地址的封禁,可以使用以下命令:
fail2ban-client set JAILNAME unbanip IP_ADDRESS
同样,将JAILNAME
替换为目标Jail的名称,IP_ADDRESS
替换为要解除封禁的IP地址。
请注意,进行模拟测试时应小心,以避免意外封禁真实的合法用户。
如果您经常分析日志,您可能会发现有大量机器人在扫描WordPress登录页面wp-login.php。尽管他们可能没有成功,但为了避免潜在风险,将这些IP地址封禁可能是明智的。
首先,您需要创建一个新的Nginx日志匹配规则。请打开/etc/fail2ban/filter.d/wordpress.conf
文件,并将以下内容填写进去:
[Definition]
failregex = ^ -.* /wp-login.php.* HTTP/1\.."
ignoreregex =
接下来,在jail.local
文件中追加以下内容:
[wordpress]
enabled = true
port = http,https
filter = wordpress
action = %(action_mwl)s
maxretry = 20
findtime = 60
bantime = 3600
logpath = /usr/local/nginx/logs/access.log
完成以上配置后,请记得执行systemctl restart fail2ban
命令以重启Fail2Ban使其生效。
以下是一些常用的命令:
systemctl start fail2ban
systemctl stop fail2ban
systemctl enable fail2ban
fail2ban-client status sshd
fail2ban-client set sshd delignoreip 192.168.111.111
tail /var/log/fail2ban.log
总结:Fail2Ban已经预设了许多匹配规则,这些规则位于filter.d
目录下,并包含了常见的SSH、FTP、Nginx和Apache等日志匹配。
如果这些规则都无法满足您的需求,您还可以自行创建规则来匹配异常的IP地址。
更多规则详情可以查看我另外一篇文章接上一篇Centos下fail2ban 的各种配置规则详解 包含apache/nginx/mysql防御规则
使用Fail2Ban结合Firewalld来阻止恶意IP地址是提高服务器安全性的有效方法。
喜欢龙哥的作品记得三连哦,你的支持是我更新的动力
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。