Ubuntuサーバーを安全に保つ方法

0 株式
0
0
0
0

導入

初めてサーバーを構築した時のことを覚えています。悪意のある人物がサーバーに侵入できるとは思っていなかったので、セキュリティ対策をほとんど何もしていませんでした。そして、どうなったかはご想像の通りです。幸いにもバックアップを取っていたので、簡単に復元できました。しかし、また同じことが起こりました。そこで今回は、調査と下調べを行い、サーバーのセキュリティを強化しました。ハッキングされないサーバーなど存在しないことは承知していますが、サーバーを安全に保つ方法と、万が一サーバーがダウンしてしまった場合の対処法をお伝えします。.

まずは基本的な設定から始めましょう。新しいサーバーを作成したら何をすべきかを学びます。次に、定期的なチェックを実施してサーバーを維持する方法を学びます。最後に、サーバーがダウンした場合の対処法を学びます。このチュートリアルでプロのサーバー管理者になれるわけではありません。サーバー管理者は多くの作業を必要とし、大変な仕事です。しかし、少なくとも趣味のプロジェクトを安全に維持することはできます。.

前提条件
  • 1台のサーバー(例:Hetzner)

ステップ1 – 初期設定と基本的なセキュリティ

サーバーを作成したら、「Ubuntu での初期サーバーセットアップ」チュートリアルの手順 1 ~ 5 に従ってください。以下の手順が説明されています。

  • sudo権限を持つ新しいユーザーを作成する
  • SSHキーを追加する

リンクされたチュートリアルの最初の 5 つの手順を完了し、新しい sudo ユーザーに接続したら、以下の手順を続行できます。.

システムアップデート

まず最初にすべきことは、アップデートを確認することです。古いソフトウェアには脆弱性があり、簡単に悪用される可能性があります。これは思ったより簡単です。次の2つのコマンドを実行するだけです。

sudo apt update
sudo apt upgrade

簡単ですよね?これで最新バージョンを使用していることが確認できました。.

安全なSSHアクセス

誰かがあなたのサーバーを攻撃する場合、まずSSH経由でアクセスを試みるでしょう。多くの場合、ボットや複数の手段を用いてこれを行います。そのため、SSHアクセスのセキュリティ確保は非常に重要です。.

設定ファイルを編集します。

sudo nano /etc/ssh/sshd_config
  • ルートアクセスを無効にする

「PermitRootLogin」の行を見つけて、「no」に変更します。.

  • パスワード入力を無効にする

上記のように SSH キーを追加した場合は、パスワードの入力を無効にすることができます。.

    • “「PasswordAuthentication」を見つけて、「no」に設定します。.
    • “「PubkeyAuthentication」を見つけて、「はい」に設定します。.
  • デフォルトのSSHポートを変更する

これを変更するだけで、自動化されたボット攻撃のほとんどを排除できます。そのほとんどは偽のボットであり、ポート 22 経由で SSH にアクセスしようとするためです。.

「#Port 22」という行を見つけて、「Port 2222」などに変更します(または 2222 を任意の値に変更します)。.

変更を保存し、ポートが正常に変更されたかどうかを確認します。

sudo systemctl restart ssh.service
sudo systemctl status ssh

「Server listen on :: port 2222」と表示されていることを確認します。.

ポート 2222 が指定されている場合は、次のコマンドを実行してサーバーへの接続を終了し、新しいポートへの接続が機能するかどうかを確認できます。

ssh -p 2222 holu@<203.0.113.1>

設定したポートに接続できれば、チュートリアルを続行できます。.

ファイアウォールを設定する

ファイアウォールルールの管理には「ufw」を使用します。ufwは使いやすく、コマンドラインインターフェースを採用しています。ufwはシステムに既にインストールされている可能性が高いですが、以下のコマンドを実行してインストール済みかどうかを確認できます。

sudo apt install ufw

