自宅サーバのセキュリティを考える

自宅サーバー

先日、DNSで自宅サーバの名前解決ができなくなりました。

自宅サーバにDNSサービスを立てている訳ではないので、取り急ぎ/etc/resolv.confを直接書き換える対処で事なきを得たわけですが、原因が分からず腑に落ちない状況です。

セキュリティ対策としてはルータのFW設定とポートを変更する対策をしていますが、不安になってきました。

ECS 小型デスクトップパソコン LIVAZ-8/240-W10Pro(N4200)TS

そんなわけで、自宅サーバのセキュリティについて考えてみたいと思います。

私

話変わるけど、大阪都構想否決されましたね。

自宅サーバのセキュリティ対策

自宅サーバのセキュリティ対策として、何ができるのでしょうか。

最も基本的なセキュリティ対策はFirewall(FW:ファイヤーウォール)の設定です。

ファイアウォール - Wikipedia

インターネットに公開しているサーバの場合は、インターネット越しに自宅サーバが攻撃される可能性が高いです。

私も、このブログをはじめ、VPNサーバ等を外から使うために自宅サーバをインターネットに公開しています。

そのため私の場合は、ルータ側でFWの設定をしています。

FWと言っても、ルータに設定する場合とサーバ側(iptablesやufw等)に設定する方法がありますが、私はルータ側でFWの設定をしています。

具体的には、インターネット公開しているサービスのポート番号(80、443、1194、51820)以外は拒否しています。

一応、SSHは22番ポートではなく、SSLHで443番ポートで受ける設定にしています。

基本的に、必要最低限にポートを絞っていれば攻撃されるリスクは大きく減らすことができます。

自分は一応、IPAの情報処理安全確保支援士のセキュリティ資格持っているので、基本的なセキュリティ知識は持っています。

SSHログインの足跡

このようなFWを設定していたとしても万全ではありません。

自宅サーバのログを確認すると大量のSSHへのログイン試行が確認されました。

SSHへのログイン試行(攻撃)の痕跡は以下のコマンドで確認できます。

意外と攻撃されています。

月間試行数は・・・

私

8万って、思ってたよりやってくれたな・・・

知らない間にものすごい攻撃を受けていました。。

もしかしたら、夏の熱暴走もこれが要因の一つかもしれません。

ログを分析してみる

もう一度ログをよく見てみます。

よく見ると、攻撃者のIPアドレスが全て172.31.0.5になっています。

ローカルIPアドレスになっているのは、DockerコンテナのIPアドレスだからです。

Dockerコンテナ(SSLH)経由で443番ポートで受けてSSHDを叩くため、接続元がSSLHのDockerコンテナIPアドレス(172.31.0.5)になるのです。

私

ややこしいな

つまり、攻撃者は22番ポートを狙い撃ちしてSSHを試行しているわけではないということが分かりました。

「SSHの攻撃対策は22番ポートを閉じればよい」という浅はかな考えは、通用しません。

攻撃者には完全に裏を読まれています。

ということで、ログ収集のために一旦SSHに関してはSSLHを経由するのを辞めて、ルータ側で22番ポートをあえて公開してみました。

そして2-3週間ほどおいてログを確認してみます。

頂きましたー。攻撃者のIPアドレスが分かりました。

リスト化してみます。

最後の「grep -vE “^10.29.3..+”」は、LAN内からのIPアドレスを除外するためです。

上記IPアドレスから、自宅サーバへのSSH試行がありました。

おそらく攻撃目的でしょうから、これらのIPアドレスからの接続を拒否するのがよさそうです。

ちなみに、各IPアドレスからのSSH試行回数をカウントしてみます。

Topは41.141.248.196からで、月間約4000回です。

おめでとうございます。

私

悪意しか感じない

自宅サーバのセキュリティ対策を考える

ログインに失敗しているとはいえ、やはりセキュリティを考えるとこうした悪意を持ったSSH試行はさせないことがリスク回避に繋がると考えました。

どうにか、対策する方法について考えてみます。

fail2banはどうか

