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

Linuxサーバーは、現代のインターネットの基盤です。今日、ウェブブラウザを通じてアクセスできるほぼすべてのウェブサイトやサービスは、Linuxディストリビューション上で動作しています。ここでは、Linuxサーバーを安全にする方法を紹介します。
目次
- Root SSHアクセスの削除
- SSHアクセス用の公開鍵ペアの使用
- Linuxサーバーのファイアウォールの強化
- 各サービス用の新しいユーザーの作成
- サーバーのカーネルの強化
- よくある質問
注: このチュートリアルはUbuntuサーバーを使用して作成されましたが、他のLinuxディストリビューションにも適用可能です。
1. Root SSHアクセスの削除
Ubuntuサーバーを安全に保つ最も簡単な方法の1つは、Root SSHアクセスを無効にしてSSHデーモンを保護することです。デフォルトでは、OpenSSHサーバーはすべての着信接続がrootユーザーとしてログインできることを許可しています。
例えば、次のコマンドを不適切に設定されたサーバーで実行すると、ログインプロンプトが表示されます:

これは問題になる可能性があります。なぜなら、サーバーがオープンで脆弱になり、パスワードのブルートフォース攻撃にさらされるからです。この問題を解決するには、Linuxサーバーにログインし、SSHデーモンの設定ファイルを更新します。
Linuxサーバーに入ったら、SSHの設定ファイルを編集します:
sudonano/etc/ssh/sshd_config
GNU NanoでPermitRootLogin変数を探すには、Ctrl + Wを押してPermitRootLoginと入力します。

PermitRootLoginの値を「yes」から「no」に変更し、Ctrl + oを押してファイルを保存し、Ctrl + xでエディタを閉じます。
新しい設定を適用するには、systemctlを通じてサーバーのSSHデーモンをリロードします:
sudo systemctl restart ssh
2. SSHアクセス用の公開鍵ペアの使用
Linuxサーバーを安全に保つ別の迅速な方法は、ローカルアカウントとSSHユーザーアカウントの間に公開鍵ペアを作成することです。この方法では、パスワードログインプロセスをスキップし、リモートサーバーへの自動認証が行われます。
公開鍵ペアを作成するには、まずローカルマシンで次のコマンドを実行します:
ssh-keygenkeygenプログラムは、作成する鍵に関するいくつかの詳細を尋ねます。これらのオプションはデフォルトのままで問題ありませんので、Enterを3回押して進みます。

新しい公開鍵ペアをリモートサーバーにエクスポートするには、ssh-copy-idプログラムを使用します。これは、ローカルおよびリモートのマシンをSSH経由で公開鍵認証の準備をするための便利なユーティリティです。
ssh-copy-id [email protected]
次のコマンドでリモートマシンにログインします:
SSHでのログインプロンプトを削除することでも、Linuxサーバーをさらに安全に保つことができます。次のコマンドでデーモンの設定ファイルを開きます:
sudonano/etc/ssh/sshd_configPasswordAuthentication変数を見つけ、その値を「yes」から「no」に変更します。

次のコマンドを実行してSSHデーモンをリロードします:
sudo systemctl restart sshd3. Linuxサーバーのファイアウォールの強化
SSHアクセスを制限するだけでなく、ファイアウォールを設定することでLinuxサーバーのセキュリティを向上させることもできます。デフォルトでは、新しいLinuxマシンはすべてのポートからの着信接続を受け入れます。
これは問題になる可能性があります。なぜなら、サーバーがポートスキャン攻撃に脆弱になるからです。悪意のあるユーザーは、不適切なポートをスキャンして、それを利用して悪用することができます。

この問題を解決するひとつの方法は、ufwをインストールすることです。これは、外部に公開されるポートとアドレスを制御できるシンプルなファイアウォールクライアントです。
次のコマンドを実行して、Ubuntuにufwをインストールします:
sudo apt install ufw
ufwのデフォルトルールを設定します。これらのポリシーは、あなたがカスタマイズしないポートに対してファイアウォールが従うものです。すべての着信接続をブロックしていることを確認することは良いプラクティスです:
sudo ufw default deny incoming
sudo ufw default allow outgoing
マシンで実行したいサービス用にファイアウォールを設定します。例えば、次のコマンドを実行すると、SSHでのログインとウェブサーバーのホスティングが許可されます:
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443最後に、次のコマンドを実行して新しいファイアウォール構成を有効にする必要があります:
sudo ufw enableさらに、次のコマンドを実行してファイアウォールがオンラインであるか確認できます:
sudo ufw status
4. 各サービス用の新しいユーザーの作成
デフォルトでは、Linuxシステム内のすべてのファイルとプログラムは特定のユーザーとグループに属します。システムを変更するには、適切なフォルダに対する適切な権限が必要です。
Linuxサーバーのセキュリティを強化する一つの方法は、新しいサービスごとに新しいユーザーアカウントを作成することです。このアプローチでは、各サービスの権限をそれぞれのユーザーアカウントに制限できます。

これを行うには、次のコマンドを実行します:
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を実行して新しいユーザーアカウントを使用できます。

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

そのほか、カーネルはオペレーティングシステムのルートプロセスとしても機能します。カーネルを保護することは、Linuxサーバーの保護の最も重要な部分の1つです。
カーネルを保護する最も簡単な方法の1つは、sysctlを使用することです。これは、Linuxカーネルの実行時オプションを調整できる組み込みユーティリティです。

ただし、sysctlはカーネルの全体的な強化プロセスをカバーしないことに注意してください。カーネルのセキュリティは主に、あなたがそこから必要とするものによって変わるからです。
それを考慮して、次のコマンドを実行してカーネルが診断情報を報告しないようにします:
sudo sysctl kernel.kptr_restrict=2
sudo sysctl kernel.dmesg_restrict=1
sudo sysctl kernel.kexec_load_disabled=1
次のコマンドを実行することで、サーバーへの偽の接続要求をドロップするようカーネルに指示することもできます:
sudo sysctl net.ipv4.tcp_syncookies=1
sudo sysctl net.ipv4.tcp_rfc1337=1
これらのコマンドは、カーネルに各着信接続を検証させることになります:
sudo sysctl net.ipv4.conf.all.rp_filter=1
sudo sysctl net.ipv4.conf.default.rp_filter=1
最後に、次のコマンドを実行することで、着信接続がネットワークトラフィックを別のゲートウェイにリダイレクトするのを防ぎます。これにより、マンインザミドル攻撃からマシンを守ることができます。
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
ヒント: 上記のヒントに加えて、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によるものです。