次に、他のルールで明示的に許可されていない限り、すべてのネットワークトラフィックを拒否します。これは、明示的に許可したトラフィックのみを許可することでサーバーを保護するために不可欠です。以下のコマンドを実行する必要があります。

sudo ufw default deny incoming

次に、すべての送信ネットワークトラフィックを許可します。これは通常安全であり、サーバーが他のサーバーやサービスと制限なく通信できるようになります。次のコマンドを実行してください。

sudo ufw default allow outgoing

次に、SSHポートがSSH経由でサーバーに接続できるように許可する必要があります。2222を別のSSHポート番号に置き換えて、次のコマンドを実行してください。

sudo ufw allow 2222/tcp

最後に、ファイアウォール ルールを有効にする必要があります。

sudo ufw enable

フェイル 2 バン

SSHポートを変更し、ファイアウォールを設定しました。しかし、ボットがポートを見つけてSSH経由でサーバーにアクセスしようとしたらどうなるでしょうか?これはブルートフォース攻撃であり、Fail2Banでサーバーを保護することができます。このソフトウェアは、悪意のある試みの兆候が見られるIPアドレスをブロックします。Fail2Banをインストールして有効にするには、以下の3つのコマンドを実行する必要があります。

sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

/etc/fail2ban/ フォルダ内の設定ファイルを編集することで、Fail2Ban の設定をカスタマイズすることもできます。より詳細な情報とベストプラクティスについては、Fail2Ban のドキュメントをご覧ください。.

素晴らしい!大きな一歩を踏み出し、サーバーのセキュリティが強化されました。今は、定期的にメンテナンスを行うだけで大丈夫です。次のセクションで必要な作業について説明します。.

ステップ2 – 定期的なメンテナンス

  • システムアップデート

まず、システムにアップデートがあるかどうかを確認する必要があります。次のコマンドを実行してください。

sudo apt update && sudo apt upgrade -y
  • レポートを監視する

異常なアクティビティを検出するには、システムログを定期的に確認する必要があります。Logwatch はこのプロセスを自動化するのに役立ちます。logwatch は次のコマンドでインストールできます。

sudo apt install logwatch

より詳しい情報、日次レポートの設定方法、レポートの外観を確認するには、このガイドをご覧ください。.

  • ディスクの使用状況を確認します。

サーバーを実行するのに十分なスペースがあることを確認するには、次のコマンドで残りのディスク容量を確認します。

df -h
  • データをバックアップしてください。

サーバーが完全に削除されたりアクセスできなくなったりした場合に備えて、常に複数のバックアップを用意しておくことが重要です。幸いなことに、Hetznerはクラウドサーバー用の自動バックアップソリューションを提供しており、公式ドキュメントで確認できます。独自のバックアップを作成したい場合は、「rsync」や「Duplicity」などのツールを使用できます。.

  • ユーザーアカウントを監査する

サーバー上のユーザーアカウントを定期的に確認することを忘れないでください。許可されたユーザーのみがサーバーにアクセスできるようにしてください。不要になったアカウントは削除してください。次のコマンドを実行することで、ユーザーアカウントを確認できます。

sudo nano /etc/passwd
  • ルートキットとマルウェアのチェック

サーバーを素早くスキャンするには、「rkhunter」や「chkrootkit」などのツールが便利です。これらのツールは、ルートキット、バックドア、ローカルエクスプロイトの可能性をチェックし、すべてが正常であることを確認するのに役立ちます。以下のコマンドを実行して、rkhunterがインストールされていることを確認し、以下の点を確認してください。

sudo apt install rkhunter
sudo rkhunter --check

  • システムパフォーマンス監視

最後に、ソフトウェア実行中にリソースのボトルネックが発生していないことを確認するために、システムパフォーマンスを素早くチェックできます。「htop」「top」「atop」などのツールもありますが、次のコマンドを実行するだけでも十分です。

htop

ステップ3 – その他のセキュリティツール

  • 侵入検知システムを使用します。