私は使っていませんが、fail2banは各種ログを解析して不正アクセスを回避するルールを設定できる優れたアプリケーションです。

例えば、一定時間(1分間)に指定回数(3回)ログインに失敗したIPアドレスを一定期間(1週間)ブロックする(iptablesに追加する)といった、細かい設定ができます。

一見、有効なアプリケーションですが私の場合はsslhを使っているため、ログにはSSLHのDockerコンテナのIPアドレスしか見えないのでおそらく使えません。

やっぱり、利便性を考えるとSSLHは有効にしておきたいです。

ということで、fail2banは最終手段に。

私

ここでSSLHが問題になるとは

ルータにFWを設定してみる

攻撃元のIPアドレスは分かっているわけですから、FWに攻撃者のIPアドレスの接続拒否設定を追加すれば目的は達成できそうです。

ルータのFWにこれらのIPアドレスからの侵入を拒否する設定を加えます。

IPSのNUROから借りているルータ(F660A)を使っていますが、F660AにもIPアドレスでフィルタをかけられます。

でもね、さすがに400個以上のIPアドレスを手入力するガッツはありません・・・。

テキストファイルで一括登録機能とかあればよかったのですが。

ということで別案を考えます。

サーバのiptablesに設定してみる

消去法でサーバのFWに設定を加えるのが現実解のようです。

iptablesに攻撃者のIPアドレスからの接続を拒否する設定を加えることで、目的を達成できます。

こんな感じで、iptablesにルールを追加していけばOKです。

コマンドで設定するので、スクリプトを書けば対策ができそうです。

しかし、問題は攻撃者のIPアドレスが固定ではないこと。

攻撃者がIPアドレスを変えれば、iptablesにルールを追加しても意味がありません。

スクリプトを書いてFWを設定(iptablesにルールを追加)するにしても、そのことも考慮して対策を検討する必要があります。

私

fail2ban使えないかな

/etc/hosts.denyを設定するのはどうか

/etc/hosts.denyや/etc/hosts.allowでアプリケーションレイヤでIPアドレスベースでのアクセス制御ができます。

最も簡単な方法ではありますが、/etc/hosts.denyや/etc/hosts.allowを読み込むためにサービスやアプリケーションを経由するので、アプリケーションの脆弱性(セキュリティホール)を突かれた場合に機能しなくなる可能性があります。

また、今回のように頻繁にアクセス(攻撃)されると、アプリケーションで一旦パケットを受けて/etc/hosts.denyと照らし合わせるためCPU負荷の影響が懸念されます。

サーバ側でFWを作るならLinuxカーネルで機能するiptablesで制御するのが確実&安全です。

まとめ

自宅サーバのセキュリティ対策について記事にしてみました。

ECS 小型デスクトップパソコン LIVAZ-8/240-W10Pro(N4200)TS

SSLHを使って、SSHDのポートを22番から443番に変更することで大丈夫だろうと高を括っていましたが、443番ポートに対してSSH試行されているログを確認しました。

幸いにもログインパスワードが突破されておらず、侵入は許していませんが攻撃者の方が一枚上手でした。

ログを確認数と月間8万回以上のsshログイン試行を確認しました。

ブルートフォース攻撃(総当たり攻撃)を仕掛けているようなので、パスワードが突破されるのも時間の問題、という状態でした。

これは、ある意味DDoS攻撃を受けているようなものなので、我が家の自宅サーバの、夏場の熱暴走はこれが原因だったのかもしれません。

私

パスワード大事

公開鍵認証にしたり、SSLHの利用を辞めることで安全性を高められますが、便性を考えると難しいこともあります。

その場合は、iptablesに目の細かいルールを設定することが現実的な手段です。

攻撃者のIPアドレスは400を超える数なので、スクリプトを書いて追加するのが現実的ですが、厄介なのは攻撃者のIPアドレスをどう追従していくかということ。

そのあたりの仕組みを考えて、引き続き対策していく必要がありそうです。

参考になれば幸いです。

また、良い方法があったら教えてもらえると嬉しいです。

コメント

タイトルとURLをコピーしました