Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

1.6. ファイアーウォール、SELinux、および SSH ログインを使用したシステムセキュリティーの強化

コンピューターセキュリティーは、盗難やダメージからハードウェア、ソフトウェア、または情報を、そして提供するサービスの混乱や誤りからコンピューターシステムを保護します。したがって、コンピューターセキュリティーの確保は機密データやビジネストランザクションを扱う企業だけではなく、すべてのお客様に欠かせないタスクになります。
コンピューターのセキュリティーには、多種多様の機能およびツールがあります。本セクションでは、オペレーティングシステムのインストール後に設定が必要な基本的なセキュリティー機能のみを説明します。Red Hat Enterprise Linux 7 のセキュリティー保護に関する詳細は『Red Hat Enterprise Linux 7 セキュリティーガイド』を参照してください。

1.6.1. ファイアウォールの有効化と実行を確認

1.6.1.1. ファイアウォールとシステムセキュリティーの強化方法

ファイアウォールは、既定のセキュリティールールに基づいてネットワークトラフィックの送受信の監視および制御を行うネットワークセキュリティーシステムです。ファイアウォールは、通常、信頼できる安全な内部ネットワークと、その他の外部ネットワークとの間に壁を作ります。
Red Hat Enterprise Linux 7 では、firewalld サービスがファイアーウォールを提供します。このサービスは、Red Hat Enterprise Linux のインストール時に自動的に有効になりますが、キックスタートの設定などでこのサービスを明示的に無効にした場合は、「ファイアウォールサービスの再有効化」 に従って、再度有効にすることができます。Kickstart ファイルにおけるファイアーウォールの設定オプションの概要は『Red Hat Enterprise Linux 7 インストールガイド』を参照してください。

1.6.1.2. ファイアウォールサービスの再有効化

インストール後に firewalld サービスを無効にした場合、Red Hat では再有効化を検討するよう推奨しています。
firewalld の現在のステータスは、通常のユーザーでも確認できます。
~]$ systemctl status firewalld
firewalld が有効になっておらず実行していない場合は、root ユーザーに切り替えてステータスを変更します。
~]# systemctl start firewalld
~]# systemctl enable firewalld
firewalld に関するインストール後の手順は『Red Hat Enterprise Linux 7 セキュリティーガイド』を参照してください。ファイアーウォールの設定および使用に関する詳細は『Red Hat Enterprise Linux 7 セキュリティーガイド』を参照してください。

1.6.2. SELinux の適切な状態の確認

1.6.2.1. SELinux とシステムセキュリティーの強化方法について

Security Enhanced Linux (SELinux) は、どのプロセスがどのファイル、ディレクトリー、ポートにアクセスできるのかを決定するシステムセキュリティーの追加レイヤーです。
SELinux の状態
SELinux は、2 つの状態が可能です。
  • 有効
  • 無効
SELinux を無効した場合は、任意アクセス制御 (DAC) のルールのみが使用されます。
SELinux モード
SELinux を有効にした場合は、以下のモードのいずれかで実行できます。
  • Enforcing
  • Permissive
Enforcing モードは、SELinux のポリシーが強制されることを意味します。SELinux は、SELinux ポリシールールに基づくアクセスを拒否し、特別に許可された対話のみを有効にします。Enforcing モードは、インストール後のデフォルトモードであり、最も安全な SELinux モードでもあります。
Permissive モードは、SELinux のポリシーが強制されていないことを意味します。SELinux はアクセスを拒否しませんが、Enforcing モードでは拒否されるアクションの拒否がログに記録されます。Permissive モードは、インストール時のデフォルトのモードです。Permissive モードは、問題のトラブルシューティング時に AVC (アクセスベクターキャッシュ) へのアクセスを拒否する必要がある場合など、特定のケースで役立ちます。
Red Hat Enterprise Linux 7 の SELinux に関する詳細は『Red Hat Enterprise Linux 7 SELinux ユーザーおよび管理者のガイド』を参照してください。

1.6.2.2. SELinux の状態の確認

デフォルトでは、SELinux はインストール時に Permissive モードで動作し、インストールが完了すると Enforcing モードで動作します。
ただし、SELinux を明示的に Permissive モードに設定している場合や、インストール済みのオペレーティングシステムで無効になっている場合もあります。これは、たとえばキックスタートでこの設定を指定できます。キックスタートファイルにおける SELinux 設定オプションの概要は『Red Hat Enterprise Linux 7 インストールガイド』を参照してください。

重要

