云服务器经常会被爆破ssh端口,为了防范就用iptables联动fail2ban对爆破的ip进行封禁,最后为了看看都是哪些小兔崽子在爆破,联动server酱对封禁操作进行推送。
操作过程
安装fail2ban
yum -y install epel-release
yum -y install fail2ban
fail2ban结构
/etc/fail2ban ## fail2ban 服务配置目录
/etc/fail2ban/action.d ## iptables 、mail 等动作文件目录
/etc/fail2ban/filter.d ## 条件匹配文件目录,过滤日志关键内容
/etc/fail2ban/jail.conf ## fail2ban 防护配置文件
/etc/fail2ban/fail2ban.conf ## fail2ban 配置文件,定义日志级别、日志、sock 文件位置等
配置
于目录下创建jail.local
,用以配置封禁规则,因为fail2ban
每次更新会覆盖jail.conf
,所以要避免直接修改jail.conf
,jail.local
会自动到jail.conf
中读取缺省值,以下仅演示开启ssh封禁规则。
jail.local配置
#defalut这里是设定全局设置,如果下面的监控没有设置就以全局设置的值设置。
[DEFAULT]
# 用于指定哪些地址ip可以忽略 fail2ban 防御,以空格间隔。
ignoreip = 127.0.0.1/8
# 客户端主机被禁止的时长(默认单位为秒)
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
使配置生效
fail2ban-client reload #重新加载配置文件
fail2ban-client status #查看当前加载配置状态
联动server酱
经过上面加载修改后的配置可以看到ssh规则已经生效起来了,具体可以查看/var/log/fail2ban.log
具体内容来查看运行情况,接下来是通过server酱将封禁的操作推送给我们。
编写action
在上文/etc/fail2ban/action.d
目录中可以看到是存放动作文件的目录,而我们的server酱推送也是一个动作,进入该目录下有一个npf.conf
文件,里面包含了各种动作的相关注释
# Fail2Ban configuration file
#
# NetBSD npf ban/unban
#
# Author: Nils Ratusznik <nils@NetBSD.org>
# Based on pf.conf action file
#
[Definition]
# Option: actionstart
# Notes.: command executed on demand at the first ban (or at the start of Fail2Ban if actionstart_on_demand is set to false).
# Values: CMD
#
# we don't enable NPF automatically, as it will be enabled elsewhere
actionstart =
# Option: actionstop
# Notes.: command executed at the stop of jail (or at the end of Fail2Ban)
# Values: CMD
#
# we don't disable NPF automatically either
actionstop =
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =
# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionban = /sbin/npfctl table <tablename> add <ip>
# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
# note -r option used to remove matching rule
actionunban = /sbin/npfctl table <tablename> rem <ip>
[Init]
# Option: tablename
# Notes.: The pf table name.
# Values: [ STRING ]
#
tablename = fail2ban
通过这一份带注释的conf文件可以知道,一个action的配置分为两大部分,分别是[Definition]
和[Init]
。
[Definition]
其中又包含了执行动作的五个不同时机,根据说明我们可以根据我们的需求来判断逻辑,而我们的需求是在规则执行封禁时,通过server酱推送封禁情况给我们,而这一种场景就应该是actionban
词条下,通过curl完成对server酱api的请求。
[Init]
便是对该动作下需要用到的参数进行定义,比如我们在请求server酱api时需要带上我们的sendkey,这就需要定义一个参数来完成操作。
编写action文件内容如下
[Definition]
actionstart =
actionstop =
actioncheck =
actionban = curl -sSf "https://sctapi.ftqq.com/<sckey>.send" -d "text=<ip> 关到小黑屋." -d "desp=IP <ip> 已被Fail2Ban封禁,违规动作<failures>次,执行监狱 <name>."
actionunban =
[Init]
name = default
sckey = 你的sendkey
保存该action后,记住动作名,比如文件名是serverjiang.conf
,那这个动作名就是serverjiang
载入配置
此时回到jail.local
中,在规则里面的action处换行对齐添加我们的server酱动作名,然后重载配置就可以在ban掉大嗨阔们的ip后推送给你知道,不过建议将封禁时长留的更长一点,不然隔一会弹一条消息很嗨烦。
常用命令
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从监控(监狱)移除 |
本文作者:Losir 本文链接:fail2ban联动server酱配置 - https://ionssource.cn/archives/63/ 版权声明:如无特别声明,本文即为原创文章,仅代表个人观点,版权归 Losir 所有,未经允许不得转载!
感谢分享 赞一个