Tengine
先说说Tengine是由淘宝网发起的Web服务器项目,基于Nginx,并针对大访问量网站的需求添加了许多高级功能和特性,旨在打造一个高效、安全的Web平台。Tengine项目从2011年12月开始成为开源项目,由Tengine团队开发和维护,核心成员来自淘宝、搜狗等互联网企业。
安装fail2ban:
sudo yum install epel-releasesudo yum install fail2ban
安装完成后,可以在/etc/fail2ban/jail.conf中进行配置,在配置文件中添加以下代码:
[nginx]enabled = trueport = 80, 443filter = nginx-accesslogpath = /var/log/nginx/access.logfindtime = 60maxretry = 600bantime = 300
参数解释:
enabled:启用监禁项;
port:监禁端口;
filter:关联过滤器,需要在 filter.d 目录下有对应的过滤器配置文件;
logpath:设置提供给过滤器所使用的日志文件路径;
findtime:设置匹配时间间隔,单位为秒,即从日志中匹配条目,若指定时间内匹配到 maxretry 项设置的条目数量时,将会执行封禁IP动作;
maxretry:设置从日志中匹配到IP的最大数量,即尝试次数;
bantime:设置IP被禁止的持续时间,单位为秒;
ignoreip:忽略的IP
action:关联动作 action = iptables-multiport[name=”sshd”, bantime=”%(bantime)s”, port=”0:65535”, protocol=”tcp”, chain=”INPUT”]
创建过滤器
在 filter.d 目录下,创建过滤器配置 nginx-access.conf
[INCLUDES]#### 定义过滤器###[Definition]# 定义要禁止的IP,使用正则表达式匹配日志行,使用关键字"<HOST>"表示要禁止的IP。failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (400|401|403|404|444)# 定义要忽略禁止的IP,使用正则表达式匹配日志行,使用关键字"<HOST>"表示要忽略的IP。ignoreregex =#### 初始化过滤器###[Init]# 设置过滤器每次读取日志的行数,每次读取10行做匹配。maxlines = 10# 过滤器每次从日志中缓冲多少行,进行匹配处理,如果一次读取大量的行,程序会崩溃,系统内存将会不够用journalmatch =这将匹配Nginx访问日志中的GET和POST请求,并在状态码为400、401、403、404和444时查找主机IP地址。
创建动作
在 action.d 目录下,创建动作配置 iptables.conf
这段仅供参考。
[INCLUDES]#### 定义动作# 使用"<关键字>"声明变化的值# "<ip>"关键字等于过滤器正则表达式中的"<HOST>"###[Definition]actionstart = <iptables> -N f2b-<name><iptables> -A f2b-<name> -j <returntype><iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>actionstop = <iptables> -D <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name><iptables> -F f2b-<name><iptables> -X f2b-<name>actioncheck = <iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]'actionban = <iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>actionunban = <iptables> -D f2b-<name> -s <ip> -j <blocktype>#### 初始化动作# 声明在监禁中关联动作允许传入的参数等于上面的"<关键字>",若未传入则使用默认值###[Init]chain = INPUTname = defaultport = sshprotocol = tcpblocktype = REJECT --reject-with icmp-port-unreachablereturntype = RETURNlockingopt = -wiptables = iptables <lockingopt>
更新使用动作
上面创建动作是更高级的应用,我们可以先使用模板。
更新默认配置(/etc/fail2ban/jail.d/00-firewalld.conf)
[DEFAULT]banaction = firewallcmd-rich-rules[actiontype=<multiport>]banaction_allports = firewallcmd-rich-rules[actiontype=<allports>]如果需要变更为使用ipset,只需要做如下修改:[DEFAULT]banaction = firewallcmd-ipset[actiontype=<multiport>]banaction_allports = firewallcmd-ipset[actiontype=<allports>]
更改配置文件后需要使用 fail2ban-client restart 重启 fail2ban 才能生效,单纯的 reload 是无法生效的。
# 获取所有 direct 规则firewall-cmd --direct --get-all-rules# 获取 ipset 列表ipset list
fail2ban-client 常用操作
重启:
fail2ban-client restart
查看运行状态:
fail2ban-client status nginx
黑名单操作 IP 加入黑名单:
fail2ban-client set nginx banip 192.168.1.8 IP
解锁:
fail2ban-client set nginx unbanip 192.168.1.8
白名单操作 IP 加入白名单:
fail2ban-client set nginx addignoreip 192.168.1.8 IP
从白名单中移除:
fail2ban-client set nginx delignoreip 192.168.1.8
在所有监禁中加入IP 白名单:
fail2ban-client unban 192.168.1.8
