5つのシンプルなLinuxサーバーのセキュリティ対策

Secure Ubuntu Server Tips 00 Featured Image

Linuxサーバーは、現代のインターネットの基盤です。今日、ウェブブラウザを通じてアクセスできるほぼすべてのウェブサイトやサービスは、Linuxディストリビューション上で動作しています。ここでは、Linuxサーバーを安全にする方法を紹介します。

目次

    1. Root SSHアクセスの削除
    1. SSHアクセス用の公開鍵ペアの使用
    1. Linuxサーバーのファイアウォールの強化
    1. 各サービス用の新しいユーザーの作成
    1. サーバーのカーネルの強化
  • よくある質問

: このチュートリアルはUbuntuサーバーを使用して作成されましたが、他のLinuxディストリビューションにも適用可能です。

1. Root SSHアクセスの削除

Ubuntuサーバーを安全に保つ最も簡単な方法の1つは、Root SSHアクセスを無効にしてSSHデーモンを保護することです。デフォルトでは、OpenSSHサーバーはすべての着信接続がrootユーザーとしてログインできることを許可しています。

例えば、次のコマンドを不適切に設定されたサーバーで実行すると、ログインプロンプトが表示されます:

Secure Ubuntu Server Tips 04 Insecure Root Login

これは問題になる可能性があります。なぜなら、サーバーがオープンで脆弱になり、パスワードのブルートフォース攻撃にさらされるからです。この問題を解決するには、Linuxサーバーにログインし、SSHデーモンの設定ファイルを更新します。

Linuxサーバーに入ったら、SSHの設定ファイルを編集します:

sudonano/etc/ssh/sshd_config

Secure Ubuntu Server Tips 07 Sshd Config Default

GNU NanoでPermitRootLogin変数を探すには、Ctrl + Wを押してPermitRootLoginと入力します。

Secure Ubuntu Server Tips 08 Permitrootlogin Variable

PermitRootLoginの値を「yes」から「no」に変更し、Ctrl + oを押してファイルを保存し、Ctrl + xでエディタを閉じます。

新しい設定を適用するには、systemctlを通じてサーバーのSSHデーモンをリロードします:

sudo systemctl restart ssh

Secure Ubuntu Server Tips 09 Reload Ssh Server

2. SSHアクセス用の公開鍵ペアの使用

Linuxサーバーを安全に保つ別の迅速な方法は、ローカルアカウントとSSHユーザーアカウントの間に公開鍵ペアを作成することです。この方法では、パスワードログインプロセスをスキップし、リモートサーバーへの自動認証が行われます。

公開鍵ペアを作成するには、まずローカルマシンで次のコマンドを実行します:

ssh-keygen

keygenプログラムは、作成する鍵に関するいくつかの詳細を尋ねます。これらのオプションはデフォルトのままで問題ありませんので、Enterを3回押して進みます。

Secure Ubuntu Server Tips 10 Generate Ssh Key

新しい公開鍵ペアをリモートサーバーにエクスポートするには、ssh-copy-idプログラムを使用します。これは、ローカルおよびリモートのマシンをSSH経由で公開鍵認証の準備をするための便利なユーティリティです。

ssh-copy-id [email protected]

Secure Ubuntu Server Tips 11 Ssh Copy Id Server

次のコマンドでリモートマシンにログインします:

SSHでのログインプロンプトを削除することでも、Linuxサーバーをさらに安全に保つことができます。次のコマンドでデーモンの設定ファイルを開きます:

sudonano/etc/ssh/sshd_config

PasswordAuthentication変数を見つけ、その値を「yes」から「no」に変更します。

Secure Ubuntu Server Tips 13 Disable Password Authentication

次のコマンドを実行してSSHデーモンをリロードします:

sudo systemctl restart sshd

3. Linuxサーバーのファイアウォールの強化

SSHアクセスを制限するだけでなく、ファイアウォールを設定することでLinuxサーバーのセキュリティを向上させることもできます。デフォルトでは、新しいLinuxマシンはすべてのポートからの着信接続を受け入れます。

これは問題になる可能性があります。なぜなら、サーバーがポートスキャン攻撃に脆弱になるからです。悪意のあるユーザーは、不適切なポートをスキャンして、それを利用して悪用することができます。

Secure Ubuntu Server Tips 14 Sample Port Scanning

この問題を解決するひとつの方法は、ufwをインストールすることです。これは、外部に公開されるポートとアドレスを制御できるシンプルなファイアウォールクライアントです。

次のコマンドを実行して、Ubuntuにufwをインストールします:

sudo apt install ufw

Secure Ubuntu Server Tips 15 Installing Ufw

ufwのデフォルトルールを設定します。これらのポリシーは、あなたがカスタマイズしないポートに対してファイアウォールが従うものです。すべての着信接続をブロックしていることを確認することは良いプラクティスです:

sudo ufw default deny incoming  
sudo ufw default allow outgoing

Secure Ubuntu Server Tips 16 Change Default Rules

マシンで実行したいサービス用にファイアウォールを設定します。例えば、次のコマンドを実行すると、SSHでのログインとウェブサーバーのホスティングが許可されます:

sudo ufw allow 22  
sudo ufw allow 80  
sudo ufw allow 443

最後に、次のコマンドを実行して新しいファイアウォール構成を有効にする必要があります:

sudo ufw enable

さらに、次のコマンドを実行してファイアウォールがオンラインであるか確認できます:

sudo ufw status

Secure Ubuntu Server Tips 17 Ufw Active Status

