web-dev-qa-db-ja.com

Traefikでfail2banを実装する方法

Traefikデプロイメントでfail2banを設定することに興味があります。 いくつかのスニペットが含まれている要旨 を見つけましたが、それらの使用方法がわかりません。誰でも空欄に記入できますか?または、Traefikでfail2banスタイルのセキュリティを実装するより良い方法はありますか?

6
Seffyroff

私はあなたが投稿した要旨からこれを達成することができました。これは、Traefikがすでに機能していて、HTTP基本認証の失敗があるIPをブロックし、iptablesでそれらを禁止するという前提の下にあります。いくつかの部分があるので、コンテナーの構成から始めましょう。

Traefik docker-compose.yaml

version: '2'
services:
  traefik:
    image: traefik:Alpine
    volumes:
    - /apps/docker/traefik/traefik.toml:/traefik.toml:ro
    - /apps/docker/traefik/acme:/etc/traefik/acme
    - /var/log/traefik:/var/log
    ports:
    - 8080:8080/tcp
    - 80:80/tcp
    - 443:443/tcp
    command:
    - --web
    - --accessLog.filePath=/var/log/access.log
    - --accessLog.filters.statusCodes=400-499

ログファイルを/var/log/access.logに書き込み、400-499へのアクセスコードのみを取得していることがわかります。次に、そのファイルをホストにマウントします/var/log/traefik:/var/log

Fail2banの部分では、ホストにインストールするのではなく fail2ban docker container を使用していますが、技術的にはここでも実行できます。

Fail2ban docker-compose.yaml

version: '2'
services:
  fail2ban:
    image: crazymax/fail2ban:latest
    network_mode: "Host"
    cap_add:
    - NET_ADMIN
    - NET_RAW
    volumes:
    - /var/log:/var/log:ro
    - /apps/docker/fail2ban/data:/data

読み取り専用として/var/logディレクトリをfail2banコンテナにマウントしているのがわかります。

Fail2banの構成

/apps/docker/fail2ban/data/jail.d/traefik.confファイルには以下が含まれます。

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https

/apps/docker/fail2ban/data/filter.d/traefik-auth.confファイルには以下が含まれます。

[Definition]
failregex = ^<Host> \- \S+ \[\] \"(GET|POST|HEAD) .+\" 401 .+$
ignoreregex =

追加

デフォルトの禁止アクションは、iptablesを介して禁止することです。これを変更したい場合は、traefik.confのデフォルトのbanactionを変更できます。次に例を示します。

[DEFAULT]
banaction = cloudflare

[traefik-auth]
enabled = true
logpath = /var/log/traefik/access.log
port = http,https

アクションはここにあります: https://github.com/fail2ban/fail2ban/tree/0.11/config/action.d

変更する必要がある場合は、ファイルを/apps/docker/fail2ban/data/action.dディレクトリにコピーして、コンテナを再起動します。

14
Devin B.