PR

FreeBSD Sendmail Setup パート10

FreeBSD
記事内に広告が含まれています。

これまでに FreeBSD Sendmail Setup と称してパート1からパート9までご紹介いたしましたが、SMTP AUTHやimapを使用したパスワードクラックのブルートフォース攻撃が全く止むことがなく、パート9でsendmail の組み込み対策でしのいできたのですが、とうとう堪忍袋の緒が切れてしまいましてもう少し効率的な対策は無いものかとネットをリサーチしていたら、fail2banというpythonスクリプトがあることを知りました。私の場合はネットワーク管理者ということで、CiscoのFirewallなどの専用アプライアンスを使ってサイト全体を保護する方法の方が好きなのですが、家庭にそのような高価な機材はありません。そこでfail2banを使ったサーバーでの対策を行ってみたいと思います。

ご臨終

実は元々のメールサーバーであるdhcpさんは物理マシンなのですが、ファンに問題があり、ちょっと負荷をかけるとCPUの温度がすぐに90℃台になってしまい、100℃を超えるとACPIの機能により強制shutdownとなってしまい、これ以上の使用には耐えられないと判断しました。そこでvmware上にdhcp02をインストールしまして、壊れてしまう前にdhcpさんで運用していた全てのサービスを移動させました。FreeBSDもi386バージョンは無くなるということですし、dhcp君も古いi386の筐体ですので、永久とわの眠りにつくいいタイミングなのを自ら悟ったのかもしれません。

さてその対策は?インストレーション

さて、Sendmail Setup パート10は全く予定にはなかったのですが、あまりにも腹立たしいので急遽お届けすることになりました。こちらがブルートフォースのログです。

これをブロックするためにfail2banをインストールします。securityディレクトリの下にpythonのスクリプトとして存在しますのでソースからインストールします。

インストールが完了すると、このような感じになります。

このpy-fail2banによって、これらのファイルがインストールされます。

設定開始

先へ進む前にsendmailのaccessファイルなどで行っていたブルートフォース対策を全て消去しておきます。基本はmanコマンドでfail2banを見るわけですが、fail2ban.orgのマニュアルgithubのメーリングリストを見たりすることで必要な設定を作ってみました。その前に、自動起動に必要な変数をセットしておきます。fail2banは各種ファイアウォールソフトウェアで動くようですが、簡単そうなpfを使用してみたいと思います。まず、/usr/local/etc/fail2ban/action.d/pf.confファイルに目を通しておきます。/etc/pf.conf を作るときの参考になる情報が書かれています。そして、ナルホドと納得したらpfを起動してみましょう。

やっぱり、設定なしに動くことは無いようです。メッセージ通りにpfのmanページと/usr/local/etc/fail2ban/action.d/pf.confを参考にして、/etc/pf.confを作ります。

気を取り直してもう一度起動してみます。

機嫌よく動いたようなので、pflogも動かします。そして、fail2banのサービスも起動してみます。

動いたようなのですが、Warningが出ています。もう見たくありませんので、指示通りに設定を加えます。

再起動してみると、いい感じに動いたように見えます。設定ファイルを見てゆけば書かれているので気づくのですが、既存の設定ファイルを直接触ることはせずに、*.localファイルを作ることで対応することをお勧めしますということです。メインのソフトウェアがアップデートされると、ローカルでの変更が消えてなくなります。FreeBSDの場合はローカルで変更があるとアップデートの対象であってもそのファイルのアップデートされず、古いまま残ります。ですので*.localファイルを作ってメインのファイルを補完するようにしましょう。

ブロックルール追加/テスト

これで準備完了となったようです。後はルールを追加してゆきましょう。まずはお試しでsshログインの失敗を検出してしっかりブロックするか動作確認を行ってみます。

簡単なルールファイルを作ります。

そして今作ったルールを読み込みます。

fail2ban-client statusで全てのルールが表示されます。現在sshのルールしかありません。

cactiさんからsshで適当なパスワードを入れて何度もdhcp02へ接続してみます。fail2ban-clientで確認しながらsshを実行してみると、ブロックしたIPアドレスが表示されるようになりました。

何をしたかというと、sshを何度も実行していると、急にssh接続が固まってしまい、適当に先行入力していた文字列が見えているという状況です。目論見通り、IPv4とIPv6ともにブロックできているようです。

ブロックルール追加/本番

では、今最も必要なsendmailのSMTP AUTHを使ったブルートフォースをブロックします。初めのうちは10分に1回くらいの頻度のトライをブロックしていたのですが、敵もさるもの、数時間に1度位のトライをしてくるサイトもあるようで、1日に1回失敗したら1週間ブロックするという究極の設定となりました。

さて、この設定も読み込みましょう。

実行結果

fail2ban-clientで状況を見てみると、早速ブロックされたIPアドレスがいくつも出てきました。

時間が経てば新たなIPアドレスが追加されています。

結局のところで既に使い始めて数か月経っていますが、毎日山ほど記録されていたログも、日に数件に減って非常に満足できるものとなっています。このdhcp02はメールサーバとして使い始めて2日しか経っていないのでまだブロックされているアドレスは多くないですが、元のdhcpではfail2ban-clientで確認すると10行程度アドレスが表示されます。ブロックされた全てのアドレスはIPv4アドレスで、IPv6アドレスがソースアドレスとしてブロックされたことはありませんでした。

お勧めのEO光

私が家庭で使用しているISPはEO光の1Gサービスで、IPv4、IPv6ともに快適に動いています。特に固定IPなどをもらっているわけでもありませんが、家庭内にメールサーバーを立てることができています。ISPルータを再起動すると当然IPv4およびIPv6アドレスレンジが変わってしまうのですが、前回ISPルータの置き場所を変えるために再起動した時から既にかれこれ半年以上同じ環境で安定して動いています。これまでのネットワーク管理者としての経験から一番にお勧めするのは地元密着の独自光回線のISPです。日本ではNTT以外で光ファイバを持っているのは電力会社か鉄道会社となるわけですが、鉄道会社の独自光回線エリアは鉄道線路沿線のみとなるので、NTT回線も併用したりしていますので本当の意味での独自回線とは言えません。そういう意味で、電力会社の光ファイバは複数の電力会社でほぼ全国をカバーしていますので今一番のお勧めです。ネットワーク管理者として国内オフィスでNTTの光ファイバを使ったサービスも使ったことがありますが、結局他のキャリアに変えることが多かったように思います。その点、うちのEO光はかれこれ10年以上使わせてもらっていますが、他のサービスに変えようと思ったことは一度もありません。季節も春で、新たに何か!とお考えの皆さん、まずはインターネット環境を快適にしてみてはいかがでしょう?

光回線の選び方

20年近く外資系グローバル企業でネットワーク管理者をしていた私の目の映る日本の光インターネット回線

コメント