Red Hat は、お使いのシステムを Enforcing モードに保つことを推奨します。
現在の SELinux モードを表示し、必要に応じてモードを設定するには以下を実行します。

手順1.2 SELinux 状態の設定

  1. 現在有効な SELinux モードを表示します。
    ~]$ getenforce
  2. 必要に応じて SELinux モードを切り替えます。
    切り替えは、一時的または永続的を選択できます。一時的な切り替えでは、システムを再起動すると設定が元に戻りますが、永続的に切り替えると再起動後も持続します。
    • 一時的に Enforcing モードまたは Permissive モードのいずれかに切り替えるには、以下を実行します。
      ~]# setenforce Enforcing
      ~]# setenforce Permissive
    • 永続的に SELinux モードを設定するには、/etc/selinux/config 設定ファイルの SELINUX の変数を変更します。
      たとえば、SELinux を Enforcing モードに切り替えるには、以下を実行します。
      # This file controls the state of SELinux on the system.
      # SELINUX= can take one of these three values:
      #     enforcing - SELinux security policy is enforced.
      #     permissive - SELinux prints warnings instead of enforcing.
      #     disabled - No SELinux policy is loaded.
      SELINUX=enforcing

1.6.2.3. Cockpit での SELinux 管理

Cockpit では、SELinux オプションを使用して SELinux の Enforcing ポリシーをオンまたはオフにします。
デフォルトでは、Cockpit における SELinux の Enforcing ポリシーがオンのため、SELinux は Enforcing モードで動作します。これをオフにすると、SELinux を Permissive モードに切り替えることができます。ただし、このように /etc/sysconfig/selinux ファイルのデフォルト設定を変更しても、次回のシステム起動時に設定が自動的に元に戻る点に注意してください。
Cockpit での SELinux 管理

図1.3 Cockpit での SELinux 管理

1.6.3. SSH ベース認証の使用

1.6.3.1. SSH ベースの認証とシステムセキュリティーの強化方法

別のコンピューターとの通信の安全性を確保したい場合は、SSH ベースの認証を使用することが可能です。
SSH (Secure Shell) は、クライアントとサーバーとの間の通信を容易にし、ユーザーが SSH を実行するホストシステムにリモートでログインできるようにするプロトコルです。SSH は接続を暗号化します。クライアントは、暗号化した認証情報をサーバーへ送信します。セッション中に送受信したすべてのデータは暗号化されて転送されます。
SSH は、パスワードなしでユーザーが認証できるようにします。これを行うために、SSH は公開鍵/秘密鍵スキームを使用します。
SSH の保護手段に関する詳細は 「主な特長」 を参照してください。

1.6.3.2. SSH 接続の確立

SSH 接続を使用できるようにするには、公開鍵と秘密鍵からなる鍵を 2 つ作成します。

手順1.3 鍵ファイルを作成してサーバーへコピー

  1. 公開鍵と秘密鍵を生成するには、以下を実行します。
    ~]$ ssh-keygen
    鍵は両方とも ~/.ssh/ ディレクトリーに保存されます。
    • ~/.ssh/id_rsa.pub: 公開鍵
    • ~/.ssh/id_rsa: 秘密鍵
    公開鍵は秘密である必要はありません。これは、秘密鍵の確認に使用されます。秘密鍵は秘密となります。秘密鍵は、鍵の生成プロセスで指定するパスフレーズで保護するように選択できます。パスフレーズにより、認証はさらに安全となりますが、これを設定するとパスワードが毎回必要になります。これを回避するには、ssh-agent コマンドを利用します。この場合、パスフレーズを入力するのはセッション開始時の 1 回のみとなります。 ssh-agent 設定に関する詳細は 「鍵ベース認証の使用」 を参照してください。
  2. 最近変更された公開鍵を、ログインするリモートマシンにコピーします。
    ~]# ssh-copy-id USER@hostname
    その結果、パスワードを入力することなく、安全な方法でシステムにログインできるようになります。

1.6.3.3. SSH root ログインの無効化

デフォルトで有効になっている root ユーザーの SSH アクセスを無効にすることで、システムセキュリティーを高めることができます。
このトピックに関する詳細は『Red Hat Enterprise Linux 7 セキュリティーガイド』を参照してください。

手順1.4 SSH root ログインの無効化

  1. /etc/ssh/sshd_config ファイルにアクセスします。
    ~]# vi /etc/ssh/sshd_config
  2. #PermitRootLogin yes と書かれた行を以下へ変更します。
    PermitRootLogin no
  3. sshd サービスを再起動します。
    ~]# systemctl restart sshd