grasysの注目若手エンジニア川﨑です。(grasys内ではまだまだ若手ポジション)今回はGCPのLB経由で来る不正アクセスにfail2banで対処した時の事について書きます。grasysではECサイトやニュースサイトを運営するお客様がいます。そのお客様のサイトに悪意をもってCDNが適用されないURLに不正アクセスをしてくるユーザーにだけ何らかの対処をしたいケースに使用しています。fail2banとはログファイルからfilterに定義したルールでIPを割り出し、jailに定義したアクセス回数などのルールを超えたIPに対し定義したactionを実行します。各webサーバーに機能やアドオンとして持ってるものもありますが、機能も多くwebサーバーに依存しないのでgrasysではfail2banを使用しています。各種configの例を交えて説明します。インストールはやディレクトリ構成は公式サイトや参考URLをご確認ください。fail2banを設定する前に...fail2banはログファイルから該当のIPを割り出します。今回はLBを使用しているのでLBのIPでなくクライアントPCのIPを取得したいです。アクセスログにX-Forwarded-Forを出力するように設定しましょう。filterwebサーバーのアクセスログからIPを取得する設定ファイルです。公式にすでにたくさんのものが用意されています。ログファイルに対して正規表現でアクセス元のIPを取得するようにします。39.110.211.367上記のような内容でtest-dos.confという名前でfilter.dに置きます。failregexのにクライアントのIPが来るように正規表現を書きます。ignoreregexにはこれが入るものはカウントしないようにします。webサイトなので画像等へのアクセスと弊社のIPはカウントしないようにします。この正規表現で意図したIPが取れているかどうかは実際のログファイルに対して下記コマンドでテストすることができます。/var/log/[logfile名]/usr/local/etc/fail2ban/filter.d/[filter名]これで確認しながら進めることができます。jailこのファイルでactionやfilterのルールを決めます。例を元に見ていきましょう。filterが読み込むlogファイルを指定します。ログからIPを検索するfilter名を定義します。filterが読み込むlogファイルを指定します。bantimeが発生した時に動作するactionを定義します。引数を渡すことも可能です。kawasaki@grasys.ioactionの箇所に定義しているのはブロック用のactionと弊社にslackで通知する設定です。actionjailで定義したルールが適用された場合の動作を定義します。デフォルトでたくさんのルールが用意されていてLBを使用していない場合にブロックしたいなどはiptables-multiportを使用すればいいと思います。今回はLB経由で来ているので下記のようなactionで作成したスクリプトを呼び出してます。actionbanはjailのルールが適用された時にする動作です。bashファイルを動かすこともできます。actionunbanはjailのbantimeが終了された時にする動作です。<name>[Init]add_banned_hosts.shLB経由なのでiptablesの設定にX-Forwarded-Forで該当ipがある場合にブロックするような設定をしています。長谷川も喜んでおります!!そして私事ですが僕も今月の11月で無事に転職して半年が経ちました。Appsを使ってデプロイやサービスの運用をしていました。転職してからlinuxを初めて触って色々指導してもらいながら四苦八苦しています><grasysでの仕事はただ単にお客様のインフラを管理するのではなく、今回のようにお客様の問題解決やシステム構成の提案も多いです。アプリケーションを作るのも楽しかったですが、それとは一味違う面白さとやりがいを感じてます。