Fail2ban建站常用配置

First Post:

Word Count:
720

Read Time:
2 min

Welp, 互联网是个很忙碌的地方, 如果你没事干喜欢查看Nginx的access log与其他可以外部访问的log的话, 你应该会产生与作者一样的困扰:

我测怎么这么多B扫老子IP自己的服务器的IP无时无刻不在被各种攻击无差别轰炸

如果你有跟作者一样的困扰, ur in for a treat then!

首先你要安装 fail2ban, 防火墙推荐使用ufw, iptables终究还是有点繁琐) fail2ban ↗

安装完成后, 你可以在 /etc/fail2ban/filter.d/ 目录下创建你自己的过滤规则, 大致格式如下:

文件名: <你的规则>.conf
内容:

1
2
3
[Definition]
failregex = <过滤用正则表达式, 如果匹配则记录>
ignoreregex = <忽略用正则表达式, 如果匹配过滤并匹配这个则忽略当前记录>

Fail2ban 默认开启对 sshd 的保护, 常用指令:

  • fail2ban-client
    • reload / restart 重载服务, 加载你创建的规则
    • status 当前生效的过滤器
    • banned 当前被屏蔽的IP (也可以用iptables -L查看)

在你创建自己的过滤规则后, 可以用这个指令来测试:

fail2ban-regex -v <对应的日志的路径> <规则的路径>

如果测试下来与自己的预期一致的话, 可以在 /etc/fail2ban/jail.d/ 下创建一个新的conf文件来启用你的规则(一个文件可以启用多个规则)

1
2
3
4
5
6
7
8
[<规则文件名>]
enabled = true
maxretry = <最大出现次数>
findtime = <在多长时间内寻找, 以m/h/d/w结尾, 分别对应分/时/日/周>
bantime = <屏蔽多久, 我一般写10y(10年)>
logpath = <日志文件路径>
port = <要屏蔽的端口号, 也支持协议名称, 如ssh, http, https>
banaction = <使用fail2ban/action.d下哪个动作来屏蔽这个IP>

以下为一些常用的配置用正则表达式

NGINX

NGINX 的日志文件通常是 /var/log/nginx/access.log

  • 总有机器人在访问什么不存在的目录? Worry not, we got you!

    • ^<HOST> -.*- .*HTTP/1.* 404 .*$
  • 二进制Request Method? BAM!

    • ^<HOST> -.*- .*\\x.* 400 .*$
  • 有人在用IP直接访问我的网站! (这个有些复杂)

    • 首先, 你需要更新你的nginx配置

      • 在你的 /etc/nginx/nginx.conf 配置文件中重设你的日志格式
      •   log_format hosts '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $bytes_sent <host:$host>'
                         '"$http_referer" "$http_user_agent" "$gzip_ratio"';
        
          access_log /var/log/nginx/access.log hosts; # 记得在这里使用新的日志格式
        
    • 然后, 新建一个规则
      • failregex: ^<HOST> -.*-.*<host:.+?>.*$
      • ignoreregex: <host:(.+?\.)?[当前站点的主域名]>
        • 例如: <host:(.+?\.)?heimdall.work>

UFW

UFW 的日志文件通常是 /var/log/ufw.log

  • 有人在扫我的端口! Fear not, 任何邪恶, 终将绳之以法
    • .*\[UFW BLOCK\] IN=.* SRC=<HOST>