Linux®CloudServerを作成した後の最初のステップは、セキュリティを設定することです。悪意のある攻撃者が不要なアクセスを取得するのを防ぐために、すべてのサーバーでこの重要な手順を実行する必要があります。このアクションにより、より安全な環境が実現し、あなたとあなたのビジネスが危険にさらされるのを防ぐことができます。これらの基本的な手順を実行し、サーバーのセキュリティを強化することで、悪意のある攻撃者を思いとどまらせ、新しいターゲットに移動させます。
デフォルトでは、rootユーザーはすべてのLinuxシステムの最初のユーザーとして作成されます。SecureShell(SSH)を介して無効にする必要があります。 SSH経由でこのrootユーザーを無効にすると、悪意のある攻撃者がシステムにアクセスするのが難しくなります。ルートユーザーはすべてのLinuxサーバーでデフォルトで作成されるため、ルートユーザーがSSH経由で有効になっている場合、悪意のあるユーザーはサーバーにログインするために必要な情報の半分をすでに持っています。この状況では、パスワードハッシュが壊れるまでブルートフォースSSH攻撃が可能になります。
この状況を回避するには、ログインしてシステムを管理する必要がある場合に備えて、セカンダリユーザーを作成する必要があります。システム上の各エンドユーザーは、ログ記録のために独自のログイン資格情報を持っている必要があります。エンドユーザーが実行する必要のあるアクションによっては、sudo
が必要になる場合があります。 管理アクションを完了するための許可。このセクションでは、Debian®とRedHat®EnterpriseLinuxベースのシステムの両方でユーザーにsudo権限を追加する方法の例を示します。
ユーザーを作成する前に、最小の文字長を必要とする(場合によっては有効期限を含む)強力なパスワードを使用していることを確認してください。ソフトウェアシステムセキュリティの支持者が提唱する一般的なガイドラインは次のとおりです。
- 許可されている場合は、パスワードの長さを12〜14文字以上にしてください。
- 許可されている場合は、小文字と大文字、数字、記号を含めます。
- 可能な場合は、ランダムにパスワードを生成します。
- 複数のユーザー、アカウント、またはソフトウェアシステムに同じパスワードを使用することは避けてください。
- 文字の繰り返し、キーボードパターン、辞書の単語、文字または数字のシーケンス、ユーザー名、親戚またはペットの名前、ロマンチックなリンク(現在または過去)、または個人情報(ID番号、祖先の名前、日付など)は避けてください。
- ユーザーまたはアカウントに公に関連付けられている、または関連付けられる可能性のある情報の使用は避けてください。
- ユーザーの同僚や知人がユーザーに関連付けられていると知っている可能性のある情報の使用は避けてください。
- 脆弱なコンポーネントで構成されるパスワードは使用しないでください。
ユーザーを追加します(DebianおよびUbuntuオペレーティングシステム)
DebianおよびUbuntu®オペレーティングシステムの場合、次の手順に従ってユーザーを追加します。
-
新しいユーザーを作成し、パスワードを設定します:
useradd {username} passwd {username}
-
新しいユーザーに
sudo
を与える システムでの特権操作の権限。このユーザーは、リモートでログインしてサーバーに変更を加えるためのプライマリユーザーです。次のいずれかの方法を使用して、
sudo
を実装します。 ユーザーの権限。a。次のコマンドを実行して、ユーザーを
admin
に追加します ユーザーグループ。usermod -aG admin {username}
または、 sudoersを変更することもできます ユーザーに
sudo
を提供するファイル 権限。a。 rootとして次のコマンドを実行して、ユーザー権限のリストを編集します。
visudo
注: 一部のディストリビューションでは、システムは
vi
を使用しますvisudo
のテキストエディタ 。vi
はユーザーフレンドリーなエディターではないため、viチュートリアルを参照してください。b。
root ALL=(ALL:ALL) ALL
を含む行の直後に次の行を追加します :{username} ALL=(ALL:ALL) ALL
c。保存して終了します。
-
新しいユーザーに切り替え、
sudo
を使用して権限をテストします 次のコマンドなど、rootアクセスを必要とするコマンドを実行するには:su {username} sudo systemctl status sshd
コマンドを実行する前に、確認のために新しいユーザーのパスワードを入力するように求めるプロンプトが表示されます。
-
ユーザーが
root
に昇格できることを確認することもできます 次のコマンドを実行してアカウントを作成します:sudo -i
これらの手順を正しく実行すると、ユーザーはsudo
を使用できるようになります。 アクセスし、権限を昇格させることができます。適切に実行されない場合、ユーザーが sudoersにいないことを示すメッセージが表示されます。 認証しようとしたときにファイルします。
ユーザーを追加します(Red HatおよびCentOS)
Red HatおよびCentOS®オペレーティングシステムの場合、次の手順に従ってユーザーを追加します。
-
adduser
を使用して新しいユーザーを作成しますpasswd
を使用してユーザーのパスワードを設定します :useradd {username} passwd {username}
-
新しいユーザーに
sudo
を与える システムでの特権操作の権限。このユーザーは、リモートでログインしてサーバーに変更を加えるためのプライマリユーザーです。次のいずれかの方法を使用して、
sudo
を実装します。 ユーザーの権限。a。次のコマンドを実行して、ユーザーを
wheel
に追加します グループusermod -aG wheel {username}
または、 sudoersを変更することもできます ユーザーに
sudo
を提供するファイル 権限。a。次のコマンドを実行します:
visudo
注: 一部のディストリビューションでは、システムが
visudo
に使用するテキストエディタvi
です 。vi
はユーザーフレンドリーなエディターではないため、viチュートリアルを参照してください。b。
root ALL=(ALL:ALL) ALL
を含む行の直後に次の行を追加します :{username} ALL=(ALL) ALL
c。保存して終了します。
-
新しいユーザーに切り替え、
sudo
を使用して権限をテストします rootアクセスを必要とするコマンドを実行するには:su {username} sudo systemctl status sshd
コマンドを実行する前に、確認のために新しいユーザーのパスワードを入力するように求めるプロンプトが表示されます。
-
ユーザーが
root
に昇格できることを確認することもできます 次のコマンドを実行してアカウントを作成します:sudo -i
これらの手順を正しく実行すると、ユーザーはsudo
を使用できるようになります。 アクセスし、権限を昇格させることができます。適切に実行されない場合、ユーザーが sudoersにいないことを示すメッセージが表示されます。 認証しようとしたときにファイルします。
SSHキーペアを生成します
パスワードを使用するよりも安全なログイン方法の場合は、以前に作成したユーザーで使用するSSHキーペアを作成します。これらの手順は、どのLinuxディストリビューションでも機能します。
注: これらの手順は、LinuxおよびmacOS®デスクトップを対象としています。 Windows®デスクトップから接続している場合は、「SSH PUTTYでRSAキーを生成する」の手順に従い、WindowsでSSH秘密キーを使用してログインし、SSHキーペアを生成して追加します。
-
次のコマンドを実行して、ローカルでキーペアを生成します LinuxまたはMac®コンピューター:
ssh-keygen -b 4096 -t rsa
キーを保存する場所を尋ねられたら、デフォルトの場所を使用します。パスワードの追加はオプションであり、より安全ですが、不便な場合があります。
この操作により、2つのファイルが作成されます。デフォルトの名前は
id_rsa
です。 秘密鍵とid_rsa.pub
公開鍵用。 -
ローカルコンピューターでキーペアを作成したら、前に作成したユーザーの公開キーをリモートサーバーにアップロードします。
警告: 必ずpublicをアップロードしてください キー、および 秘密鍵。
ssh-copy-id -i ~/.ssh/id_rsa.pub {username}@{remotePublicIPAddress}
-
ssh {username}@{remotePublicIPAddress}
を使用してリモートサーバーに接続します 次のコマンドを実行して、予期しないキーが追加されていないことを確認します。cat .ssh/authorized_keys
この時点で、ssh-key
を追加しました ユーザーのパスワード認証。次のセクションでは、パスワード認証を無効にする方法に関するオプションの手順について説明します。
LinuxSSHデーモンの構成
これで、sudo
の新しいユーザーができました アクセス許可とSSHキーペアを使用すると、SSHデーモン(サーバー)構成を使用してセキュリティを向上させることができます。
注: マネージドオペレーションおよびRackConnectのお客様のみ: 自動化されたシステムが必要なときにサーバーにアクセスできるようにするために、SSH構成を変更せず、次のセクションにスキップすることをお勧めします。サーバーに接続するとき、Rackspaceサポートチームはユーザーrack
としてログインします また、ポート22でパスワード認証を使用します。さらに、スナップショットから既存のサーバーを再構築するか、新しいサーバーを構築するには、PermitRootLogin
を設定してrootログインを有効にする必要があります。 yes
のオプション 。これらの値を変更する必要がある場合は、Rackspaceサポートチームのメンバーに相談して、FanaticalExperience™を提供する能力に影響を与えない方法で変更が行われるようにしてください。
記事の残りの部分のコマンド例は、sudo
を使用して新しいユーザーとしてログインしていることを前提としています。 特権操作を実行します。
SSH構成オプション
このセクションでは、セキュリティの向上に役立つSSH構成ファイルの一般的なオプションについて説明します。この情報は、後でファイアウォールを構成するために使用されます。
このセクションでは、変更するいくつかのオプションの概要を説明し、それらの機能について説明します。その他の構成オプションの詳細については、OpenSSHのドキュメントを参照してください。
このセクションでは、次のオプションに焦点を当てます。
Port XX
:このオプションは、SSHデーモンがリッスンするポートです(デフォルトではポート22)。-
PermitRootLogin
:このフラグは、SSH経由のルートログインを有効(yes)または無効(no)にします。デフォルトでは、この行はコメント化されており、rootログインが可能です。 -
PubkeyAuthentication
:このフラグは、認証用のSSHキーを有効(yes)または無効(no)にします。デフォルトでは、この行はコメント化されており、ssh-key
を許可します アクセス。 -
PasswordAuthentication
:このフラグは、パスワード認証を有効(yes)または無効(no)にします。デフォルトでは、このオプションは有効になっています。
SSHは、通信にデフォルトでポート22を使用します。悪意のある攻撃者は、ユーザー名root
でポート22を試します 彼らが攻撃するすべてのサーバーで。このため、SSH経由でrootユーザーを無効にし、非標準のポートでリッスンするようにSSHを変更すると、侵害を防ぐのに役立ちます。
ポートを変更しても、特定の侵入者を阻止することはできませんが、SSH接続の機会のほとんどの表面的なスキャンでサーバーを見落とす可能性があります。同様に、rootユーザーのSSHアクセスを削除すると、SSHを介したカジュアルブルートフォース攻撃が妨害されます。
ログイン時に使用する認証方法も検討する必要があります。デフォルトでは、すべてのLinuxシステムがパスワード認証を使用します。サーバーで認証を実行する方法は複数ありますが、主な2つは、パスワードとSSHキーを使用する方法です。
SSHキーは、パブリックキーとプライベートキーのペアで生成され、相互に組み合わせてのみ使用できます。秘密鍵は、接続元のコンピューターの安全な場所に保管する必要があります。絶対に配布しないでください。公開鍵を配布することができます。公開鍵は、接続先のサーバーに配置する鍵です。ローカルコンピューターの秘密鍵は、接続時にアルゴリズムを実行し、鍵ペアのハッシュが公開鍵と一致する場合にアクセスを許可します。
sshd_configを変更する
この時点で、sudo
を使用して新しいユーザーを追加しました。 権限、SSHkeyペアを作成し、公開SSHキーをアップロードしました。これで、SSH構成ファイルを変更してセキュリティを向上させることができます。これを行うには、次の手順を使用して、SSHを変更してカスタムポートでリッスンし、SSH経由でrootログインを制限し、公開鍵認証を有効にし、パスワード認証を無効にします。
-
SSHデーモン構成ファイルを開いて編集します:
sudo vim /etc/ssh/sshd_config
-
次の行を変更します:
注 :デフォルトでは、
Port
およびPermitRootLogin
#
で示されるように、行はコメント化されます シンボル。コメントアウトすると、行に変更が加えられた場合でも、これらの行はデフォルトオプションとして読み取られます。これらの変更を実装するには、#
を削除して関連する行のコメントを解除する必要があります 関連する行の先頭にある記号。さらに、PasswordAuthentication
を無効にする前に SSHキーを設定しているか、サーバーに接続できないことを確認してください。変更:
#Port 22 #PermitRootLogin yes PasswordAuthentication yes
宛先:
Port 2222 PermitRootLogin no PasswordAuthentication no
2222を置き換えます 使用したいポートで。 netstatを使用して、新しいポートが別のプログラムでまだ使用されていないことを確認します。
重要: 前述のように、
sshd_config
にこの変更を加えないでください。 サーバーにManagedOperationsサービスレベルがある場合はファイル。これらの変更により、サーバーへのRackspaceアクセスが拒否される可能性があります。 -
次のコマンドを実行して、変更されたSSH構成のエラーをテストします。
sshd -t
エラーが発生しない場合、SSHはカスタムポートで実行され、有効なSSHキーを渡すroot以外のユーザーのみを受け入れるように構成されています。これらの設定を適用して保持するには、SSHサービスを再起動する必要があります。ただし、まだサービスを再起動しないでください。 SSHを再起動すると、サーバーからロックアウトされる可能性があり、レスキューモードまたはWebコンソールを使用して構成を復元する必要があります。サーバーを再起動する前に、ファイアウォールを構成する必要があります。次のセクションでファイアウォールについて説明します。
注: RackConnectのお客様: ファイアウォールルールを管理するには、iptables
の代わりにRackConnect管理を使用します サーバー上。 RackConnectを使用している場合は、SSHポートを変更しないでください。ファイアウォールとRackConnectの詳細については、RackConnectv2.0ネットワークポリシーの管理を参照してください。
Linuxディストリビューションごとに、異なるソフトウェアファイアウォールソリューションが使用されます。 Red Hat Enterprise Linux(RHEL)およびCentOS 7では、デフォルトのファイアウォールはfirewalld
です 。 DebianおよびUbuntuベースのディストリビューションでは、デフォルトのファイアウォールソリューションはUncomplicated Firewall(UFW)です。 RHELおよびCentOS6の場合、デフォルトのソリューションはiptables
です。 。サーバーのOSについては、次のセクションを参照してください。
RHEL、CentOS 7、firewalld
-
次のコマンドを実行して、新しいSSHポートを開きます。
sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
2222
を置き換えます SSHデーモンに使用したポートを使用します。 -
sshd
を再起動します 次のコマンドを実行してサービスを提供します:sudo systemctl restart sshd
-
サーバーでカスタムSSHポートが開いていることを確認します:
netstat -plnt | grep ssh
これらの手順を実行すると、次の出力のようなものが表示されます。
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd
tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
Ubuntu、Debian、UFW
-
次のコマンドを実行して、新しいSSHポートを開きます。
sudo ufw allow 2222
2222
を置き換えます SSHデーモンに使用したポートを使用します。 -
sshd
を再起動します 次のコマンドを実行してサービスを提供します:sudo systemctl restart sshd
-
次のコマンドを実行して、サーバーでカスタムSSHポートが開いていることを確認します。
netstat -plnt | grep ssh
これらの手順を実行すると、次の出力のようなものが表示されます。
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd
tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
CentOS6とiptables
注 :RHELとCentOS 6は、2020年11月にサポート終了のマークが付けられます。セキュリティのベストプラクティスとして、アプリケーションまたはWebサイトをホストする新しいOSバージョンを検討することを強くお勧めします。
-
次のコマンドを実行して、新しいSSHポートを開きます。
sudo iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT sudo service iptables-save
2222
を置き換えます SSHデーモンに使用したポートを使用します。 -
次のコマンドを実行してSSHデーモンを再起動し、デーモンが設定した新しい構成を適用するようにします。
sudo service sshd restart
-
次のコマンドを実行して、サーバーでカスタムSSHポートが開いていることを確認します。
netstat -plnt | grep ssh
これらの手順を実行すると、次の出力のようなものが表示されます。
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd
tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
OSに変更を加えたら、ローカルマシンで別のターミナルウィンドウを開き、前に作成したユーザーとしてサーバーにログインします。新しく変更されたポートを指定することを忘れないでください。構成のトラブルシューティングが必要な場合に備えて、元の接続をアクティブにしておいてください。
新しい構成でSSHに接続するには、使用するポート番号とキーを指定する必要がある場合があります。例:
ssh -p 2222 -i ~/.ssh/id_rsa {username}@{remotePublicIPAddress}
-p
オプションはポートを指定し、-i
オプションは、接続に使用する秘密鍵を指定します。
Windowsデスクトップから接続している場合、PuTTYで接続を作成するときに、ポート番号と秘密鍵を指定できます。
ほとんどの侵入者は、同じポートに対して複数の攻撃を実行して、そのポートで実行されているソフトウェアで悪用できるものを見つけようとします。幸い、サーバーにfail2banなどの侵入防止ツールを設定して、ポートへの繰り返しの攻撃をブロックできます。
注: マネージドオペレーションサーバーにはfail2Ban
があります SSHログインの試行を監視するために、デフォルトでインストールおよび構成されています。ご質問やご不明な点がございましたら、サポートチームにお問い合わせください。
fail2ban
ログを監視し、短期間に同じホストからの接続が多すぎる場合は、接続を自動的にブロックします。 fail2ban
を設定および構成するには サーバーで、次の手順を使用します。
-
fail2ban
をインストールするには サーバーで、次のいずれかのコマンドを実行します。RHELとCentOS:
sudo yum install fail2ban
DebianとUbuntu:
sudo apt-get install fail2ban
-
次のコマンドを使用して、デフォルトの
fail2ban
をコピーします 構成。新しく作成されたファイルはデフォルトの設定を上書きし、ファイルを安全に変更できるようにします。sudo cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
-
ファイルを変更して、
fail2ban
のセキュリティレベルをカスタマイズします 。vim /etc/fail2ban/jail.local
このファイルでは、次のオプションを設定できます。
-
ignoreip
:このパラメータを使用すると、禁止してはならないIPアドレスを指定できます。 bantime
:このパラメータを使用すると、IPアドレスを禁止する秒数を指定できます。-
findtime
:このパラメーターは、maxretry
の兆候をチェックします 指定された時間にトリガーされます。 -
maxretry
:このパラメータは、IPアドレスが禁止されるまでに許可される再試行回数を設定します。
-
-
SSHログイン試行用のjailファイルを作成します。
vim /etc/fail2ban/jail.d/sshd.local
-
作成したファイルに、次のテキストをコピーして貼り付けます。
[sshd] enabled = true port = ssh #action = firewallcmd-ipset logpath = %(sshd_log)s maxretry = 3 bantime = 86400
これらのオプションは、SSH経由で24時間接続に3回失敗すると、IPアドレスを禁止します。ローカルIPアドレスがわかっている場合は、前のセクションでこのIPアドレスを
ignoreip
として追加することを強くお勧めします。 パラメータ。 -
fail2ban
を起動して有効にします 次のコマンドを使用してサーバー上で:RHELとCentOS7またはDebianとUbuntu:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
RHELとCentOS6:
sudo service fail2ban start sudo chkconfig fail2ban on
侵入検知システム(IDS)は、管理者が疑わしいアクティビティや悪用の可能性についてシステムを監視するのに役立ちます。 IDSは、fail2ban
のような予防ツールよりも堅牢です。 ただし、設定と保守がより複雑になる可能性があります。
人気のあるオープンソースIDSはOSSECです。 OSSECは、メインサーバーに報告する複数のシステムでエージェントを維持し、サーバーがシャットダウンされている場合でも、侵害された可能性のあるサーバーからのログとアラートを調査できるようにします。
システムがすでに侵害されている疑いがある場合は、バックドアのチェックや侵入者のチェック、レスキューモードの調査などの手順で調査できます。
OSを最新の状態に保つ(パッチ適用)
カーネル、パッケージ、および依存関係を最新の状態に保つことは、特にセキュリティ関連のモジュールとパッケージにとって非常に重要です。カーネルの更新などの一部の更新では、サーバーを再起動する必要があります。メンテナンスは短期間のダウンタイムを引き起こすため、ユーザーへの影響が最も少ない時間帯にメンテナンスを実行するようにスケジュールする必要があります。
重要 :システムを最新の状態に保つことは非常に重要ですが、適用する更新が本番環境に悪影響を与えないようにしてください。
UbuntuオペレーティングシステムとDebianのアップデートを確認してインストールするには、次のコマンドを実行します。
sudo apt-get update
sudo apt-get upgrade
CentOS、Red Hat、およびFedoraシステムの更新を確認してインストールするには、次のコマンドを実行します。
sudo yum update
サーバーで実行しているLinuxディストリビューションリリースがいつ寿命(EOL)に達するかを調べます。リリースがEOLに達すると、ディストリビューションのメンテナはそれをサポートしなくなり、公式リポジトリを通じてパッケージの更新を提供しなくなります。現在のリリースがEOLに達するかなり前に、新しいリリースへの移行を計画する必要があります。
次のリンクを使用して、LinuxディストリビューションのリリースがいつEOLに到達するように設定されているかを確認してください。
- Ubuntuオペレーティングシステム:https://wiki.ubuntu.com/Releases
- Red Hat Enterprise Linux(RHEL):https://access.redhat.com/support/policy/updates/errata/
- CentOS:RedHatと同じ
- Fedora:https://fedoraproject.org/wiki/End_of_life
- Debian:https://wiki.debian.org/DebianReleases
サーバーを保護することはインターネット上での運用の重要な部分ですが、アカウントを保護することも必要です。アカウント名、パスワード、およびAPIキーは、RackspaceCloudofferingsとやり取りする方法の重要な部分です。他のパスワードやアクセス資格情報と同じように、それらを安全に保ちたいと考えています。ただし、チームが行動を起こし、必要なタスクを実行できるようにする必要もあります。
ロールベースのアクセス制御(RBAC)を使用することにより、ユーザーを作成し、さまざまなRackspaceサービスの使用を担当する個人またはアプリケーションにアクセス許可を付与できます。 RBACを活用することで、チームと請負業者に必要なユーティリティのみへのアクセスを許可し、必要に応じてアクセスを取り消すことができます。
いくつかの使用シナリオは次のとおりです。
- 請負業者に、あなたが彼らを雇って作成した環境をセットアップするためのアクセス権を与えますが、クレジットカード情報を表示または変更したり、アカウントを削除したりする能力を制限します。
- 会計士に請求書の表示を許可しますが、サーバーの削除は許可しません。
- データベース管理者(DBA)を雇い、DBAにDBaaSインスタンスへのアクセスを許可します。
- クライアントがファイルをクラウドファイルアカウントに直接アップロードできるようにします。
- 管理者アカウントとは別の監視エージェントとバックアップエージェントの特定のユーザーを登録して使用するようにサーバーを構成します。
RBACの詳細については、役割ベースのアクセス制御(RBAC)に関するFAQを参照してください。