クラウドコンピューティングは、サーバーのシナリオを大幅に変えました。多くのプラットフォームが無料のLinuxクラウドサーバーを提供しており、これらのクラウドプラットフォームを介してLinuxサーバーを数分でデプロイできます。
新しいサーバーを起動すると、特にインターネット上に表示されている場合は、自動化されたボットスクリプトを使用して、公開されたサーバーの構成ミスや脆弱性を精査する悪意のあるユーザーがすぐに利用できるようになります。
Linuxサーバーをインストールした後、サーバーが危険にさらされないようにするために行う必要のあることがいくつかあります。
これは、Fail2banが私のサーバーの1つで最近見たもののスクリーンショットです。

212回の不正なログイン試行と6回のブロックされたIPアドレス。許可されていない人からのすべてのトラフィックまたはサーバーにログインしようとしているスクリプト。
いくつかの重要な最初のステップは、新しいサーバービルドを侵害から保護するのに役立ちます。
セキュリティを強化するためにLinuxサーバーをインストールした後に行うことをお勧めします
ここでは、UbuntuとCentOS /RedHatの2つの最も人気のあるLinuxサーバーディストリビューションについて検討しました。実行しているLinuxを確認してください。
ここでのアドバイスのほとんどは一般的なものであり、特に明記されていない限り、他のLinuxにも適用できるはずです。
Linuxサーバーのセキュリティを確保するために確認することをお勧めします。個別の手順を示しましたが、すばやく実行したい場合は、デプロイする新しいサーバーですばやく実行できるスクリプトも作成しました 。
1。 root以外のユーザーが設定されていることを確認してください
ルートは全能であり、常にルート権限は必要ありません。
rootは、ほとんどすべてのLinuxシステムで有効なユーザー名でもあります。つまり、リモート認証が有効になっている場合、攻撃者の仕事の半分で、有効なユーザー名の取得が行われます。
また、攻撃者がrootとして侵入できる場合、システム上で何かを行うためにそれ以上の権限は必要ありません。
これらの理由から、root以外のユーザーとしてログインし、SSHを使用したリモートアクセスのrootログインを無効にすることをお勧めします(後で説明します)。
システムにrootとしてログインしていることを前提としています。
useraddコマンドを使用して新しいユーザーを追加します。
useradd <username>
新しく追加されたユーザーのpasswdコマンドでパスワードを設定します:
passwd <username>
2。 root以外のユーザーにsudo権限があることを確認してください
Secure Shell(SSH)を使用してこのアカウントにリモートでログインするため、ルートアクセスを必要とする特権アクティビティを実行できるようにする必要があります。これは、アカウントにsudo権限が必要であることを意味します。
方法は?
UbuntuとCentOSでsudoユーザーを作成するプロセスは似ていますが、ユーザーを追加するグループが異なります。
この手順を実行するには、rootとしてログインする必要があります。
CentOSとRedHat 、ホイールコード> groupは、ユーザーにsudo権限を与えるために使用される標準グループです。 usermodコマンドを使用してこのグループにユーザーを追加します:
usermod -aG wheel <username>
Ubuntu sudo
を使用します sudoユーザーを管理するグループ。
usermod -aG sudo <username>
3。キーベースのSSH認証を有効にする
SSHのキーベースの認証を有効にして、パスワードベースの認証を無効にしたときに機能するようにすることが重要です。
ひびの入った、野蛮な強制、または侵害されたパスワードは、悪意のある人物がシステムにアクセスするための非常に一般的な方法です。疑いを持たないユーザーに資格情報の提供を促す、スピアフィッシング、非常に標的を絞ったスパムメールは、資格情報を取得する一般的な方法の1つにすぎません。
キーベースの認証が有効になっているシステムで誰かがあなたのユーザー名とパスワードを取得した場合 SSHを介したリモートアクセスではパスワードベースの認証が無効になっているため、盗まれたパスワードはそのサーバーにアクセスできなくなります。
キーベースの認証を有効にし、後のステップでパスワードベースの認証を無効にすることで、SSHが使用される可能性を大幅に減らしました。これは、SSHサーバーを保護するための基本的な方法の1つです。
方法は?
サーバーでSSHがすでに有効になっていると思います。あなたがする必要があるのはあなたのパソコン上でSSHキーを生成することです(あなたがサーバーにログインするところから)。
SSHキーを取得したら、root以外のユーザーのサーバー上のauthorized_keysに公開キーを追加する必要があります。
注意 !パソコンからsshキーを紛失しないでください。これらのキーのバックアップを作成します。後でパスワードベースの認証を無効にしてSSHキーを失うと、自分のサーバーからロックアウトされます。
4。 SSHがufwファイアウォールを通過できることを確認してください
システムでファイアウォールを有効にする前に、SSHが許可されていることを確認する必要があります。そうしないと、リモートでシステムにアクセスしている場合にシステムからロックアウトされる可能性があります。
方法は?
UbuntuはUncomplicatedFirewall(ufw)を使用し、CentOS /RedHatはfirewalldを使用します。
CentOS / Red Hat 、firewall-cmdコマンドを使用します:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
Ubuntuでは、次のようにufwコマンドを使用します。
sudo ufw allow ssh
5。ファイアウォールを有効にする(SSHを許可した後のみ)
ファイアウォールは、特に許可したトラフィックのみがサーバーに流入できるようにします。悪意のある攻撃者がサーバー上でマルウェアを取得し、許可されていないポートを介して通信させようとした場合、またはサービスが誤って有効にされた場合、サーバーを侵害したり、さらに侵害したりするために使用することはできません。
>方法は?
CentOS / Red Hatシステムで、firewalldsystemdサービスを有効にします。
sudo systemctl start firewalld
sudo systemctl enable firewalld
Ubuntuでは、次のコマンドを使用します:
sudo ufw enable
6。バナーを表示しないようにSSHを設定する
攻撃者がサーバーを危険にさらす可能性のある方法の1つは、サービスを実行しているソフトウェアのバグによるものです。バナーには、実行しているOpenSSHまたはオペレーティングシステムのバージョンに関する情報を表示できます。悪者に情報を提供する意味はありません。それらをうまく機能させてください!
これはCentOS/RedHatのデフォルトの動作です アクションが不要になるようにバナーを表示します。
Ubuntuでは、次を使用できます:
sudo echo "DebianBanner no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
7。すべてのSSH転送を無効にする
管理者がSSH転送を使用して、クリアテキストを渡す可能性のあるトラフィックを暗号化することは珍しくありませんが、使用しない場合はオフにする必要があります。悪意のある攻撃者が転送を使用してトラフィックを暗号化すると、表示が困難になったり、許可されたポートとサービスを使用して通過がブロックされるトラフィックを取得したりすることが困難になる可能性があります。
方法は?
CentOS / Red Hatでは、 次を/etc / ssh / sshd_config
に追加します :
DisableForwarding yes
Ubuntuでは、 DisableForwarding yes
を追加します 10-my-sshd-settings.conf
に ファイル:
sudo echo "DisableForwarding yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
8。 SSH経由のルートログインを無効にする
ほとんどすべてのLinuxシステムにrootユーザーがいます。そのアカウントにSSHの使用を許可するリスクは2つあります。
- ユーザー名は既知であり、悪意のあるユーザーによって頻繁に試されます。
- 攻撃者がrootとして侵入した場合、攻撃者は完全なシステムアクセス権を持ちます。
SSH接続でrootアカウントの使用を無効にすると、両方のリスクが無効になります。
CentOS / Red Hat 、 PermitRootLogin yes
という行を見つけます / etc / ssh / sshd_config
にあります 次のように変更します:
PermitRootLogin no
Ubuntuでは、 PermitRootLogin no
を追加します 10-my-sshd-settings.conf
に ファイル:
sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
9。パスワードベースのSSH認証を無効にする
SSHでパスワード認証を無効にする前に、手順3で説明したように、キーベースの認証が構成およびテストされていることを確認してください。
パスワードベースの認証を無効にすると、パスワードを推測しようとしたり、ソーシャルエンジニアリングによって資格情報を入力したり、SSHを使用してサーバーに侵入したりする悪意のある攻撃者がブロックされます。
攻撃者は、サーバーにアクセスするために公開鍵と秘密鍵を持っている必要があります。
CentOS / Red Hat 、 PasswordAuthentication yes
という行を見つけます / etc / ssh / sshd_config
にあります 次のように変更します:
PasswordAuthentication no
Ubuntuについて 、 PasswordAuthentication no
を追加します 10-my-sshd-settings.conf
に ファイル:
sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
10。 rhostsを無視する
rhosts
セキュアシェルに取って代わられたレガシープロトコルであるrshに関連付けられています。ユーザーが悪意のあるrhosts
を作成しようとした場合 ファイルの場合、この設定は明示的に無視します。
方法は?
CentOS / Red Hat 、 #IgnoreRhosts yes
という行を見つけます / etc / ssh / sshd_config
にあります 次のように変更します:
IgnoreRhosts yes
Ubuntuについて 、 IgnoreRhosts yes
を追加します 10-my-sshd-settings.conf
に ファイル:
sudo echo "IgnoreRhosts yes" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf
11。 fail2banをインストールし、SSHを保護するように構成しました
Fail2banは、SSHなどの構成済みサービスのログファイルを監視し、設定された回数、設定された時間、悪意のあるユーザーのIPアドレスがサーバーに接続するのをブロックします。
攻撃者が3時間以内に5回以上失敗した場合、たとえば、攻撃者のIPアドレスは12時間ブロックされます。
Fail2banは、nginxWebサーバーやApacheWebサーバーを利用したWebサイトなどの他のサービスも保護するように構成できます。
方法は?
Fail2Banの使用に関する詳細なガイドに従うことができます。
12。自動セキュリティ更新を構成する(Red HatおよびCentOSの場合)
前述のように、エクスプロイトを使用した古いサービスでは、脆弱性が深刻な場合、攻撃者はログインしなくてもサーバーにアクセスできます。このリスクを軽減するには、セキュリティ更新プログラムを迅速に適用することが重要です。
デフォルトのUbuntuサーバーのインストールでは、自動セキュリティ更新が有効になっているため、更新に関するアクションは不要です。
CentOS / Red Hatで自動更新を構成するには、dnf-automaticというアプリケーションをインストールし、以下のコマンドを使用してそのタイマーを有効にします。
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
次のコマンドを実行してタイマーを確認できます:
sudo systemctl status dnf-automatic.timer
Loaded:行の下で「loaded」を探し、Active:行の下で「active」を探します。
個人的な好みや、サーバーを通常実行するように設定する内容に応じて、手順が増減する場合があります。
ボーナススクリプト:Linuxサーバーの最初の10秒
約束どおり、root以外のユーザーをキーベースの認証用に設定および構成した後、上記のすべての手順を実行するスクリプトを作成しました。
このスクリプトは、Ubuntu20.04とCentOS/ RedHat8の両方で実行できます。
スクリプトのソースをどれだけ信頼しても、インターネットからダウンロードしたランダムなシェルスクリプトを盲目的に実行しないように注意してください。スクリプトを読んで、その機能を理解する必要があります。
スクリプト全体はオープンソースであり、誰でも利用でき、ここで表示できます。 bashスクリプトをダウンロードして読み、実行することができます。
これは、Ubuntu20.04サーバーで実行した後のスクリーンショットです。

1つのスクリプトを実行するだけで、CentOS、Red Hat、またはUbuntuで新しいサーバービルドを保護するための基本的な手順をどれだけ簡単に完了できるかをご覧ください。
スクリプトに関するフィードバックを提供したり、機能をリクエストしたりすることもできます。
これらは非常に基本的なセキュリティチェックのほんの一部ですが、Linuxサーバーをインストールした後に実行する必要があります。
多くのサーバーでこれらのことを手動で行うことは、面倒で不必要に時間がかかる可能性があります。ここで、スクリプトを利用して、「Linuxサーバーで最初の10秒」スクリプトを使用するか、独自のスクリプトを作成できます。
これらは私の推奨事項の一部です。君はどうでしょう?このリストに追加するものはありますか?コメントセクションに提案を入力してください。
作成者TedLeRoyは、企業にさまざまな情報と物理的なセキュリティガイダンスを提供するエンタープライズセキュリティアーキテクトです。