2023年9月12日火曜日

【docker】traefikのfail2banプラグイン

$ traefik version

Version:      2.10.4

Codename:     saintmarcelin

Go version:   go1.20.6

Built:        2023-07-24T16:29:02Z

OS/Arch:      linux/amd64


traefik公式プラグインでfail2banがある。

Plugin (traefik.io)



公式通りでも動いているのかわからん。

traefikダッシュボードのmiddleware見ても何の表示もない・・・


仕組みわかってない・・・

わけわからんのでdebug logを取ってみる

    command:
      # - "--experimental.plugins.fail2ban.modulename=github.com/tomMoulard/fail2ban"
      # - "--experimental.plugins.fail2ban.version=v0.6.6"
      - "--log.level=DEBUG"


ちゃんと勉強しよう・・・

https://coders-shelf.com/traefik-intro/

解説ブログ(プラグインなしでゴリ押しで組んだ場合)

https://blog.lrvt.de/configuring-fail2ban-with-traefik/


↑サイトだとコミュニティーのイメージ使ってるけど、こういうの怖いな・・・

リポジトリハックされたら、すごい被害が拡大するわ・・・

docker hub検証済みのイメージ: linuxserver/fail2ban

コミュニティーのイメージ: crazymax/fail2ban




別の選択肢CrowdSec

Plugin (traefik.io)






結論traefikのdynamicセッティングがdockerのlabel形式になってない。

直したのが下記



    labels:
      traefik.enable: true
      traefik.http.routers.whoami.rule: Host(`whoami.tensaihacker.com`)
      traefik.http.routers.whoami.entrypoints: web
      traefik.http.routers.whoami.middlewares: auth
      traefik.http.middlewares.auth.basicauth.users: traefik:$$apr1$$a47tjolc$$ORXnihWt3/xC3wLWFfCWb.
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.blacklist.ip[0]: "192.168.0.0/24"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.action: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.actionAbuseipdb: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.backend: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.banaction: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.banactionAllports: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.bantime: "3h"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.chain: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.destemail: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.enabled: "true"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.fail2banAgent: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.filter: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.findtime: "10m"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.ignorecommand: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.logencoding: "UTF-8"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.maxretry: "4"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.mode: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.mta: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.ports: "0:8000"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.protocol: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.sender: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.urlregexp: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.rules.usedns: ""
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.whitelist.ip[0]: "::1"
      traefik.http.middlewares.my-fail2ban.plugin.fail2ban.whitelist.ip[1]: "127.0.0.1"



なんだけど、これコンテナ毎に書いていったら長すぎる。

tomlかyamlで動的に読まないとダメだわ。


いつのまに・・・知らんかった・・・

compose.ymlがV3以降だとextends使えない。

compose.override.ymlとして自動マージさせるしかない・・・なんだこりゃクソが!


危なそうな設計だけど、使いやすい外部読み込みをさせるのがまともな考えじゃない?

結局composer.ymlを生成するスクリプトを書くことになった・・・クソが!!


0 件のコメント:

コメントを投稿