home server 篇四:翻車的home server經驗分享-[fail2ban]

作者:空調救我命

介紹

首先介紹下fail2ban是幹嘛的,很簡單,就是filter監視log,排查ban惡意IP,找到後丟進jail,被丟進jail後,action讓那些ip不能繼續嘗試暴力破解了。你們要是看了authelia的文件也就知道authelia是自帶fail2ban的,看看Security-Regulation就能明白。

但即使authelia ban了試圖惡意突破它的ip,也只能保護ForwardAuth指向它的服務,其它的像jellyfin這類不能指向它的,依然在果奔,如下圖的service3。 good ip可以訪問所有服務,bad ip因為被ban了,訪問不了service1、service2和authelia,但是還是能訪問service3的。

home server 篇四:翻車的home server經驗分享-[fail2ban]

然後我就在想怎麼在一層裡就能保護所有服務,所以就輪到fail2ban出場。 一開始我是不知道fail2ban的,又是在浪!>的時候看到的。這樣無論是是在traefik這層,還是authelia這層,還是單獨service這層,只要有惡意行為的IP就會被ban。如下圖,good ip可以訪問所有服務,bad ip一個服務都訪問不了。 不過fail2ban官網裡關於書寫配置的說明相當骨幹,對不懂程式碼的我非常不友好。

https://www。fail2ban。org/wiki/index。php/MANUAL_0_8#Jails

home server 篇四:翻車的home server經驗分享-[fail2ban]

fail2ban

安裝

我在ubuntu上使用fail2ban,網路配置依賴於nftables,但是這個映象預設使用iptables,所以需要在action。d裡override些配置才能用,不過都是用file形式,不用擔心。然後我拿traefik做示範,這個示範只能監視traefik的BasicAuth的登陸,所以只有使用BasicAuth的服務被攻擊超過5次時,才會觸發ban action把惡意IP給ban了,其它沒有使用BasicAuth的服務即使出現5次以上的無效登陸也不會觸發ban action。不過要是惡意IP被ban了,那IP就無法訪問traefik反代的任一服務了。 先建好資料夾,然後就是複製黏貼程式碼了,非常簡單,除了port要改成自己用的之外,其它都不用修改。所以如果要用fail2ban,配置需要自己學怎麼寫。投機取巧的方法就是把所有ForwardAuth可以指向authelia全指向authelia,然後給authelia配置fail2ban,剩下不能這麼幹的,只能一步步做了。

home server 篇四:翻車的home server經驗分享-[fail2ban]

action。d/nftables-input。conf

[INCLUDES]

before = nftables。conf

[Init]

chain = f2b-chain-input

chain_hook = input

action。d/nftables-forward。conf

[INCLUDES]

before = nftables。conf

[Init]

chain = f2b-chain-forward

chain_hook = forward

filter。d/traefik-auth。conf

[Definition]

failregex = ^

- S+ [] “(GET|POST|HEAD) 。+” 401 。+$

ignoreregex =

filter。d/traefik-botsearch。conf

[INCLUDES]

before = botsearch-common。conf

[Definition]

failregex = ^

- S+ [] “(GET|POST|HEAD) /

S+” 404 。+$

jail。d/traefik。conf

[traefik-auth]

enabled = true

banaction = nftables-forward

bantime = 86400

findtime = 600

port = 80,443,666

filter = traefik-auth

logpath = /var/log/traefik/access。log

maxretry = 5

[traefik-botsearch]

enabled = true

banaction = nftables-forward

bantime = 86400

findtime = 600

port = 80,443,666

filter = traefik-botsearch

logpath = /var/log/traefik/access。log

maxretry = 5

好了,所有的配置都寫好了,是不是很簡單。maxretry規定了最高重試次數,超過就ban。bantime規定了時間,單位是秒。所以上面的jail會在ip實施,在80,443,666任一埠,在600秒內,在BasicAuth裡出現5次密碼錯誤時,把ip ban 86400秒。

現在用docker compose建容器。把!全替換成空格。

home server 篇四:翻車的home server經驗分享-[fail2ban]

version: “3。5”

services:

!!fail2ban:

!!!!image: crazymax/fail2ban:latest

!!!!container_name: fail2ban

!!!!network_mode: “host”

!!!!cap_add:

!!!!!!- NET_ADMIN

!!!!!!- NET_RAW

!!!!volumes:

!!!!!!- “/home/使用者名稱/docker/fail2ban/data:/data”

!!!!!!- “/home/使用者名稱/docker/traefik/logs/access。log:/var/log/traefik/access。log:ro”

!!!!restart: always

!!!!environment:

!!!!!!- TZ=Asia/Shanghai

!!!!!!- F2B_LOG_TARGET=STDOUT

!!!!!!- F2B_LOG_LEVEL=INFO

!!!!!!- F2B_DB_PURGE_AGE=1d

使用

這樣容器就建好了,來試下能不能ban ip。用portainer點進fail2ban容器的控制檯,然後點連線,就進容器裡了。不要介意我的access。log名字。

home server 篇四:翻車的home server經驗分享-[fail2ban]

fail2ban-client status

這樣就能看到自己有什麼jail。

fail2ban-client status jail的名字

這樣就能看到自己jail有什麼內容,主要看actions。

fail2ban-client set jail的名字 banip 目標IP

先試下ban 192。168。0。163。fail2ban-client set traefik-auth banip 192。168。0。163。然後用fail2ban-client status traefik-auth就能看到163被ban了。然後不需要在traefik裡設定什麼,163就訪問不了任何traefik的服務了。

home server 篇四:翻車的home server經驗分享-[fail2ban]

unban就是在banip前加個un。

fail2ban-client set jail的名字 unbanip 目標IP

home server 篇四:翻車的home server經驗分享-[fail2ban]

Done,你們要是有什麼不懂就去gayhub問,反正上面的配置我都看不懂。

頂部