「AIDE」(Advanced Intrusion Detection Environment)などのツールを使用して、システムの変更を監視できます。AIDEはファイルとフォルダのデータベースを作成し、システムとデータベースを比較することでファイルの整合性を確保します。詳細はリポジトリで確認できます。初回使用時は、以下のコマンドでインストールできます。

sudo apt install aide

次のコマンドを使用してデータベースを起動および生成します。

sudo aideinit
sudo cp /var/lib/aide/aide.db.new /var/lib/aide/aide.db

次のコマンドを使用して、システムとデータベースを比較します。

sudo aide --config /etc/aide/aide.conf --check
  • 2要素認証(2FA)を有効にする

SSH経由でサーバーにログインする際に2FA(二要素認証)を設定することもできます。これにより、保護層がさらに強化され、不正アクセスのリスクを軽減できます。インストールは次のコマンドで行えます。

sudo apt install libpam-google-authenticator

次のコマンドを実行して起動します。

google-authenticator
  • 安全なウェブアプリケーション

サーバー上でウェブアプリケーションを実行している場合は、ベストプラクティスに従い、定期的にアップデートするようにしてください。例えば、WordPressを使用している場合は、常に最新バージョンのWordPressを使用し、すべてのプラグインとテーマを最新の状態に保つ必要があります。さらに、適切なWordPressセキュリティプラグインをインストールする必要があります。これにより、サーバーやアプリケーションへの不正アクセスのリスクを軽減できます。.

ステップ4 – インシデント対応計画

この計画は大規模な組織では非常に詳細なものになる可能性がありますが、小規模なエンターテイメントサーバー向けにはシンプルで実用的なものにします。そこで、3ステップの計画をご用意しました。.

  • 準備

このセクションでは、サーバー情報を記載した小さなテキストファイルを作成するか、メモ帳にメモを残してください。サーバーのアーキテクチャ、実行しているソフトウェア、バックアップとログの保存場所、設定などの情報を含めてください。このメモは安全な場所に保管してください。以下の例を参考に、参考にしてください。

サーバー情報
情報説明
サーバー名マイサーバー01
IPアドレス192.168.1.100
オペレーティング·システムUbuntu 24.04 LTS
CPU4つのvCPU
ラム8GB
ストレージ100GB SSD
SSHポート2222
    • ソフトウェアとサービス: Nginx 1.18.0、PostgreSQL 13、Django 3.1
    • バックアップ: デュアル、毎日、/mnt/backup および AWS S3 のリモート ストレージ、30 日間保持
    • Nginx の設定: /etc/nginx/nginx.conf
    • PostgreSQL の設定: /etc/postgresql/13/main/postgresql.conf
    • Django の設定: /home/myuser/myapp/settings.py
    • UFW設定: /etc/ufw/ufw.conf
  • 識別

この時点で、サーバーの何が問題なのかを確認する必要があります。問題や侵害は、Webアプリケーション、サーバー自体、それともサーバー内のデータベースのいずれかに関連しているのか?確信が持てない場合は、常にすべてが危険にさらされていると想定してください。そのため、サーバーから始めて、すべてを再度確認する必要があります。.

  • 改善

このセクションでは、損傷したシステムを復元します。サーバーにアクセスできない場合は、サーバーのバックアップから復元する必要があります。Webアプリケーションの1つがダウンしている場合は、そのバックアップから復元するだけで済む場合があります。すべてが復元され、テストされ、期待どおりに動作し、セキュリティスキャンが実行されていることを確認してください。.

結果

サーバーのセキュリティを確保するには、ベストプラクティスと定期的なメンテナンスの組み合わせが必要です。この記事で概説した手順に従うことで、サーバーのセキュリティを大幅に強化し、貴重なデータを保護できます。セキュリティは継続的なプロセスであるため、サーバーの定期的なチェックを忘れないでください。.

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

あなたも気に入るかもしれない