4. 各サービス用の新しいユーザーの作成

デフォルトでは、Linuxシステム内のすべてのファイルとプログラムは特定のユーザーとグループに属します。システムを変更するには、適切なフォルダに対する適切な権限が必要です。

Linuxサーバーのセキュリティを強化する一つの方法は、新しいサービスごとに新しいユーザーアカウントを作成することです。このアプローチでは、各サービスの権限をそれぞれのユーザーアカウントに制限できます。

Secure Ubuntu Server Tips 18 Folder With Multiple Owners

これを行うには、次のコマンドを実行します:

sudo useradd -s/bin/bash -d/home/new-service -m -G sudo new-service  
sudo passwd new-service
  • -sフラグは新しいユーザーアカウントのシステムシェルを設定します。この場合、私の新しいアカウントはBashをシェルに使います。
  • -dおよび-mフラグは、新しいアカウントのデフォルトのユーザーディレクトリを設定します。
  • -Gフラグは、新しいアカウントを指定した任意のセカンダリグループに追加します。たとえば、新しいアカウントをsudoグループに追加すると、スーパーユーザーコマンドを実行できるようになります。
  • passwdコマンドは、新しいユーザーアカウントの新しいパスワードを設定できます。

完了したら、現在のアカウントからログオフするか、su new-serviceを実行して新しいユーザーアカウントを使用できます。

Secure Ubuntu Server Tips 19 New User Running

5. サーバーのカーネルの強化

カーネルはLinuxシステムの最も重要な部分の1つであり、マシンのハードウェアとソフトウェアをリンクする役割を果たします。たとえば、自分のLinuxカーネルをコンパイルすることで、珍しいハードウェアや機能のサポートを有効にできます。

Secure Ubuntu Server Tips 20 Make Menuconfig

そのほか、カーネルはオペレーティングシステムのルートプロセスとしても機能します。カーネルを保護することは、Linuxサーバーの保護の最も重要な部分の1つです。

カーネルを保護する最も簡単な方法の1つは、sysctlを使用することです。これは、Linuxカーネルの実行時オプションを調整できる組み込みユーティリティです。

Secure Ubuntu Server Tips 21 Sysctl Man Page

ただし、sysctlはカーネルの全体的な強化プロセスをカバーしないことに注意してください。カーネルのセキュリティは主に、あなたがそこから必要とするものによって変わるからです。

それを考慮して、次のコマンドを実行してカーネルが診断情報を報告しないようにします:

sudo sysctl kernel.kptr_restrict=2  
sudo sysctl kernel.dmesg_restrict=1  
sudo sysctl kernel.kexec_load_disabled=1

Secure Ubuntu Server Tips 22 Sysctl Kernel Tweaks

次のコマンドを実行することで、サーバーへの偽の接続要求をドロップするようカーネルに指示することもできます:

sudo sysctl net.ipv4.tcp_syncookies=1  
sudo sysctl net.ipv4.tcp_rfc1337=1

Secure Ubuntu Server Tips 23 Sysctl Net Flood Tweak

これらのコマンドは、カーネルに各着信接続を検証させることになります:

sudo sysctl net.ipv4.conf.all.rp_filter=1  
sudo sysctl net.ipv4.conf.default.rp_filter=1

Secure Ubuntu Server Tips 24 Sysctl Net Filter Connections

最後に、次のコマンドを実行することで、着信接続がネットワークトラフィックを別のゲートウェイにリダイレクトするのを防ぎます。これにより、マンインザミドル攻撃からマシンを守ることができます。

sudo sysctl net.ipv4.conf.all.accept_redirects=0  
sudo sysctl net.ipv4.conf.default.accept_redirects=0  
sudo sysctl net.ipv4.conf.all.secure_redirects=0  
sudo sysctl net.ipv4.conf.default.secure_redirects=0  
sudo sysctl net.ipv6.conf.all.accept_redirects=0  
sudo sysctl net.ipv6.conf.default.accept_redirects=0  
sudo sysctl net.ipv4.conf.all.send_redirects=0  
sudo sysctl net.ipv4.conf.default.send_redirects=0

Secure Ubuntu Server Tips 25 Sysctl Net Mitm Prevention

ヒント: 上記のヒントに加えて、Linuxサーバーをセキュアに保つために、これらのオープンソースツールを利用することもできます。

よくある質問

自分のローカルマシンを失いました。SSHを通じてUbuntuサーバーにまだログインできますか?

ほとんどの場合、公開鍵認証のみを使用している場合、SSHを介してログインすることはできません。しかし、PasswordAuthentication変数を無効にしていなければ、SSHプロンプトにアクセスすることも可能かもしれません。

それ以外の場合、物理的にマシンにアクセスして「/etc/ssh/sshd_config」を更新するか、VPSプロバイダーからルートコンソールにアクセスすることができます。

私のサーバーにはiptablesとufwの両方があります。ファイアウォールのために両方を設定する必要がありますか?

いいえ!iptablesとufwは同じアドレス範囲とポートを制御するファイアウォールソフトウェアです。Linuxサーバーに機能するファイアウォールがあれば、どちらか一方を設定すれば十分です。

作成したユーザーからスーパーユーザー権限を削除することは可能ですか?

はい!既存のユーザーをグループから削除することは可能です。usermodユーティリティを使用します。たとえば、usermod -G video new-serviceを実行すると、「new-service」ユーザーを「sudo」グループから削除し、「video」グループに追加します。

画像クレジット: Unsplash。全ての変更とスクリーンショットはRamces Redによるものです。