セキュリティーガイド
RHEL サーバーとワークステーションをセキュアにする概念と手法
概要
第1章 セキュリティーの概要 リンクのコピーリンクがクリップボードにコピーされました!
/lib ディレクトリー内のファイルにいくつかの参照を行います。64 ビットシステムを使用する場合は、上記のファイルの一部は /lib64 にある可能性があります。
1.1. コンピューターセキュリティーとは リンクのコピーリンクがクリップボードにコピーされました!
1.1.1. セキュリティーの標準化 リンクのコピーリンクがクリップボードにコピーされました!
- 機密性 - 機密情報は、事前に定義された個人だけが利用できるようにする必要があります。許可されていない情報の送信や使用は、制限する必要があります。たとえば、情報に機密性があれば、権限のない個人が顧客情報や財務情報を悪意のある目的 (ID 盗難やクレジット詐欺など) で入手できません。
- 保全性 - 情報は、改ざんして不完全または不正確なものにすべきではありません。承認されていないユーザーが、機密情報を変更したり破壊したりする機能を使用できないように制限する必要があります。
- 可用性 - 情報は、認証されたユーザーが必要な時にいつでもアクセスできるようにする必要があります。可用性は、合意した頻度とタイミングで情報を入手できることを保証します。これは、パーセンテージで表されることが多く、ネットワークサービスプロバイダーやその企業顧客が使用するサービスレベルアグリーメント (SLA) で正式に合意となります。
1.1.2. 暗号化ソフトウェアおよび認定 リンクのコピーリンクがクリップボードにコピーされました!
1.2. セキュリティーコントロール リンクのコピーリンクがクリップボードにコピーされました!
- 物理的
- 技術的
- 管理的
1.2.1. 物理的コントロール リンクのコピーリンクがクリップボードにコピーされました!
- 有線監視カメラ
- 動作または温度の感知アラームシステム
- 警備員
- 写真付き身分証明書
- 施錠された、デッドボルト付きのスチールドア
- バイオメトリクス (本人確認を行うための指紋、声、顔、虹彩、筆跡などの自動認識方法が含まれます)
1.2.2. 技術的コントロール リンクのコピーリンクがクリップボードにコピーされました!
- 暗号化
- スマートカード
- ネットワーク認証
- アクセス制御リスト (ACL)
- ファイルの完全性監査ソフトウェア
1.2.3. 管理的コントロール リンクのコピーリンクがクリップボードにコピーされました!
- トレーニングおよび認識の向上
- 災害準備および復旧計画
- 人員採用と分離の戦略
- 人員登録とアカウンティング
1.3. 脆弱性のアセスメント リンクのコピーリンクがクリップボードにコピーされました!
- 技術の設定、監視、および保守を行うスタッフの専門知識
- サービスとカーネルのパッチ、および更新を迅速かつ効率的に行う能力
- ネットワーク上での警戒を常に怠らない担当者の能力
1.3.1. アセスメントとテストの定義 リンクのコピーリンクがクリップボードにコピーされました!
- 情報セキュリティーに事前にフォーカスできる
- クラッカーが発見する前に潜在的な不正使用を発見できる
- システムを最新の状態に維持し、パッチを適用できる
- スタッフの成長と専門知識の開発を促す
- 経済的な損失や否定的な評判を減らす
1.3.2. 脆弱性評価に関する方法論の確立 リンクのコピーリンクがクリップボードにコピーされました!
- https://www.owasp.org/ — 『The Open Web Application Security Project』
1.3.3. 脆弱性アセスメントのツール リンクのコピーリンクがクリップボードにコピーされました!
README ファイルまたは man ページを参照してください。さらに、インターネット上でそのツールに関する記事、ステップバイステップのガイド、あるいはメーリングリストなど、より多くの情報を検索してください。
1.3.3.1. Nmap を使用したホストのスキャン リンクのコピーリンクがクリップボードにコピーされました!
root で yum install nmap コマンドを実行します。
1.3.3.1.1. Nmap の使用 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレスを入力すると実行できます。
nmap <hostname>
nmap <hostname>
foo.example.com のマシンをスキャンするには、シェルプロンプトで以下を入力します。
nmap foo.example.com
~]$ nmap foo.example.com
1.3.3.2. Nessus リンクのコピーリンクがクリップボードにコピーされました!
1.3.3.3. OpenVAS リンクのコピーリンクがクリップボードにコピーされました!
1.3.3.4. Nikto リンクのコピーリンクがクリップボードにコピーされました!
1.4. セキュリティーへの脅威 リンクのコピーリンクがクリップボードにコピーされました!
1.4.1. ネットワークセキュリティーへの脅威 リンクのコピーリンクがクリップボードにコピーされました!
セキュリティーが十分ではないアーキテクチャー
ブロードキャストネットワーク
集中化サーバー
1.4.2. サーバーセキュリティーへの脅威 リンクのコピーリンクがクリップボードにコピーされました!
未使用のサービスと開かれたポート
パッチが適用されないサービス
管理における不注意
本質的に安全ではないサービス
1.4.3. ワークステーションおよび家庭用 PC のセキュリティーに対する脅威 リンクのコピーリンクがクリップボードにコピーされました!
不適切なパスワード
脆弱なクライアントアプリケーション
1.5. 一般的な不正使用と攻撃 リンクのコピーリンクがクリップボードにコピーされました!
| 不正使用 | 説明 | 注記 |
|---|---|---|
| 空またはデフォルトのパスワード | 管理パスワードを空白のままにしたり、製品ベンダーが設定したデフォルトのパスワードをそのまま使用します。これは、ルーターやファイアウォールなどのハードウェアで最もよく見られますが、Linux で実行するサービスにはデフォルトの管理者パスワードが指定されているものがあります (ただし Red Hat Enterprise Linux 7 には含まれません)。 |
一般的に、ルーター、ファイアウォール、VPN、ネットワーク接続ストレージ (NAS) の機器など、ネットワークハードウェアに関連するものです。
多数のレガシーオペレーティングシステム、特にサービスをバンドルしたオペレーティングシステム (UNIX や Windows など) でよく見られます。
管理者が急いで特権ユーザーアカウントを作成したためにパスワードが空白のままになっていることがありますが、このような空白のパスワードは、このアカウントを発見した悪意のあるユーザーが利用できる絶好のエントリーポイントとなります。
|
| デフォルトの共有鍵 | セキュアなサービスでは、開発や評価テスト向けにデフォルトのセキュリティー鍵がパッケージ化されていることがあります。この鍵を変更せずにインターネットの実稼働環境に置いた場合は、同じデフォルトの鍵を持つ すべての ユーザーがその共有鍵のリソースや、そこにあるすべての機密情報にアクセスできるようになります。 |
無線アクセスポイントや、事前設定済みでセキュアなサーバー機器に最も多く見られます。
|
| IP スプーフィング | リモートマシンがローカルネットワークのノードのように動作し、サーバーに脆弱性を見つけるとバックドアプログラムまたはトロイの木馬をインストールして、ネットワークリソース全体へのコントロールを得ようとします。 |
スプーフィングは、攻撃者が標的となるシステムへの接続を調整するのに、TCP/IP シーケンス番号を予測しなければならないため、かなり難しくなりますが、クラッカーの脆弱性の攻撃を支援する利用可能なツールがいくつかあります。
ソースベース の認証技術を使用するサービス( rsh、telnet、FTP など)を使用するターゲットシステムの実行サービスに依存します。これは、ssh または SSL/TLS で使用される PKI またはその他の形式の暗号化認証と比較すると推奨されません。
|
| 盗聴 | 2 つのノード間の接続を盗聴することにより、ネットワーク上のアクティブなノード間を行き交うデータを収集します。 |
この種類の攻撃には大抵、Telnet、FTP、HTTP 転送などのプレーンテキストの転送プロトコルが使用されます。
リモートの攻撃者がこのような攻撃を仕掛けるには、LAN で、攻撃するシステムへのアクセス権が必要になります。通常、クラッカーは、LAN 上にあるシステムを危険にさらすためにアクティブ攻撃 (IP スプーフィングや中間者攻撃など) を仕掛けます。
パスワードのなりすましに対する防護策としては、暗号化鍵交換、ワンタイムパスワード、または暗号化された認証によるサービス使用が挙げられます。通信中は強力な暗号化を実施することをお勧めします。
|
| サービスの脆弱性 | 攻撃者はインターネットで実行しているサービスの欠陥や抜け穴を見つけます。攻撃者がこの脆弱性を利用する場合は、システム全体と格納されているデータを攻撃するだけでなく、ネットワーク上の他のシステムも攻撃する可能性があります。 |
CGI などの HTTP ベースのサービスは、リモートのコマンド実行やインタラクティブなシェルアクセスに対しても脆弱です。HTTP サービスが nobody などの権限のないユーザーとして実行している場合でも、設定ファイルやネットワークマップなどの情報が読み取られる可能性があります。または、攻撃者がサービス拒否攻撃を開始して、システムのリソースを浪費させたり、他のユーザーが利用できないようにする可能性もあります。
開発時およびテスト時には気が付かない脆弱性がサービスに含まれることがあります。(アプリケーションのメモリーバッファー領域をあふれさせ、任意のコマンドを実行できるようなインタラクティブなコマンドプロンプトを攻撃者に提供するように、攻撃者が任意の値を使用してサービスをクラッシュさせる バッファーオーバーフローなどの) 脆弱性は、完全な管理コントロールを攻撃者に与えるものとなる可能性があります。
管理者は、root 権限でサービスが実行されないようにし、ベンダー、または CERT、CVE などのセキュリティー組織がアプリケーション用のパッチやエラータ更新を提供していないかを常に注意する必要があります。
|
| アプリケーションの脆弱性 | 攻撃者は、デスクトップやワークステーションのアプリケーション (電子メールクライアントなど) に欠陥を見つけ出し、任意のコードを実行したり、将来のシステム侵害のためにトロイの木馬を移植したり、システムを破壊したりします。攻撃を受けたワークステーションがネットワークの残りの部分に対して管理特権を持っている場合は、さらなる不正使用が起こる可能性があります。 |
ワークステーションとデスクトップは、ユーザーが侵害を防いだり検知するための専門知識や経験を持たないため、不正使用の対象になりやすくなります。認証されていないソフトウェアをインストールしたり、要求していないメールの添付ファイルを開く際には、それに伴うリスクについて個々に通知することが必須です。
電子メールクライアントソフトウェアが添付ファイルを自動的に開いたり、実行したりしないようにするといった、予防手段を取ることが可能です。さらに、Red Hat Network や他のシステム管理サービスなどからワークステーションのソフトウェアを自動更新することにより、マルチシートのセキュリティーデプロイメントの負担を軽減できます。
|
| サービス拒否攻撃 (DoS: Denial of Service) | 単独の攻撃者または攻撃者のグループは、目標のホスト (サーバー、ルーター、ワークステーションのいずれか) に認証されていないパケットを送り、組織のネットワークまたはサーバーのリソースに対して攻撃を仕掛けます。これにより、正当なユーザーがリソースを使用できなくなります。 |
米国で最も多く報告された DOS の問題は、2000 年に発生しました。この時、通信量が非常に多い民間および政府のサイトが一部が利用できなくなりました。ゾンビ (zombie) や、リダイレクトされたブロードキャストノードとして動作する高帯域幅接続を有し、セキュリティー侵害された複数のシステムを使用して、調整された ping フラッド攻撃が行われたためです。
通常ソースパケットは、真の攻撃元を調査するのが難しくなるよう、偽装 (または再ブロードキャスト) されています。
iptables および snort などのネットワーク侵入検知システムを使用したイングレスフィルターリング(IETF rfc2267)の進進は、管理者が分散 DoS 攻撃を追跡し、防止するのに役立ちます。
|
第2章 インストール時におけるセキュリティーのヒント リンクのコピーリンクがクリップボードにコピーされました!
2.1. BIOS のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
2.1.1. BIOS パスワード リンクのコピーリンクがクリップボードにコピーされました!
- BIOS 設定の変更を防止する - 侵入者が BIOS にアクセスした場合は、CD-ROM やフラッシュドライブから起動するように設定できます。このようにすると、侵入者がレスキューモードやシングルユーザーモードに入ることが可能になり、システムで任意のプロセスを開始したり、機密性の高いデータをコピーできるようになってしまいます。
- システムの起動を防止する - BIOS の中には起動プロセスをパスワードで保護できるものもあります。これを有効にすると、攻撃者は BIOS がブートローダーを開始する前にパスワード入力を求められます。
2.1.1.1. 非 BIOS ベースのシステムの保護 リンクのコピーリンクがクリップボードにコピーされました!
2.2. ディスクのパーティション設定 リンクのコピーリンクがクリップボードにコピーされました!
/boot ディレクトリー、/ ディレクトリー、/home ディレクトリー、/ tmp ディレクトリー、および / var /tmp / ディレクトリーに個別のパーティションを作成することを推奨します。各パーティションを作成する理由は以下のようになります。
/boot- このパーティションは、システムの起動時にシステムが最初に読み込むパーティションです。Red Hat Enterprise Linux 7 でシステムを起動するのに使用するブートローダーとカーネルイメージはこのパーティションに保存されます。このパーティションは暗号化しないでください。このパーティションが / に含まれており、そのパーティションが暗号化されているなどの理由で利用できなくなると、システムを起動できなくなります。
/home- ユーザーデータ(
/home)が別のパーティションではなく/に保存されている場合、パーティションが満杯になり、オペレーティングシステムが不安定になる可能性があります。また、システムを Red Hat Enterprise Linux 7 の次のバージョンにアップグレードする際に、/homeパーティションにデータを保存できると、このデータはインストール時に上書きされないため、はるかに簡単になります。ルートパーティション(/)が破損すると、データが完全に失われる可能性があります。したがって、パーティションを分けることが、データ損失に対する保護につながります。また、このパーティションを、頻繁にバックアップを作成する対象にすることも可能です。 /tmpおよび/var/tmp//tmpディレクトリーおよび/var/tmp/ディレクトリーは、どちらも長期間保存する必要がないデータを保存するために使用されます。しかし、このいずれかのディレクトリーでデータがあふれると、ストレージ領域がすべて使用されてしまう可能性があります。これが発生し、これらのディレクトリーが/に保存されていると、システムが不安定になり、クラッシュする可能性があります。そのため、このディレクトリーは個別のパーティションに移動することが推奨されます。
2.3. 必要なパッケージの最小限のインストール リンクのコピーリンクがクリップボードにコピーされました!
2.4. インストールプロセス時のネットワーク接続の制限 リンクのコピーリンクがクリップボードにコピーされました!
2.5. インストール後の手順 リンクのコピーリンクがクリップボードにコピーされました!
- システムを更新します。root で以下のコマンドを入力します。
yum update
~]# yum updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイアウォールサービスの
firewalldは、Red Hat Enterprise Linux のインストールで自動的に有効になっていますが、キックスタート設定などで明示的に無効となっている場合もあります。このような場合は、ファイアウォールを再度有効にすることが推奨されます。firewalldを開始するには、root で次のコマンドを実行します。systemctl start firewalld systemctl enable firewalld
~]# systemctl start firewalld ~]# systemctl enable firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow - セキュリティーを強化するために、不要なサービスは無効にしてください。たとえば、コンピューターにプリンターがインストールされていない場合は、以下のコマンドを使用して cups サービスを無効にします。
systemctl disable cups
~]# systemctl disable cupsCopy to Clipboard Copied! Toggle word wrap Toggle overflow アクティブなサービスを確認するには、次のコマンドを実行します。systemctl list-units | grep service
~]$ systemctl list-units | grep serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
第3章 システムを最新の状態に保つ リンクのコピーリンクがクリップボードにコピーされました!
3.1. インストール済みソフトウェアのメンテナーンス リンクのコピーリンクがクリップボードにコピーされました!
3.1.1. セキュリティーの更新の立案と設定 リンクのコピーリンクがクリップボードにコピーされました!
3.1.1.1. Yum のセキュリティー機能の使用 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
yum check-update --security
~]# yum check-update --security
Loaded plugins: langpacks, product-id, subscription-manager
rhel-7-workstation-rpms/x86_64 | 3.4 kB 00:00:00
No packages needed for security; 0 packages available
yum update --security
~]# yum update --security
| コマンド | 説明 | |
|---|---|---|
| [アドバイザリー] | 1 つ以上のアドバイザリーに関する情報を表示します。advisories をアドバイザリー番号に置き換えます。 | |
| cves | CVE (Common Vulnerabilities and Exposures) に関連する情報のサブセットを表示します。 | |
| セキュリティー または 秒 | すべてのセキュリティー関連情報を表示します。 | |
| severity [severity_level] または sev [severity_level] | 指定された severity_level のセキュリティー関連パッケージに関する情報を表示します。 |
3.1.2. パッケージの更新とインストール リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.1. 署名パッケージの検証 リンクのコピーリンクがクリップボードにコピーされました!
/etc/yum.conf 設定ファイルで gpgcheck 設定ディレクティブが 1 に設定されていることを確認します。
rpmkeys --checksig package_file.rpm
rpmkeys --checksig package_file.rpm
3.1.2.2. 署名パッケージのインストール リンクのコピーリンクがクリップボードにコピーされました!
root で yum install コマンドを実行します。
yum install package_file.rpm
yum install package_file.rpm
.rpm パッケージをインストールします。
yum install *.rpm
yum install *.rpm
3.1.3. インストールされた更新によって導入された変更の適用 リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーション
- ユーザースペースアプリケーションとは、ユーザーが起動することができるすべてのプログラムのことです。通常、このようなアプリケーションは、ユーザー、スクリプト、または自動タスクユーティリティーが、これらのアプリケーションを起動したときにのみ使用されます。このようなユーザースペースのアプリケーションが更新されたら、システム上のアプリケーションのインスタンスをすべて停止し、プログラムを再度起動して更新されたバージョンを使用します。
- カーネル
- カーネルは、Red Hat Enterprise Linux 7 オペレーティングシステムの中核となるソフトウェアコンポーネントです。メモリー、プロセッサー、周辺機器へのアクセスを管理し、すべてのタスクをスケジューリングします。カーネルはその中心的なロールを担っているため、コンピューターを再起動せずにカーネルを再起動することはできません。そのため、システムを再起動するまで、更新されたバージョンのカーネルを使用することはできません。
- KVM
- qemu-kvm および libvirt のパッケージが更新されると、すべてのゲスト仮想マシンを停止して、関連の仮想化モジュールを再読み込みし (またはホストシステムを再起動し)、仮想マシンを再起動する必要があります。lsmod コマンドを使用して、kvm、
kvm-intel、またはからのモジュールが読み込まれます。次に、modprobe -r コマンドを使用して modprobe -a コマンドを削除してから、影響を受けるモジュールを再読み込みします。以下に例を示します。kvm-amdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 共有ライブラリー
- 共有ライブラリーは、多くのアプリケーションやサービスで使用される
glibcなどのコードの単位です。共有ライブラリーを利用するアプリケーションは、通常、アプリケーションの初期化時に共有コードをロードするため、更新されたライブラリーを利用するアプリケーションはすべて、一旦停止して再スタートする必要があります。実行中のどのアプリケーションが特定のライブラリーにリンクするかを確認するには、lsof コマンドを使用します。lsof library
lsof libraryCopy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、実行中のアプリケーションがlibwrap.so.0ライブラリーにリンクするものを確認するには、以下を入力します。lsof /lib64/libwrap.so.0
~]# lsof /lib64/libwrap.so.0 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME pulseaudi 12363 test mem REG 253,0 42520 34121785 /usr/lib64/libwrap.so.0.7.6 gnome-set 12365 test mem REG 253,0 42520 34121785 /usr/lib64/libwrap.so.0.7.6 gnome-she 12454 test mem REG 253,0 42520 34121785 /usr/lib64/libwrap.so.0.7.6Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、ホストアクセス制御にTCPラッパーを使用する実行中のすべてのプログラムの一覧を返します。したがって、tcp_wrappers パッケージの更新時に一覧表示されるプログラムをすべて停止し、再起動する必要があります。 - systemd サービス
- systemd サービスは通常ブートプロセス中に起動する永続的なサーバープログラムです。systemd サービスの例としては、
sshdまたはvsftpdなどがあります。これらのプログラムは通常、マシンが実行されている限りメモリーに保持されるため、更新された各 systemd サービスは、パッケージがアップグレードされた後に停止して再起動する必要があります。これは、systemctl コマンドを使用して、rootユーザーとして実行できます。systemctl restart service_name
systemctl restart service_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow service_name を、sshdなど、再起動するサービスの名前に置き換えます。 - 他のソフトウェア
- 下のアプリケーションを正しく更新するには、以下のリンク先のリソースに記載されている手順に従ってください。
- Red Hat Directory Server - 問題の Red Hat Directory Server バージョンの 『リリースノート』 ( https://access.redhat.com/documentation/ja-JP/Red_Hat_Directory_Server/ )を参照してください。
- Red Hat Enterprise Virtualization Manager - 問題となっている Red Hat Enterprise Virtualization のバージョンの 『インストールガイド』 ( https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Virtualization/ )を参照してください。
3.2. Red Hat カスタマーポータルの使用 リンクのコピーリンクがクリップボードにコピーされました!
3.2.1. カスタマーポータルでのセキュリティーアドバイザリーの表示 リンクのコピーリンクがクリップボードにコピーされました!
3.2.3. 問題の重大度の分類を理解する リンクのコピーリンクがクリップボードにコピーされました!
3.3. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
インストールされているドキュメント
- yum(8) : Yum パッケージマネージャーの man ページには、Yum を使用してシステムにパッケージをインストール、更新、および削除する方法に関する情報が記載されています。
- rpmkeys(8) : rpmkeys ユーティリティーの man ページでは、このプログラムを使用してダウンロードしたパッケージの信頼性を検証する方法が説明されています。
オンラインドキュメント
- Red Hat Enterprise Linux 7 システム管理者のガイド: Red Hat Enterprise Linux 7 『のシステム管理者ガイド』 では、Red Hat Enterprise Linux 7 システムでパッケージのインストール、更新、および削除に使用する Yum コマンドおよび rpm コマンドの使用について説明しています。
- Red Hat Enterprise Linux 7 SELinux ユーザーおよび管理者のガイド: Red Hat Enterprise Linux 7 『の SELinux ユーザーおよび管理者のガイド』 では、SELinux の 強制アクセス制御 メカニズムの設定が説明されています。
Red Hat カスタマーポータル
- Red Hat カスタマーポータル (セキュリティー) — カスタマーポータルのセキュリティーセクションには、Red Hat CVE データベースなどの最も重要なリソースへのリンクのほか、Red Hat 製品セキュリティーの連絡先が含まれています。
- Red Hat セキュリティーブログ — Red Hat のセキュリティー専門家による最新のセキュリティー問題に関する記事。
関連項目
- 2章インストール時におけるセキュリティーのヒント は、最初からシステムを安全に設定し、後で追加のセキュリティー設定を簡単に実装する方法について説明しています。
- 「GPG 鍵の作成」 では、通信を認証するための個人 GPG キーのセットを作成する方法を説明します。
第4章 ツールとサービスでシステムを強化する リンクのコピーリンクがクリップボードにコピーされました!
4.1. デスクトップのセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
4.1.1. パスワードセキュリティー リンクのコピーリンクがクリップボードにコピーされました!
/etc/passwd ファイルに一方向ハッシュとして保存されます。これにより、システムはオフラインのパスワードクラッキング攻撃に対して脆弱になります。侵入者が通常のユーザーとしてマシンにアクセスできる場合は、/etc/passwd ファイルを自分のマシンにコピーし、それに対して任意の数のパスワードクラッキングプログラムを実行できます。ファイル内に安全でないパスワードがあれば、パスワードクラッカーに発見されるのは時間の問題です。
/etc/shadow にパスワードハッシュを保存することで、このタイプの攻撃を排除します。
4.1.1.1. 強固なパスワードの作成 リンクのコピーリンクがクリップボードにコピーされました!
randomword1 randomword2 randomword3 randomword4
randomword1 randomword2 randomword3 randomword4
1!を追加するなどして簡単に変更できます。このような変更は、パスフレーズのセキュリティーを大幅に 向上させるものではない ことに注意してください。
/dev/urandom からプルされます。指定できる最小のビット数は 56 ビットで、ブルートフォース攻撃がまれなシステムやサービスのパスワードとしては十分と言えます。攻撃者がパスワードハッシュファイルに直接アクセスできないアプリケーションでは、64 ビットで十分です。攻撃者がパスワードハッシュを直接入手する可能性がある場合や、パスワードを暗号化キーとして使用する場合は、80 ビットから 128 ビットを使用する必要があります。無効な数のエントロピービットを指定すると、pwmake はデフォルトのビットを使用します。128 ビットのパスワードを作成する場合は、次のコマンドを入力します。
pwmake 128
pwmake 128
- 辞書の単語 1 つ、外国語の単語 1 つ、倒置語、または数字のみを使用すること。
- パスワードまたはパスフレーズが 10 文字未満であること。
- キーボードレイアウトの一連のキーを使用すること。
- パスフレーズを書き留めること。
- 生年月日、記念日、家族の名前、またはペットの名前など、個人情報をパスワードに使用すること。
- 複数のマシンで同じパスフレーズやパスワードを使用すること。
4.1.1.2. 強固なパスワードの強制 リンクのコピーリンクがクリップボードにコピーされました!
pam_pwquality.so PAM モジュールにより実行されます。
pam_pwquality が、パスワード品質チェックのデフォルトモジュールとして Red Hat Enterprise Linux 6 で使用されていました。これは、pam_splunk と同じバックエンドを使用します。
pam_pwquality モジュールは、パスワード強度を一連のルールに対してチェックするために使用されます。その手順は 2 つのステップで設定されています。最初に、提供されたパスワードが辞書にあるかどうかをチェックします。辞書にない場合は、さらにいくつものチェックを続けます。pam_pwquality は、/etc/pam.d/passwd ファイルの password コンポーネント内の他の PAM モジュールとともにスタックされ、ルールのカスタムセットは /etc/security/pwquality.conf 設定ファイルで指定します。これらのチェックの完全なリストについては、pwquality.conf (8) の man ページを参照してください。
例4.1 pwquality.confでパスワードの強度チェックの設定
pam_quality の使用を有効にするには、以下の行を /etc/pam.d/passwd ファイルの パスワード スタックに追加します。
password required pam_pwquality.so retry=3
password required pam_pwquality.so retry=3
/etc/security/pwquality.conf ファイルに追加します。
minlen = 8 minclass = 4
minlen = 8
minclass = 4
/etc/security/pwquality.conf に追加します。
maxsequence = 3 maxrepeat = 3
maxsequence = 3
maxrepeat = 3
abcd などの単調なシーケンスで 3 文字以上を含み、1111 などの同一の 3 文字を超える連続した文字を含めることはできません。
4.1.1.3. パスワードエージングの設定 リンクのコピーリンクがクリップボードにコピーされました!
-M オプションは、パスワードの最大有効日数を指定します。たとえば、ユーザーのパスワードを 90 日間で期限切れになるように設定するには、以下のコマンドを使用します。
chage -M 90 username
chage -M 90 username
-M オプションの 後に -1 の値を使用します。
| オプション | 説明 |
|---|---|
-d days | 1970 年 1 月 1 日以降にパスワードを変更した日数を指定します。 |
-E date | アカウントがロックされる日付を YYYY-MM-DD のフォーマットで指定します。日付の代わりに、1970 年 1 月 1 日からの日数を使うこともできます。 |
-I days | パスワードの有効期限後、アカウントをロックするまでの非アクティブ日数を指定します。値が 0 の場合、パスワードが失効してもアカウントはロックされません。 |
-l | 現在のアカウントエージングの設定を一覧表示します。 |
-m days | ユーザーがパスワードを変更しなければならない最短日数を指定します。値が 0 の場合、パスワードは期限切れになりません。 |
-M days | パスワードの最大有効日数を指定します。このオプションで指定した日数と、-d オプションで指定した日数を足した日数が、現在の日数より少ない場合、ユーザーはアカウントを使用する前にパスワードを変更する必要があります。 |
-W days | パスワードの有効期限の何日前にユーザーに警告を発するかを指定します。 |
chage <username>
chage <username>
- 初期パスワードを設定します。デフォルトのパスワードを割り当てるには、
rootで次のコマンドを実行します。passwd username
passwd usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告passwd ユーティリティーには、null パスワードを設定するオプションがあります。null パスワードの使用は便利ですが、安全ではありません。第三者がログインして、安全でないユーザー名を使用してシステムにアクセスする可能性があるためです。null パスワードの使用は可能な限り避けてください。避けられない場合は、null パスワードでアカウントのロックを解除する前に、ユーザーがログインする準備ができていることを常に確認してください。 rootで以下のコマンドを実行して、パスワードの即時有効期限を強制します。chage -d 0 username
chage -d 0 usernameCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、パスワードが最後に変更された日付の値をエポック (1970 年 1 月 1 日) に設定します。この値は、パスワードエージングポリシーがある場合、それに関係なく、パスワードの即時期限切れを強制します。
4.1.2. アカウントのロック リンクのコピーリンクがクリップボードにコピーされました!
pam_faillock PAM モジュールを使用すると、システム管理者は、指定された回数試行の失敗後にユーザーアカウントをロックアウトできます。ユーザーのログイン試行を制限することは、主に、ユーザーのアカウントパスワードを取得することを目的としたブルートフォース攻撃の可能性を防ぐことを目的としたセキュリティー対策として機能します。
pam_faillock モジュールでは、失敗したログイン試行が、各ユーザーの個別のファイル( /var/run/faillock ディレクトリー内)に保存されます。
even_deny_root オプションが使用されると、root ユーザーアカウントを含むすべてのユーザーアカウントがロックされる可能性があります。
- 3 回失敗した後に root 以外のユーザーをロックアウトし、10 分後にそのユーザーのロックを解除するには、
/etc/pam.d/system-ファイルおよびauth/etc/pam.d/password-authファイルの auth セクションに 2 行を追加します。編集後、両方のファイルのauthセクション全体は以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 2 行目、4 行目が追加されました。 - 前の手順で指定した両方のファイルの
accountセクションに、以下の行を追加します。account required pam_faillock.so
account required pam_faillock.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root ユーザーのアカウントロックを適用するには、
/etc/pam.d/system-authファイルおよび/etc/pam.d/password-authファイルのpam_faillockエントリーにeven_deny_rootオプションを追加します。auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=600 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=600 account required pam_faillock.so
auth required pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=600 auth sufficient pam_unix.so nullok try_first_pass auth [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=600 account required pam_faillock.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow
john が 3 回ログインに失敗した後に 4 回目のログインを試みると、4 回目のアカウントはロックされます。
su - john
~]$ su - john
Account locked due to 3 failed logins
su: incorrect password
/etc/pam.d/system-auth と /etc/pam.d/password-auth の両方で、pam_faillock が初めて呼び出される行のすぐ上に以下の行を追加します。また、user1、user2、および user3 を実際のユーザー名に置き換えます。
auth [success=1 default=ignore] pam_succeed_if.so user in user1:user2:user3
auth [success=1 default=ignore] pam_succeed_if.so user in user1:user2:user3
root で次のコマンドを実行します。
faillock
~]$ faillock
john:
When Type Source Valid
2013-03-05 11:44:14 TTY pts/0 V
root で次のコマンドを実行します。
faillock --user <username> --reset
faillock --user <username> --reset
cron ジョブを実行すると、cron ジョブを実行しているユーザーの pam_faillock の失敗カウンターがリセットされるため、pam_faillock は cron 用に設定しないでください。詳細は、Knowledge Centered Support (KCS) solution を参照してください。
authconfig でのカスタム設定の保持
system-auth および password-auth ファイルは authconfig ユーティリティーの設定で上書きされます。これは、authconfig が認識して上書きしない設定ファイルの代わりにシンボリックリンクを作成することで回避できます。設定ファイルと authconfig でカスタム設定を同時に使用するには、以下の手順に従ってアカウントロックを設定します。
system-authファイルとpassword-authファイルがすでにsystem-auth-acおよびpassword-auth-acを指すシンボリックリンクであるかどうかを確認します(これはシステムのデフォルトです)。ls -l /etc/pam.d/{password,system}-auth~]# ls -l /etc/pam.d/{password,system}-authCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のような出力であれば、シンボリックリンクは正しく設定されているので、手順 3 までスキップできます。lrwxrwxrwx. 1 root root 16 24. Feb 09.29 /etc/pam.d/password-auth -> password-auth-ac lrwxrwxrwx. 1 root root 28 24. Feb 09.29 /etc/pam.d/system-auth -> system-auth-ac
lrwxrwxrwx. 1 root root 16 24. Feb 09.29 /etc/pam.d/password-auth -> password-auth-ac lrwxrwxrwx. 1 root root 28 24. Feb 09.29 /etc/pam.d/system-auth -> system-auth-acCopy to Clipboard Copied! Toggle word wrap Toggle overflow system-authおよびpassword-authファイルがシンボリックリンクでない場合は、次の手順に進みます。- 設定ファイルの名前を変更します。
mv /etc/pam.d/system-auth /etc/pam.d/system-auth-ac mv /etc/pam.d/password-auth /etc/pam.d/password-auth-ac
~]# mv /etc/pam.d/system-auth /etc/pam.d/system-auth-ac ~]# mv /etc/pam.d/password-auth /etc/pam.d/password-auth-acCopy to Clipboard Copied! Toggle word wrap Toggle overflow - カスタム設定で設定ファイルを作成します。
vi /etc/pam.d/system-auth-local
~]# vi /etc/pam.d/system-auth-localCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/pam.d/system-auth-localファイルには、次の行が含まれている必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow vi /etc/pam.d/password-auth-local
~]# vi /etc/pam.d/password-auth-localCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/pam.d/password-auth-localファイルには、次の行が含まれている必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のシンボリックリンクを作成します。
ln -sf /etc/pam.d/system-auth-local /etc/pam.d/system-auth ln -sf /etc/pam.d/password-auth-local /etc/pam.d/password-auth
~]# ln -sf /etc/pam.d/system-auth-local /etc/pam.d/system-auth ~]# ln -sf /etc/pam.d/password-auth-local /etc/pam.d/password-authCopy to Clipboard Copied! Toggle word wrap Toggle overflow
pam_faillock 設定オプションの詳細は、pam_faillock(8) の man ページを参照してください。
nullok オプションの削除
/etc/shadow ファイルのパスワードフィールドが空の場合、ユーザーは空のパスワードでログインできるようにする nullok オプションがデフォルトで有効になります。nullok オプションを無効にするには、/etc/pam.d/ ディレクトリーの設定ファイル( /etc/pam.d/ system-auth、/etc/pam.d/password-auth など)から nullok 文字列を削除します。
nullok option allow users to login without entering a password? を参照してください。詳細は、KCS ソリューションを参照してください。
4.1.3. セッションのロック リンクのコピーリンクがクリップボードにコピーされました!
4.1.3.1. vlock を使った仮想コンソールのロック リンクのコピーリンクがクリップボードにコピーされました!
yum install kbd
~]# yum install kbd
vlock -a
vlock -a
-a オプションは他の仮想コンソールに切り替えることを防ぎます。
vlock (1) man ページを参照してください。
4.1.4. リムーバブルメディアの読み取り専用マウントの強制 リンクのコピーリンクがクリップボードにコピーされました!
udev ルールを使用してリムーバブルメディアを検出し、blockdev ユーティリティーを使用して読み取り専用にマウントするように設定できます。これは、物理メディアの読み取り専用マウントを強制するには十分です。
リムーバブルメディアの読み取り専用マウントを強制するための blockdev の使用法
/etc/ udev /rules.d/ ディレクトリーに、80-readonly-removables.rules などの新しい udev 設定ファイルを以下の内容で作成します。
SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"
SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"
udev ルールは、新しく接続されたリムーバブルブロック(ストレージ)デバイスが、blockdev ユーティリティーを使用して読み取り専用として自動的に設定されます。
新しい udev 設定の適用
udev ルールを適用する必要があります。udev サービスは設定ファイルへの変更を自動的に検出しますが、既存のデバイスには新しい設定が適用されません。新しい設定の影響を受けるのは、新しく接続されたデバイスのみです。そのため、次に接続したときに新しい設定が適用されるように、接続されているすべてのリムーバブルメディアをアンマウントして取り外す必要があります。
udev を強制するには、root で次のコマンドを実行します。
~# udevadm trigger
~# udevadm trigger
udev がすべてのルールを再適用するように強制しても、すでにマウントされているストレージデバイスには影響がないことに注意してください。
udev がすべてのルールを再ロードするように強制するには(何らかの理由で新しいルールが自動的に検出されない場合)、次のコマンドを使用します。
~# udevadm control --reload
~# udevadm control --reload
4.2. Root アクセスの制御 リンクのコピーリンクがクリップボードにコピーされました!
root ユーザーとして実行するか、sudo や su などの setuid プログラムを使用して有効な root 権限を取得する必要があります。setuid プログラムとは、プログラムを操作するユーザーではなく、プログラムの所有者のユーザー ID(UID) で動作するプログラムのことです。このようなプログラムは、以下の例のように、長い形式一覧の所有者セクションの s で示されます。
ls -l /bin/su
~]$ ls -l /bin/su
-rwsr-xr-x. 1 root root 34904 Mar 10 2011 /bin/su
s は大文字または小文字になります。大文字で表示されている場合は、基になる許可ビットが設定されていないことを意味します。
pam_console.so と呼ばれる PAM モジュールを介して、リムーバブルメディアの再起動やマウントなど、通常は root ユーザーに対してのみ予約されている一部のアクティビティーは、物理コンソールにログインする最初のユーザーに許可されます。 しかし、ネットワーク設定の変更、新しいマウスの設定、ネットワークデバイスのマウントなど、その他の重要なシステム管理タスクは、管理者権限がなければできません。その結果、システム管理者は、ネットワーク上のユーザーがどの程度のアクセスを受けるべきかを決定する必要があります。
4.2.1. Root アクセスの拒否 リンクのコピーリンクがクリップボードにコピーされました!
root としてログインできないようにする場合は、root パスワードを秘密にして、ブートローダーのパスワード保護によりランレベル 1 または単一ユーザーモードへのアクセスを禁止する必要があります(本トピックの詳細については、「ブートローダーのセキュア化」 を参照してください)。
root ログインを許可しないようにできます。
- root シェルの変更
- ユーザーが
rootとして直接ログインできないようにするために、システム管理者は、/etc/passwdファイルでrootアカウントのシェルを /sbin/nologin に設定します。Expand 表4.2 Root シェルの無効化 影響あり 影響なし rootシェルへのアクセスを阻止し、そのような試みをログに記録します。以下のプログラムはrootアカウントにアクセスできません。- login
- gdm
- kdm
- xdm
- su
- ssh
- scp
- sftp
FTP クライアント、メールクライアント、多くの setuid プログラムなど、シェルを必要としないプログラム。以下のプログラムはrootアカウントにアクセスでき ません。- sudo
- FTP クライアント
- Email クライアント
- 任意のコンソールデバイス (tty) を使用した root アクセスの無効化
rootアカウントへのアクセスをさらに制限するために、管理者は/etc/securettyファイルを編集してコンソールでrootログインを無効にできます。このファイルは、rootユーザーがログインできるすべてのデバイスを一覧表示します。ファイルがまったく存在しない場合、rootユーザーは、コンソールまたは raw ネットワークインターフェイスを介して、システム上の任意の通信デバイスを介してログインできます。これは危険です。これは、ユーザーが Telnet を使用してrootとしてマシンにログインできるため、ネットワーク経由でプレーンテキストでパスワードを送信します。デフォルトでは、Red Hat Enterprise Linux 7 の/etc/securettyファイルでは、マシンに物理的に接続されているコンソールでrootユーザーがログインすることしかできません。rootユーザーがログインできないようにするには、rootでシェルプロンプトで以下のコマンドを入力して、このファイルの内容を削除します。echo > /etc/securetty
echo > /etc/securettyCopy to Clipboard Copied! Toggle word wrap Toggle overflow KDM、GDM、および XDM ログインマネージャーでsecurettyサポートを有効にするには、以下の行を追加します。auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.soCopy to Clipboard Copied! Toggle word wrap Toggle overflow 追加対象のファイルは以下のとおりです。/etc/pam.d/gdm/etc/pam.d/gdm-autologin/etc/pam.d/gdm-fingerprint/etc/pam.d/gdm-password/etc/pam.d/gdm-smartcard/etc/pam.d/kdm/etc/pam.d/kdm-np/etc/pam.d/xdm
警告空の/etc/securettyファイルでは、rootユーザーが OpenSSH ツールスイートを使用してリモートでログインでき ませ ん。これは、認証後までコンソールが開かれないためです。Expand 表4.3 Root ログインの無効化 影響あり 影響なし コンソールまたはネットワークを使用してrootアカウントにアクセスできないようにします。以下のプログラムはrootアカウントにアクセスできません。- login
- gdm
- kdm
- xdm
- tty を開くその他のネットワークサービス
rootとしてログインしないが、setuid またはその他のメカニズムを使用して管理タスクを実行するプログラム。以下のプログラムはrootアカウントにアクセスでき ません。- su
- sudo
- ssh
- scp
- sftp
- Root SSH ログインの無効化
- SSH プロトコルを介した
rootログインを防ぐには、SSH デーモンの設定ファイル/etc/ssh/sshd_configを編集し、以下の行を変更します。#PermitRootLogin yes
#PermitRootLogin yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow の行を以下のように変更します。PermitRootLogin no
PermitRootLogin noCopy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表4.4 Root SSH ログインの無効化 影響あり 影響なし ツールの OpenSSH スイートを使用したrootアクセスを防ぎます。以下のプログラムはrootアカウントにアクセスできません。- ssh
- scp
- sftp
OpenSSH のツール群に含まれないプログラム。 - PAM を使用して、サービスへの root アクセスを制限する
- PAM は、
/lib/security/pam_listfile.soモジュールを通じて、特定のアカウントを拒否するための優れた柔軟性を提供します。管理者は、このモジュールを使用して、ログインを許可されていないユーザーのリストを参照できます。システムサービスへのrootアクセスを制限するには、/etc/pam.d/ディレクトリーの target サービスのファイルを編集し、pam_listfile.soモジュールが認証に必要であることを確認します。以下は、/etc/pam.d/vsftpdPAM 設定ファイルの vsftpd FTP サーバーに モジュールを使用する方法の例です(ディレクティブが 1 行にある場合は最初の行の最後にある\文字は必要あり ません )。auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/vsftpd.ftpusers onerr=succeedCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、PAM は/etc/vsftpd.ftpusersファイルを参照し、一覧表示されたユーザーのサービスへのアクセスを拒否します。管理者はこのファイルの名前を変更することができ、各サービスごとに個別のリストを保持することも、1 つの中央リストを使用して複数のサービスへのアクセスを拒否することもできます。管理者が複数のサービスへのアクセスを拒否する場合は、同様の行を PAM 設定ファイル(メールクライアントの場合は/etc/pam.d/popおよび/etc/pam.d/imap、SSH クライアントの場合は/etc/pam.d/sshなど)に追加できます。PAM の詳細は、/usr/share/doc/pam-<version>/html/ ディレクトリーにある 『The Linux-』 PAM System Administrator's Guideを参照してください。Expand 表4.5 PAM を使用した root の無効化 影響あり 影響なし PAM が認識しているネットワークサービスへのrootアクセスを防ぎます。以下のサービスは、rootアカウントにアクセスできません。- login
- gdm
- kdm
- xdm
- ssh
- scp
- sftp
- FTP クライアント
- Email クライアント
- すべての PAM 対応サービス
PAM を意識していないプログラム、サービス。
4.2.2. Root アクセスの許可 リンクのコピーリンクがクリップボードにコピーされました!
root アクセスを許可することが問題ではない可能性があります。ユーザーによる root アクセスの許可とは、デバイスの追加やネットワークインターフェイスの設定などのマイナーなアクティビティーを個々のユーザーが処理できるため、システム管理者はネットワークセキュリティーやその他の重要な問題に対処できます。
root アクセスを付与すると、次の問題が発生する可能性があります。
- マシン の設定ミス -
rootアクセスを持つユーザーはマシンの設定を誤設定でき、問題の解決に支援が必要になる場合があります。さらに悪いことに、知らずにセキュリティーホールを発生させてしまう可能性があります。 - 安全で ないサービス の実行 -
rootアクセスを持つユーザーは、FTP や Telnet などのマシン上で安全でないサーバーを実行する可能性があり、ユーザー名とパスワードが危険にさらされる可能性があります。これらのサービスは、この情報をプレーンテキストでネットワーク経由で送信します。 - 電子メールの添付ファイルを root で実行 — まれにですが、Linux に影響を与える電子メールウィルスが存在します。悪意のあるプログラムは、
rootユーザーによって実行されると、最大の脅威となります。 - 監査証跡の維持 -
rootアカウントは複数のユーザーが共有されるため、複数のシステム管理者がシステムを保守できるため、特定の時点でどのユーザーがrootであったかを把握することはできません。セパレートログインの場合、ユーザーがログインしたアカウントと、セッション追跡のための一意の番号がタスク構造に入れられ、ユーザーが起動するすべてのプロセスに継承されます。同時ログインを使用する場合、一意の番号を使用して、特定のログインへのアクションを追跡することができます。アクションが監査イベントを生成すると、その一意な番号に関連するログインアカウントとセッションが記録されます。これらのログインとセッションを表示するには、aulast コマンドを使用します。aulast コマンドの--proofオプションを使用すると、特定の ausearch クエリーを提案し、特定のセッションによって生成された監査可能なイベントを分離できます。監査システムの詳細については、7章システム監査を参照してください。
4.2.3. Root アクセスの制限 リンクのコピーリンクがクリップボードにコピーされました!
root ユーザーへのアクセスを拒否するのではなく、su または sudo などの setuid プログラムを介したアクセスのみを許可したい場合があります。su および sudo の詳細は、Red Hat Enterprise Linux 7 System Administrator's Guide の Gaining Privileges の章および su (1) および sudo (8 )の man ページを参照してください。
4.2.4. 自動ログアウトの有効化 リンクのコピーリンクがクリップボードにコピーされました!
root としてログインすると、無人ログインセッションが重大なセキュリティーリスクを引き起こす可能性があります。このリスクを減らすために、一定時間後にアイドル状態のユーザーを自動的にログアウトさせるようにシステムを設定することができます。
rootとして、/etc/profileファイルの先頭に次の行を追加して、このファイルの処理が中断されないようにします。trap "" 1 2 3 15
trap "" 1 2 3 15Copy to Clipboard Copied! Toggle word wrap Toggle overflow rootとして、以下の行を/etc/profileファイルに追加し、120 秒後に自動的にログアウトします。export TMOUT=120 readonly TMOUT
export TMOUT=120 readonly TMOUTCopy to Clipboard Copied! Toggle word wrap Toggle overflow TMOUT変数は、指定された秒数のアクティビティーがない場合にシェルを終了します(上記の例では120に設定)。特定のインストールのニーズに応じて、制限を変更することができます。
4.2.5. ブートローダーのセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
- シングルユーザーモードへのアクセスの防止 - 攻撃者がシステムをシングルユーザーモードで起動できる場合、
rootパスワードを求められることなく、rootとして自動的にログインします。警告/etc/sysconfig/initファイルのSINGLEパラメーターを編集して、パスワードを使用してシングルユーザーモードへのアクセスを保護することは推奨されません。攻撃者は、GRUB 2 のカーネルコマンドラインでカスタム初期コマンド(init=パラメーターを使用)を指定することにより、パスワードをバイパスできます。Red Hat Enterprise Linux 7 System Administrator's Guide の Protecting GRUB 2 with a Password の章に記載されているように、GRUB 2 ブートローダーをパスワードで保護することが推奨されています。 - GRUB 2 コンソールへのアクセスの防止 - マシンがブートローダーとして GRUB 2 を使用する場合、攻撃者は GRUB 2 エディターインターフェイスを使用して設定を変更したり、cat コマンドを使用して情報を収集したりできます。
- 安全でないオペレーティングシステムへのアクセスの防止 — デュアルブートシステムの場合、攻撃者は、たとえば DOS のような、アクセス制御およびファイルパーミッションを無視するオペレーティングシステムを起動時に選択することができます。
4.2.5.1. インタラクティブスタートアップの無効化 リンクのコピーリンクがクリップボードにコピーされました!
root としてユーザーが対話的にシステムを起動しないようにするには、/etc/sysconfig/init ファイルの PROMPT パラメーターを無効にします。
PROMPT=no
PROMPT=no
4.2.6. ハードリンクおよびシンボリックリンクの保護 リンクのコピーリンクがクリップボードにコピーされました!
- ユーザーは、リンク先のファイルを所有しています。
- ユーザーは、リンク先のファイルに対して、すでに読み取りと書き込みのアクセス権を持っています。
- シンボリックリンクに続くプロセスが、シンボリックリンクの所有者となります。
- ディレクトリーの所有者は、シンボリックリンクの所有者と同じになります。
/usr/lib/sysctl.d/50-default.conf ファイルの以下のオプションによって制御されます。
fs.protected_hardlinks = 1 fs.protected_symlinks = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
/etc/sysctl .d/ ディレクトリーに 51-no-protect-links.conf などの新しい設定ファイルを作成します。
fs.protected_hardlinks = 0 fs.protected_symlinks = 0
fs.protected_hardlinks = 0
fs.protected_symlinks = 0
.conf 拡張子が必要で、デフォルトのシステムファイルの 後 に読み込む必要があることに注意してください(ファイルは辞書的な順序で読み取られます)。そのため、ファイル名の最初に番号が大きいファイルに含まれる設定が優先されます。
sysctl メカニズムを使用した起動時のカーネルパラメーターの設定についての詳細は、sysctl.d(5) の man ページを参照してください。
4.3. サービスのセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
4.3.1. サービスへのリスク リンクのコピーリンクがクリップボードにコピーされました!
- サービス拒否攻撃 (DoS) — サービスにリクエストをフラッディングさせると、サービスは各リクエストをログに記録して応答しようとするため、サービス拒否攻撃はシステムを使用不能にすることができます。
- 分散型サービス拒否攻撃 (DDoS) — DoS 攻撃の一種で、セキュリティーを侵害された複数のマシン (多くは数千台以上) を使用して、サービスに協調攻撃を仕掛け、リクエストをフラッディングさせて使用不能にするものです。
- スクリプト脆弱性攻撃 — Web サーバーが一般的に行うように、サーバーが、サーバーサイドのアクションを実行するためにスクリプトを使用している場合、攻撃者は不適切に記述されたスクリプトをターゲットにすることができます。これらのスクリプトの脆弱性攻撃により、バッファーオーバーフロー状態が発生したり、攻撃者がシステム上のファイルを変更したりできます。
- バッファーオーバーフロー攻撃 - ポート 1 から 1023 をリッスンするサービスは、管理者権限で開始するか、
CAP_NET_BIND_SERVICE機能を設定する必要があります。プロセスがポートにバインドされ、そのポートをリッスンするようになると、権限または機能がドロップされることがよくあります。権限や機能がドロっプされず、アプリケーションに悪用可能なバッファーオーバーフローがある場合、攻撃者はデーモンを実行しているユーザーとしてシステムにアクセスできる可能性があります。悪用可能なバッファーオーバーフローが存在するため、クラッカーは自動化ツールを使って脆弱性のあるシステムを特定し、アクセス権を獲得した後は、自動化ルートキットを使ってシステムへのアクセス権を維持します。
4.3.2. サービスの識別と設定 リンクのコピーリンクがクリップボードにコピーされました!
- cups - Red Hat Enterprise Linux 7 のデフォルトのプリントサーバー。
- cups-lpd - 代替のプリントサーバー。
- xinetd - gssftp や telnet など、さまざまな下位サーバーへの接続を制御するスーパーサーバー。
- sshd - OpenSSH サーバー。Telnet の安全な代替です。
4.3.3. 安全でないサービス リンクのコピーリンクがクリップボードにコピーされました!
- 暗号化されていないネットワーク上でのユーザー名とパスワードの送信 — Telnet や FTP などの多くの古いプロトコルは、認証セッションを暗号化しないため、可能な限り避ける必要があります。
- 暗号化されていないネットワーク上での機密データの送信 — 多くのプロトコルは、暗号化されていないネットワーク上でデータを送信します。これらのプロトコルには、Telnet、FTP、HTTP、および SMTP が含まれます。NFS や SMB などの多くのネットワークファイルシステムも、暗号化されていないネットワークを介して情報を送信します。これらのプロトコルを使用する場合、ユーザーの責任において、送信されるデータの種類を制限する必要があります。
SSH を優先して、すべてのリモートログインおよびシェルプログラム(rlogin、rsh、および telnet)を回避する必要があります。sshd の詳細は、「SSH のセキュア化」 を参照してください。
FTP は、リモートシェルほどシステムのセキュリティーに本質的に危険ではありませんが、問題を回避するために、FTP サーバーは慎重に設定し、監視する必要があります。FTP サーバーのセキュリティー保護に関する詳細は、「FTP のセキュア化」 を参照してください。
- auth
- nfs-server
- smb および nbm (Samba)
- yppasswdd
- ypserv
- ypxfrd
4.3.4. rpcbind のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
4.3.4.1. TCP Wrapper による rpcbind の保護 リンクのコピーリンクがクリップボードにコピーされました!
4.3.4.2. firewalld による rpcbind の保護 リンクのコピーリンクがクリップボードにコピーされました!
firewalld ルールを追加し、特定のネットワークへのアクセスを制限することが推奨されます。
firewalld リッチ言語コマンドの例です。1 つ目は、192.168.0.0/24 ネットワークからポート 111 ( rpcbind サービスで使用される)への TCP 接続を許可します。2 つ目は、localhost から同じポートへの TCP 接続を許可します。 それ以外のパケットはすべてドロップされます。
firewall-cmd --add-rich-rule='rule family="ipv4" port port="111" protocol="tcp" source address="192.168.0.0/24" invert="True" drop' firewall-cmd --add-rich-rule='rule family="ipv4" port port="111" protocol="tcp" source address="127.0.0.1" accept'
~]# firewall-cmd --add-rich-rule='rule family="ipv4" port port="111" protocol="tcp" source address="192.168.0.0/24" invert="True" drop'
~]# firewall-cmd --add-rich-rule='rule family="ipv4" port port="111" protocol="tcp" source address="127.0.0.1" accept'
firewall-cmd --add-rich-rule='rule family="ipv4" port port="111" protocol="udp" source address="192.168.0.0/24" invert="True" drop'
~]# firewall-cmd --add-rich-rule='rule family="ipv4" port port="111" protocol="udp" source address="192.168.0.0/24" invert="True" drop'
4.3.5. rpc.mountd のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
rpc.mountd デーモンは、NFS バージョン 2 (RFC 1904)および NFS バージョン 3 (『RFC』1813)が使用するプロトコルである NFS MOUNT プロトコルのサーバー側を実装します。
4.3.5.1. TCP ラッパーによる rpc.mountd の保護 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレス のみ を使用してください。ホスト名は DNS ポイズニングなどの方法で偽造される可能性があるため、使用しないでください。
4.3.5.2. firewalld による rpc.mountd の保護 リンクのコピーリンクがクリップボードにコピーされました!
firewalld リッチ言語ルールを追加し、特定のネットワークへのアクセスを制限します。
firewalld リッチ言語コマンドの例です。1 つ目は、192.168.0.0/24 ネットワークから mountd 接続を許可します。2 つ目は、ローカルホストからの mountd 接続を許可します。他のパケットはすべて遮断されます。
firewall-cmd --add-rich-rule 'rule family="ipv4" source NOT address="192.168.0.0/24" service name="mountd" drop' firewall-cmd --add-rich-rule 'rule family="ipv4" source address="127.0.0.1" service name="mountd" accept'
~]# firewall-cmd --add-rich-rule 'rule family="ipv4" source NOT address="192.168.0.0/24" service name="mountd" drop'
~]# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="127.0.0.1" service name="mountd" accept'
4.3.6. NIS のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
- /usr/sbin/rpc.yppasswdd - yppasswdd サービスとも呼ばれるこのデーモンにより、ユーザーは NIS パスワードを変更できます。
- /usr/sbin/rpc.ypxfrd - ypxfrd サービスとも呼ばれるこのデーモンは、ネットワークを介した NIS マップ転送を行います。
- /usr/sbin/ypserv - これは NIS サーバーデーモンです。
4.3.6.1. ネットワークの注意深いプランニング リンクのコピーリンクがクリップボードにコピーされました!
4.3.6.2. パスワードのような NIS ドメイン名とホスト名の使用 リンクのコピーリンクがクリップボードにコピーされました!
ypcat -d <NIS_domain> -h <DNS_hostname> passwd
ypcat -d <NIS_domain> -h <DNS_hostname> passwd
ypcat -d <NIS_domain> -h <DNS_hostname> shadow
ypcat -d <NIS_domain> -h <DNS_hostname> shadow
o7hfawtgmhwg.domain.com などの DNS ホスト名にランダムな文字列を作成します。同様に、異なるランダムな NIS ドメイン名を作成します。これにより、攻撃者が NIS サーバーにアクセスすることがより困難になります。
4.3.6.3. /var/yp/securenets ファイルの編集 リンクのコピーリンクがクリップボードにコピーされました!
/var/yp/securenets ファイルが空白であるか、存在しない場合(デフォルトのインストール後の場合)、NIS はすべてのネットワークをリッスンします。最初の作業の 1 つは、ネットマスク/ネットワークのペアを ファイルに配置して、ypserv が適切なネットワークからの要求にのみ応答するようにすることです。
/var/yp/securenets ファイルからのエントリーの例です。
255.255.255.0 192.168.0.0
255.255.255.0 192.168.0.0
/var/yp/securenets ファイルを作成せずに、NIS サーバーを初めて起動しないでください。
4.3.6.4. 静的ポートの割り当てとリッチ言語ルールの使用 リンクのコピーリンクがクリップボードにコピーされました!
/etc/sysconfig/network に追加します。
YPSERV_ARGS="-p 834" YPXFRD_ARGS="-p 835"
YPSERV_ARGS="-p 834"
YPXFRD_ARGS="-p 835"
firewalld ルールを使用して、サーバーがこれらのポートをリッスンするネットワークを適用できます。
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" invert="True" port port="834-835" protocol="tcp" drop' firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" invert="True" port port="834-835" protocol="udp" drop'
~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" invert="True" port port="834-835" protocol="tcp" drop'
~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" invert="True" port port="834-835" protocol="udp" drop'
192.168.0.0/24 ネットワークから送信された場合にのみ、サーバーがポート 834 および 835 への接続を許可することを意味します。最初のルールは TCP 用で、2 つ目は UDP のルールです。
4.3.6.5. Kerberos 認証の使用 リンクのコピーリンクがクリップボードにコピーされました!
/etc/shadow マップからのパスワードハッシュがネットワーク経由で送信されることです。侵入者が NIS ドメインにアクセスし、ネットワークトラフィックを盗聴した場合、侵入者はユーザー名とパスワードハッシュを収集できます。十分な時間があれば、パスワードクラッキングプログラムは弱いパスワードを推測することができ、攻撃者はネットワーク上の有効なアカウントにアクセスすることができます。
4.3.7. NFS のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
RPCSEC_GSS カーネルモジュールの一部として Kerberos ユーザーおよびグループ認証をサポートします。Red Hat Enterprise Linux 7 は rpcbind を使用する NFSv3 をサポートしているため、rpcbind に関する情報は引き続き含まれています。
4.3.7.1. ネットワークの注意深いプランニング リンクのコピーリンクがクリップボードにコピーされました!
4.3.7.2. NFS マウントオプションのセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/fstab ファイルでの mount コマンドの 使用については、Red Hat Enterprise Linux 7 Storage Administration Guide の Using the mount command の章で説明されています。セキュリティー管理の観点からは、NFS マウントオプションは /etc/nfsmount.conf でも指定できます。これは、カスタムのデフォルトオプションを設定するために使用できます。
4.3.7.2.1. NFS サーバーのレビュー リンクのコピーリンクがクリップボードにコピーされました!
exports (5) man ページのサブツリーチェックに関するセクションを参照してください)。
ro オプションを使用し、可能な限りファイルシステムを読み取り専用としてエクスポートし、マウントされたファイルシステムに書き込むことができるユーザー数を削減します。特に必要な場合にのみ rw オプションを使用してください。詳細は、exports (5) の man ページを参照してください。書き込みアクセスを許可すると、たとえばシンボリックリンク攻撃によるリスクが高まります。これには、/tmp や /usr /tmp などの一時ディレクトリーが含まれます。
rw オプションでマウントする必要がある場合は、リスクを減らすために、可能な限りディレクトリーを誰でも書き込み可能にすることは避けてください。一部のアプリケーションでは、パスワードをクリアテキストまたは弱い暗号化形式で保存するため、ホームディレクトリーのエクスポートもリスクがあると見なされます。このリスクは、アプリケーションコードの見直しや改善によって減少しています。SSH 鍵にパスワードを設定しないユーザーもいるので、これもホームディレクトリーのリスクとなることを意味します。パスワードの使用を強制するか、Kerberos を使用すると、このリスクが軽減されます。
secure オプションは、「予約済み」 ポートへのエクスポートを制限するために使用されるサーバー側のエクスポートオプションです。デフォルトでは、サーバーは 「予約済み」 ポート (1024 未満の番号のポート) からのクライアント通信のみを許可します。これは、従来からクライアントは、「信頼できる」 コード (カーネル内の NFS クライアントなど) のみがこれらのポートを使用するように許可していたためです。しかし、多くのネットワークでは、一部のクライアントで root ユーザーになることは難しくないので、予約されたポートからの通信が権限付きであるとサーバーが想定することは安全ではありません。そのため、予約ポートの制限は効果が限定的です。Kerberos、ファイアウォール、および特定クライアントへのエクスポートを制限することに依存すると良いでしょう。
4.3.7.2.2. NFS クライアントのレビュー リンクのコピーリンクがクリップボードにコピーされました!
nosuid オプションを使用して、setuid プログラムの使用を無効にします。nosuid オプションは、set-user-identifier ビットまたは set-group-identifier ビットを無効にします。これにより、リモートユーザーは、setuid プログラムを実行してより高い権限を取得できなくなります。このオプションは、クライアント側とサーバー側で使用します。
noexec オプションは、クライアント上のすべての実行可能ファイルを無効にします。これを使用して、ユーザーが共有されているファイルシステムに置かれているファイルを誤って実行しないようにします。nosuid および noexec オプションは、すべてではないにしても、ほとんどのファイルシステムの標準オプションです。
nodev オプションを使用して、「デバイスファイル」 がクライアントによってハードウェアデバイスとして処理されないようにします。
resvport オプションはクライアント側のマウントオプションで、secure は対応するサーバー側のエクスポートオプションです (上記の説明を参照してください)。これは、通信を予約済みポートに制限します。予約済みポートまたは既知のポートは、root ユーザーなどの特権ユーザーおよびプロセス用に予約されています。このオプションを設定すると、クライアントは予約済みソースポートを使用してサーバーと通信します。
sec=krb5 です。
krb5i、プライバシー保護にkrb5pを用いた Kerberos によるマウントをサポートしています。これらは、sec=krb5でマウントする際に使用されますが、NFS サーバーで設定する必要があります。詳細は、exports の man ページを参照してください(man 5 exports)。
man 5 nfs)には、NFSv4 のセキュリティー強化を説明する 「SECURITY CONSIDERATIONS」 セクションがあり、NFS 固有のマウントオプションがすべて含まれています。
4.3.7.3. 構文エラーに注意 リンクのコピーリンクがクリップボードにコピーされました!
/etc/exports ファイルを使って、エクスポートするファイルシステムと、これらのディレクトリーをエクスポートするホストを決定します。このファイルを編集する際には、余計なスペースを加えないように注意してください。
/etc/exports ファイルの次の行は、ディレクトリー /tmp/nfs/ を、読み取り/書き込みパーミッションでホスト bob.example.com と共有します。
/tmp/nfs/ bob.example.com(rw)
/tmp/nfs/ bob.example.com(rw)
/etc/exports ファイルの次の行は、同じディレクトリーを読み取り専用パーミッションでホスト bob.example.com と共有し、ホスト名の後の 1 つのスペース文字が原因で読み取り/書き込みパーミッションで ワールド と共有します。
/tmp/nfs/ bob.example.com (rw)
/tmp/nfs/ bob.example.com (rw)
showmount -e <hostname>
showmount -e <hostname>
4.3.7.4. no_root_squash オプションを使用しないでください リンクのコピーリンクがクリップボードにコピーされました!
4.3.7.5. NFS ファイアウォールの設定 リンクのコピーリンクがクリップボードにコピーされました!
NFSv3 用のポート設定
rpcbind サービスによって動的に割り当てられるため、ファイアウォールルールの作成時に問題が発生する可能性があります。このプロセスを簡素化するには、/etc/sysconfig/nfs ファイルを使用して、使用するポートを指定します。
MOUNTD_PORT— mountd (rpc.mountd) 用の TCP および UDP ポートSTATD_PORT— ステータス (rpc.statd) 用の TCP および UDP ポート
/etc/modprobe.d/lockd.conf ファイルに NFS ロックマネージャー(nlockmgr)の TCP および UDP ポートを設定します。
nlm_tcpport— nlockmgr (rpc.lockd) 用の TCP ポートnlm_udpport— UDP ポート nlockmgr (rpc.lockd)
/etc/modprobe.d/lockd.conf を参照してください。
4.3.7.6. Red Hat Identity Management による NFS のセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
4.3.8. HTTP サーバーのセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
4.3.8.1. Apache HTTP Server のセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
chown root <directory_name>
chown root <directory_name>
chmod 755 <directory_name>
chmod 755 <directory_name>
/etc/httpd/conf/httpd.confで設定)を使用する場合は注意が必要です。
FollowSymLinks- このディレクティブはデフォルトで有効になっていますので、Web サーバーのドキュメント root へのシンボリックリンクを作成する場合は注意が必要です。たとえば、
/へのシンボリックリンクを提供することは適切ではありません。 Indexes- このディレクティブはデフォルトで有効になっていますが、望ましくない場合もあります。訪問者がサーバー上のファイルを閲覧できないようにするには、このディレクティブを削除してください。
UserDirUserDirディレクティブは、システム上にユーザーアカウントが存在することを確認できるため、デフォルトでは無効になっています。サーバーでユーザーディレクトリーの閲覧を可能にするには、以下のディレクティブを使用します。UserDir enabled UserDir disabled root
UserDir enabled UserDir disabled rootCopy to Clipboard Copied! Toggle word wrap Toggle overflow これらのディレクティブは、/root/以外のすべてのユーザーディレクトリーの閲覧を有効にします。無効化されたアカウントのリストにユーザーを追加するには、UserDir disabled行にスペースで区切られたユーザーのリストを追加します。ServerTokensServerTokensディレクティブは、クライアントに送り返されるサーバー応答ヘッダーフィールドを制御します。これには、以下のパラメーターを使用してカスタマイズできるさまざまな情報が含まれています。ServerTokens Full(デフォルトオプション) — 利用可能なすべての情報 (OS タイプや使用モジュール) を提供します。以下に例を示します。Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2
Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServerTokens ProdまたはServerTokens ProductOnly— 以下の情報を提供します。Apache
ApacheCopy to Clipboard Copied! Toggle word wrap Toggle overflow ServerTokens Major— 以下の情報を提供します。Apache/2
Apache/2Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServerTokens Minor— 以下の情報を提供します。Apache/2.0
Apache/2.0Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServerTokens MinまたはServerTokens Minimal— 以下の情報を提供します。Apache/2.0.41
Apache/2.0.41Copy to Clipboard Copied! Toggle word wrap Toggle overflow ServerTokens OS— 以下の情報を提供します。Apache/2.0.41 (Unix)
Apache/2.0.41 (Unix)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
攻撃者がシステムに関する重要な情報を得ることがないように、ServerTokens Prodオプションを使用することをお勧めします。
IncludesNoExec ディレクティブを削除しないでください。デフォルトでは、Server-Side Includes (SSI) モジュールは、コマンドを実行できません。この設定は、攻撃者がシステム上でコマンドを実行できるようになる可能性があるため、絶対に必要な場合を除き、変更しないことを推奨します。
httpd モジュールの削除
httpd モジュールを削除することが有益です。これを行うには、/etc/httpd/conf.modules.d ディレクトリーの設定ファイルを編集します。たとえば、プロキシーモジュールを削除するためには、以下のコマンドを実行します。
echo '# All proxy modules disabled' > /etc/httpd/conf.modules.d/00-proxy.conf
echo '# All proxy modules disabled' > /etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.d/ ディレクトリーには、モジュールの読み込みにも使用される設定ファイルが含まれていることに注意してください。
httpd および SELinux
4.3.8.2. NGINX のセキュリティー保護 リンクのコピーリンクがクリップボードにコピーされました!
server セクションで、以下の設定変更をすべて実行します。
バージョン文字列の無効化
server_tokens off;
server_tokens off;
nginx を単に報告するという効果があります。
curl -sI http://localhost | grep Server
$ curl -sI http://localhost | grep Server
Server: nginx
追加のセキュリティー関連ヘッダーを含む
add_header X-Frame-Options SAMEORIGIN;- このオプションは、ドメイン外のページが NGINX が提供するコンテンツをフレーム化するように拒否し、クリックジャッキング攻撃を効果的に軽減します。add_header X-Content-Type-Options nosniff;- このオプションは、特定の古いブラウザーで MIME タイプのスニッフィングを防ぎます。add_header X-XSS-Protection "1; mode=block";- このオプションは、クロスサイトスクリプティング(XSS)フィルターリングを有効にします。これにより、ブラウザーは NGINX の応答に含まれる潜在的に悪意のあるコンテンツをレンダリングできなくなります。
潜在的に有害な HTTP メソッドを無効にする
Allow GET, PUT, POST; return "405 Method Not Allowed" for all others.
# Allow GET, PUT, POST; return "405 Method Not Allowed" for all others.
if ( $request_method !~ ^(GET|PUT|POST)$ ) {
return 405;
}
SSL の設定
4.3.9. FTP のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Content Accelerator (tux): FTP 機能を持つカーネルスペースの Web サーバー。
- vsftpd: スタンドアロンの、セキュリティー指向の FTP サービスの実装。
4.3.9.1. FTP グリーティングバナー リンクのコピーリンクがクリップボードにコピーされました!
/etc/vsftpd/vsftpd.conf ファイルに追加します。
ftpd_banner=<insert_greeting_here>
ftpd_banner=<insert_greeting_here>
/etc/banners/ という新しいディレクトリーに配置します。この例の FTP 接続のバナーファイルは /etc/banners/ftp.msg です。以下は、このようなファイルの例です。
######### Hello, all activity on ftp.example.com is logged. #########
######### Hello, all activity on ftp.example.com is logged. #########
/etc/vsftpd/vsftpd.conf ファイルに追加します。
banner_file=/etc/banners/ftp.msg
banner_file=/etc/banners/ftp.msg
4.3.9.2. 匿名アクセス リンクのコピーリンクがクリップボードにコピーされました!
/var/ftp/ ディレクトリーが存在すると、匿名アカウントが有効になります。
vsftpd パッケージをインストールすることです。本パッケージは、匿名ユーザーのためのディレクトリーツリーを構築し、匿名ユーザーのためにディレクトリーのパーミッションを読み取り専用に設定します。
4.3.9.2.1. 匿名のアップロード リンクのコピーリンクがクリップボードにコピーされました!
/var/ftp/pub/ 内に書き込み専用ディレクトリーを作成することが推奨されます。root で以下のコマンドを実行します。
mkdir /var/ftp/pub/upload
~]# mkdir /var/ftp/pub/upload
chmod 730 /var/ftp/pub/upload
~]# chmod 730 /var/ftp/pub/upload
ls -ld /var/ftp/pub/upload
~]# ls -ld /var/ftp/pub/upload
drwx-wx---. 2 root ftp 4096 Nov 14 22:57 /var/ftp/pub/upload
/etc/vsftpd/vsftpd.conf ファイルに追加します。
anon_upload_enable=YES
anon_upload_enable=YES
4.3.9.3. ユーザーアカウント リンクのコピーリンクがクリップボードにコピーされました!
/etc/vsftpd/vsftpd.conf に追加します。
local_enable=NO
local_enable=NO
4.3.9.3.1. ユーザーアカウントの制限 リンクのコピーリンクがクリップボードにコピーされました!
/etc/pam.d/vsftpd です。
/etc/vsftpd/ftpusersに追加します。
4.3.9.4. TCP Wrapper を使用してアクセスを制御する リンクのコピーリンクがクリップボードにコピーされました!
4.3.10. Postfix のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
4.3.10.1. サービス拒否攻撃を制限する リンクのコピーリンクがクリップボードにコピーされました!
/etc/postfix/main.cf ファイルのディレクティブの制限を設定することで制限できます。すでにあるディレクティブの値を変更したり、必要なディレクティブを以下のような形式で好きな値で追加したりすることができます。
<directive> = <value>
<directive> = <value>
- smtpd_client_connection_rate_limit - 時間単位ごとにクライアントがこのサービスに対して実行できる接続試行の最大数(以下で説明)。デフォルト値は 0 です。これは、クライアントが時間単位で Postfix が受け入れることができる数と同じ数の接続を行うことができることを意味します。デフォルトでは、信頼できるネットワーク内のクライアントは除外されます。
- anvil_rate_time_unit: この時間単位は、レート制限の計算に使用されます。デフォルト値は、60 秒です。
- smtpd_client_event_limit_exceptions - 接続およびレート制限コマンドから除外されるクライアント。デフォルトでは、信頼できるネットワーク内のクライアントは除外されます。
- smtpd_client_message_rate_limit - クライアントが時間単位ごとに要求できるメッセージ配信の最大数(Postfix が実際にこれらのメッセージを受け入れるかどうかに関係なく)。
- default_process_limit: 指定されたサービスを提供する Postfix 子プロセスのデフォルトの最大数。この制限は、
master.cfファイルの特定サービスに対してオーバーライドできます。デフォルト値は 100 です。 - queue_minfree - メールを受信するために必要なキューファイルシステムの空き領域の最小空き容量(バイト単位)。これは現在、Postfix SMTP サーバーがメールをまったく受け取らないかどうかを決定するために使用されています。デフォルトでは、Postfix SMTP サーバーは、空き容量が message_size_limit の 1.5 倍未満の場合、MAIL FROM コマンドを拒否します。空き容量の最小値をこれよりも高く指定するには、message_size_limit の 1.5 倍以上の queue_minfree 値を指定します。デフォルトの queue_minfree 値は 0 です。
- header_size_limit: メッセージヘッダーを保存するためのメモリーの最大量(バイト単位)。ヘッダーの方が大きい場合、超過分は破棄されます。デフォルト値は 102400 です。
- message_size_limit: エンベロープ情報を含むメッセージの最大サイズ(バイト単位)。デフォルト値は 10240000 です。
4.3.10.2. NFS と Postfix リンクのコピーリンクがクリップボードにコピーされました!
/var/spool/postfix/ を NFS 共有ボリュームに配置しないでください。NFSv2 および NFSv3 では、ユーザー ID およびグループ ID の管理を行わないため、2 人以上のユーザーが同じ UID を持ち、互いのメールを受信および読み取ることができます。
SECRPC_GSS カーネルモジュールは UID ベースの認証を使用しないため、これは当てはまりません。しかし、メールスプールディレクトリーを NFS 共有ボリュームに 置かない ことは、引き続きグッドプラクティスとされています。
4.3.10.3. メール専用ユーザー リンクのコピーリンクがクリップボードにコピーされました!
/etc/passwd ファイルのすべてのユーザーシェルは /sbin/nologin に設定する必要があります(root ユーザーを除く可能性があります)。
4.3.10.4. Postfix ネットワークリスニングの無効化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/postfix/main.cf ファイルを表示します。
/etc/postfix/main.cf ファイルを表示して、以下の inet_interfaces 行のみが表示されることを確認します。
inet_interfaces = localhost
inet_interfaces = localhost
inet_interfaces = all 設定を使用できます。
4.3.10.5. Postfix が SASL を使用する設定 リンクのコピーリンクがクリップボードにコピーされました!
SASL 実装を使用できます。SMTP 認証は Simple Mail Transfer Protocol の拡張機能です。有効にすると、SMTP クライアントは、サーバーとクライアントの両方でサポートおよび許可される認証方法を使用して SMTP サーバーに対して認証する必要があります。本セクションでは、Dovecot SASL 実装を利用するように Postfix を設定する方法について説明します。
POP/IMAP サーバーをインストールし、システムで Dovecot SASL 実装を利用できるようにするには、root ユーザーとして次のコマンドを発行します。
yum install dovecot
~]# yum install dovecot
SMTP サーバーは、UNIX ドメインソケットまたは TCP ソケット のいずれかを使用して、Dovecot SASL 実装と通信できます。後者の方法は、Postfix と Dovecot のアプリケーションが別々のマシンで実行されている場合にのみ必要です。このガイドでは、プライバシーを強化する UNIX ドメインソケット方式を優先しています。
SASL 実装を使用するように指示するには、両方のアプリケーションに対して多くの設定変更を実行する必要があります。以下の手順に従ってください。
Dovecot のセットアップ
- メインの Dovecot 設定ファイル
/etc/dovecot/conf.d/10-master.confを変更して、次の行を含めます(デフォルトの設定ファイルにほとんどの関連セクションがすでに含まれているため、その行はコメント解除する必要があります)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、Postfix と Dovecot の間の通信に UNIX ドメインソケットを使用することを前提としています。また、/var/spool/postfix/ディレクトリーにあるメールキューを含む PostfixSMTPサーバーのデフォルト設定と、postfixユーザーおよびグループで実行されているアプリケーションを想定しています。このようにして、読み取りおよび書き込みのパーミッションはpostfixユーザーおよびグループに制限されます。または、以下の設定を使用して、TCPを介して Postfix 認証要求をリッスンするように Dovecot を設定できます。service auth { inet_listener { port = 12345 } }service auth { inet_listener { port = 12345 } }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、12345を使用するポートの数に置き換えます。 /etc/dovecot/conf.d/10-auth.conf設定ファイルを編集して、PostfixSMTPサーバーにplainおよびlogin認証メカニズムを提供するように Dovecot に指示します。auth_mechanisms = plain login
auth_mechanisms = plain loginCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Postfix のセットアップ
/etc/postfix/main.cf のみを変更する必要があります。以下の設定ディレクティブを設定できます。
- Postfix
SMTPサーバーで SMTP 認証を有効にします。smtpd_sasl_auth_enable = yes
smtpd_sasl_auth_enable = yesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SMTP 認証に Dovecot
SASL実装を使用するように Postfix に指示します。smtpd_sasl_type = dovecot
smtpd_sasl_type = dovecotCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Postfix キューディレクトリーに相対的な認証パスを指定します(相対パスを使用すると、Postfix サーバーが chroot で実行されているかどうかに関係なく設定が機能することが保証されます)。
smtpd_sasl_path = private/auth
smtpd_sasl_path = private/authCopy to Clipboard Copied! Toggle word wrap Toggle overflow この手順では、Postfix と Dovecot の間の通信に UNIX ドメインソケットを使用することを前提としています。通信にTCPソケットを使用する場合に、別のマシンで Dovecot を検索するように Postfix を設定するには、以下のような設定値を使用します。smtpd_sasl_path = inet:127.0.0.1:12345
smtpd_sasl_path = inet:127.0.0.1:12345Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、127.0.0.1を Dovecot マシンのIPアドレスに置き換え、12345を Dovecot の/etc/dovecot/conf.d/10-master.conf設定ファイルで指定されたポートに置き換える必要があります。 - Postfix
SMTPサーバーがクライアントに提供するSASLメカニズムを指定します。暗号化されたセッションと暗号化されていないセッションで、異なるメカニズムを指定できることに注意してください。smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_security_options = noanonymous, noplaintext smtpd_sasl_tls_security_options = noanonymousCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、暗号化されていないセッションの間、匿名認証は許可されず、暗号化されていないユーザー名やパスワードを送信するメカニズムも許可されないことを指定しています。暗号化されたセッション(TLSを使用)の場合、非匿名認証メカニズムのみが許可されます。許可されるSASLメカニズムを制限するためにサポートされるすべてのポリシーの一覧は、http://www.postfix.org/SASL_README.html#smtpd_sasl_security_options を参照してください。
関連情報
SASL による Postfix SMTP 認証の設定に役立つ追加情報を提供します。
- http://wiki2.dovecot.org/HowTo/PostfixAndDovecotSASL - SMTP 認証に Dovecot
SASL実装を使用するように Postfix を設定する方法に関する情報が含まれています。 - http://www.postfix.org/SASL_README.html#server_sasl - SMTP 認証用の Dovecot または Cyrus
SASL実装を使用するように Postfix を設定する方法に関する情報が含まれています。
4.3.11. SSH のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
SSH を介した送信は暗号化され、傍受から保護されます。SSH プロトコルおよび Red Hat Enterprise Linux 7 での SSH サービスの使用に関する一般的な情報は、Red Hat Enterprise Linux 7 システム管理者のガイドの OpenSSH の章を参照してください。
SSH 設定を保護するための最も一般的な方法について説明します。この提案された対策のリストは、完璧または決定的なものと見なされるべきではありません。sshd デーモンの動作を変更するために利用できるすべての設定ディレクティブの説明については、sshd _config (5 )を参照してください。また、SSH の基本的な概念については ssh (1) を参照してください。
4.3.11.1. 暗号化ログイン リンクのコピーリンクがクリップボードにコピーされました!
SSH は、コンピューターにログインするための暗号鍵の使用をサポートしています。これは、パスワードのみを使用するよりもはるかに安全です。この方法を他の認証方法と組み合わせると、多要素認証と見なすことができます。複数の認証方法を使用する場合の詳細は、「複数の認証方法」 を参照してください。
/etc/ssh/sshd_config ファイルの PubkeyAuthentication 設定ディレクティブを yes に設定する必要があります。これがデフォルト設定であることに注意してください。PasswordAuthentication ディレクティブを no に設定して、ログインにパスワードを使用する可能性を無効にします。
SSH キーは、ssh-keygen コマンドを使用して生成できます。追加の引数なしで呼び出されると、2048 ビットの RSA キーセットが作成されます。鍵はデフォルトで ~/.ssh/ ディレクトリーに保存されます。-b スイッチを利用すると、キーのビット強度を変更できます。通常、2048 ビットのキーを使用するだけで十分です。Red Hat Enterprise Linux 7 システム管理者ガイドの Configuring OpenSSH の章には、キーペアの生成に関する詳細な情報が記載されています。
~/.ssh/ ディレクトリーに 2 つのキーが表示されるはずです。ssh-keygen コマンドの実行時にデフォルトを受け入れた場合、生成されたファイルの名前は id_rsa と id_rsa.pub で、それぞれ秘密鍵と公開鍵が含まれます。秘密鍵は、ファイルの所有者以外には読めないようにして、常に漏洩から保護する必要があります。ただし、公開鍵は、ログインするシステムに転送する必要があります。ssh-copy-id コマンドを使用して、鍵をサーバーに転送できます。
ssh-copy-id -i [user@]server
~]$ ssh-copy-id -i [user@]server
~/.ssh/authorized_keys ファイルに自動的に追加します。sshd デーモンは、サーバーにログインしようとするとこのファイルをチェックします。
SSH キーを定期的に変更する必要があります。その場合は、authorized_keys ファイルから未使用のキーが削除されていることを確認してください。
4.3.11.2. 複数の認証方法 リンクのコピーリンクがクリップボードにコピーされました!
/etc/ssh/sshd_config ファイルの AuthenticationMethods 設定ディレクティブを使用して、使用する認証方法を指定します。このディレクティブを使用して、必要な認証方法のリストを複数定義できることに注意してください。その場合、ユーザーは少なくとも 1 つのリストのすべてのメソッドを完了する必要があります。リストは空白で区切る必要があり、リスト内の個々の認証方法名はコンマで区切る必要があります以下に例を示します。
AuthenticationMethods publickey,gssapi-with-mic publickey,keyboard-interactive
AuthenticationMethods publickey,gssapi-with-mic publickey,keyboard-interactive
AuthenticationMethods ディレクティブを使用して設定された sshd デーモンは、ログインしようとしているユーザーが publickey 認証の後に gssapi-with-mic 認証または keyboard-interactive 認証のいずれかが正常に完了した場合にのみアクセスを許可します。要求された各認証方法は、/etc/ssh/sshd_config ファイルの対応する設定ディレクティブ( PubkeyAuthenticationなど)を使用して明示的に有効にする必要があります。利用可能な認証方法の一般的な一覧は、ssh (1) の 『AUTHENTICATION』 セクションを参照してください。
4.3.11.3. SSH の他のセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
プロトコルのバージョン
SSH プロトコルの実装は、SSH クライアント用の SSH-1 バージョンと SSH-2 バージョンの両方をサポートしますが、可能な限り後者のみを使用する必要があります。SSH-2 バージョンには、古い SSH-1 に比べて多くの改良が含まれており、高度な設定オプションの大部分は、SSH-2 を使用している場合にのみ使用できます。
SSH -2 を使用することを推奨します。sshd デーモンがサポートするプロトコルのバージョンは、/etc/ssh/sshd_config ファイルの Protocol 設定ディレクティブを使用して指定できます。デフォルト設定は 2 です。SSH-2 バージョンは、Red Hat Enterprise Linux 7 SSH サーバーでサポートされている唯一のバージョンであることに注意してください。
鍵のタイプ
-t オプションを使用して、DSA 鍵または ECDSA 鍵を生成するように指示することもできます。ECDSA (Elliptic Curve Digital Signature Algorithm) は、同等の対称鍵長で RSA よりも優れたパフォーマンスを提供します。また、短いキーも生成します。
デフォルト以外のポート
sshd デーモンは TCP ポート 22 をリッスンします。ポートを変更すると、自動ネットワークスキャンに基づく攻撃にシステムがさらされる可能性が減るため、あいまいさによりセキュリティーが向上します。ポートは、/etc/ssh/sshd_config 設定ファイルの Port ディレクティブを使用して指定できます。また、デフォルト以外のポートを使用できるようにするためには、デフォルトの SELinux ポリシーを変更する必要があることに注意してください。これを行うには、root で以下のコマンドを入力して、ssh_port_t SELinux タイプを変更します。
semanage -a -t ssh_port_t -p tcp port_number
~]# semanage -a -t ssh_port_t -p tcp port_number
Port ディレクティブを使用して指定された新しいポート番号に置き換えます。
root ログインなし
root ユーザーとしてログインする必要がない場合は、/etc/ssh/sshd_config ファイルで PermitRootLogin 設定ディレクティブを no に設定することを検討してください。root ユーザーとしてログインする可能性を無効にすることで、管理者は、通常のユーザーとしてログインし、root 権限を取得した後に、どのユーザーがどの特権コマンドを実行するかを監査できます。
X セキュリティー拡張機能の使用
/etc/ssh/ssh_config ファイルの ForwardX11Trusted オプションが yes に設定され、ssh -X remote_machine (信頼できないホスト)コマンドと ssh -Y remote_machine (信頼できるホスト)コマンドには違いがありません。
4.3.12. PostgreSQL のセキュリティー確保 リンクのコピーリンクがクリップボードにコピーされました!
postgresql-server パッケージは PostgreSQL を提供します。インストールされていない場合は、root ユーザーになり、以下のコマンドを入力してインストールします。
yum install postgresql-server
~]# yum install postgresql-server
-D オプションで示されます。以下に例を示します。
initdb -D /home/postgresql/db1
~]$ initdb -D /home/postgresql/db1
pg_hba.conf ファイルの以下の行により、認証されたローカルユーザーはユーザー名を使用してデータベースにアクセスできます。
local all all trust
local all all trust
pg_hba.conf ファイルからこの行を削除します。
4.3.13. Docker のセキュリティー確保 リンクのコピーリンクがクリップボードにコピーされました!
4.3.14. DDoS 攻撃からの memcached の保護 リンクのコピーリンクがクリップボードにコピーされました!
memcached の脆弱性
memcached の強化
- LAN にファイアウォールを設定してください。ローカルネットワーク内からのみ、memcached サーバーにアクセスできるようにする必要がある場合は、memcached が使用するポートへの外部トラフィックを許可しないでください。たとえば、許可されているポートのリストから、デフォルトで memcached によって使用されるポート 11211 を削除します。特定の IP 範囲にポート 11211 の使用を許可する
firewall-cmd --remove-port=11211/udp firewall-cmd --runtime-to-permanent
~]# firewall-cmd --remove-port=11211/udp ~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow firewalldコマンドについては、「ゾーンを使用し、ソースに応じた着信トラフィックの管理」 を参照してください。 - クライアントが本当にこのプロトコルを必要としない限り、
/etc/sysconfig/memcachedファイルのOPTIONS変数に-U 0 -p 11211値を追加して UDP を無効にします。OPTIONS="-U 0 -p 11211"
OPTIONS="-U 0 -p 11211"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションと同じマシンで単一の memcached サーバーを使用する場合、ローカルホストトラフィックのみをリッスンするように memcached を設定します。
-l 127.0.0.1,::1 の値を/etc/sysconfig/memcachedのOPTIONSに追加します。OPTIONS="-l 127.0.0.1,::1"
OPTIONS="-l 127.0.0.1,::1"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 認証の変更が可能な場合は、SASL (Simple Authentication and Security Layer) 認証を有効にしてください。
/etc/sasl2/memcached.conf ファイルで を変更または追加します。sasldb_path: /path.to/memcached.sasldb
sasldb_path: /path.to/memcached.sasldbCopy to Clipboard Copied! Toggle word wrap Toggle overflow - SASL データベースにアカウントを追加します。
saslpasswd2 -a memcached -c cacheuser -f /path.to/memcached.sasldb
~]# saslpasswd2 -a memcached -c cacheuser -f /path.to/memcached.sasldbCopy to Clipboard Copied! Toggle word wrap Toggle overflow - memcached のユーザーとグループがデータベースにアクセスできることを確認します。
chown memcached:memcached /path.to/memcached.sasldb
~]# chown memcached:memcached /path.to/memcached.sasldbCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/sysconfig/memcachedに-S値をOPTIONSに追加して、memcached で SASL サポートを有効にします。OPTIONS="-S"
OPTIONS="-S"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - memcached サーバーを再起動して、変更を適用します。
- SASL データベースで作成したユーザー名とパスワードを、お使いのアプリケーションの memcached クライアント設定に追加します。
- memcached クライアントとサーバー間の通信を stunnel で暗号化します。memcached は TLS をサポートしていないため、回避策は、memcached プロトコルの上に TLS を提供する stunnel などのプロキシーを使用することです。PSK (Pre Shared Keys)を使用するか、ユーザー証明書を使用するように stunnel を設定できます。証明書を使用する場合、認証されたユーザーのみがお使いの memcached サーバーにアクセスでき、トラフィックは暗号化されます。重要トンネルを使用して memcached にアクセスする場合は、サービスがローカルホストでのみリッスンしているか、ファイアウォールがネットワークから memcached ポートへのアクセスを阻止しているかを確認してください。詳細は、「stunnel の使用」 を参照してください。
4.4. ネットワークアクセスのセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
4.4.1. TCP Wrapper と xinetd を使用したサービスの保護 リンクのコピーリンクがクリップボードにコピーされました!
4.4.1.1. TCP Wrapper と接続バナー リンクのコピーリンクがクリップボードにコピーされました!
banner オプションを使用します。
/etc/banners/vsftpd と呼ばれ、以下の行が含まれます。
220-Hello, %c 220-All activity on ftp.example.com is logged. 220-Inappropriate use will result in your access privileges being removed.
220-Hello, %c
220-All activity on ftp.example.com is logged.
220-Inappropriate use will result in your access privileges being removed.
/etc/hosts.allow ファイルに追加します。
vsftpd : ALL : banners /etc/banners/
vsftpd : ALL : banners /etc/banners/
4.4.1.2. TCP Wrapper と攻撃警告 リンクのコピーリンクがクリップボードにコピーされました!
/etc/hosts.deny ファイルに以下の行を追加して、そのネットワークからの接続試行を拒否し、その試行を特別なファイルに記録します。
ALL : 206.182.68.0 : spawn /bin/echo `date` %c %d >> /var/log/intruder_alert
ALL : 206.182.68.0 : spawn /bin/echo `date` %c %d >> /var/log/intruder_alert
/etc/hosts.allow ファイルに配置します。
4.4.1.3. TCP Wrapper とロギングの強化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/hosts.deny に配置します。
in.telnetd : ALL : severity emerg
in.telnetd : ALL : severity emerg
4.4.2. リッスンしているポートの確認 リンクのコピーリンクがクリップボードにコピーされました!
開いているポートスキャンでの netstat の使用
root で以下のコマンドを入力して、ネットワークからの接続をリッスンしているポートを確認します。
-l オプションを使用して、リッスンしているサーバーソケットのみを表示します。
開いているポートスキャンでの ss の使用
UNCONN 状態は、UDP リスニングモードのポートを示します。
-6 オプションを使用します。
(-sT) は、TCP SYN スキャン (-sS) がオプションでない場合のデフォルトの TCP スキャンタイプです。-O オプションは、ホストのオペレーティングシステムを検出します。
netstat と ss を使用して開いている SCTP ポートのスキャン
root で以下のコマンドを入力します。
netstat -nl -A inet,inet6 | grep 2500
~]# netstat -nl -A inet,inet6 | grep 2500
sctp 0.0.0.0:2500 LISTEN
ss -an | grep 2500
~]# ss -an | grep 2500
sctp LISTEN 0 5 *:2500 *:*
4.4.3. ソースルーティングの無効化 リンクのコピーリンクがクリップボードにコピーされました!
accept_source_route オプションを使用すると、ネットワークインターフェイスが Strict Source Routing (SSR) または Loose Source Routing (LSR) のオプションが設定されたパケットを受け入れます。ソースルーティングされたパケットの受け入れは、sysctl の設定によって制御されます。SSR または LSR オプションが設定されたパケットをドロップするために、root で次のコマンドを発行します。
/sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
~]# /sbin/sysctl -w net.ipv4.conf.all.accept_source_route=0
/sbin/sysctl -w net.ipv4.conf.all.forwarding=0
~]# /sbin/sysctl -w net.ipv4.conf.all.forwarding=0
/sbin/sysctl -w net.ipv6.conf.all.forwarding=0
~]# /sbin/sysctl -w net.ipv6.conf.all.forwarding=0
/sbin/sysctl -w net.ipv4.conf.all.mc_forwarding=0
~]# /sbin/sysctl -w net.ipv4.conf.all.mc_forwarding=0
/sbin/sysctl -w net.ipv6.conf.all.mc_forwarding=0
~]# /sbin/sysctl -w net.ipv6.conf.all.mc_forwarding=0
/sbin/sysctl -w net.ipv4.conf.all.accept_redirects=0
~]# /sbin/sysctl -w net.ipv4.conf.all.accept_redirects=0
/sbin/sysctl -w net.ipv6.conf.all.accept_redirects=0
~]# /sbin/sysctl -w net.ipv6.conf.all.accept_redirects=0
/sbin/sysctl -w net.ipv4.conf.all.secure_redirects=0
~]# /sbin/sysctl -w net.ipv4.conf.all.secure_redirects=0
/sbin/sysctl -w net.ipv4.conf.all.send_redirects=0
~]# /sbin/sysctl -w net.ipv4.conf.all.send_redirects=0
0 の値に設定するようにしてください。新しいインターフェイスを追加するたびに ICMP リクエストの送信を自動的に無効にするには、次のコマンドを入力します。
/sbin/sysctl -w net.ipv4.conf.default.send_redirects=0
~]# /sbin/sysctl -w net.ipv4.conf.default.send_redirects=0
/etc/sysctl.conf ファイルを変更します。たとえば、すべてのインターフェイスですべての IPv4 ICMP リダイレクトパケットの受け入れを無効にするには、root ユーザーとして実行しているエディターで /etc/sysctl.conf ファイルを開き、以下の行を追加します。 net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.all.send_redirects=0
sysctl (8) を参照してください。ソースベースのルーティングとそのバリアントに関連するインターネットオプションの説明については、RFC791 を参照してください。
4.4.3.1. 逆方向パス転送 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレスのスプーフィングを防ぎ、DDoS 攻撃の可能性を低減するため、必要であると分からない限り、有効にすることが最適です。
-
rp_filter - 逆方向パス転送は、
rp_filterディレクティブによって有効になります。sysctl ユーティリティーを使用すると、実行中のシステムに変更を加えることができます。永続的な変更は、行を/etc/sysctl.confファイルに追加することで実行できます。rp_filterオプションは、カーネルに 3 つのモードのうち 1 つを選択するよう指示するために使用されます。一時的なグローバル変更を行うには、rootで以下のコマンドを入力します。sysctl -w net.ipv4.conf.default.rp_filter=integer sysctl -w net.ipv4.conf.all.rp_filter=integer
sysctl -w net.ipv4.conf.default.rp_filter=integer sysctl -w net.ipv4.conf.all.rp_filter=integerCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、integer は、以下のいずれかになります。0- ソースの検証がありません。1- RFC 3704 で定義された厳密なモード。2- RFC 3704 で定義された疎結合モード。
この設定は、以下のように net.ipv4.conf. interface .rp_filter コマンドを使用して、ネットワークインターフェイス ごとに上書きできます。sysctl -w net.ipv4.conf.interface.rp_filter=integer
sysctl -w net.ipv4.conf.interface.rp_filter=integerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記これらの設定を再起動後も保持するには、/etc/sysctl.confファイルを変更します。たとえば、すべてのインターフェイスのモードを変更するには、rootユーザーとして実行しているエディターで/etc/sysctl.confファイルを開き、以下の行を追加します。net.ipv4.conf.all.rp_filter=2
net.ipv4.conf.all.rp_filter=2Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
IPv6_rpfilter IPv6プロトコルの場合、firewalld デーモンはデフォルトで逆方向パス転送に適用されます。この設定は、/etc/firewalld/firewalld.confファイルで確認できます。IPv6_rpfilterオプションを設定することで、firewalld の動作を変更できます。逆方向パス転送のカスタム設定が必要な場合は、以下のように ip6tables コマンドを使用して、firewalld デーモン なし でこれを実行できます。このルールは、特にステートフルマッチングルールの前にすべてのトラフィックに適用されるように、raw/PREROUTING チェーンの先頭の近くに挿入される必要があります。iptables サービスおよび ip6tables サービスの詳細は、「ip6tables -t raw -I PREROUTING -m rpfilter --invert -j DROP
ip6tables -t raw -I PREROUTING -m rpfilter --invert -j DROPCopy to Clipboard Copied! Toggle word wrap Toggle overflow iptablesを使用した IP セットの設定および制御」 を参照してください。
パケット転送の有効化
root としてログインし、/etc/sysctl.conf ファイルの net.ipv4.ip_forward = 0 を読み取る行を以下のように変更します。
net.ipv4.ip_forward = 1
net.ipv4.ip_forward = 1
/etc/sysctl.conf ファイルから変更を読み込むには、以下のコマンドを入力します。
/sbin/sysctl -p
/sbin/sysctl -p
root で以下のコマンドを実行します。
/sbin/sysctl net.ipv4.ip_forward
/sbin/sysctl net.ipv4.ip_forward
1 を返すと、IP 転送が有効になります。0 を返す場合は、以下のコマンドを使用して手動でオンにできます。
/sbin/sysctl -w net.ipv4.ip_forward=1
/sbin/sysctl -w net.ipv4.ip_forward=1
4.4.3.2. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- インストールされているドキュメント
/usr/share/doc/kernel-doc-バージョン/Documentation/networking/ip-sysctl.txt: このファイルには、ディレクトリーで利用可能なファイルとオプションの完全なリストが含まれています。カーネルのドキュメントに初めてアクセスする前に、rootで以下のコマンドを入力します。yum install kernel-doc
~]# yum install kernel-docCopy to Clipboard Copied! Toggle word wrap Toggle overflow - オンラインドキュメントマルチホームネットワークの Ingress フィルターリングの説明については、RFC 3704 を参照してください。
4.5. DNSSEC を使用した DNS トラフィックのセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
4.5.1. DNS の概要 リンクのコピーリンクがクリップボードにコピーされました!
DNS クライアントが DNS ネームサーバーからの応答の整合性を認証およびチェックし、発信元を検証し、転送中に改ざんされているかどうかを判断できるようにします。
4.5.2. DNSSEC について リンクのコピーリンクがクリップボードにコピーされました!
HTTPS を使用して安全に接続する機能が提供されるようになりました。ただし、HTTPS Web サーバーに接続する前に、IP アドレスを直接入力しない限り、DNS ルックアップを実行する必要があります。これらの DNS ルックアップは安全 ではなく、認証がないため、中間者 攻撃の対象となります。つまり、DNS クライアントは、特定の DNS ネームサーバーから送られるように見える応答が本物であり、改ざんされていないことを確信できません。さらに重要なことに、再帰的ネームサーバーは、他のネームサーバーから取得したレコードが本物であることを確認できません。DNS プロトコルは、クライアントが中間者攻撃を受けないようにするためのメカニズムを提供していませんでした。DNSSEC は、DNS を使用してドメイン名を解決する際に認証および整合性チェックの欠如に対処するために導入されました。DNSSEC は、機密性の問題には対処しません。
DNS リソースレコードのデジタル署名や、DNS リゾルバーが信頼の階層チェーンを構築できるようにするなどの方法で公開鍵を配布することが含まれます。すべての DNS リソースレコードのデジタル署名が生成され、デジタル署名リソースレコード(RRSIG)としてゾーンに追加されます。ゾーンの公開鍵は、DNSKEY リソースレコードとして追加されます。階層的な連鎖を構築するために、DNSKEY のハッシュをDS(Delegation of Signing) リソースレコードとして親ゾーンで公開します。消極的事実の証明を容易にするために、NextSECure (NSEC) および NSEC3 リソースレコードが使用されます。DNSSEC 署名付きゾーンでは、各 リソースレコードセット (RRset) には対応する RRSIG リソースレコードがあります。子ゾーンへの委任に使用されるレコード (NS レコードおよび glue レコード) は署名されないことに注意してください。これらのレコードは子ゾーンに表示され、そこに署名されています。
.com の DS レコードに署名しています。ルートゾーンは、.com ネームサーバーの NS レコードおよび glue レコードも提供します。リゾルバーはこの委譲に従い、これらの委譲されたネームサーバーを使用して .com の DNSKEY レコードをクエリーします。取得した DNSKEY レコードのハッシュは、root ゾーンの DS レコードと一致する必要があります。その場合、リゾルバーは .com の取得した DNSKEY を信頼します。 .com ゾーンでは、RRSIG レコードは .com DNSKEY によって作成されます。このプロセスは、redhat.com など、.com 内の委譲についても同様に繰り返されます。この方法を使用すると、検証用 DNS リゾルバーは、通常の操作中に世界中から多くの DNSKEY を収集する間、1 つのルートキーでのみ設定する必要があります。暗号チェックに失敗した場合、リゾルバーはアプリケーションに SERVFAIL を返します。
DNS 応答を検出すると、アプリケーションに引き続き SERVFAIL エラーを返します。DNSSEC は、DNS サーバー(権威および再帰的)間のデータの整合性を保護します。これは、アプリケーションとリゾルバー間のセキュリティーを提供しません。したがって、アプリケーションにリゾルバーへの安全なトランスポートを提供することが重要です。これを実現する最も簡単な方法は、DNSSEC 対応のリゾルバーを localhost で実行し、/etc/resolv.conf で 127.0.0.1 を使用することです。または、リモート DNS サーバーへの VPN 接続を使用することもできます。
ホットスポットの問題について
DNS を乗っ取る傾向があります。「」VPN に接続するユーザーは、企業ネットワーク外に存在しないリソースを見つけるために、「内部のみ」 の DNS サーバーを使用することがよくあります。これには、ソフトウェアによる追加の処理が必要です。たとえば、dnssec-trigger を使用して、ホットスポットが DNS クエリーを乗っ取っているかどうかを検出でき、unbound は DNSSEC クエリーを処理するプロキシーネームサーバーとして機能できます。
DNSSEC 対応の再帰的リゾルバーの選択
unbound のいずれかを使用できます。いずれもデフォルトで DNSSEC を有効にし、DNSSEC root キーで設定されています。サーバーで DNSSEC を有効にするには、どちらのサーバーも機能しますが、ノートブックなどのモバイルデバイスでは、ローカルユーザーが動的に DNSSEC オーバーライドを再設定できるため、dnssec-trigger を使用する際にローカルユーザーが Hotspot に必要な DNSSEC オーバーライドを動的に再設定し、Libreswan を使用する場合は VPN 向けに を使用することが推奨されます。unbound デーモンは、サーバーとモバイルデバイスの両方で役立つ etc/unbound/*.d/ ディレクトリーにリストされている DNSSEC 例外のデプロイメントをさらにサポートします。
4.5.3. Dnssec-trigger について リンクのコピーリンクがクリップボードにコピーされました!
unbound が /etc/resolv.conf にインストールされ、設定されると、アプリケーションからの DNS クエリーはすべて unbound によって処理されます。dnssec-trigger は、トリガーされた場合にのみ unbound リゾルバーを再設定します。これは、ノートパソコンなど、異なる Wi-Fi ネットワークに接続するローミングクライアントマシンに主に適用されます。プロセスは以下のようになります。
- NetworkManager は、新しい
DNSサーバーがDHCP経由で取得されたときに dnssec-trigger を 「トリガー」 します。 - dnssec-trigger は、サーバーに対して多くのテストを実行し、DNSSEC を適切にサポートしているかどうかを判断します。
- その場合、dnssec-trigger は
unboundを再設定し、そのDNSサーバーをすべてのクエリーのフォワーダーとして使用します。 - テストが失敗した場合、dnssec-trigger は新しい
DNSサーバーを無視し、いくつかの利用可能なフォールバック方法を試します。 - 無制限のポート 53 (
UDPおよびTCP)が使用可能であると判断した場合、フォワーダーを使用せずに完全な再帰DNSサーバーになるようにunboundに指示します。 - これが不可能な場合(たとえば、ポート 53 がネットワークの
DNSサーバー自体に到達する場合を除きすべてについてファイアウォールによってブロックされている場合)は、DNSを使用してポート 80 に到達するか、またはTLSでポート 443 にカプセル化されたDNSを使用しようとします。ポート 80 および 443 でDNSを実行しているサーバーは、/etc/dnssec-trigger/dnssec-trigger.confで設定できます。コメントアウトされた例は、デフォルトの設定ファイルで利用できるはずです。 - これらのフォールバック方法も失敗すると、dnssec-trigger は、DNSSEC を完全にバイパスする安全でない方法で動作するか、新しい
DNSクエリーを試行しないが、キャッシュ内にすでに存在するすべてのものに応答する 「cache only」 モードで実行することを提案します。
dnssec-trigger デーモンは、10 秒ごとに DNSSEC リゾルバーのプローブを続行します。dnssec-trigger グラフィカルユーティリティーの使用方法は、「Dnssec-trigger の使用」 を参照してください。
4.5.4. VPN が提供されるドメインサーバーおよびネームサーバー リンクのコピーリンクがクリップボードにコピーされました!
unbound なdnssec-trigger と NetworkManager の組み合わせは、VPN ソフトウェアが提供するドメインおよびネームサーバーを適切にサポートできます。VPN トンネルが起動すると、受信したドメイン名のすべてのエントリーに対してローカルの unbound キャッシュがフラッシュされるため、ドメイン名内の名前に対するクエリーは VPN を使用して到達した内部ネームサーバーから新たにフェッチされます。VPN トンネルが終了すると、バインド されていないキャッシュが再度フラッシュされ、ドメインに対するクエリーが以前に取得したプライベート IP アドレスではなくパブリック IP アドレスを返すようにします。「接続が提供されるドメインの DNSSEC 検証の設定」を参照してください。
4.5.5. 推奨される命名プラクティス リンクのコピーリンクがクリップボードにコピーされました!
host.example.com などの DNS 内のマシンに使用される完全修飾ドメイン 名(FQDN)と一致することを推奨します。
.yourcompanyなど)をパブリックレジスターに追加することがあります。このため、Red Hat では、プライベートネットワーク上であっても委任されていないドメイン名を使用しないことを強く推奨しています。その結果、ネットワークリソースは利用できなくなります。また、委任されていないドメイン名を使うと、DNSSEC の実装および維持がより困難になります。これは、ドメイン名の競合が DNSSEC 検証の有効化に手動の設定ペナルティーを必要とするためです。この問題の詳細は、ドメイン名の衝突に関する ICANN のよくある質問を参照してください。
4.5.6. トラストアンカーについて リンクのコピーリンクがクリップボードにコピーされました!
DNS 名と公開鍵(または公開鍵のハッシュ)で設定されます。これは、base 64 でエンコードされたキーとして表されます。DNS レコードの検証および認証に使用できる公開鍵を含む情報を交換する手段である点で、証明書と似ています。RFC 4033 は、トラストアンカーを設定された DNSKEY RR または DNSKEY RR の DS RR ハッシュと定義しています。検証用セキュリティー対応リゾルバーは、この公開鍵またはハッシュを、署名された DNS 応答への認証チェーンを構築するための開始点として使用します。一般に、検証用リゾルバーは、DNS プロトコルの外部にある安全な手段または信頼できる手段を介してトラストアンカーの初期値を取得する必要があります。トラストアンカーの存在はまた、リゾルバーがトラストアンカーが指すゾーンが署名されていることを想定すべきことを意味します。
4.5.7. DNSSEC のインストール リンクのコピーリンクがクリップボードにコピーされました!
4.5.7.1. unbound のインストール リンクのコピーリンクがクリップボードにコピーされました!
DNS を検証するには、DNS リゾルバーを unbound (または bind )にインストールする必要があります。モバイルデバイスに dnssec-trigger をインストールするだけで済みます。サーバーの場合は、サーバーが置かれている場所(LAN またはインターネット)によってはローカルドメインの転送設定が必要になる場合がありますが、unbound で十分です。dnssec-trigger は現在、グローバルパブリック DNS ゾーンでのみ役立ちます。NetworkManager、dhclient、VPN アプリケーションは、多くの場合、ドメインリスト(およびネームサーバーリスト)を自動的に収集できますが、dnssec-trigger や unbound は収集できません。
unbound をインストールするには、root ユーザーとして次のコマンドを入力します。
yum install unbound
~]# yum install unbound
4.5.7.2. unbound の稼働確認 リンクのコピーリンクがクリップボードにコピーされました!
unbound デーモンが実行中かどうかを確認するには、次のコマンドを入力します。
systemctl status unbound
~]$ systemctl status unbound
unbound.service - Unbound recursive Domain Name Server
Loaded: loaded (/usr/lib/systemd/system/unbound.service; disabled)
Active: active (running) since Wed 2013-03-13 01:19:30 CET; 6h ago
バインド されていないサービスが実行されていない場合に、unbound を Active: inactive (dead) として報告します。
4.5.7.3. unbound の起動 リンクのコピーリンクがクリップボードにコピーされました!
unbound デーモンを起動するには、root ユーザーとして次のコマンドを入力します。
systemctl start unbound
~]# systemctl start unbound
unbound が起動するようにします。
systemctl enable unbound
~]# systemctl enable unbound
unbound デーモンは、以下のディレクトリーを使用したローカルデータまたはオーバーライドの設定を許可します。
/etc/unbound/conf.dディレクトリーは、特定のドメイン名の設定を追加するために使用されます。これは、ドメイン名のクエリーを特定のDNSサーバーにリダイレクトするために使用されます。これは、企業の WAN 内にのみ存在するサブドメインによく使われます。/etc/unbound/keys.dディレクトリーは、特定のドメイン名のトラストアンカーを追加するために使用されます。これは、内部のみの名前が DNSSEC 署名されているが、信頼のパスを構築するための公開されている DS レコードがない場合に必要です。もう一つのユースケースは、あるドメインの内部バージョンが、企業 WAN の外で一般に利用可能な名前とは異なる DNSKEY を使用して署名されている場合になります。/etc/unbound/local.dディレクトリーは、特定のDNSデータをローカルオーバーライドとして追加するために使用されます。これは、ブラックリストを作成したり、手動オーバーライドを作成したりするために使用できます。このデータはunboundによってクライアントに返されますが、DNSSEC 署名としてマークされません。
unbound.conf (5) の man ページを参照してください。
4.5.7.4. Dnssec-trigger のインストール リンクのコピーリンクがクリップボードにコピーされました!
dnssec-triggerd として実行されます。dnssec-trigger をインストールするには、root ユーザーとして次のコマンドを入力します。
yum install dnssec-trigger
~]# yum install dnssec-trigger
4.5.7.5. dnssec-trigger デーモンが動作しているかどうかの確認 リンクのコピーリンクがクリップボードにコピーされました!
dnssec-triggerd が実行されているかどうかを確認するには、次のコマンドを入力します。
systemctl status dnssec-triggerd
~]$ systemctl status dnssec-triggerd
systemctl status dnssec-triggerd.service
dnssec-triggerd.service - Reconfigure local DNS(SEC) resolver on network change
Loaded: loaded (/usr/lib/systemd/system/dnssec-triggerd.service; enabled)
Active: active (running) since Wed 2013-03-13 06:10:44 CET; 1h 41min ago
dnssec-triggerd デーモンが実行していない場合は、systemctl status コマンドは dnssec-triggerd を Active: inactive (dead) として報告します。現行セッションで起動するには、root ユーザーとして次のコマンドを入力します。
systemctl start dnssec-triggerd
~]# systemctl start dnssec-triggerd
dnssec-triggerd が起動するようにします。
systemctl enable dnssec-triggerd
~]# systemctl enable dnssec-triggerd
4.5.8. Dnssec-trigger の使用 リンクのコピーリンクがクリップボードにコピーされました!
resolv.conf は 127.0.0.1 を指します。Hotspot Sign-On パネルで をクリックすると、これが変更されます。DNS サーバーは NetworkManager からクエリーされ、resolv.conf に配置されます。これで、Hotspot のサインオンページで認証ができるようになりました。アンカーアイコンには、DNS クエリーが安全ではないことを警告するために、大きな赤い感嘆符が表示されます。認証されると、dnssec-trigger は自動的にこれを検出し、セキュアモードに戻す必要がありますが、場合によってはユーザーではなく、ユーザーは Reprobe を選択して手動でこれを行う必要があります。
resolv.conf ファイルへの変更について unbound に通知します。
4.5.9. DNSSEC における dig の使用 リンクのコピーリンクがクリップボードにコピーされました!
DNS ユーティリティー nslookup および host は廃止されているため、使用しないでください。
+dnssec がコマンドに追加されます。以下に例を示します。
unbound サーバーは、上部の flags: セクションの ad ビットを返して、データが DNSSEC 認証されていることを示しています。
+cd オプションを指定して DNSSEC チェックを無効にすることができます。
unbound デーモンはこれらのエラーを以下のように syslog に記録します。 Aug 22 22:04:52 laptop unbound: [3065:0] info: validation failure badsign-a.test.dnssec-tools.org. A IN
Aug 22 22:04:52 laptop unbound: [3065:0] info: validation failure badsign-a.test.dnssec-tools.org. A IN
4.5.10. Dnssec-trigger の Hotspot 検出インフラストラクチャーのセットアップ リンクのコピーリンクがクリップボードにコピーされました!
- インターネット上で公開されているマシンに Web サーバーをセットアップします。Red Hat Enterprise Linux 7 システム管理者ガイドの Web Servers の章を参照してください。
- サーバーを実行したら、既知のコンテンツを含む static ページを公開します。ページは有効な HTML ページである必要はありません。たとえば、文字列
OKのみを含むhotspot.txtという名前のプレーンテキストファイルを使用できます。サーバーがexample.comにあり、Web サーバーのdocument_root/static/サブディレクトリーにhotspot.txtファイルをパブリッシュした場合、静的 Web ページのアドレスはexample.com/static/hotspot.txtになります。Red Hat Enterprise Linux 7 システム管理者のガイドの Web サーバー の章の DocumentRoot ディレクティブを参照してください。 /etc/dnssec-trigger/dnssec-trigger.confファイルに以下の行を追加します。このコマンドは、url: "http://example.com/static/hotspot.txt OK"
url: "http://example.com/static/hotspot.txt OK"Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP(ポート 80)を使用してプローブされる URL を追加します。最初の部分は、解決される URL とダウンロードされるページです。コマンドの 2 番目の部分は、ダウンロードされた Web ページが含むと予想されるテキスト文字列です。
dnssec-trigger.conf (8)を参照してください。
4.5.11. 接続が提供されるドメインの DNSSEC 検証の設定 リンクのコピーリンクがクリップボードにコピーされました!
unbound に自動的に追加されます。デフォルトでは、unbound に追加されたすべての転送ゾーンは DNSSEC 検証済みです。
/etc/dnssec.conf の validate_connection_provided_zones 変数を変更します。root ユーザーとして、以下のように行を開いて編集します: validate_connection_provided_zones=no
validate_connection_provided_zones=no
4.5.11.1. Wi-Fi 提供ドメインの DNSSEC 検証の設定 リンクのコピーリンクがクリップボードにコピーされました!
/etc/dnssec.conf の add_wifi_provided_zones 変数を変更します。root ユーザーとして、以下のように行を開いて編集します: add_wifi_provided_zones=yes
add_wifi_provided_zones=yes
unbound に追加をオンにすると、以下のようなセキュリティー 上 の影響が生じる可能性があります。
- Wi-Fi アクセスポイントは、権限を持たない
DHCPを介してドメインを意図的に提供し、すべてのDNSクエリーをDNSサーバーにルーティングできます。 - 正引きゾーンの DNSSEC 検証が オフ になっている場合、Wi-Fi が提供する
DNSサーバーは、知らなくても提供されたドメインからドメイン名のIPアドレスをスプーフィングできます。
4.5.12. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
4.5.12.1. インストールされているドキュメント リンクのコピーリンクがクリップボードにコピーされました!
dnssec-trigger (8)man ページ -dnssec-triggerd、dnssec-trigger-control、dnssec-trigger-panel のコマンドオプションを説明しています。dnssec-trigger.conf (8)man ページ -dnssec-triggerdの設定オプションを説明しています。unbound (8)man ページ:unboundのコマンドオプションを説明しています。これは、DNS検証リゾルバーです。unbound.conf (5)man ページ -unboundの設定方法に関する情報が含まれています。resolv.conf (5)man ページ - リゾルバールーチンが読み込む情報が含まれています。
4.5.12.2. オンラインドキュメント リンクのコピーリンクがクリップボードにコピーされました!
- http://tools.ietf.org/html/rfc4033
- RFC 4033 DNS Security Introduction and Requirements.
- http://www.dnssec.net/
- DNSSEC に関する多くのリソースへのリンクがある Web サイト。
- http://www.dnssec-deployment.org/
- 米国国土安全保障省が後援する DNSSEC デプロイメントイニシアチブには、多くの DNSSEC 情報が含まれており、DNSSEC のデプロイメントに関する問題を議論するためのメーリングリストもあります。
- http://www.internetsociety.org/deploy360/dnssec/community/
- DNSSEC のデプロイメントを刺激し、調整するための Internet Society の 「Deploy 360」 イニシアチブは、世界中のコミュニティーと DNSSEC 活動を見つけるための優れたリソースです。
- http://www.unbound.net/
- 本書には、
バインドされていないDNSサービスに関する一般的な情報が記載されています。 - http://www.nlnetlabs.nl/projects/dnssec-trigger/
- 本書には、dnssec-trigger に関する一般的な情報が記載されています。
4.6. Libreswan を使った仮想プライベートネットワーク (VPN) の保護 リンクのコピーリンクがクリップボードにコピーされました!
IPsec プロトコルを使用して、仮想プライベートネットワーク (VPN)を設定できます。Libreswan は、Openswan アプリケーションの継続であり、Openswan ドキュメントの多くの例は Libreswan と相互に置き換え可能です。NetworkManager IPsec プラグインは、NetworkManager-libreswan と呼ばれます。GNOME Shell をお使いの方は、NetworkManager-libreswan を依存関係に持つ NetworkManager-libreswan-gnome パッケージをインストールする必要があります。NetworkManager-libreswan-gnome パッケージは、オプションチャネルからのみ利用可能であることに注意してください。Enabling Supplementary and Optional Repositoriesを参照してください。
IPsec プロトコル自体は、Internet Key Exchange (IKE)プロトコルを使用して設定されます。IPsec と IKE は同義語です。IPsec VPN は、IKE VPN、IKEv2 VPN、XAUTH VPN、Cisco VPN、または IKE/IPsec VPN とも呼ばれます。Level 2 Tunneling Protocol (L2TP)も使用する IPsec VPN のバリアントは、通常 L2TP/IPsec VPN と呼ばれます。これには、Optional チャンネル xl2tpd アプリケーションが必要です。
IKE 実装です。IKE バージョン 1 および 2 は、ユーザーレベルのデーモンとして実装されます。IKE プロトコル自体も暗号化されています。IPsec プロトコルは Linux カーネルで実装され、Libreswan は、VPN トンネル設定を追加および削除するようにカーネルを設定します。
IKE プロトコルは UDP ポート 500 および 4500 を使用します。IPsec プロトコルは、プロトコル番号 50 を持つ Encapsulated Security Payload (ESP)とプロトコル番号 51 の Authenticated Header (AH)の 2 つの異なるプロトコルで設定されます。AH プロトコルの使用は推奨されません。AH のユーザーは、null 暗号化で ESP に移行することが推奨されます。
IPsec プロトコルには、Tunnel Mode (デフォルト)と Transport Mode の 2 つの異なる操作モードがあります。IKE を使用せずに IPsec を使用してカーネルを設定できます。これは 手動キー設定 と呼ば れます。ip xfrm コマンドを使用して手動キーを設定することは可能ですが、セキュリティー上の理由から、これは強く推奨されません。Libreswan は、netlink を使用して Linux カーネルとインターフェイスします。Linux カーネルでパケットの暗号化と復号が行われます。
IKE/IPsec VPN は、Red Hat Enterprise Linux 7 での使用が推奨される唯一の VPN 技術です。その他の VPN 技術は、そのリスクを理解せずに使用しないでください。
4.6.1. Libreswan のインストール リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
yum install libreswan
~]# yum install libreswan
yum info libreswan
~]$ yum info libreswan
systemctl stop ipsec rm /etc/ipsec.d/*db
~]# systemctl stop ipsec
~]# rm /etc/ipsec.d/*db
root で以下のコマンドを入力します。
ipsec initnss
~]# ipsec initnss
Initializing NSS database
ipsec デーモンを起動するには、root で以下のコマンドを実行します。
systemctl start ipsec
~]# systemctl start ipsec
root で以下のコマンドを実行します。
systemctl enable ipsec
~]# systemctl enable ipsec
ipsec サービスを許可します。ファイアウォールと特定のサービスの通過許可についての詳細は、5章ファイアウォールの使用 を参照してください。Libreswan では、ファイアウォールで以下のパケットを許可する必要があります。
Internet Key Exchange(IKE)プロトコルのUDPポート 500 および 4500Encapsulated Security Payload(ESP)IPsecパケットのプロトコル 50Authenticated Header(AH)IPsecパケットのプロトコル 51 (一般的ではありません)
IPsec VPN を設定する 3 つの例を示します。最初の例は、2 つのホストを接続し、安全に通信するためのものです。2 つ目の例では、2 つのサイトを接続して 1 つのネットワークを形成します。3 番目の例は、このコンテキストでは ロードウォリアー と呼ばれるリモートユーザーをサポートすることです。
4.6.2. Libreswan を使用した VPN 設定の作成 リンクのコピーリンクがクリップボードにコピーされました!
- Pre-Shared Keys (PSK) は、最も簡単な認証メソッドです。PSK はランダムな文字で設定されており、長さが 20 文字以上になります。FIPS モードでは、PSK が、使用する整合性アルゴリズムにより、最低強度の要件を満たす必要があります。PSK の値は 64 文字以上にすることが推奨されます。
- Raw RSA 鍵は、静的なホスト間またはサブネット間の
IPsec設定で一般的に使用されます。ホストは、相互の公開 RSA 鍵を使用して手動で設定します。この方法は、数十以上のホストがすべて互いにIPsecトンネルを設定する必要がある場合、適切にスケーリングされません。 - X.509 証明書は、共通の
IPsecゲートウェイに接続する必要があるホストが多数ある大規模なデプロイメントで一般的に使用されます。中央の 認証局 (CA) は、ホストまたはユーザーの RSA 証明書の署名に使用されます。この中央 CA は、個別のホストまたはユーザーの取り消しを含む、信頼のリレーを行います。 - NULL 認証は、認証なしでメッシュの暗号化を取得するために使用されます。これは、パッシブ攻撃は防ぎますが、アクティブ攻撃は防ぎません。ただし、
IKEv2は非対称認証メソッドを許可するため、NULL 認証は、インターネットスケール Opportunistic IPsec にも使用できます。この場合、クライアントはサーバーを認証しますが、サーバーはクライアントを認証しません。このモデルは、TLS(https:// websites としても知られている)を使用してセキュアな Web サイトと似ています。
4.6.3. Libreswan を使用したホスト間 VPN の作成 リンクのコピーリンクがクリップボードにコピーされました!
IPsec VPN を作成するように設定するには、両ホスト(「 『左』 」 および 「 『右』 」の)で以下のコマンドを root として入力し、新しい生の RSA 鍵ペアを作成します。
ipsec newhostkey --output /etc/ipsec.d/hostkey.secrets
~]# ipsec newhostkey --output /etc/ipsec.d/hostkey.secrets
Generated RSA key pair with CKAID 14936e48e756eb107fa1438e25a345b46d80433f was stored in the NSS database
root として発行します。
ipsec showhostkey --left --ckaid 14936e48e756eb107fa1438e25a345b46d80433f
~]# ipsec showhostkey --left --ckaid 14936e48e756eb107fa1438e25a345b46d80433f
# rsakey AQPFKElpV
leftrsasigkey=0sAQPFKElpV2GdCF0Ux9Kqhcap53Kaa+uCgduoT2I3x6LkRK8N+GiVGkRH4Xg+WMrzRb94kDDD8m/BO/Md+A30u0NjDk724jWuUU215rnpwvbdAob8pxYc4ReSgjQ/DkqQvsemoeF4kimMU1OBPNU7lBw4hTBFzu+iVUYMELwQSXpremLXHBNIamUbe5R1+ibgxO19l/PAbZwxyGX/ueBMBvSQ+H0UqdGKbq7UgSEQTFa4/gqdYZDDzx55tpZk2Z3es+EWdURwJOgGiiiIFuBagasHFpeu9Teb1VzRyytnyNiJCBVhWVqsB4h6eaQ9RpAMmqBdBeNHfXwb6/hg+JIKJgjidXvGtgWBYNDpG40fEFh9USaFlSdiHO+dmGyZQ74Rg9sWLtiVdlH1YEBUtQb8f8FVry9wSn6AZqPlpGgUdtkTYUCaaifsYH4hoIA0nku4Fy/Ugej89ZdrSN7Lt+igns4FysMmBOl9Wi9+LWnfl+dm4Nc6UNgLE8kZc+8vMJGkLi4SYjk2/MFYgqGX/COxSCPBFUZFiNK7Wda0kWea/FqE1heem7rvKAPIiqMymjSmytZI9hhkCD16pCdgrO3fJXsfAUChYYSPyPQClkavvBL/wNK9zlaOwssTaKTj4Xn90SrZaxTEjpqUeQ==
ipsec showhostkey --list
~]# ipsec showhostkey --list
< 1 > RSA keyid: AQPFKElpV ckaid: 14936e48e756eb107fa1438e25a345b46d80433f
/etc/ipsec.d/*.db にある 「NSS データベース」 内に保存されます。
leftrsasigkey= と rightrsasigkey= の行を /etc/ipsec.d/ ディレクトリーにあるカスタム設定ファイルに追加します。
root で実行されているエディターを使用して、以下の形式で適切な名前でファイルを作成します。
/etc/ipsec.d/my_host-to-host.conf
/etc/ipsec.d/my_host-to-host.conf
IP アドレスが事前に認識されていないことを意味する場合には、モバイルクライアントでは %defaultroute を IP アドレスとして使用します。これにより、動的 IP アドレスが自動的に選択されます。受信モバイルホストからの接続を受け入れる静的サーバーホストで、IP アドレスに %any を使用してモバイルホストを指定します。
leftrsasigkey 値が 「左」 のホストから取得され、rightrsasigkey 値が 「右」 のホストから取得されていることを確認します。leftckaid と rightckaid を使用する場合も同じことが当てはまります。
ipsec を再起動して、新しい設定を読み取り、システムの起動時に開始するように設定されている場合には、トンネルが確立されていることを確認します。
systemctl restart ipsec
~]# systemctl restart ipsec
auto=start オプションを使用する場合は、IPsec トンネルを数秒以内に確立する必要があります。root で以下のコマンドを入力して、トンネルを手動でロードおよび起動できます。
ipsec auto --add mytunnel ipsec auto --up mytunnel
~]# ipsec auto --add mytunnel
~]# ipsec auto --up mytunnel
4.6.3.1. Libreswan を使用したホスト間 VPN の検証 リンクのコピーリンクがクリップボードにコピーされました!
IKE ネゴシエーションは UDP ポート 500 および 4500 で行われます。IPsec パケットは、Encapsulated Security Payload (ESP)パケットとして表示されます。ESP プロトコルにはポートがありません。VPN 接続が NAT ルーターを通過する必要がある場合、ESP パケットはポート 4500 の UDP パケットにカプセル化されます。
root で以下の形式のコマンドを実行します。
IPsec と予期せず対話します。送信される暗号化されたパケットのみが表示され、送信されるプレーンテキストパケットは表示されません。暗号化された着信パケットと、復号化された着信パケットは表示されます。可能な場合は、エンドポイント自体ではなく、2 つのマシン間のルーターで tcpdump を実行します。Virtual Tunnel Interface (VTI)を使用する場合、物理インターフェイスの tcpdump は ESP パケットを表示し、VTI インターフェイスの tcpdump にはクリアテキストトラフィックが表示されます。
root で以下のコマンドを入力します。
ipsec whack --trafficstatus
~]# ipsec whack --trafficstatus
006 #2: "mytunnel", type=ESP, add_time=1234567890, inBytes=336, outBytes=336, id='@east'
4.6.4. Libreswan を使用したサイト間の VPN の設定 リンクのコピーリンクがクリップボードにコピーされました!
IPsec VPN を作成し、2 つのネットワークを結合するために、1 つ以上のサブネットからのトラフィックが通過できるように設定された 2 つのホスト、エンドポイントの間に IPsec トンネルが作成されます。したがって、これらはネットワークのリモート部分へのゲートウェイと見なすことができます。サイト間の VPN の設定は、設定ファイル内で複数のネットワークまたはサブネットを指定する必要がある点のみが、ホスト間の VPN とは異なります。
IPsec VPN を作成するように Libreswan を設定するには、最初に 「Libreswan を使用したホスト間 VPN の作成」 の説明に従ってホスト間 IPsec VPN を設定してから、ファイルを /etc/ipsec.d/my_site-to-site.conf などの適切な名前のファイルにコピーまたは移動します。root でエディターを使用して、以下のようにカスタム設定ファイル /etc/ipsec.d/my_site-to-site.conf を編集します。
root で以下のコマンドを使用して、すべての接続を手動でロードして開始します。
ipsec auto --add mysubnet
~]# ipsec auto --add mysubnet
ipsec auto --add mysubnet6
~]# ipsec auto --add mysubnet6
ipsec auto --up mysubnet6
~]# ipsec auto --up mysubnet6
003 "mytunnel" #1: received Vendor ID payload [FRAGMENTATION]
117 "mysubnet" #2: STATE_QUICK_I1: initiate
004 "mysubnet" #2: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP=>0x06fe2099 <0x75eaa862 xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=none DPD=none}
4.6.4.1. Libreswan を使用したサイト間 VPN の検証 リンクのコピーリンクがクリップボードにコピーされました!
4.6.5. Libreswan を使ったサイト間シングルトンネル VPN の設定 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレスではなく内部 IP アドレスを使用して相互に通信する必要があります。これは、単一のトンネルを使用して実現することができます。ホスト名 west の左側のホストに、内部 IP アドレスが 192.0.1.254 で、ホスト名が east の正しいホストの内部 IP アドレスが 192.0. 2.254 の場合には、単一のトンネルを使用して以下の設定を両方のサーバーの /etc/ipsec.d/myvpn.conf ファイルに保存します。
4.6.6. Libreswan を使用したサブネット押し出しの設定 リンクのコピーリンクがクリップボードにコピーされました!
IPsec はハブアンドスポークアーキテクチャーにデプロイされます。各リーフノードには、より大きな範囲の一部である IP 範囲があります。リーフはハブを介して相互に通信します。これは サブネットの押出 と呼ばれます。
例4.2 単純なサブネット押し出しセットアップの設定
8 と、より小さな /24 サブネットを使用する 2 つのブランチを使用して、ヘッドオフィスを設定します。
4.6.7. IKEv2 リモートアクセス VPN Libreswan の設定 リンクのコピーリンクがクリップボードにコピーされました!
IP アドレスを動的に割り当てられたモバイルクライアントを持つ移動ユーザーです。これらは証明書を使用して認証されます。古い IKEv1 XAUTH プロトコルを使用する必要がないように、次の例では IKEv2 を使用しています。
left=1.2.3.4- 1.2.3.4 の値は、サーバーの実際の IP アドレスまたはホスト名を指定します。
leftcert=vpn-server.example.com- このオプションは、証明書をインポートする際に使用されたそのフレンドリーネームまたはニックネームを参照する証明書を指定します。通常、名前は
.p12ファイルの形式で PKCS #12 証明書バンドルの一部として生成されます。詳細は、pkcs12 (1)およびpk12util (1)の man ページを参照してください。
auto=start- このオプションを使用すると、ユーザーは
ipsecシステムサービスが開始されるたびに VPN に接続できるようになります。後で接続を確立する場合は、auto=addに置き換えます。
4.6.8. X.509 を使用した IKEv1 リモートアクセス VPN Libreswan および XAUTH の設定 リンクのコピーリンクがクリップボードにコピーされました!
IPsec 拡張機能を使用して接続を確立する際に、ローミング VPN クライアントに IP アドレスと DNS 情報をネイティブに割り当てる方法を提供します。拡張認証 (XAUTH) は、PSK または X.509 証明書を使用してデプロイすることができます。X.509 を使用したデプロイの方がより安全です。クライアント証明書は、証明書失効リストまたは オンライン証明書ステータスプロトコル (OCSP) により取り消すことができます。X.509 証明書を使用すると、個々のクライアントがサーバーになりすますことはできません。グループパスワードとも呼ばれる PSK を使用すると、これは理論的には可能です。
xauthby=pam- これは、
/etc/pam.d/plutoの設定を使用してユーザーを認証します。Pluggable Authentication Modules (PAM) は、さまざまなバックエンドを単独で使用するように設定できます。システムアカウントのユーザーパスワードスキーム、LDAP ディレクトリー、RADIUS サーバー、またはカスタムパスワード認証モジュールを使用できます。詳細は、Using Pluggable Authentication Modules (PAM) の章を参照してください。 xauthby=file- これは
/etc/ipsec.d/passwd設定ファイルを使用します(/etc/ipsec.d/nsspasswordファイルと混同しないでください)。このファイルのフォーマットは Apache.htpasswdファイルと似ており、Apache htpasswd コマンドを使用してこのファイルのエントリーを作成できます。ただし、ユーザー名とパスワードの後に、使用されるIPsec接続の接続名を指定して 3 番目の列が必要になります。たとえば、conn remoteusersを使用してユーザーを削除するために VPN を提供する場合、パスワードファイルのエントリーは以下のようになります。user1:$apr1$MIwQ3DHb$1I69LzTnZhnCT2DPQmAOK.:remoteusers
user1:$apr1$MIwQ3DHb$1I69LzTnZhnCT2DPQmAOK.:remoteusersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記htpasswd コマンドを使用する場合、各行の user:password 部分の後に接続名を手動で追加する必要があります。 xauthby=alwaysok- サーバーは常に、XAUTH ユーザーとパスワードの組み合わせが正しいふりをします。クライアントは引き続き、ユーザー名とパスワードを指定しなければなりませんが、サーバーはこれらを無視します。これは、ユーザーがすでに X.509 証明書によって識別されている場合、または XAUTH バックエンドを必要とせずに VPN をテストする場合にのみ使用されるべきものです。
xauthfail が hard ではなく soft に設定されている場合、認証の失敗は無視され、VPN はユーザーが適切に認証されたかのように設定されます。カスタムアップダウンスクリプトを使用して、環境変数 XAUTH_FAILED をチェックすることができます。このようなユーザーは、たとえば iptables DNAT を使用して、ウォードガーンにリダイレクトできます。ここで、管理者に問い合わせたり、サービスの有料サブスクリプションを更新したりできます。「」
modecfgdomain 値と DNS エントリーを使用して、指定されたドメインのクエリーをこれらの指定されたネームサーバーにリダイレクトします。これにより、ローミングユーザーは内部 DNS 名を使用して内部専用リソースにアクセスすることができます。IKEv2 は modecfgdomains と modecfgdns を使用して、ドメイン名とネームサーバー IP アドレスのコンマ区切りリストをサポートしますが、IKEv1 プロトコルは 1 つのドメイン名のみをサポートし、libreswan は最大 2 つのネームサーバー IP アドレスのみをサポートすることに注意してください。オプションで、バナーテキストを VPN クライアントに送信するには、modecfgbanner オプションを使用します。
leftsubnet が 0.0.0.0/0 ではない場合には、スプリットトンネリング設定要求はクライアントに自動的に送信されます。たとえば、leftsubnet=10.0.0.0/8 を使用する場合、VPN クライアントは VPN 経由で 10.0.0.0/8 のトラフィックのみを送信します。
xauthby=file- 管理者がパスワードを生成し、
/etc/ipsec.d/passwdファイルに保存しました。 xauthby=pam- パスワードは、
/etc/pam.d/plutoファイルの PAM 設定で指定された場所で取得されます。 xauthby=alwaysok- パスワードはチェックされず、常に受け入れられます。このオプションは、テスト目的や、xauth のみのクライアントの互換性を確保したい場合に使用します。
関連情報
4.6.9. 量子コンピューターに対する保護の使用 リンクのコピーリンクがクリップボードにコピーされました!
ppk=yes を追加します。PPK が必要な場合は ppk=insist を追加します。次に、各クライアントには、帯域外で通信する (および可能であれば量子攻撃に対して安全な) シークレット値を持つ PPK ID を付与できます。PPK はランダム性において非常に強力で、辞書の単語は使用しません。PPK ID および PPK データ自体は ipsec.secrets に保存されます。以下に例を示します。
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
@west @east : PPKS "user1" "thestringismeanttobearandomstr"
PPKS オプションは、静的な PPK を参照します。ワンタイムパッドベースのダイナミック PPK を使用する実験的な関数があります。各接続では、ワンタイムパッドの新しい部分が PPK として使用されます。これを使用すると、ファイル内の動的な PPK の部分がゼロで上書きされ、再利用を防ぐことができます。複数のタイムパッドマテリアルが残っていないと、接続は失敗します。詳細は、man ページの ipsec.secrets (5) を参照してください。
4.6.10. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
ipsec デーモンに関するその他のリソースを提供します。
4.6.10.1. インストールされているドキュメント リンクのコピーリンクがクリップボードにコピーされました!
- man ページの
ipsec (8)-ipsecのコマンドオプションが説明されています。 - man ページの
ipsec.conf (5)-ipsecの設定に関する情報が記載されています。 - man ページの
ipsec.secrets (5)-ipsec.secretsファイルの形式が説明されています。 - man ページの
ipsec_auto (8)- 鍵の自動交換を使用して確立された LibreswanIPsec接続を操作する auto コマンドラインクライアントの使用方法が説明されています。 - man ページの
ipsec_rsasigkey (8)- RSA 署名鍵の生成に使用されるツールが説明されています。 /usr/share/doc/libreswan-version/
4.6.10.2. オンラインドキュメント リンクのコピーリンクがクリップボードにコピーされました!
- https://libreswan.org
- アップストリームプロジェクトの Web サイトです。
- https://libreswan.org/wiki
- Libreswan プロジェクトの Wiki です。
- https://libreswan.org/man/
- Libreswan に関する全 man ページ
- NIST Special Publication 800-77: Guide to IPsec VPNs
- IPsec に基づくセキュリティーサービスの実装に関する組織への実用的なガイダンス。
4.7. OpenSSL の使用 リンクのコピーリンクがクリップボードにコピーされました!
openssl list-public-key-algorithms
~]$ openssl list-public-key-algorithms
4.7.1. 暗号鍵の作成および管理 リンクのコピーリンクがクリップボードにコピーされました!
openssl genpkey -algorithm RSA -out privkey.pem
~]$ openssl genpkey -algorithm RSA -out privkey.pem
rsa_keygen_bits:numbits— 生成されたキーのビット数。指定されていない場合は、1024が使用されます。rsa_keygen_pubexp:value— RSA パブリック指数値。これは、大きな 10 進数値、または0xで始まる場合は 16 進数の値になります。デフォルト値は65537です。
3 を使用して 2048 ビットの RSA 秘密鍵を作成するには、以下のコマンドを実行します。
openssl genpkey -algorithm RSA -out privkey.pem -pkeyopt rsa_keygen_bits:2048 \ -pkeyopt rsa_keygen_pubexp:3
~]$ openssl genpkey -algorithm RSA -out privkey.pem -pkeyopt rsa_keygen_bits:2048 \ -pkeyopt rsa_keygen_pubexp:3
openssl genpkey -algorithm RSA -out privkey.pem -aes-128-cbc -pass pass:hello
~]$ openssl genpkey -algorithm RSA -out privkey.pem -aes-128-cbc -pass pass:hello
4.7.2. 証明書の生成 リンクのコピーリンクがクリップボードにコピーされました!
4.7.2.1. 証明書署名要求の作成 リンクのコピーリンクがクリップボードにコピーされました!
openssl req -new -key privkey.pem -out cert.csr
~]$ openssl req -new -key privkey.pem -out cert.csr
cert.csr という名前の X.509 証明書が作成されます。PEM という名前は、RFC1424 で説明されている 「Privacy Enhancement for Internet Electronic Mail」 に由来しています。代替 DER 形式で証明書ファイルを生成するには、-outform DER コマンドオプションを使用します。
- 2 文字の国コード
- 州または県の名前
- 市または自治体
- 組織の名前
- 組織内のユニット名
- ユーザー名もしくはシステムのホスト名
- メールアドレス
/etc/pki/tls/openssl.cnf ファイルに含まれます。詳細は、openssl.cnf (5) の man ページを参照してください。
4.7.2.2. 自己署名証明書の作成 リンクのコピーリンクがクリップボードにコピーされました!
366 日間有効な自己署名証明書を生成するには、以下の形式でコマンドを発行します。
openssl req -new -x509 -key privkey.pem -out selfcert.pem -days 366
~]$ openssl req -new -x509 -key privkey.pem -out selfcert.pem -days 366
4.7.2.3. Makefile を使った証明書の作成 リンクのコピーリンクがクリップボードにコピーされました!
/etc/pki/tls/certs/ ディレクトリーには、make コマンドを使用して証明書を作成するのに使用できる Makefile が含まれています。使用説明書を表示するには、次のようにコマンドを発行します。
make -f /etc/pki/tls/certs/Makefile
~]$ make -f /etc/pki/tls/certs/Makefile
cd /etc/pki/tls/certs/ make
~]$ cd /etc/pki/tls/certs/
~]$ make
4.7.3. 証明書の確認 リンクのコピーリンクがクリップボードにコピーされました!
openssl verify cert1.pem cert2.pem
~]$ openssl verify cert1.pem cert2.pem
cert.pem にあり、信頼しない中間証明書を untrusted.pem に直接連結する必要があります。信頼できるルート CA 証明書は、/etc/pki/tls/certs/ca-bundle.crt または cacert.pem ファイルに一覧表示されているデフォルト CA に含まれている必要があります。次に、チェーンを確認するために、次の形式でコマンドを発行します。
openssl verify -untrusted untrusted.pem -CAfile cacert.pem cert.pem
~]$ openssl verify -untrusted untrusted.pem -CAfile cacert.pem cert.pem
4.7.4. ファイルの暗号化および暗号化解除 リンクのコピーリンクがクリップボードにコピーされました!
RSA キーを使用して暗号化と復号化を実行しますが、enc では対称アルゴリズムが使用されます。
RSA 鍵の使用
プレーンテキスト と呼ばれるファイルを暗号化するには、以下のコマンドを実行します。
openssl pkeyutl -in plaintext -out cyphertext -inkey privkey.pem
~]$ openssl pkeyutl -in plaintext -out cyphertext -inkey privkey.pem
-keyform DER オプションを使用して DER キー形式を指定します。
-engine オプションを使用します。
openssl pkeyutl -in plaintext -out cyphertext -inkey privkey.pem -engine id
~]$ openssl pkeyutl -in plaintext -out cyphertext -inkey privkey.pem -engine id
openssl engine -t
~]$ openssl engine -t
openssl pkeyutl -sign -in plaintext -out sigtext -inkey privkey.pem
~]$ openssl pkeyutl -sign -in plaintext -out sigtext -inkey privkey.pem
openssl pkeyutl -verifyrecover -in sig -inkey key.pem
~]$ openssl pkeyutl -verifyrecover -in sig -inkey key.pem
openssl pkeyutl -verify -in file -sigfile sig -inkey key.pem
~]$ openssl pkeyutl -verify -in file -sigfile sig -inkey key.pem
シンメトリックアルゴリズムの使用
-l などのサポート対象外のオプションを指定して enc コマンドを実行します。
openssl enc -l
~]$ openssl enc -l
aes-128-cbc アルゴリズムを使用するには、以下の構文を使用します。
openssl enc -aes-128-cbc
openssl enc -aes-128-cbc
es-128-cbc アルゴリズムを使用して plaintext という名前のファイルを暗号化するには、以下のコマンドを入力します。
openssl enc -aes-128-cbc -in plaintext -out plaintext.aes-128-cbc
~]$ openssl enc -aes-128-cbc -in plaintext -out plaintext.aes-128-cbc
-d オプションを使用します。
openssl enc -aes-128-cbc -d -in plaintext.aes-128-cbc -out plaintext
~]$ openssl enc -aes-128-cbc -d -in plaintext.aes-128-cbc -out plaintext
AEAD 暗号を適切にサポートせず、ecb モードは安全とは見なされません。最適な結果を得るには、cbc、cfb、ofb、または ctr 以外のモードを使用しないでください。
4.7.5. メッセージダイジェストの生成 リンクのコピーリンクがクリップボードにコピーされました!
openssl dgst algorithm -out filename -sign private-key
openssl dgst algorithm -out filename -sign private-key
md5|md4|md2|sha1|sha|mdc2|ripemd160|dss1 のいずれかになります。執筆時点では、SHA1 アルゴリズムが推奨されます。DSA を使った署名や検証が必要な場合は、-rand オプションで指定したランダムデータを含むファイルと一緒に dss1 オプションを使用する必要があります。
openssl dgst sha1 -out digest-file
~]$ openssl dgst sha1 -out digest-file
openssl dgst sha1 -out digest-file -sign privkey.pem
~]$ openssl dgst sha1 -out digest-file -sign privkey.pem
4.7.6. パスワードハッシュの生成 リンクのコピーリンクがクリップボードにコピーされました!
openssl passwd password
~]$ openssl passwd password
-crypt アルゴリズムが使用されます。
1 を使用して、標準入力からパスワードのハッシュを計算するには、以下のコマンドを実行します。
openssl passwd -1 password
~]$ openssl passwd -1 password
-apr1 オプションは、BSD アルゴリズムの Apache バリアントを指定します。
xx を使用するには、以下のコマンドを実行します。
openssl passwd -salt xx -in password-file
~]$ openssl passwd -salt xx -in password-file
-out オプションはありません。-table は、対応するクリアテキストパスワードを含むパスワードハッシュのテーブルを生成します。
4.7.7. ランダムデータの生成 リンクのコピーリンクがクリップボードにコピーされました!
openssl rand -out rand-file -rand seed-file
~]$ openssl rand -out rand-file -rand seed-file
し て使用して指定できます。
4.7.8. システムのベンチマーキング リンクのコピーリンクがクリップボードにコピーされました!
openssl speed algorithm
~]$ openssl speed algorithm
4.7.9. OpenSSL の設定 リンクのコピーリンクがクリップボードにコピーされました!
/etc/pki/tls/openssl.cnf 設定ファイルがあり、OpenSSL ライブラリーにより読み取られます。また、アプリケーションごとに個別の設定ファイルを用意することも可能です。設定ファイルには、[ section_name ] のようなセクション名を持つセクションが多数含まれています。最初の [ section_name ] までのファイルの最初の部分は、デフォルトのセクションと呼ばれることに注意してください。OpenSSL が設定ファイルで名前を検索する場合、名前付きセクションが最初に検索されます。すべての OpenSSL コマンドは、コマンド内で代替の設定ファイルを指定するためのオプションが使用されていない限り、マスター OpenSSL 設定ファイルを使用します。設定ファイルの詳細は、config (5) の man ページで説明されています。
4.8. stunnel の使用 リンクのコピーリンクがクリップボードにコピーされました!
4.8.1. stunnel のインストール リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力して、stunnel パッケージをインストールします。
yum install stunnel
~]# yum install stunnel
4.8.2. stunnel を TLS Wrapper として設定する リンクのコピーリンクがクリップボードにコピーされました!
- 使用するサービスに関係なく、stunnel の有効な証明書が必要です。適切な証明書がない場合は、認証局 に申請して取得するか、自己署名証明書を作成することができます。警告実稼働環境で実行されているサーバーには、常に認証局によって署名された証明書を使用してください。自己署名証明書は、テスト目的またはプライベートネットワークにのみ適しています。認証局から付与される証明書の詳細については、「証明書署名要求の作成」 を参照してください。一方、stunnel の自己署名証明書を作成するには、
/etc/pki/tls/certs/ディレクトリーに移動し、rootで以下のコマンドを入力します。certs]# make stunnel.pem
certs]# make stunnel.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow すべての質問に答えて、プロセスを完了してください。 - 証明書がある場合は、stunnel の設定ファイルを作成します。これは、すべての行がオプションまたはサービス定義の開始を指定するテキストファイルです。コメントと空の行をファイルに残して、コメントがセミコロンで始まる読みやすさを向上させることもできます。stunnel RPM パッケージには、設定ファイルを保存できる
/etc/stunnel/ディレクトリーが含まれています。stunnel はファイル名やその拡張子の特別な形式を必要としませんが、/etc/stunnel/stunnel.confを使用します。以下のコンテンツは、stunnel を TLS ラッパーとして設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow または、sslVersion = TLSv1を含む行を以下の行に置き換えることで、SSL を回避することもできます。options = NO_SSLv2 options = NO_SSLv3
options = NO_SSLv2 options = NO_SSLv3Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプションの目的は、以下のとおりです。cert— 証明書へのパス。sslVersion- SSL のバージョン。SSL とTLSは 2 つの独立した暗号化プロトコルですが、ここでは TLS を使用できることに注意してください。chroot— セキュリティーを強化するために stunnel プロセスが実行される変更された root ディレクトリーsetuid,setgid- stunnel プロセスが実行されるユーザーおよびグループ。nobodyは制限されたシステムアカウントです。pid- stunnel がプロセス ID を保存するファイル(chrootと相対的)socket— ローカルおよびリモートのソケットオプション。この場合、ネットワーク遅延を改善するために Nagle のアルゴリズム を無効にします。[service_name]: サービス定義の先頭。この行の下で使用されるオプションは指定のサービスのみに適用されますが、上記のオプションは stunnel にグローバルに影響します。accept— リッスンするポートconnect— 接続先のポート。これは、セキュリティー保護対象のサービスが使用するポートである必要がありますTIMEOUTclose- クライアントからの close_notify アラートを待機する秒数。0は stunnel にまったく待機しないように指示します。options— OpenSSL ライブラリーオプション
例4.3 CUPS のセキュア化
stunnel を CUPS の TLS ラッパーとして設定するには、以下の値を使用します。[cups] accept = 632 connect = 631
[cups] accept = 632 connect = 631Copy to Clipboard Copied! Toggle word wrap Toggle overflow 632の代わりに、任意の空きポートを使用できます。631は CUPS が通常使用するポートです。 chrootディレクトリーを作成し、setuidオプションで指定されたユーザーに、そのディレクトリーへの書き込みアクセス権を付与します。これを行うには、rootで以下のコマンドを入力します。mkdir /var/run/stunnel chown nobody:nobody /var/run/stunnel
~]# mkdir /var/run/stunnel ~]# chown nobody:nobody /var/run/stunnelCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、stunnel が PID ファイルを作成できます。- システムが新しいポートへのアクセスを許可しないファイアウォール設定を使用している場合は、それに応じて変更してください。詳細は「GUI を使用してポートを開く」を参照してください。
- 設定ファイルと
chrootディレクトリーを作成し、指定したポートにアクセスできることを確認したら、stunnel の使用を開始する準備が整います。
4.8.3. stunnel の起動、停止、再起動 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
stunnel /etc/stunnel/stunnel.conf
~]# stunnel /etc/stunnel/stunnel.conf
/var/log/secure を使用して出力をログに記録します。
root で以下のコマンドを実行してプロセスを強制終了します。
kill `cat /var/run/stunnel/stunnel.pid`
~]# kill `cat /var/run/stunnel/stunnel.pid`
4.9. 暗号化 リンクのコピーリンクがクリップボードにコピーされました!
4.9.1. LUKS ディスクの暗号化の使用 リンクのコピーリンクがクリップボードにコピーされました!
LUKS の概要
- LUKS の機能
- LUKS は、ブロックデバイス全体を暗号化するため、脱着可能なストレージメディアやノート PC のディスクドライブといった、モバイルデバイスのコンテンツの保護に適しています。
- 暗号化されたブロックデバイスの基本的な内容は任意です。これにより、スワップ デバイスの暗号化に役立ちます。また、とりわけデータストレージ用にフォーマットしたブロックデバイスを使用する特定のデータベースに関しても有用です。
- LUKS は、既存のデバイスマッパーのカーネルサブシステムを使用します。
- LUKS は、パラフレーズの強化を提供し、辞書攻撃から保護します。
- LUKS デバイスには複数のキースロットが含まれ、ユーザーはこれを使用してバックアップキーやパスフレーズを追加できます。
- LUKS が 行わない こと
- LUKS は、多くのユーザー (8 人以上) が同じデバイスへの個別のアクセスキーを持つことを必要とするシナリオには適していません。
- LUKS は、ファイルレベルの暗号化を必要とするアプリケーションには適していません。
4.9.1.1. Red Hat Enterprise Linux における LUKS の実装 リンクのコピーリンクがクリップボードにコピーされました!
- AES (Advanced Encryption Standard) - FIPS PUB 197
- Twofish (128 ビットブロック暗号)
- Serpent
- cast5 - RFC 2144
- cast6 - RFC 2612
4.9.1.2. 手動でのディレクトリーの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
- root でシェルプロンプトに次のように入力し、ランレベル 1 に入ります。
telinit 1
telinit 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 既存の
/homeをアンマウントします。umount /home
umount /homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 前の手順のコマンドが失敗した場合は、fuser を使用して、
/homeを占有しているプロセスを見つけ、それらを強制終了します。fuser -mvk /home
fuser -mvk /homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow /homeがマウントされていないことを確認します。grep home /proc/mounts
grep home /proc/mountsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - パーティションをランダムなデータで埋めます。
shred -v --iterations=1 /dev/VG00/LV_home
shred -v --iterations=1 /dev/VG00/LV_homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、デバイスのシーケンシャル書き込み速度で進行し、完了するまでに時間がかかる場合があります。使用済みのデバイスに暗号化されていないデータが残らないようにし、ランダムなデータだけでなく、暗号化されたデータを含むデバイスの部分を難読化することが重要なステップとなります。 - パーティションを初期化します。
cryptsetup --verbose --verify-passphrase luksFormat /dev/VG00/LV_home
cryptsetup --verbose --verify-passphrase luksFormat /dev/VG00/LV_homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新たに暗号化したデバイスを開きます。
cryptsetup luksOpen /dev/VG00/LV_home home
cryptsetup luksOpen /dev/VG00/LV_home homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - デバイスがあることを確認します。
ls -l /dev/mapper | grep home
ls -l /dev/mapper | grep homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルシステムを作成します。
mkfs.ext3 /dev/mapper/home
mkfs.ext3 /dev/mapper/homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルシステムをマウントします。
mount /dev/mapper/home /home
mount /dev/mapper/home /homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルシステムが表示されていることを確認します。
df -h | grep home
df -h | grep homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下を
/etc/crypttabファイルに追加します。home /dev/VG00/LV_home none
home /dev/VG00/LV_home noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/fstabファイルを編集し、/homeの古いエントリーを削除し、以下の行を追加します。/dev/mapper/home /home ext3 defaults 1 2
/dev/mapper/home /home ext3 defaults 1 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - SELinux のセキュリティーコンテキストをデフォルトに戻します。
/sbin/restorecon -v -R /home
/sbin/restorecon -v -R /homeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - マシンを再起動します。
shutdown -r now
shutdown -r nowCopy to Clipboard Copied! Toggle word wrap Toggle overflow /etc/crypttabのエントリーにより、コンピューターが起動時にluksのパスフレーズを要求します。- root でログインして、バックアップを復元してください。
4.9.1.3. 既存のデバイスへの新しいパスフレーズの追加 リンクのコピーリンクがクリップボードにコピーされました!
cryptsetup luksAddKey device
cryptsetup luksAddKey device
4.9.1.4. 既存のデバイスからのパスフレーズ削除 リンクのコピーリンクがクリップボードにコピーされました!
cryptsetup luksRemoveKey device
cryptsetup luksRemoveKey device
4.9.1.5. Anaconda での暗号化したブロックデバイスの作成 リンクのコピーリンクがクリップボードにコピーされました!
4.9.1.6. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
4.9.2. GPG 鍵の作成 リンクのコピーリンクがクリップボードにコピーされました!
4.9.2.1. GNOME での GPG 鍵の作成 リンクのコピーリンクがクリップボードにコピーされました!
- Seahorse ユーティリティーをインストールします。これにより、GPG キーの管理が容易になります。
yum install seahorse
~]# yum install seahorseCopy to Clipboard Copied! Toggle word wrap Toggle overflow - キーを作成するには、 → メニューから を選択します。これにより、アプリケーションの Seahorse が起動します。
- メニューから を選択してから PGP Key を選択します。次に、 をクリックします。
- フルネーム、メールアドレス、および自身に関して説明するオプションのコメントを入力します (例:John C. Smith、
jsmith@example.com、ソフトウェアエンジニア)。 をクリックします。キーのパスフレーズを要求するダイアログが表示されます。強力かつ覚えやすいパスフレーズを選んでください。 をクリックすると、キーが作成されます。
0x 6789ABCD のように、キー ID の前に 0x を付けます。秘密鍵のバックアップを取り、安全な場所に保管してください。
4.9.2.2. KDE での GPG 鍵の作成 リンクのコピーリンクがクリップボードにコピーされました!
- メインメニューから → → を選択して、KGpg プログラムを起動します。以前に KGpg を使用したことがない場合、プログラムは独自の GPG キーペアを作成するプロセスを順を追って説明します。
- 新しいキーペアを作成するように求めるダイアログボックスが表示されます。名前、メールアドレス、およびオプションのコメントを入力します。キーの有効期限、キーの強度 (ビット数) およびアルゴリズムを選択することもできます。
- 次のダイアログボックスでパスフレーズを入力します。この時点で、キーが KGpg のメインウィンドウに表示されます。
0x 6789ABCD のように、キー ID の前に 0x を付けます。秘密鍵のバックアップを取り、安全な場所に保管してください。
4.9.2.3. コマンドラインを用いた GPG 鍵の生成 リンクのコピーリンクがクリップボードにコピーされました!
- 次のシェルコマンドを使用します。
gpg2 --gen-key
~]$ gpg2 --gen-keyCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、公開鍵と秘密鍵からなるキーペアを生成します。他の人はあなたの公開鍵を使用してあなたの通信を認証および復号化します。公開鍵をできるだけ広く配布します。特に、メーリングリストなど、認証された通信の受信希望者に配布します。 - 一連のプロンプトがプロセスを指示します。必要に応じて、Enter キーを押してデフォルト値を割り当てます。最初のプロンプトでは、希望するキーの種類を選択するように求められます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ほとんどすべての場合、デフォルトが適切な選択となります。RSA/RSA 鍵は、通信の署名だけでなく、ファイルの暗号化も可能にします。 - 鍵のサイズを選択します。
RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048)
RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048)Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合も、デフォルトの 2048 は、ほとんどすべてのユーザーにとって十分であり、非常に強力なセキュリティーレベルを表しています。 - 鍵の有効期限を選択します。デフォルトの なし を使用する代わりに、有効期限を選択することが推奨され
ます。たとえば、キーの電子メールアドレスが無効になった場合、有効期限があると、他の人にその公開キーの使用を停止するように知らせることができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、1y の値を入力すると、キーは 1 年間有効になります。(気が変わった場合は、キーが生成された後にこの有効期限を変更できます。) - gpg2 アプリケーションが署名情報を要求する前に、以下のプロンプトが表示されます。
Is this correct (y/N)?
Is this correct (y/N)?Copy to Clipboard Copied! Toggle word wrap Toggle overflow yを入力してプロセスを終了します。 - GPG 鍵用に氏名と電子メールアドレスを入力します。このプロセスは、あなたが実在する人物であることを証明するためのものであることを忘れないでください。このため、本当の名前を入力してください。偽の電子メールアドレスを選択すると、他の人があなたの公開鍵を見つけるのがより困難になります。これにより、通信の認証が困難になります。たとえば、この GPG キーをメーリングリストでの自己紹介に使用している場合は、そのリストで使用している電子メールアドレスを入力します。コメントフィールドには、エイリアスなどの情報を記載してください。(人によっては、目的別にキーを使い分け、それぞれのキーに "Office" または "Open Source Projects" などのコメントをつけて識別しています)。
- すべてのエントリーが正しい場合は、確認プロンプトで
Oを入力して続行するか、他のオプションを使用して問題を修正します。最後に、秘密鍵のパスフレーズを入力します。gpg2 プログラムでは、入力エラーが発生しないようにパスフレーズを 2 回入力するように求められます。 - 最後に、gpg2 はランダムなデータを生成して、キーを可能な限り一意にします。この手順では、マウスを動かしたり、ランダムキーを入力したり、システムで他のタスクを実行したりして、プロセスを高速化します。この手順が終わると、キーは完成し、すぐに使えるようになります。
pub 1024D/1B2AFA1C 2005-03-31 John Q. Doe <jqdoe@example.com> Key fingerprint = 117C FE83 22EA B843 3E86 6486 4320 545E 1B2A FA1C sub 1024g/CEA4B22E 2005-03-31 [expires: 2006-03-31]
pub 1024D/1B2AFA1C 2005-03-31 John Q. Doe <jqdoe@example.com> Key fingerprint = 117C FE83 22EA B843 3E86 6486 4320 545E 1B2A FA1C sub 1024g/CEA4B22E 2005-03-31 [expires: 2006-03-31]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - キーのフィンガープリントは、キーの省略形の "署名" です。これにより、実際の公開鍵を改ざんされることなく受け取ったことを他者に確認することができるのです。このフィンガープリントを書き留める必要はありません。いつでもフィンガープリントを表示するには、以下のコマンドを使用し、電子メールアドレスは置き換えます。
gpg2 --fingerprint jqdoe@example.com
~]$ gpg2 --fingerprint jqdoe@example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow "GPG キー ID" は、公開鍵を識別する 8 桁の 16 進数で設定されています。上記の例では、GPG キー ID は1B2AFA1Cです。ほとんどの場合、キー ID を求められた場合は、のように、キー ID の前に 0x を付けます。0x6789ABCD
4.9.2.4. 公開鍵の暗号化について リンクのコピーリンクがクリップボードにコピーされました!
4.9.3. 公開鍵暗号化における openCryptoki の使用 リンクのコピーリンクがクリップボードにコピーされました!
4.9.3.1. openCryptoki のインストールとサービスの起動 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを実行します。
yum install opencryptoki
~]# yum install opencryptoki
pkcsslotd デーモンを実行する必要があります。root で以下のコマンドを実行して、現行セッションで デーモンを起動します。
systemctl start pkcsslotd
~]# systemctl start pkcsslotd
systemctl enable pkcsslotd
~]# systemctl enable pkcsslotd
4.9.3.2. openCryptoki の設定と使用 リンクのコピーリンクがクリップボードにコピーされました!
pkcsslotd デーモンは /etc/opencryptoki/opencryptoki.conf 設定ファイルを読み取ります。このファイルは、システムで動作するように設定されたトークンとスロットに関する情報を収集します。
pkcsslotd デーモンの動作を変更するには、pkcsconf ユーティリティーを使用します。このツールでは、デーモンの状態の表示や設定、現在設定されているスロットやトークンの一覧表示や変更を行うことができます。たとえば、トークンに関する情報を表示するには、以下のコマンドを実行します( pkcsslotd デーモンと通信する必要があるすべての非 root ユーザーは、pkcs11 システムグループの一部である必要があることに注意してください)。
pkcsconf -t
~]$ pkcsconf -t
pkcs11 グループのメンバーシップを割り当てる必要があることに注意してください。このグループのすべてのメンバーは、openCryptoki の他のユーザーの権限で任意のコードを実行することもできます。
4.9.4. OpenSSH に認証情報を提供するスマートカードの使用 リンクのコピーリンクがクリップボードにコピーされました!
~/.ssh/authorized_keys ファイルに保存します。opensc パッケージが提供する PKCS#11 ライブラリーをクライアントにインストールします。PKCS#11 は、トークンと呼ばれる暗号化デバイスへのアプリケーションプログラミングインターフェイス(API)を定義する公開鍵暗号化標準です。root で以下のコマンドを入力します。
yum install opensc
~]# yum install opensc
4.9.4.1. カードからの公開鍵の取得 リンクのコピーリンクがクリップボードにコピーされました!
-D ディレクティブで指定します。
ssh-keygen -D /usr/lib64/pkcs11/opensc-pkcs11.so
~]$ ssh-keygen -D /usr/lib64/pkcs11/opensc-pkcs11.so
ssh-rsa AAAAB3NzaC1yc[...]+g4Mb9
4.9.4.2. サーバーへの公開鍵の保存 リンクのコピーリンクがクリップボードにコピーされました!
smartcard.pub )に保存し、ssh-copy-id コマンドを使用します。
SSH_COPY_ID_LEGACY=1 または -f オプションを使用する必要があります。
4.9.4.3. スマートカードのキーを使用したサーバーへの認証 リンクのコピーリンクがクリップボードにコピーされました!
ssh -I /usr/lib64/pkcs11/opensc-pkcs11.so hostname
[localhost ~]$ ssh -I /usr/lib64/pkcs11/opensc-pkcs11.so hostname
Enter PIN for 'Test (UserPIN)':
[hostname ~]$
~/.ssh/config ファイルの PKCS#11 ライブラリーへのパスを保存します。
Host hostname
PKCS11Provider /usr/lib64/pkcs11/opensc-pkcs11.so
Host hostname
PKCS11Provider /usr/lib64/pkcs11/opensc-pkcs11.so
ssh hostname
[localhost ~]$ ssh hostname
Enter PIN for 'Test (UserPIN)':
[hostname ~]$
4.9.4.4. ssh-agent を使用した PIN ログインの自動化 リンクのコピーリンクがクリップボードにコピーされました!
ssh-add -l eval `ssh-agent`
~]$ ssh-add -l
Could not open a connection to your authentication agent.
~]$ eval `ssh-agent`
ssh-add -s /usr/lib64/pkcs11/opensc-pkcs11.so
~]$ ssh-add -s /usr/lib64/pkcs11/opensc-pkcs11.so
Enter PIN for 'Test (UserPIN)':
Card added: /usr/lib64/pkcs11/opensc-pkcs11.so
ssh-add -e /usr/lib64/pkcs11/opensc-pkcs11.so
~]$ ssh-add -e /usr/lib64/pkcs11/opensc-pkcs11.so
Card removed: /usr/lib64/pkcs11/opensc-pkcs11.so
/etc/opensc-x86_64.conf の pin_cache_ignore_user_consent = true; オプションの前に # 文字を削除します。
4.9.4.5. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
PKCS# 11 セキュリティートークンを管理および使用する pkcs11-tool ユーティリティーの詳細は、pkcs11-tool (1) の man ページを参照してください。
4.9.5. 信頼できる鍵および暗号化された鍵 リンクのコピーリンクがクリップボードにコピーされました!
RSA キーを使用して鍵 を保護します。
AES 暗号化を使用するため、TPM は必要ありません。これにより、信頼できる鍵よりも高速になります。暗号化鍵は、カーネルが生成した乱数を使用して作成され、ユーザー空間の blobs へのエクスポート時に マスターキー により暗号化されます。このマスターキーは、信頼できるキーでもユーザーキーでも構いませんが、これが主な欠点となっています。マスターキーが信頼できるキーでない場合、暗号化されたキーは、それを暗号化するために使用したユーザーキーと同等の安全性しか得られません。
4.9.5.1. 鍵を使った作業 リンクのコピーリンクがクリップボードにコピーされました!
x86_64アーキテクチャーを持つ RHEL カーネルの場合、TRUSTED_KEYS および ENCRYPTED_KEYS コードはコアカーネルコードの一部として組み込まれています。その結果、x86_64システムユーザーは、trusted モジュールおよび encrypted-keys モジュールを読み込むことなく、これらの鍵を使用できます。- その他のアーキテクチャーでは、鍵で操作を実行する前に、trusted および encrypted-keys カーネルモジュールを読み込む必要があります。カーネルモジュールをロードするには、以下のコマンドを実行します。
modprobe trusted encrypted-keys
~]# modprobe trusted encrypted-keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow
tcsd デーモンをインストールする必要があります。
keyctl add trusted name "new keylength [options]" keyring
~]$ keyctl add trusted name "new keylength [options]" keyring
keyctl add trusted kmk "new 32" @u
~]$ keyctl add trusted kmk "new 32" @u
642500861
kmk と呼ばれる信頼できる鍵を作成し、長さが 32 バイト(256 ビット)で、ユーザーのキーリング(@u)に配置します。鍵の長さは 32 から 128 バイト (256 から 1024 ビット) です。show サブコマンドを使用して、カーネルキーリングの現在の構造を一覧表示します。
keyctl show
~]$ keyctl show
Session Keyring
-3 --alswrv 500 500 keyring: _ses
97833714 --alswrv 500 -1 \_ keyring: _uid.1000
642500861 --alswrv 500 500 \_ trusted: kmk
keyctl pipe 642500861 > kmk.blob
~]$ keyctl pipe 642500861 > kmk.blob
~]$ keyctl add trusted kmk "load `cat kmk.blob`" @u 268728824
~]$ keyctl add trusted kmk "load `cat kmk.blob`" @u
268728824
keyctl add encrypted name "new [format] key-type:master-key-name keylength" keyring
~]$ keyctl add encrypted name "new [format] key-type:master-key-name keylength" keyring
keyctl add encrypted encr-key "new trusted:kmk 32" @u
~]$ keyctl add encrypted encr-key "new trusted:kmk 32" @u
159771175
keyctl add user kmk-user "`dd if=/dev/urandom bs=1 count=32 2>/dev/null`" @u
~]$ keyctl add user kmk-user "`dd if=/dev/urandom bs=1 count=32 2>/dev/null`" @u
427069434
keyctl add encrypted encr-key "new user:kmk-user 32" @u
~]$ keyctl add encrypted encr-key "new user:kmk-user 32" @u
1012412758
keyctl list @u
~]$ keyctl list @u
2 keys in keyring:
427069434: --alswrv 1000 1000 user: kmk-user
1012412758: --alswrv 1000 1000 encrypted: encr-key
4.9.5.2. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
インストールされているドキュメント
- keyctl(1) : keyctl ユーティリティーとそのサブコマンドの使用を説明します。
オンラインドキュメント
- Red Hat Enterprise Linux 7 SELinux ユーザーおよび管理者のガイド: Red Hat Enterprise Linux 7 『の SELinux ユーザーおよび管理者のガイド』 では、SELinux の原則と、SELinux を Apache HTTP Server などのさまざまなサービスで設定および使用する方法を説明します。
- https://www.kernel.org/doc/Documentation/security/keys-trusted-encrypted.txt — Linux カーネルの信頼できる鍵および暗号化された鍵機能に関する公式ドキュメントです。
関連項目
- 「高度暗号化標準 — AES」
Advanced Encryption Standardの簡潔な説明を提供します。 - 「公開鍵の暗号化」 は、公開鍵暗号化アプローチとそれが使用するさまざまな暗号化プロトコルについて説明します。
4.9.6. 乱数ジェネレーターの使用 リンクのコピーリンクがクリップボードにコピーされました!
rngd デーモンは、エントロピーを抽出するために環境ノイズとハードウェア乱数ジェネレーターの両方を使用できます。デーモンは、乱数性のソースによって供給されるデータが十分にランダムなものかどうかをチェックしてから、カーネルの乱数エントロピープールにデータを格納します。生成する乱数は、/dev/random および /dev/urandom キャラクターデバイスで利用できます。
/dev/random と /dev/urandom の違いは、前者はブロッキングデバイスであることです。つまり、エントロピーの量が適切なランダム出力を生成するのに不十分なと判断すると、番号の供給を停止します。逆に、/dev/urandom はノンブロッキングソースであり、カーネルのエントロピープールを再利用するため、エントロピーが少ない疑似乱数を無制限に提供できます。そのため、/dev/urandom は、長期暗号化キーの作成には使用しないでください。
root で以下のコマンドを発行します。
yum install rng-tools
~]# yum install rng-tools
rngd デーモンを起動するには、root で以下のコマンドを実行します。
systemctl start rngd
~]# systemctl start rngd
systemctl status rngd
~]# systemctl status rngd
rngd デーモンを起動するには、直接実行します。たとえば、乱数入力の代替ソース( /dev/hwrandom以外)を指定するには、以下のコマンドを使用します。
rngd --rng-device=/dev/hwrng
~]# rngd --rng-device=/dev/hwrng
/dev/hwrng で rngd デーモンを起動します。同様に、-o (または --random-device)オプションを使用して、乱数出力用のカーネルデバイスを選択できます(デフォルトの /dev/random以外)。利用可能なすべてのオプションの一覧は、rngd(8) の man ページを参照してください。
root で以下のコマンドを実行します。
rngd -vf
~]# rngd -vf
Unable to open file: /dev/tpm0
Available entropy sources:
DRNG
-b, --background オプション (デーモンになる) はデフォルトで適用されます。
cat /proc/cpuinfo | grep rdrand
~]$ cat /proc/cpuinfo | grep rdrand
/dev/random の出力のランダム性のレベルをテストするには、次のように rngtest ツールを使用します。
/dev/randomを介して)フィードし、QEMU はゲストが要求するエントロピーのソースとして /dev/random を使用します。
図4.1 virtio RNG デバイス
4.10. ポリシーベースの復号を使用して暗号化ボリュームの自動アンロックの設定 リンクのコピーリンクがクリップボードにコピーされました!
4.10.1. NBDE (Network-Bound Disk Encryption) リンクのコピーリンクがクリップボードにコピーされました!
図4.2 Clevis と Tang を使用した Network-Bound Disk Encryption
/tmp ディレクトリー、/var ディレクトリー、および /usr/local/ ディレクトリーなどのすべての LUKS 暗号化デバイスは、root ボリューム とみなされます。さらに、/var/log/、var/log/audit/、または /opt など、ネットワークが起動する前に実行されるサービスが使用するすべてのマウントポイントは、ルートデバイスに切り替えた後に早期にマウントする必要があります。/etc/fstab ファイルに _netdev オプションがないため、root ボリュームを識別することもできます。
4.10.2. 暗号化クライアント (Clevis) のインストール リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
yum install clevis
~]# yum install clevis
clevis decrypt < JWE > PLAINTEXT
~]$ clevis decrypt < JWE > PLAINTEXT
4.10.3. SELinux を Enforcing モードで有効にした Tang サーバーのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
tangd_port_t SELinux タイプが提供され、Tang サーバーは、SELinux Enforcing モードで制限のあるサービスとしてデプロイできます。
前提条件
- policycoreutils-python-utils パッケージおよび依存関係がインストールされている。
手順
- tang パッケージとその依存関係をインストールするには、
rootで以下のコマンドを実行します。yum install tang
~]# yum install tangCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 7500/tcp などの不要なポートを選択し、tangd サービスがそのポートにバインドできるようにします。
semanage port -a -t tangd_port_t -p tcp 7500
~]# semanage port -a -t tangd_port_t -p tcp 7500Copy to Clipboard Copied! Toggle word wrap Toggle overflow ポートは一度に 1 つのサービスでのみ使用できるため、すでに使用しているポートを使用しようとすると、ValueError: Port already definedというエラーメッセージが表示されます。 - ファイアウォールのポートを開きます。
firewall-cmd --add-port=7500/tcp firewall-cmd --runtime-to-permanent
~]# firewall-cmd --add-port=7500/tcp ~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow - systemd を使用して
tangdサービスを有効にします。systemctl enable tangd.socket
~]# systemctl enable tangd.socket Created symlink from /etc/systemd/system/multi-user.target.wants/tangd.socket to /usr/lib/systemd/system/tangd.socket.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - オーバーライドファイルを作成します。
systemctl edit tangd.socket
~]# systemctl edit tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のエディター画面で、
/etc/systemd/system/tangd.socket.d/ディレクトリーにある空のoverride.confファイルを開き、以下の行を追加して Tang サーバーのデフォルトポートを、80 から以前に取得した番号に変更します。[Socket] ListenStream= ListenStream=7500
[Socket] ListenStream= ListenStream=7500Copy to Clipboard Copied! Toggle word wrap Toggle overflow ファイルを保存して、エディターを終了します。 - 変更した設定を再読み込みし、
tangdサービスを起動します。systemctl daemon-reload
~]# systemctl daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 設定が機能していることを確認します。
systemctl show tangd.socket -p Listen
~]# systemctl show tangd.socket -p Listen Listen=[::]:7500 (Stream)Copy to Clipboard Copied! Toggle word wrap Toggle overflow tangdサービスを起動します。systemctl start tangd.socket
~]# systemctl start tangd.socketCopy to Clipboard Copied! Toggle word wrap Toggle overflow
tangd は systemd ソケットアクティベーションメカニズムを使用するため、サーバーは最初の接続を受け取るとすぐに起動します。最初の起動時に、一組の暗号鍵が自動的に生成されます。
jose (1) を参照してください。
例4.4 Tang 鍵のローテーション
/var/db/tang )の新しいキーの生成から開始します。たとえば、以下のコマンドを使用して、新しい署名を作成し、鍵を交換します。
DB=/var/db/tang
jose jwk gen -i '{"alg":"ES512"}' -o $DB/new_sig.jwk
jose jwk gen -i '{"alg":"ECMR"}' -o $DB/new_exc.jwk
~]# DB=/var/db/tang
~]# jose jwk gen -i '{"alg":"ES512"}' -o $DB/new_sig.jwk
~]# jose jwk gen -i '{"alg":"ECMR"}' -o $DB/new_exc.jwk
. に変更して、アドバタイズメントから非表示にします。以下の例のファイル名は、鍵データベースディレクトリーに実在する固有のファイル名とは異なります。
mv $DB/old_sig.jwk $DB/.old_sig.jwk mv $DB/old_exc.jwk $DB/.old_exc.jwk
~]# mv $DB/old_sig.jwk $DB/.old_sig.jwk
~]# mv $DB/old_exc.jwk $DB/.old_exc.jwk
4.10.3.1. 高可用性システムのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
- クライアントの冗長性 (推奨)クライアントは、複数の Tang サーバーにバインドする機能を使用して設定する必要があります。この設定では、各 Tang サーバーは独自の鍵を持ち、クライアントはこれらのサーバーのサブセットに連絡することで復号化できます。Clevis は、
sssプラグインを使用してこのワークフローをすでにサポートしています。この設定の詳細については、以下の man ページを参照してください。tang (8)、High Availability セクションclevis (1)の Shamir's Secret Sharing セクションclevis-encrypt-sss(1)
Red Hat は、高可用性のデプロイメントにこの方法を推奨します。 - 鍵の共有冗長性を確保するために、Tang のインスタンスは複数デプロイできます。2 番目以降のインスタンスを設定するには、tang パッケージをインストールし、SSH 経由で rsync を使用して鍵ディレクトリーを新規ホストにコピーします。鍵を共有すると鍵への不正アクセスのリスクが高まり、追加の自動化インフラストラクチャーが必要になるため、Red Hat はこの方法を推奨していません。
4.10.4. Tang を使用する NBDE システムへの暗号化クライアントのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- Clevis フレームワークがインストールされている。「暗号化クライアント (Clevis) のインストール」 を参照
- Tang サーバーまたはそのダウンロードされた広告が利用可能です。「SELinux を Enforcing モードで有効にした Tang サーバーのデプロイメント」 を参照
手順
clevis decrypt < JWE > PLAINTEXT
~]$ clevis decrypt < JWE > PLAINTEXT
clevis-encrypt-tang (1) を参照するか、同梱の CLI ヘルプを使用します。
4.10.5. TPM 2.0 ポリシーを使用した暗号化クライアントのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
clevis encrypt tpm2 '{}' < PLAINTEXT > JWE
~]$ clevis encrypt tpm2 '{}' < PLAINTEXT > JWE
clevis encrypt tpm2 '{"hash":"sha1","key":"rsa"}' < PLAINTEXT > JWE
~]$ clevis encrypt tpm2 '{"hash":"sha1","key":"rsa"}' < PLAINTEXT > JWE
clevis decrypt < JWE > PLAINTEXT
~]$ clevis decrypt < JWE > PLAINTEXT
clevis encrypt tpm2 '{"pcr_bank":"sha1","pcr_ids":"0,1"}' < PLAINTEXT > JWE
~]$ clevis encrypt tpm2 '{"pcr_bank":"sha1","pcr_ids":"0,1"}' < PLAINTEXT > JWE
clevis-encrypt-tpm2 (1) を参照してください。
4.10.6. root ボリュームの手動登録の設定 リンクのコピーリンクがクリップボードにコピーされました!
yum install clevis-luks
~]# yum install clevis-luks
- LUKS マスター鍵と同じエントロピーを使用して、新しい鍵を作成します。
- Clevis で新しい鍵を暗号化します。
- LUKS ヘッダーに Clevis JWE オブジェクトを LUKSMeta で格納します。
- LUKS を使用する新しい鍵を有効にします。
clevis-luks-bind (1) を参照してください。
yum install clevis-dracut dracut -f --regenerate-all
~]# yum install clevis-dracut
~]# dracut -f --regenerate-all
dracut -f --regenerate-all --kernel-cmdline "ip=192.0.2.10 netmask=255.255.255.0 gateway=192.0.2.1 nameserver=192.0.2.45"
~]# dracut -f --regenerate-all --kernel-cmdline "ip=192.0.2.10 netmask=255.255.255.0 gateway=192.0.2.1 nameserver=192.0.2.45"
/etc/dracut.conf.d/ ディレクトリーに .conf ファイルを作成します。以下に例を示します。
~]# cat /etc/dracut.conf.d/static_ip.conf kernel_cmdline="ip=10.0.0.103 netmask=255.255.252.0 gateway=10.0.0.1 nameserver=10.0.0.1"
~]# cat /etc/dracut.conf.d/static_ip.conf
kernel_cmdline="ip=10.0.0.103 netmask=255.255.252.0 gateway=10.0.0.1 nameserver=10.0.0.1"
dracut -f --regenerate-all
~]# dracut -f --regenerate-all
dracut.cmdline (7) を参照してください。
4.10.7. キックスタートを使用した自動登録の設定 リンクのコピーリンクがクリップボードにコピーされました!
- 一時パスワードを使用して、
/boot以外のすべてのマウントポイントで LUKS 暗号化が有効になっているディスクを分割するように、キックスタートに指示します。パスワードは、登録プロセスの手順に使用するための一時的なものです。part /boot --fstype="xfs" --ondisk=vda --size=256 part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppass
part /boot --fstype="xfs" --ondisk=vda --size=256 part / --fstype="xfs" --ondisk=vda --grow --encrypted --passphrase=temppassCopy to Clipboard Copied! Toggle word wrap Toggle overflow OSPP 準拠のシステムには、より複雑な設定が必要であることに注意してください。次に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 関連する Clevis パッケージを
%packagesセクションに追加してインストールします。%packages clevis-dracut %end
%packages clevis-dracut %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow - clevis luks bind を呼び出して、
%postセクションでバインディングを実行します。その後、一時パスワードを削除します。%post clevis luks bind -f -k- -d /dev/vda2 \ tang '{"url":"http://tang.srv","thp":"_OsIk0T-E2l6qjfdDiwVmidoZjA"}' \ <<< "temppass" cryptsetup luksRemoveKey /dev/vda2 <<< "temppass" %end%post clevis luks bind -f -k- -d /dev/vda2 \ tang '{"url":"http://tang.srv","thp":"_OsIk0T-E2l6qjfdDiwVmidoZjA"}' \ <<< "temppass" cryptsetup luksRemoveKey /dev/vda2 <<< "temppass" %endCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、バインディングの設定で、Tang サーバーで信頼するサムプリントを指定することで、バインディングを完全に非対話にします。Tang サーバーの代わりに TPM 2.0 ポリシーを使用する場合は、同様の手順を使用できます。
4.10.8. リムーバブルストレージデバイスの自動ロック解除の設定 リンクのコピーリンクがクリップボードにコピーされました!
yum install clevis-udisks2
~]# yum install clevis-udisks2
clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'
~]# clevis luks bind -d /dev/sdb1 tang '{"url":"http://tang.srv"}'
clevis luks unlock -d /dev/sdb1
~]# clevis luks unlock -d /dev/sdb1
4.10.9. ブート時に非 root ボリュームのロックを自動解除する設定 リンクのコピーリンクがクリップボードにコピーされました!
- clevis-systemd パッケージをインストールします。
yum install clevis-systemd
~]# yum install clevis-systemdCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Clevis のアンロックサービスを有効にします。
systemctl enable clevis-luks-askpass.path
~]# systemctl enable clevis-luks-askpass.path Created symlink from /etc/systemd/system/remote-fs.target.wants/clevis-luks-askpass.path to /usr/lib/systemd/system/clevis-luks-askpass.path.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 「root ボリュームの手動登録の設定」 の説明に従って、clevis luks bind コマンドを使用したバインディング手順を実行します。
- システムの起動時に暗号化されたブロックデバイスを設定するには、
_netdevオプションを指定して対応する行を/etc/crypttab設定ファイルに追加します。詳細は、crypttab (5)man ページを参照してください。 /etc/fstabファイルでアクセス可能なファイルシステムの一覧にボリュームを追加します。この設定ファイルに_netdevオプションを使用します。詳細は、man ページのfstab (5)を参照してください。
4.10.10. NBDE ネットワークでの仮想マシンのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
4.10.11. NBDE を使用してクラウド環境に自動的に登録可能な仮想マシンイメージの構築 リンクのコピーリンクがクリップボードにコピーされました!
4.10.12. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
tang(8)clevis(1)jose(1)clevis-luks-unlockers(1)tang-nagios(1)
4.11. AIDEで整合性の確認 リンクのコピーリンクがクリップボードにコピーされました!
4.11.1. AIDEのインストール リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
yum install aide
~]# yum install aide
root で以下のコマンドを入力します。
aide --init
~]# aide --init
AIDE, version 0.15.1
### AIDE database at /var/lib/aide/aide.db.new.gz initialized.
/etc/aide.conf ファイルで定義されているディレクトリーとファイルのセットのみをチェックします。AIDE データベースに追加のディレクトリーまたはファイルを含め、監視パラメーターを変更するには、それに応じて /etc/aide.conf を編集します。
.new 部分文字列を削除します。
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
~]# mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
/etc/aide.conf ファイルを編集し、DBDIR 値を変更します。セキュリティーを強化するために、データベース、設定、および /usr/sbin/aide バイナリーファイルを読み取り専用メディアなどの安全な場所に保存します。
4.11.2. 整合性確認の実行 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
/etc/crontab に追加します。
05 4 * * * root /usr/sbin/aide --check
05 4 * * * root /usr/sbin/aide --check
4.11.3. AIDE データベースの更新 リンクのコピーリンクがクリップボードにコピーされました!
aide --update
~]# aide --update
/var/lib/aide/aide.db.new.gz データベースファイルを作成します。整合性チェックに使用を開始するには、ファイル名から .new サブストリングを削除します。
4.11.4. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
aide (1)の man ページaide.conf (5)の man ページ
4.12. USBGuardの使用 リンクのコピーリンクがクリップボードにコピーされました!
- 動的対話とポリシー施行のためのプロセス間通信 (IPC) インターフェイスを持つデーモンコンポーネント。
- 実行中の USBGuard インスタンスと対話するコマンドラインインターフェイス。
- USB デバイス認証ポリシーを記述するルール言語
- 共有ライブラリーに実装されているデーモンコンポーネントと対話する C++ API
4.12.1. USBGuardのインストール リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
yum install usbguard
~]# yum install usbguard
root で以下のコマンドを入力します。
usbguard generate-policy > /etc/usbguard/rules.conf
~]# usbguard generate-policy > /etc/usbguard/rules.conf
/etc/usbguard/rules.conf ファイルを編集します。詳細は、usbguard-rules.conf (5) の man ページを参照してください。使用例は 「ルール言語を使って独自のポリシーを作成する」 を参照してください。
root で以下のコマンドを入力します。
root で以下のコマンドを使用します。
systemctl enable usbguard.service
~]# systemctl enable usbguard.service
Created symlink from /etc/systemd/system/basic.target.wants/usbguard.service to /usr/lib/systemd/system/usbguard.service.
root で次のコマンドを実行します。
usbguard list-devices
~]# usbguard list-devices
1: allow id 1d6b:0002 serial "0000:00:06.7" name "EHCI Host Controller" hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" parent-hash "4PHGcaDKWtPjKDwYpIRG722cB9SlGz9l9Iea93+Gt9c=" via-port "usb1" with-interface 09:00:00
...
6: block id 1b1c:1ab1 serial "000024937962" name "Voyager" hash "CrXgiaWIf2bZAU+5WkzOE7y0rdSO82XMzubn7HDb95Q=" parent-hash "JDOb0BiktYs2ct3mSQKopnOOV2h9MGYADwhT+oUtF2s=" via-port "1-3" with-interface 08:06:50
allow-device オプションを使用します。
usbguard allow-device 6
~]# usbguard allow-device 6
reject-device オプションを使用します。デバイスの認証を解除するには、block-device オプションを指定して usbguard コマンドを使用します。
usbguard block-device 6
~]# usbguard block-device 6
- block - 今は、このデバイスとはやりとりしない
- reject - このデバイスは存在しないものとして無視する
--help ディレクティブを指定して入力します。
usbguard --help
~]$ usbguard --help
4.12.2. ホワイトリストおよびブラックリストの作成 リンクのコピーリンクがクリップボードにコピーされました!
usbguard-daemon.conf ファイルは、コマンドラインオプションを解析した後に usbguard デーモンによって読み込まれ、デーモンのランタイムパラメーターを設定するために使用されます。デフォルトの設定ファイル(/etc/usbguard/usbguard-daemon.conf)をオーバーライドするには、-c コマンドラインオプションを使用します。詳細は、usbguard-daemon (8)の man ページを参照してください。
usbguard-daemon.conf ファイルを編集し、以下のオプションを使用します。
USBGuard 設定ファイル
RuleFile=<path>usbguardデーモンは、このファイルを使用して、そこからポリシールールセットを読み込み、IPC インターフェイスを介して受信した新しいルールを書き込みます。IPCAllowedUsers=<username> [<username> ...]- デーモンが IPC 接続を受け入れるユーザー名のスペース区切りのリスト。
IPCAllowedGroups=<groupname> [<groupname> ...]- デーモンが IPC 接続を受け入れるグループ名のスペース区切りのリスト。
IPCAccessControlFiles=<path>- IPC アクセス制御ファイルを保持するディレクトリーへのパス。
ImplicitPolicyTarget=<target>- ポリシーのどのルールにも一致しないデバイスを処理する方法。許容される値は allow、block、および reject です。
PresentDevicePolicy=<policy>- デーモンの起動時にすでに接続されているデバイスを処理する方法:
- allow - 存在するデバイスをすべて認証する
- block - 存在するデバイスの認証をすべて解除する
- reject - 存在するデバイスをすべて削除する
- keep - 内部ステータスの同期してそのままにする
- apply-policy - 存在するすべてのデバイスに対してルールセットを評価する
PresentControllerPolicy=<policy>- デーモンの起動時にすでに接続されている USB コントローラーを処理する方法:
- allow - 存在するデバイスをすべて認証する
- block - 存在するデバイスの認証をすべて解除する
- reject - 存在するデバイスをすべて削除する
- keep - 内部ステータスの同期してそのままにする
- apply-policy - 存在するすべてのデバイスに対してルールセットを評価する
例4.5 USBGuard 設定
usbguard デーモンが /etc/usbguard/rules.conf ファイルからルールをロードするように順序付け、usbguard グループのユーザーのみが IPC インターフェイスを使用できるようにします。
RuleFile=/etc/usbguard/rules.conf IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/
RuleFile=/etc/usbguard/rules.conf
IPCAccessControlFiles=/etc/usbguard/IPCAccessControl.d/
usbguard (1) を参照してください。この例では、usbguard グループのユーザーが USB デバイス承認状態の変更、USB デバイスの一覧表示、例外イベントのリッスン、USB 認証ポリシーの一覧表示を許可するには、root で次のコマンドを実行します。
usbguard add-user -g usbguard --devices=modify,list,listen --policy=list --exceptions=listen
~]# usbguard add-user -g usbguard --devices=modify,list,listen --policy=list --exceptions=listen
root ユーザーのみに制限されます。IPC インターフェイスへのアクセスを制限するには、IPCAccessControlFiles オプション (推奨)、IPCAllowedUsers オプション、および IPCAllowedGroups オプションを設定することを検討してください。ACL を未設定のままにしないでください。設定しないと、すべてのローカルユーザーに IPC インターフェイスが公開され、USB デバイスの認証状態を操作して USBGuard ポリシーを変更できるようになります。
usbguard-daemon.conf (5) man ページの IPC Access Control セクションを参照してください。
4.12.3. ルール言語を使って独自のポリシーを作成する リンクのコピーリンクがクリップボードにコピーされました!
usbguard デーモンは、一連のルールで定義されたポリシーに基づいて USB デバイスを承認するかどうかを決定します。USB デバイスがシステムに挿入されると、デーモンは既存のルールを順次スキャンし、一致するルールが見つかると、ルールのターゲットに基づいて、デバイスを承認 (許可)、非承認 (ブロック)、または削除 (拒否) します。一致するルールが見つからない場合、決定は暗黙のデフォルトターゲットに基づいて行われます。この暗黙のデフォルトとは、ユーザーが決定を下すまでデバイスをブロックすることです。
usbguard-rules.conf (5) の man ページを参照してください。
例4.6 USBguard のサンプルポリシー
- USB 大容量ストレージデバイスを許可し、それ以外をすべてブロックする
- このポリシーは、単なる大容量ストレージデバイスではないあらゆるデバイスをブロックします。USB フラッシュディスクにキーボードインターフェイスが隠されているデバイスはブロックされます。大容量ストレージインターフェイスが 1 つあるデバイスのみが、オペレーティングシステムと対話することを許可されます。ポリシーは、以下のような 1 つのルールで設定されます。
allow with-interface equals { 08:*:* }allow with-interface equals { 08:*:* }Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブロックルールがないため、ブロックは暗黙のうちに行われます。USBGuard イベントをリッスンするデスクトップアプレットは、デバイスに対して暗黙的なターゲットが選択されているかどうかをユーザーに尋ねることができるため、暗黙的なブロックはデスクトップユーザーにとって便利です。 - 特定の Yubikey デバイスを特定のポート経由で接続できるようにする
- そのポートの他のすべてを拒否します。
allow 1050:0011 name "Yubico Yubikey II" serial "0001234567" via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2"
allow 1050:0011 name "Yubico Yubikey II" serial "0001234567" via-port "1-2" hash "044b5e168d40ee0245478416caf3d998" reject via-port "1-2"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - インターフェイスの組み合わせに不審な点があるデバイスは排除する
- キーボードやネットワークインターフェイスを実装した USB フラッシュディスクは非常に疑わしいものです。次の一連のルールは、USB フラッシュディスクを許可し、追加の疑わしいインターフェイスを備えたデバイスを明示的に拒否するポリシーを形成します。
allow with-interface equals { 08:*:* } reject with-interface all-of { 08:*:* 03:00:* } reject with-interface all-of { 08:*:* 03:01:* } reject with-interface all-of { 08:*:* e0:*:* } reject with-interface all-of { 08:*:* 02:*:* }allow with-interface equals { 08:*:* } reject with-interface all-of { 08:*:* 03:00:* } reject with-interface all-of { 08:*:* 03:01:* } reject with-interface all-of { 08:*:* e0:*:* } reject with-interface all-of { 08:*:* 02:*:* }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記ブラックリストは間違ったアプローチであり、あるデバイスだけをブラックリストに入れ、残りを許可するということはしないでください。上記のポリシーは、ブロッキングが暗黙のデフォルトであることを前提としています。"不良" と見なされる一連のデバイスを拒否することは、そのようなデバイスへのシステムの露出を可能な限り制限するための良いアプローチです。 - キーボードのみの USB デバイスを許可
- 以下のルールは、キーボードインターフェイスを持つ USB 機器がすでに許可されていない場合にのみ、キーボードのみの USB 機器を許可するものです。
allow with-interface one-of { 03:00:01 03:01:01 } if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 })allow with-interface one-of { 03:00:01 03:01:01 } if !allowed-matches(with-interface one-of { 03:00:01 03:01:01 })Copy to Clipboard Copied! Toggle word wrap Toggle overflow
/etc/usbguard/rules.conf を編集して USBGuard ポリシールールをカスタマイズします。
usbguard generate-policy > rules.conf vim rules.conf
~]$ usbguard generate-policy > rules.conf
~]$ vim rules.conf
install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
~]# install -m 0600 -o root -g root rules.conf /etc/usbguard/rules.conf
4.12.4. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
usbguard (1)の man ページusbguard-rules.conf(5)man pageusbguard-daemon(8)man pageusbguard-daemon.conf(5)man page
4.13. TLS 設定の強化 リンクのコピーリンクがクリップボードにコピーされました!
TLS (Transport Layer Security)は、ネットワーク通信のセキュリティーを保護するために使用される暗号化プロトコルです。優先する 鍵交換プロトコル、認証方法、および暗号化アルゴリズムを設定してシステムのセキュリティー設定を強化する際には、対応するクライアントの範囲が広ければ広いほど、セキュリティーのレベルが低くなることを認識しておく必要があります。反対に、セキュリティー設定を厳密にすると、クライアントとの互換性が制限され、システムからロックアウトされるユーザーが出てくる可能性もあります。可能な限り厳密な設定を目指し、互換性に必要な場合に限り、設定を緩めるようにしてください。
TLS 実装は、可能な場合は安全なアルゴリズムを使用しますが、レガシークライアントまたはサーバーへの接続を防止しません。セキュリティーが保護されたアルゴリズムまたはプロトコルに対応しないレガシーなクライアントまたはサーバーの接続が期待できないまたは許可されない場合に、厳密なセキュリティー要件の環境で、このセクションで説明されている強化された設定を適用します。
4.13.1. 有効にするアルゴリズムの選択 リンクのコピーリンクがクリップボードにコピーされました!
プロトコルのバージョン
TLS は、最高のセキュリティーメカニズムを提供します。古いバージョンの TLS (または SSL)のサポートを含めるという面倒な理由がない限り、システムが最新バージョンの TLS のみを使用して接続をネゴシエートできるようにします。
SSL バージョン 2 または 3 を使用したネゴシエーションを許可しないでください。これらのバージョンは両方とも、深刻なセキュリティーの脆弱性があります。TLS バージョン 1.0 以降を使用したネゴシエーションのみを許可します。TLS の現行バージョン 1.2 が常に推奨されます。
TLS 拡張機能、特定の暗号(以下を参照)、およびその他の回避策の使用に依存することに注意してください。すべての TLS 接続ピアは、安全な再ネゴシエーション表示(RFC 5746)を実装する必要があり、圧縮をサポートしてはならず、CBCモード暗号(Lucky Thirteen 攻撃)に対するタイミング攻撃の緩和策を実装する必要があります。TLS 1.0 クライアントは、レコード分割を追加で実装する必要があります(BEAST 攻撃に対する回避策)。TLS 1.2 は、既知の問題のない AES-GCM、AES-CCM、または Camellia-GCM などの Authenticated Encryption with Associated Data (AEAD)モード暗号をサポートします。ここで述べた緩和策はすべて、Red Hat Enterprise Linux に含まれる暗号ライブラリーに実装されています。
| プロトコルのバージョン | 推奨される使用方法 |
|---|---|
SSL v2 |
使用しないでください。深刻なセキュリティー上の脆弱性があります。
|
SSL v3 |
使用しないでください。深刻なセキュリティー上の脆弱性があります。
|
TLS 1.0 |
必要に応じて相互運用性の目的で使用します。相互運用性を保証する方法で緩和できない既知の問題があるため、緩和策はデフォルトで有効になっていません。最新の暗号スイートには対応しません。
|
TLS 1.1 |
必要に応じて相互運用性の目的で使用します。既知の問題はありませんが、Red Hat Enterprise Linux のすべての
TLS 実装に含まれるプロトコル修正に依存します。最新の暗号スイートには対応しません。
|
TLS 1.2 |
推奨されるバージョン。最新の
AEAD 暗号スイートに対応します。
|
TLS 1. 1 または 1.2 のサポートを提供していても、TLS 1.0 を使用するように設定されて い ます。これは、最新バージョンの TLS をサポートしていない可能性のある外部サービスとの最高レベルの相互運用性を実現しようとする試みによって動機付けされます。相互運用性の要件に応じて、利用可能な最高バージョンの TLS を有効にします。
SSL v3 の使用は推奨されません。ただし、安全ではなく、一般的な使用には適していないと考えられているにもかかわらず、SSL v3 を有効にしておく必要があります。暗号化をサポートしていないサービスを使用している場合でも、stunnel を使用して通信を安全に暗号化する方法については、「stunnel の使用」 を参照してください。
暗号化スイート
RC4 または HMAC-MD5 をベースとする暗号化スイートも可能であれば、無効にする必要があります。いわゆるエクスポート暗号化スイートも同様です。エクスポート暗号化スイートは意図的に弱くなっているため、侵入が容易になっています。
3DES 暗号は 168 ビットの使用を公開しますが、実際には 112 ビットのセキュリティーを提供します。
RSA 鍵交換は除外されますが、ECDHE および DHE を使用できます。この 2 つのうち、ECDHE が高速であるため、選択が推奨されます。
AES-GCM などの AEAD 暗号は、パディング oracle 攻撃に対して脆弱ではないため、CBC-mode 暗号よりも優先する必要があります。また、多くの場合、特にハードウェアに AES の暗号化アクセラレーターがある場合、AES-GCM は CBC モードの AES よりも高速です。
ECDSA 証明書で ECDHE 鍵交換を使用する場合、トランザクションは純粋な RSA 鍵交換よりもさらに高速になります。レガシークライアントのサポートを提供するために、サーバーに証明書と鍵のペアを 2 つインストールします。1 つは ECDSA 鍵(新しいクライアント用)と RSA 鍵(レガシークライアント用)です。
公開鍵の長さ
RSA 鍵を使用する場合は、少なくとも SHA-256 で署名されている 3072 ビット以上の鍵の長さを常に優先します。これは、実際の 128 ビットのセキュリティーに対して十分な大きさです。
4.13.2. TLS 実装の使用 リンクのコピーリンクがクリップボードにコピーされました!
TLS の複数のフル機能の実装が同梱されています。このセクションでは、OpenSSL および GnuTLS の設定について説明します。個々のアプリケーションで TLS サポートを設定する方法については、「特定アプリケーションの設定」 を参照してください。
TLS 実装は、TLSで保護された通信を確立および使用する際に結合されるすべての要素を定義するさまざまな 暗号スイート のサポートを提供します。
TLS 実装またはその実装を利用するアプリケーションの更新またはアップグレードごとに、必ず設定を確認してください。新しいバージョンでは、有効化したくない、かつ現在の設定では無効化できない新しい暗号スイートが導入される可能性があります。
4.13.2.1. OpenSSL での暗号化スイートの使用 リンクのコピーリンクがクリップボードにコピーされました!
SSL プロトコルおよび TLS プロトコルをサポートするツールキットおよび暗号化ライブラリーです。Red Hat Enterprise Linux 7 では、設定ファイルは /etc/pki/tls/openssl.cnf で提供されます。この設定ファイルのフォーマットは、config(1) に記載されています。「OpenSSL の設定」も参照してください。
openssl ciphers -v 'ALL:COMPLEMENTOFALL'
~]$ openssl ciphers -v 'ALL:COMPLEMENTOFALL'
HIGH グループに属すると定義されているスイートのみをリストアップするには、次のコマンドを使用します。
openssl ciphers -v 'HIGH'
~]$ openssl ciphers -v 'HIGH'
一時的な省略曲線 Diffie-Hellman 鍵交換および ECDSA 暗号を優先し、RSA 鍵交換を省略します(これにより 完全な転送秘密性が確保されます)。
4.13.2.2. GnuTLS での暗号化スイートの使用 リンクのコピーリンクがクリップボードにコピーされました!
SSL および TLS プロトコルおよび関連テクノロジーを実装する通信ライブラリーです。
-l (または --list)オプションを指定して gnutls-cli コマンドを使用して、サポートされているすべての暗号スイートを一覧表示します。
gnutls-cli -l
~]$ gnutls-cli -l
-l オプションによって表示される暗号スイートのリストを絞り込むには、1 つ以上のパラメーター( GnuTLS ドキュメントの 優先度文字列 および キーワード と呼ばれます)を --priority オプションに渡します。利用可能なすべての優先度文字列の一覧は、http://www.gnutls.org/manual/gnutls.html#Priority-Strings の GnuTLS ドキュメントを参照してください。たとえば、次のコマンドを実行すると、少なくとも 128 ビットのセキュリティーを提供する暗号スイートのリストを取得できます。
gnutls-cli --priority SECURE128 -l
~]$ gnutls-cli --priority SECURE128 -l
RSA 鍵交換と DSS 認証も禁止されています。
4.13.3. 特定アプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
TLS に独自の設定メカニズムを提供します。このセクションでは、最も一般的に使用されるサーバーアプリケーションで採用されている TLS関連の設定ファイルについて説明し、一般的な設定の例を提供します。
4.13.3.1. Apache HTTP Server の設定 リンクのコピーリンクがクリップボードにコピーされました!
TLS のニーズに OpenSSL ライブラリーと NSS ライブラリーの両方を使用できます。TLS ライブラリーの選択に応じて、mod_ssl または mod_nss モジュールのいずれかをインストールする必要があります(ディープパッケージで提供される)。たとえば、OpenSSL mod_ssl モジュールを提供するパッケージをインストールするには、root で以下のコマンドを実行します。
yum install mod_ssl
~]# yum install mod_ssl
/etc/httpd/conf.d/ssl.conf 設定ファイルをインストールします。このファイルを使用して、Apache HTTP Server の TLS関連の設定を変更します。同様に、mod_nss パッケージは /etc/httpd/conf.d/nss.conf 設定ファイルをインストールします。
TLS 設定を含む Apache HTTP Server の完全なドキュメントを取得します。/etc/httpd/conf.d/ssl.conf 設定ファイルで利用可能なディレクティブの詳細は、/usr/share/httpd/manual/mod/mod_ssl.html を参照してください。さまざまな設定の例は /usr/share/httpd/manual/ssl/ssl_howto.html にあります。
/etc/httpd/conf.d/ssl.conf 設定ファイルの設定を変更する場合は、少なくとも以下の 3 つのディレクティブを考慮してください。
-
SSLProtocol - このディレクティブを使用して、許可する
TLS(またはSSL)のバージョンを指定します。 -
SSLCipherSuite - 優先する暗号化スイートを指定する、もしくは許可しないスイートを無効にするディレクティブです。
-
SSLHonorCipherOrder - コメントを解除して、このディレクティブを
onに設定し、接続しているクライアントが指定した暗号の順序に準拠するようにします。
SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite HIGH:!aNULL:!MD5 SSLHonorCipherOrder on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5
SSLHonorCipherOrder on
/etc/httpd/conf.d/nss.conf 設定ファイルを変更します。mod_nss モジュールは mod_ssl から派生しているため、設定ファイルの構造や利用可能なディレクティブなど、多くの機能を共有します。mod_nss ディレクティブには、SSL の代わりに NSS の接頭辞があることに注意してください。mod_nss に該当しない mod_ssl 設定ディレクティブの一覧を含む mod_nss に関する情報の概要は、https://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html を参照してください。
4.13.3.2. Dovecot メールサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
TLS を使用するように Dovecot メールサーバーのインストールを設定するには、/etc/dovecot/conf.d/10-ssl.conf 設定ファイルを変更します。このファイルで利用可能な基本的な設定ディレクティブの一部は、/usr/share/doc/dovecot-2.2.10/wiki/SSL.DovecotConfiguration.txt にあります(このヘルプファイルは、Dovecotの標準インストールとともにインストールされます)。
/etc/dovecot/conf.d/10-ssl.conf 設定ファイルの設定を変更する場合は、少なくとも以下の 3 つのディレクティブを考慮してください。
-
ssl_protocols - このディレクティブを使用して、許可する
TLS(またはSSL)のバージョンを指定します。 -
ssl_cipher_list - 優先する暗号化スイートを指定する、もしくは許可しないスイートを無効にするディレクティブです。
-
ssl_prefer_server_ciphers - コメントを解除して、このディレクティブを
yesに設定して、接続しているクライアントが指定した暗号の順序に準拠するようにします。
ssl_protocols = !SSLv2 !SSLv3 ssl_cipher_list = HIGH:!aNULL:!MD5 ssl_prefer_server_ciphers = yes
ssl_protocols = !SSLv2 !SSLv3
ssl_cipher_list = HIGH:!aNULL:!MD5
ssl_prefer_server_ciphers = yes
4.13.4. 追加情報 リンクのコピーリンクがクリップボードにコピーされました!
インストールされているドキュメント
- config(1) :
/etc/ssl/openssl.conf設定ファイルの形式を説明します。 - ciphers(1) : 利用可能な OpenSSL キーワードおよび暗号文字列の一覧が含まれます。
/usr/share/httpd/manual/mod/ mod_ssl.html: Apache HTTP Server の mod_ssl モジュールが使用する/etc/httpd/conf.d/ssl.conf設定ファイルで利用可能なディレクティブの詳細が含まれています。/usr/share/httpd/manual/ssl/ssl_howto.html: Apache HTTP Server の mod_ssl モジュールが使用する/etc/httpd/conf.d/ssl.conf設定ファイルの実際の設定例が含まれています。/usr/share/doc/dovecot-2.2.: Dovecot メールサーバーが使用する /etc/dovecot/conf.d/10-ssl.conf 設定ファイルで利用可能な基本的な設定ディレクティブの一部を説明します。10/wiki/SSL.DovecotConfiguration.txt
オンラインドキュメント
- Red Hat Enterprise Linux 7 SELinux ユーザーおよび管理者のガイド: Red Hat Enterprise Linux 7 『の SELinux ユーザーおよび管理者のガイド』 では、SELinux の原則と、SELinux を Apache HTTP Server などのさまざまなサービスで設定および使用する方法を説明します。
関連項目
- 「OpenSSL の使用」 では、OpenSSL を使用して鍵を作成および管理し、証明書を生成し、ファイルを暗号化および復号化する方法について説明しています。
4.15. MACsec の使用 リンクのコピーリンクがクリップボードにコピーされました!
Media Access Control Security (MACsec IEEE 802.1AE)は、LAN のすべてのトラフィックを GCM-AES-128 アルゴリズムで暗号化して認証します。MACsec は、IP だけでなく、ARP (Address Resolution Protocol)、ND (ND)、または DHCP も保護できます。IPsec は、ネットワーク層(レイヤー 3)および SSL または TLS をアプリケーション層(レイヤー 7)上で動作しますが、MACsec はデータリンク層(レイヤー 2)で動作します。MACsec と他のネットワーク層のセキュリティープロトコルを組み合わせて、これらの標準規格が提供するさまざまなセキュリティー機能を活用します。
MACsec ネットワークのアーキテクチャー、ユースケースシナリオ、設定例の詳細は、MACsec: a different solution to encrypt network traffic の記事を参照してください。
4.16. scrubを使用してデータを安全に削除 リンクのコピーリンクがクリップボードにコピーされました!
yum install scrub
~]# yum install scrub
-
文字またはブロックデバイス - ディスク全体に対応する 特殊ファイル がスクラブされ、その上のすべてのデータが破棄されます。これが最も効果的な方法です。
scrub [OPTIONS] special file
scrub [OPTIONS] special fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
ファイル - 通常のファイルはスクラブされ、ファイル内のデータのみが破棄されます。
scrub [OPTIONS] file
scrub [OPTIONS] fileCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
ディレクトリー -Xオプションを使用すると、ディレクトリーが作成され、ファイルシステムがいっぱいになるまで、ファイルで埋め尽くされます。次に、ファイルモードの場合と同様にファイルがスクラブされます。scrub -X [OPTIONS] directory
scrub -X [OPTIONS] directoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
例4.7 Raw デバイスのスクラブ
例4.8 ファイルのスクラブ
- 1MB ファイルを作成します。
base64 /dev/urandom | head -c $[ 1024*1024 ] > file.txt
~]$ base64 /dev/urandom | head -c $[ 1024*1024 ] > file.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルサイズを表示します。
ls -lh
~]$ ls -lh total 1.0M -rw-rw-r--. 1 username username 1.0M Sep 8 15:23 file.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルの内容を表示します。
head -1 file.txt
~]$ head -1 file.txt JnNpaTEveB/IYsbM9lhuJdw+0jKhwCIBUsxLXLAyB8uItotUlNHKKUeS/7bCRKDogEP+yJm8VQkLCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルをスクラブします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルの内容がスクラブされていることを確認します。
~]$ cat file.txt SCRUBBED!
~]$ cat file.txt SCRUBBED!Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルサイズに変更がないことを確認します。
ls -lh
~]$ ls -lh total 1.0M -rw-rw-r--. 1 username username 1.0M Sep 8 15:24 file.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 ファイアウォールの使用 リンクのコピーリンクがクリップボードにコピーされました!
5.1. firewalldの使用 リンクのコピーリンクがクリップボードにコピーされました!
firewalld は、D-Bus インターフェイスを使用して動的にカスタマイズ可能なホストベースのファイアウォールを提供するファイアウォールサービスデーモンです。ルールが変更するたびに、ファイアウォールデーモンを再起動しなくても、ルールの作成、変更、および削除を動的に可能にします。
firewalld は、ゾーン および サービス の概念を使用して、トラフィック管理を簡素化します。ゾーンは、事前定義したルールセットです。ネットワークインターフェイスおよびソースをゾーンに割り当てることができます。許可されているトラフィックは、コンピューターが接続するネットワークと、このネットワークが割り当てられているセキュリティーレベルに従います。ファイアウォールサービスは、特定のサービスに着信トラフィックを許可するのに必要なすべての設定を扱う事前定義のルールで、ゾーンに適用されます。
firewalld は、明示的に開いていないポートのトラフィックをすべてブロックします。trusted などのゾーンでは、デフォルトですべてのトラフィックを許可します。
図5.1 ファイアウォールスタック
5.1.1. ゾーン リンクのコピーリンクがクリップボードにコピーされました!
firewalld を使用して、ユーザーがインターフェイスに配置する信頼レベルと、そのネットワーク内のトラフィックに応じて、複数のゾーンにネットワークを分離できます。接続は、1 つのゾーンにしか指定できませんが、ゾーンは多くのネットワーク接続に使用できます。
firewalld にインターフェイスのゾーンを通知します。NetworkManager、firewall-config ツール、または firewall-cmd コマンドラインツールを使用して、インターフェイスにゾーンを割り当てることができます。後者の 2 つは、適切な NetworkManager 設定ファイルのみを編集します。firewall-cmd または firewall-config を使用してインターフェイスのゾーンを変更すると、リクエストは NetworkManager に転送され、firewalld では処理されません。
/usr/lib/firewalld/zones/ ディレクトリーに保存され、利用可能なネットワークインターフェイスに即座に適用できます。このファイルは、変更しないと /etc/firewalld/zones/ ディレクトリーにコピーされません。以下の表は、事前定義したゾーンのデフォルト設定について説明しています。
blockIPv4の場合は icmp-host-prohibited メッセージ、IPv6の場合は icmp6- adm-prohibited メッセージで、すべての着信ネットワーク接続が拒否されます。システムで開始したネットワーク接続のみが可能です。dmz- 公開アクセスは可能ですが、内部ネットワークへのアクセスに制限がある非武装地帯にあるコンピューター向けです。選択した着信接続のみが許可されます。
-
drop - 着信ネットワークパケットは、通知なしで遮断されます。発信ネットワーク接続だけが可能です。
external- マスカレードをルーター用に特別に有効にした外部ネットワークでの使用向けです。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択した着信接続のみが許可されます。
home- そのネットワークでその他のコンピューターをほぼ信頼できる自宅での使用向けです。選択した着信接続のみが許可されます。
internal- そのネットワークでその他のコンピューターをほぼ信頼できる内部ネットワーク向けです。選択した着信接続のみが許可されます。
public- そのネットワークでその他のコンピューターを信頼できないパブリックエリーア向けです。選択した着信接続のみが許可されます。
trusted- すべてのネットワーク接続が許可されます。
work- そのネットワークで、その他のコンピューターをほぼ信頼できる職場での使用向けです。選択した着信接続のみが許可されます。
firewalld のデフォルトゾーンが public ゾーンに設定されます。デフォルトゾーンは変更できます。
5.1.2. 事前定義サービス リンクのコピーリンクがクリップボードにコピーされました!
firewalld.service (5) の man ページで説明されています。サービスは、個別の XML 設定ファイルで指定します。このファイルは、service-name.xml の形式で指定されます。プロトコル名は、firewalld のサービス名またはアプリケーション名よりも優先されます。
5.1.3. ランタイムおよび永続化の設定 リンクのコピーリンクがクリップボードにコピーされました!
firewalld が実行されている間にのみ適用されます。firewalld を再起動すると、設定は 永続的な 値に戻ります。
--permanent オプションを使用して適用します。firewalld の実行中に変更を永続化させるには、--runtime-to-permanent firewall-cmd オプションを使用します。
--permanent オプションのみを使用して firewalld の実行中にルールを設定すると、firewalld が再起動する前にルールが有効になりません。ただし、firewalld を再起動すると、開いているポートがすべて閉じ、ネットワークトラフィックが停止します。
5.1.4. CLI を使用したランタイムおよび永続化の設定の変更 リンクのコピーリンクがクリップボードにコピーされました!
--permanent オプションを使用します。
firewall-cmd --permanent <other options>
~]# firewall-cmd --permanent <other options>
- 以下のように、ランタイム設定を変更して、永続化します。
firewall-cmd <other options> firewall-cmd --runtime-to-permanent
~]# firewall-cmd <other options> ~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 永続的な設定を行い、ランタイムモードで設定を再ロードします。
firewall-cmd --permanent <other options> firewall-cmd --reload
~]# firewall-cmd --permanent <other options> ~]# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
--timeout オプションを使用します。指定した時間が経つと、変更は元に戻ります。このオプションを使用した場合は、--permanent オプションが無効になります。
SSH サービスを追加するには、次のコマンドを実行します。
firewall-cmd --add-service=ssh --timeout 15m
~]# firewall-cmd --add-service=ssh --timeout 15m
5.2. firewall-config GUI 設定ツールのインストール リンクのコピーリンクがクリップボードにコピーされました!
root としてインストールします。
yum install firewall-config
~]# yum install firewall-config
Software と入力して、Software Sources アプリケーションを起動します。右上隅の検索ボタンを選択すると表示される検索ボックスに firewall と入力します。検索結果から 項目を選択し、 ボタンをクリックします。
firewall と 入力 して Enter を押します。
5.3. firewalldの現在の状況および設定の表示 リンクのコピーリンクがクリップボードにコピーされました!
5.3.1. firewalldの現在の状況の表示 リンクのコピーリンクがクリップボードにコピーされました!
firewalld は、デフォルトでシステムにインストールされます。firewalld CLI インターフェイスを使用して、サービスが実行されていることを確認します。
firewall-cmd --state
~]# firewall-cmd --state
firewalld の設定方法と、強制しているルールを確認することが重要です。ファイアウォール設定を表示する場合は、「現在の firewalld 設定の表示」を参照してください。
5.3.2. 現在の firewalld 設定の表示 リンクのコピーリンクがクリップボードにコピーされました!
5.3.2.1. GUI を使用して許可されるサービスの表示 リンクのコピーリンクがクリップボードにコピーされました!
firewall-config
~]$ firewall-config
図5.2 firewall-config のサービスタブ
5.3.2.2. CLI を使用した firewalld 設定の表示 リンクのコピーリンクがクリップボードにコピーされました!
--list-all オプションは、firewalld 設定の完全な概要を表示します。
firewalld はゾーンを使用してトラフィックを管理します。--zone オプションでゾーンを指定しないと、コマンドは、アクティブネットワークインターフェイスおよび接続に割り当てたデフォルトゾーンに対して有効になります。
--zone=zone-name引数を firewall- cmd --list-all コマンドに追加します。以下に例を示します。
firewalld の man ページを参照するか、コマンド help を使用してオプションの一覧を表示します。
firewall-cmd --list-services
~]# firewall-cmd --list-services
ssh dhcpv6-client
SSH サービスを許可し、firewalld がサービスに必要なポート(22)を開くことができます。後に、許可されたサービスを一覧表示すると、リストには SSH サービスが表示されますが、開いているポートを一覧表示すると、何も表示されません。したがって、--list-all オプションを使用して、完全な情報を取得することが推奨されます。
5.4. firewalldの起動 リンクのコピーリンクがクリップボードにコピーされました!
firewalld を起動するには、root で以下のコマンドを入力します。
systemctl unmask firewalld systemctl start firewalld
~]# systemctl unmask firewalld
~]# systemctl start firewalld
firewalld が自動的に起動するようにするには、root で次のコマンドを実行します。
systemctl enable firewalld
~]# systemctl enable firewalld
5.5. firewalldの停止 リンクのコピーリンクがクリップボードにコピーされました!
firewalld を停止するには、root で以下のコマンドを入力します。
systemctl stop firewalld
~]# systemctl stop firewalld
firewalld が自動的に起動しないようにするには、root で次のコマンドを実行します。
systemctl disable firewalld
~]# systemctl disable firewalld
D-Bus インターフェイスにアクセスして firewalld を開始しておらず、他のサービスで firewalld が必要な場合は、root で次のコマンドを実行します。
systemctl mask firewalld
~]# systemctl mask firewalld
5.6. トラフィックの制御 リンクのコピーリンクがクリップボードにコピーされました!
5.6.1. 事前定義サービス リンクのコピーリンクがクリップボードにコピーされました!
/etc/firewalld/services/ ディレクトリーの XML ファイルを編集することもできます。ユーザーがサービスを追加または変更しないと、対応する XML ファイルは /etc/firewalld/services/ にはありません。サービスを追加または変更する場合は、/usr/lib/firewalld/services/ ディレクトリーのファイルをテンプレートとして使用できます。
5.6.2. 緊急時に CLI を使用してすべてのトラフィックの無効化 リンクのコピーリンクがクリップボードにコピーされました!
firewall-cmd --panic-on
~]# firewall-cmd --panic-on
firewall-cmd --panic-off
~]# firewall-cmd --panic-off
firewall-cmd --query-panic
~]# firewall-cmd --query-panic
5.6.3. CLI を使用して事前定義されたサービスでトラフィックの制御 リンクのコピーリンクがクリップボードにコピーされました!
firewalld に追加することです。これにより、必要なすべてのポートが開き、service definition file に従ってその他の設定が変更されます。
- サービスが許可されていないことを確認します。
firewall-cmd --list-services
~]# firewall-cmd --list-services ssh dhcpv6-clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 事前定義したサービスの一覧を表示します。
firewall-cmd --get-services
~]# firewall-cmd --get-services RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry ... [output truncated]Copy to Clipboard Copied! Toggle word wrap Toggle overflow - サービスを、許可されたサービスに追加します。
firewall-cmd --add-service=<service-name>
~]# firewall-cmd --add-service=<service-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.4. GUI を使用して事前定義サービスでトラフィックを制御 リンクのコピーリンクがクリップボードにコピーされました!
IPv4 または IPv6)へのトラフィックを制限できます。
5.6.5. 新しいサービスの追加 リンクのコピーリンクがクリップボードにコピーされました!
/etc/firewalld/services/ にある XML ファイルを編集することもできます。ユーザーがサービスを追加または変更しないと、対応する XML ファイルは /etc/firewalld/services/ にはありません。サービスを追加または変更する場合は、/usr/lib/firewalld/services/ ファイルをテンプレートとして使用できます。
firewalld がアクティブな場合は firewall-offline-cmd を使用します。以下のコマンドを実行して、新規で空のサービスを追加します。
firewall-cmd --new-service=service-name
~]$ firewall-cmd --new-service=service-name
firewall-cmd --new-service-from-file=service-name.xml
~]$ firewall-cmd --new-service-from-file=service-name.xml
--name=service-name を指定して、サービス名を変更できます。
/etc/firewalld/services/ に配置されます。
root で以下のコマンドを実行して、サービスを手動でコピーできます。
cp /usr/lib/firewalld/services/service-name.xml /etc/firewalld/services/service-name.xml
~]# cp /usr/lib/firewalld/services/service-name.xml /etc/firewalld/services/service-name.xml
firewalld は、最初に /usr/lib/firewalld/services からファイルを読み込みます。ファイルが /etc/firewalld/services に配置されており、ファイルが有効な場合は、/usr/lib/firewalld/services から一致するファイルを上書きします。/usr/lib/firewalld/services の上書きファイルは、/etc/firewalld/services 内の一致するファイルが削除されるとすぐに、またはサービスのデフォルトを読み込むように firewalld が求められた場合に使用されます。これに該当するのは永続環境のみです。ランタイム環境でフォールバックさせるには、再読み込みが必要です。
5.6.6. CLI を使用したポートの制御 リンクのコピーリンクがクリップボードにコピーされました!
httpd デーモンは、たとえばポート 80 をリッスンします。ただし、デフォルトでは、システム管理者は、セキュリティーを強化するため、またはその他の理由により、別のポートをリッスンするようにデーモンを設定します。
ポートを開く
- 許可されているポートの一覧を表示します。
firewall-cmd --list-ports
~]# firewall-cmd --list-portsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 許可されているポートにポートを追加して、着信トラフィックに対してそのポートを開きます。
firewall-cmd --add-port=port-number/port-type
~]# firewall-cmd --add-port=port-number/port-typeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
tcp、udp、sctp、または dccp のいずれかです。このタイプは、ネットワーク接続の種類と一致させる必要があります。
ポートを閉じる
firewalld でそのポートを閉じます。ポートをそのままにするとセキュリティーリスクとなるため、使用されなくなったらすぐに不要なポートを閉じることが強く推奨されます。
- 許可されているポートの一覧を表示します。
firewall-cmd --list-ports
~]# firewall-cmd --list-ports [WARNING] ==== This command will only give you a list of ports that have been opened as ports. You will not be able to see any open ports that have been opened as a service. Therefore, you should consider using the --list-all option instead of --list-ports. ====Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 許可されているポートからポートを削除し、着信トラフィックに対して閉じます。
firewall-cmd --remove-port=port-number/port-type
~]# firewall-cmd --remove-port=port-number/port-typeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6.7. GUI を使用してポートを開く リンクのコピーリンクがクリップボードにコピーされました!
5.6.8. GUI を使用してプロトコルを使用したトラフィックの制御 リンクのコピーリンクがクリップボードにコピーされました!
5.6.9. GUI を使用してソースポートを開く リンクのコピーリンクがクリップボードにコピーされました!
5.7. ゾーンの使用 リンクのコピーリンクがクリップボードにコピーされました!
5.7.1. ゾーンの一覧 リンクのコピーリンクがクリップボードにコピーされました!
firewall-cmd --get-zones
~]# firewall-cmd --get-zones
firewall-cmd --list-all-zones
~]# firewall-cmd --list-all-zones
firewall-cmd --zone=zone-name --list-all
~]# firewall-cmd --zone=zone-name --list-all
5.7.2. 特定ゾーンの firewalld 設定の変更 リンクのコピーリンクがクリップボードにコピーされました!
--zone=zone-name オプションを使用します。たとえば、public ゾーンで SSH サービスを許可するには、次のコマンドを実行します。
firewall-cmd --add-service=ssh --zone=public
~]# firewall-cmd --add-service=ssh --zone=public
5.7.3. デフォルトゾーンの変更 リンクのコピーリンクがクリップボードにコピーされました!
firewalld サービスを再起動するたびに、firewalld はデフォルトゾーンの設定を読み込み、アクティブにします。
- 現在のデフォルトゾーンを表示します。
firewall-cmd --get-default-zone
~]# firewall-cmd --get-default-zoneCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しいデフォルトゾーンを設定します。
firewall-cmd --set-default-zone zone-name
~]# firewall-cmd --set-default-zone zone-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow
--permanent オプションを使用しなくても、設定は永続化します。
5.7.4. ゾーンへのネットワークインターフェイスの割り当て リンクのコピーリンクがクリップボードにコピーされました!
- アクティブゾーン、およびそのゾーンに割り当てられているインターフェイスを一覧表示します。
firewall-cmd --get-active-zones
~]# firewall-cmd --get-active-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 別のゾーンにインターフェイスを割り当てます。
firewall-cmd --zone=zone-name --change-interface=<interface-name>
~]# firewall-cmd --zone=zone-name --change-interface=<interface-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
--permanent オプションを使用する必要はありません。新しいデフォルトゾーンを設定すると、設定は永続化されます。
5.7.5. ネットワーク接続にデフォルトゾーンの割り当て リンクのコピーリンクがクリップボードにコピーされました!
/etc/sysconfig/network-scripts/ifcfg-connection-name ファイルを編集し、この接続にゾーンを割り当てる行を追加します。
ZONE=zone-name
ZONE=zone-name
5.7.6. 新しいゾーンの作成 リンクのコピーリンクがクリップボードにコピーされました!
--permanent オプションが必要となり、このオプションがなければコマンドは動作しません。
- 新しいゾーンを作成します。
firewall-cmd --permanent --new-zone=zone-name
~]# firewall-cmd --permanent --new-zone=zone-nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しいゾーンをリロードします。
firewall-cmd --reload
~]# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 作成したゾーンが永続設定に追加されたかどうかを確認します。
firewall-cmd --get-zones
~]# firewall-cmd --get-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.7.7. 設定ファイルを使用した新しいゾーンの作成 リンクのコピーリンクがクリップボードにコピーされました!
firewalld ゾーン設定ファイルには、ゾーンの情報が含まれます。これは、XML ファイル形式で、ゾーンの説明、サービス、ポート、プロトコル、icmp-block、マスカレード、転送ポート、およびリッチ言語ルールです。ファイル名は zone-name.xml である必要があります。ここでは、zone-name の長さは 17 文字に制限されます。ゾーンの設定ファイルは、/usr/lib/firewalld/zones/ ディレクトリーおよび /etc/firewalld/zones/ ディレクトリーにあります。
TCP プロトコルと UDP プロトコルの両方に、1 つのサービス(SSH)と 1 つのポート範囲を許可する設定を示しています。
firewalld.zone の man ページを参照してください。
5.7.8. 着信トラフィックにデフォルトの動作を設定するゾーンターゲットの使用 リンクのコピーリンクがクリップボードにコピーされました!
デフォルト の、ACCEPT、REJECT、および DROP の 3 つのオプションがあります。ターゲットを ACCEPT に設定すると、特定のルールで無効にされたパケット以外の着信パケットをすべて受け入れます。ターゲットを REJECT または DROP に設定すると、特定のルールで許可したパケット以外の着信パケットをすべて無効にします。パケットが拒否されるとソースマシンに通知されますが、パケットが破棄される時は情報が送信されません。
- 特定ゾーンに対する情報を一覧表示して、デフォルトゾーンを確認します。
firewall-cmd --zone=zone-name --list-all
~]$ firewall-cmd --zone=zone-name --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ゾーンに新しいターゲットを設定します。
firewall-cmd --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>
~]# firewall-cmd --zone=zone-name --set-target=<default|ACCEPT|REJECT|DROP>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8. ゾーンを使用し、ソースに応じた着信トラフィックの管理 リンクのコピーリンクがクリップボードにコピーされました!
5.8.1. ソースの追加 リンクのコピーリンクがクリップボードにコピーされました!
- 現在のゾーンにソースを設定するには、次のコマンドを実行します。
firewall-cmd --add-source=<source>
~]# firewall-cmd --add-source=<source>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 特定ゾーンのソース IP アドレスを設定するには、次のコマンドを実行します。
firewall-cmd --zone=zone-name --add-source=<source>
~]# firewall-cmd --zone=zone-name --add-source=<source>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
trusted ゾーンで 192.168.2.15 からのすべての着信トラフィックを許可します。
- 利用可能なゾーンの一覧を表示します。
firewall-cmd --get-zones
~]# firewall-cmd --get-zonesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 永続化モードで、信頼ゾーンにソース IP を追加します。
firewall-cmd --zone=trusted --add-source=192.168.2.15
~]# firewall-cmd --zone=trusted --add-source=192.168.2.15Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.2. ソースの削除 リンクのコピーリンクがクリップボードにコピーされました!
- 必要なゾーンに対して許可されているソースの一覧を表示します。
firewall-cmd --zone=zone-name --list-sources
~]# firewall-cmd --zone=zone-name --list-sourcesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ゾーンからソースを永続的に削除します。
firewall-cmd --zone=zone-name --remove-source=<source>
~]# firewall-cmd --zone=zone-name --remove-source=<source>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.3. ソースポートの追加 リンクのコピーリンクがクリップボードにコピーされました!
--add-source-port オプションを使用してソースポートを指定します。--add-source オプションと組み合わせて、トラフィックを特定の IP アドレスまたは IP 範囲に制限できます。
firewall-cmd --zone=zone-name --add-source-port=<port-name>/<tcp|udp|sctp|dccp>
~]# firewall-cmd --zone=zone-name --add-source-port=<port-name>/<tcp|udp|sctp|dccp>
5.8.4. ソースポートの削除 リンクのコピーリンクがクリップボードにコピーされました!
firewall-cmd --zone=zone-name --remove-source-port=<port-name>/<tcp|udp|sctp|dccp>
~]# firewall-cmd --zone=zone-name --remove-source-port=<port-name>/<tcp|udp|sctp|dccp>
5.8.5. ゾーンおよびソースを使用して特定ドメインのみに対してサービスの許可 リンクのコピーリンクがクリップボードにコピーされました!
192.0.2.0/24 ネットワークからの HTTP トラフィックのみを許可します。
192.0.2.0/24 からのトラフィックではすべてのネットワーク接続が許可されるため、セキュリティー上のリスクがあります。
- 利用可能なゾーンの一覧を表示します。
firewall-cmd --get-zones
~]# firewall-cmd --get-zones block dmz drop external home internal public trusted workCopy to Clipboard Copied! Toggle word wrap Toggle overflow - IP 範囲を internal ゾーンに追加し、ソースから発信されるトラフィックを ゾーン経由でルーティングします。
firewall-cmd --zone=internal --add-source=192.0.2.0/24
~]# firewall-cmd --zone=internal --add-source=192.0.2.0/24Copy to Clipboard Copied! Toggle word wrap Toggle overflow - http サービスを internal ゾーンに追加します。
firewall-cmd --zone=internal --add-service=http
~]# firewall-cmd --zone=internal --add-service=httpCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow - internal ゾーンがアクティブで、サービスが許可されていることを確認します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8.6. プロトコルに基づいてゾーンが許可したトラフィックの設定 リンクのコピーリンクがクリップボードにコピーされました!
ゾーンへのプロトコルの追加
firewall-cmd --zone=zone-name --add-protocol=port-name/tcp|udp|sctp|dccp|igmp
~]# firewall-cmd --zone=zone-name --add-protocol=port-name/tcp|udp|sctp|dccp|igmp
--add-protocol オプションを指定して igmp 値を使用します。
ゾーンからプロトコルの削除
firewall-cmd --zone=zone-name --remove-protocol=port-name/tcp|udp|sctp|dccp|igmp
~]# firewall-cmd --zone=zone-name --remove-protocol=port-name/tcp|udp|sctp|dccp|igmp
5.9. ポート転送 リンクのコピーリンクがクリップボードにコピーされました!
firewalld を使用すると、システムで特定のポートに到達する着信トラフィックが、選択した別の内部ポートまたは別のマシンの外部ポートに配信されるようにポートのリダイレクトを設定できます。
5.9.1. リダイレクトするポートの追加 リンクのコピーリンクがクリップボードにコピーされました!
firewall-cmd --add-forward-port=port=port-number:proto=tcp|udp|sctp|dccp:toport=port-number
~]# firewall-cmd --add-forward-port=port=port-number:proto=tcp|udp|sctp|dccp:toport=port-number
- 転送するポートを追加します。
firewall-cmd --add-forward-port=port=port-number:proto=tcp|udp:toport=port-number:toaddr=IP
~]# firewall-cmd --add-forward-port=port=port-number:proto=tcp|udp:toport=port-number:toaddr=IPCopy to Clipboard Copied! Toggle word wrap Toggle overflow - マスカレードを有効にします。
firewall-cmd --add-masquerade
~]# firewall-cmd --add-masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
例5.1 同一マシンで TCP ポート 80 からポート 88 へのリダイレクト
- TCP トラフィックに対して、ポート 80 からポート 88 へリダイレクトします。
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=88
~]# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=88Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow - そのポートがリダイレクトされていることを確認します。
firewall-cmd --list-all
~]# firewall-cmd --list-allCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9.2. リダイレクトしているポートの削除 リンクのコピーリンクがクリップボードにコピーされました!
firewall-cmd --remove-forward-port=port=port-number:proto=<tcp|udp>:toport=port-number:toaddr=<IP>
~]# firewall-cmd --remove-forward-port=port=port-number:proto=<tcp|udp>:toport=port-number:toaddr=<IP>
- 転送したポートを削除するには、以下を行います。
firewall-cmd --remove-forward-port=port=port-number:proto=<tcp|udp>:toport=port-number:toaddr=<IP>
~]# firewall-cmd --remove-forward-port=port=port-number:proto=<tcp|udp>:toport=port-number:toaddr=<IP>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - マスカレードを無効にするには、次のコマンドを実行します。
firewall-cmd --remove-masquerade
~]# firewall-cmd --remove-masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
例5.2 同じマシンで TCP ポート 88 に転送されるポート 80 の削除
- リダイレクトしたポートの一覧を表示します。
firewall-cmd --list-forward-ports
~]# firewall-cmd --list-forward-ports port=80:proto=tcp:toport=88:toaddr=Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイアウォールからリダイレクトしたポートを削除します。
firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=88:toaddr=
~]# firewall-cmd --remove-forward-port=port=80:proto=tcp:toport=88:toaddr=Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.10. IP アドレスのマスカレードの設定 リンクのコピーリンクがクリップボードにコピーされました!
external ゾーンの場合)、root で以下のコマンドを入力します。
firewall-cmd --zone=external --query-masquerade
~]# firewall-cmd --zone=external --query-masquerade
yes と出力され、終了ステータスは 0 になります。そうでなければ no と出力され、終了ステータスは 1 になります。zone を省略すると、デフォルトのゾーンが使用されます。
root で以下のコマンドを入力します。
firewall-cmd --zone=external --add-masquerade
~]# firewall-cmd --zone=external --add-masquerade
--permanent オプションを追加してコマンドを繰り返します。
root で以下のコマンドを実行します。
firewall-cmd --zone=external --remove-masquerade
~]# firewall-cmd --zone=external --remove-masquerade
--permanent オプションを追加してコマンドを繰り返します。
詳細は以下を参照してください。
5.11. ICMP リクエストの管理 リンクのコピーリンクがクリップボードにコピーされました!
Internet Control Message Protocol (ICMP)は、接続の問題(要求されたサービスが利用できないなど)を示すエラーメッセージと操作情報を送信するために、さまざまなネットワークデバイスによって使用されるサポートプロトコルです。ICMP は、システム間でデータを交換するために使用されないため、TCP や UDP などのトランスポートプロトコルとは異なります。
ICMP メッセージ(特に echo-request および echo-reply )を使用して、ネットワークに関する情報を示し、さまざまな不正行為についてこのような情報を誤用できます。したがって、firewalld は、ネットワーク情報を保護するための ICMP リクエストをブロックすることを可能にします。
5.11.1. ICMP リクエストの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
ICMP リクエストは、/usr/lib/firewalld/icmptypes/ ディレクトリーにある個別の XML ファイルで説明されています。リクエストの説明は、このファイルを参照してください。firewall-cmd コマンドは、ICMP リクエストの操作を制御します。
ICMP タイプの一覧を表示するには、以下のコマンドを実行します。
firewall-cmd --get-icmptypes
~]# firewall-cmd --get-icmptypes
ICMP リクエストは、IPv4、IPv6、またはその両方のプロトコルで使用できます。ICMP リクエストが使用されているプロトコルを表示するには、次のコマンドを実行します。
firewall-cmd --info-icmptype=<icmptype>
~]# firewall-cmd --info-icmptype=<icmptype>
ICMP リクエストのステータスは、リクエストが現在ブロックされている場合は yes、ブロックされていない場合は no と表示されます。ICMP リクエストが現在ブロックされているかどうかを確認するには、次のコマンドを実行します。
firewall-cmd --query-icmp-block=<icmptype>
~]# firewall-cmd --query-icmp-block=<icmptype>
5.11.2. ICMP リクエストのブロックまたはブロック解除 リンクのコピーリンクがクリップボードにコピーされました!
ICMP リクエストをブロックすると、通常の情報は提供されません。ただし、情報が全く提供されないというわけではありません。クライアントは、特定の ICMP リクエストがブロックされている(拒否される)情報を受け取ります。ICMP リクエストをブロックすると、特に IPv6 トラフィックで通信の問題が発生する可能性があるため、慎重に検討する必要があります。
ICMP リクエストが現在ブロックされているかどうかを確認するには、次のコマンドを実行します。
firewall-cmd --query-icmp-block=<icmptype>
~]# firewall-cmd --query-icmp-block=<icmptype>
ICMP リクエストをブロックするには、次のコマンドを実行します。
firewall-cmd --add-icmp-block=<icmptype>
~]# firewall-cmd --add-icmp-block=<icmptype>
ICMP リクエストのブロックを削除するには、次のコマンドを実行します。
firewall-cmd --remove-icmp-block=<icmptype>
~]# firewall-cmd --remove-icmp-block=<icmptype>
5.11.3. 情報を提供せずに ICMP リクエストのブロック リンクのコピーリンクがクリップボードにコピーされました!
ICMP リクエストをブロックすると、クライアントはブロックしていることを認識します。したがって、ライブの IP アドレスを傍受している潜在的な攻撃者は、IP アドレスがオンラインであることを確認できます。この情報を完全に非表示にするには、ICMP リクエストをすべて破棄する必要があります。
ICMP リクエストをブロックして破棄するには、次のコマンドを実行します。
- ゾーンのターゲットを
DROPに設定します。firewall-cmd --set-target=DROP
~]# firewall-cmd --set-target=DROPCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ICMP リクエストを含むすべてのトラフィックがドロップされるようになりました(明示的に許可したトラフィックを除く)。
ICMP リクエストをブロックして破棄し、その他を許可するには、次のコマンドを実行します。
- ゾーンのターゲットを
DROPに設定します。firewall-cmd --set-target=DROP
~]# firewall-cmd --set-target=DROPCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ICMP ブロックの反転を追加して、すべての
ICMPリクエストを一度にブロックします。firewall-cmd --add-icmp-block-inversion
~]# firewall-cmd --add-icmp-block-inversionCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 許可する ICMP リクエストに
ICMPブロックを追加します。firewall-cmd --add-icmp-block=<icmptype>
~]# firewall-cmd --add-icmp-block=<icmptype>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ICMP リクエストブロックの設定を反転するため、ブロックされていないすべてのリクエストはブロックされます。ブロックされているものはブロックされません。したがって、リクエストのブロックを解除する必要がある場合は、ブロックコマンドを使用してください。
- ゾーンのターゲットを
defaultまたはACCEPTに設定します。firewall-cmd --set-target=default
~]# firewall-cmd --set-target=defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow ICMPリクエストに追加したすべてのブロックを削除します。firewall-cmd --remove-icmp-block=<icmptype>
~]# firewall-cmd --remove-icmp-block=<icmptype>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ICMPブロックの反転を削除します。firewall-cmd --remove-icmp-block-inversion
~]# firewall-cmd --remove-icmp-block-inversionCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 新しい設定を永続化します。
firewall-cmd --runtime-to-permanent
~]# firewall-cmd --runtime-to-permanentCopy to Clipboard Copied! Toggle word wrap Toggle overflow
5.11.4. GUI を使用した ICMP フィルターの設定 リンクのコピーリンクがクリップボードにコピーされました!
ICMP フィルターを有効または無効にするには、firewall-config ツールを起動し、メッセージがフィルターされるネットワークゾーンを選択します。ICMP フィルター タブを 選択し、フィルターリングする ICMP メッセージの各タイプのチェックボックスを選択します。フィルターを無効にするには、チェックボックスの選択を外します。これは方向ごとに設定され、デフォルトではすべてが許可されます。
ICMP タイプのみが許可され、その他はすべて拒否されます。DROP ターゲットを使用するゾーンでは破棄されます。
5.12. firewalldを使用した IP セットの設定および制御 リンクのコピーリンクがクリップボードにコピーされました!
firewalld で対応している IP セットタイプの一覧を表示するには、root で次のコマンドを実行します。
firewall-cmd --get-ipset-types
~]# firewall-cmd --get-ipset-types
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net
5.12.1. コマンドラインクライアントを使用した IP セットオプションの設定 リンクのコピーリンクがクリップボードにコピーされました!
firewalld ゾーンでソースとして使用でき、リッチルールのソースとして使用できます。Red Hat Enterprise Linux 7 では、直接ルールで firewalld で作成された IP セットを使用することが推奨されます。
firewalld が認識している IP セットを一覧表示するには、root で以下のコマンドを実行します。
firewall-cmd --permanent --get-ipsets
~]# firewall-cmd --permanent --get-ipsets
root で永続環境を使用し、以下のコマンドを使用します。
firewall-cmd --permanent --new-ipset=test --type=hash:net
~]# firewall-cmd --permanent --new-ipset=test --type=hash:net
success
IPv4 の hash:net タイプで新しい IP セットを作成します。IPv6 で使用する IP セットを作成するには、--option=family=inet6 オプションを追加します。ランタイム環境で新しい設定を有効にするには、firewalld をリロードします。root で以下のコマンドを実行して、新しい IP セットを一覧表示します。
firewall-cmd --permanent --get-ipsets
~]# firewall-cmd --permanent --get-ipsets
test
root で以下のコマンドを実行します。
firewall-cmd --permanent --info-ipset=test
~]# firewall-cmd --permanent --info-ipset=test
test
type: hash:net
options:
entries:
root で以下のコマンドを実行します。
firewall-cmd --permanent --ipset=test --add-entry=192.168.0.1
~]# firewall-cmd --permanent --ipset=test --add-entry=192.168.0.1
success
root で以下のコマンドを実行します。
firewall-cmd --permanent --ipset=test --get-entries
~]# firewall-cmd --permanent --ipset=test --get-entries
192.168.0.1
root で以下のコマンドを実行します。
firewall-cmd --permanent --ipset=test --add-entries-from-file=iplist.txt
~]# firewall-cmd --permanent --ipset=test --add-entries-from-file=iplist.txt
success
root で以下のコマンドを実行します。
root で以下のコマンドを実行します。
firewall-cmd --permanent --ipset=test --remove-entries-from-file=iplist.txt firewall-cmd --permanent --ipset=test --get-entries
~]# firewall-cmd --permanent --ipset=test --remove-entries-from-file=iplist.txt
success
~]# firewall-cmd --permanent --ipset=test --get-entries
192.168.0.1
root で以下のコマンドを実行します。
firewall-cmd --permanent --zone=drop --add-source=ipset:test
~]# firewall-cmd --permanent --zone=drop --add-source=ipset:test
success
ipset: 接頭辞は、ソースが IP セットであり、IP アドレスまたはアドレス範囲ではない firewalld を示します。
--permanent オプションを使用しないランタイム環境で使用できます。
5.12.2. IP セットのカスタムサービスの設定 リンクのコピーリンクがクリップボードにコピーされました!
firewalld が起動する前に IP セット構造を作成してロードするようにカスタムサービスを設定するには、以下を実行します。
rootで実行されているエディターを使用して、以下のようにファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - firewalld で IP セットを永続的に使用します。
vi /etc/firewalld/direct.xml
~]# vi /etc/firewalld/direct.xml <?xml version="1.0" encoding="utf-8"?> <direct> <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set <replaceable>ipset_name</replaceable> src -j DROP</rule> </direct>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 変更を有効にするには、
firewalldのリロードが必要です。これにより、状態情報を失うことなくファイアウォールがリロードされます (TCP セッションは終了しません) が、リロード中にサービスが中断する可能性があります。firewall-cmd --reload
~]# firewall-cmd --reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
firewalld で管理されない IP セットを使用することは推奨していません。このような IP セットを使用すると、そのセットを参照する永続的なダイレクトルールが必要で、IP セットを作成するカスタムサービスを追加する必要があります。このサービスは、firewalld を起動する前に起動する必要があります。起動しないと、firewalld はこのセットを使用してダイレクトルールを追加できません。/etc/firewalld/direct.xml ファイルを使用して、永続的なダイレクトルールを追加できます。
5.13. iptablesを使用した IP セットの設定および制御 リンクのコピーリンクがクリップボードにコピーされました!
firewalld サービスと iptables (および ip6tables)サービスの基本的な相違点は次のとおりです。
- iptables サービス は設定を
/etc/sysconfig/iptablesおよび/etc/sysconfig/ip6tablesに保存しますが、firewalldは設定を/usr/lib/firewalld/および/etc/firewalld/のさまざまな XML ファイルに保存します。デフォルトでは Red Hat Enterprise Linux にfirewalldがインストールされているため、/etc/sysconfig/iptablesファイルが存在しないことに注意してください。 - iptables サービス では、すべての変更がすべての古いルールをフラッシュし、
/etc/sysconfig/iptablesからすべての新しいルールを読み取ることを意味しますが、firewalldではすべてのルールを再作成することはありません。違いのみが適用されます。その結果、firewalldは、既存の接続を失うことなく、ランタイム時に設定を変更できます。
firewalld の代わりに iptables サービスおよび ip6tables サービスを使用するには、最初に root で以下のコマンドを実行して firewalld を無効にします。
systemctl disable firewalld systemctl stop firewalld
~]# systemctl disable firewalld
~]# systemctl stop firewalld
root で以下のコマンドを入力して、iptables-services パッケージをインストールします。
yum install iptables-services
~]# yum install iptables-services
iptables サービスと ip6tables サービスが含まれます。
iptables サービスおよび ip6tables サービスを起動するには、root で以下のコマンドを入力します。
systemctl start iptables systemctl start ip6tables
~]# systemctl start iptables
~]# systemctl start ip6tables
systemctl enable iptables systemctl enable ip6tables
~]# systemctl enable iptables
~]# systemctl enable ip6tables
iptables -A INPUT -s 10.0.0.0/8 -j DROP iptables -A INPUT -s 172.16.0.0/12 -j DROP iptables -A INPUT -s 192.168.0.0/16 -j DROP
~]# iptables -A INPUT -s 10.0.0.0/8 -j DROP
~]# iptables -A INPUT -s 172.16.0.0/12 -j DROP
~]# iptables -A INPUT -s 192.168.0.0/16 -j DROP
ipset create my-block-set hash:net ipset add my-block-set 10.0.0.0/8 ipset add my-block-set 172.16.0.0/12 ipset add my-block-set 192.168.0.0/16
~]# ipset create my-block-set hash:net
~]# ipset add my-block-set 10.0.0.0/8
~]# ipset add my-block-set 172.16.0.0/12
~]# ipset add my-block-set 192.168.0.0/16
iptables -A INPUT -m set --set my-block-set src -j DROP
~]# iptables -A INPUT -m set --set my-block-set src -j DROP
5.14. ダイレクトインターフェイスの使用 リンクのコピーリンクがクリップボードにコピーされました!
--direct オプションを使用すると、ランタイム時にチェーンを追加および削除できます。ここではいくつかの例を紹介します。詳細は、firewall-cmd (1) man ページを参照してください。
--permanent オプションを追加するか、/etc/firewalld/direct.xml を変更することで、永続的にすることができます。/etc/ firewalld/direct.xml ファイルの詳細は、firewalld.direct (5) の man を参照してください。
5.14.1. ダイレクトインターフェイスを使用するルールの追加 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
firewall-cmd --direct --add-rule ipv4 filter IN_public_allow \
0 -m tcp -p tcp --dport 666 -j ACCEPT
~]# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow \
0 -m tcp -p tcp --dport 666 -j ACCEPT
--permanent オプションを追加します。
5.14.2. ダイレクトインターフェイスを使用したルールの削除 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを実行します。
firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow \
0 -m tcp -p tcp --dport 666 -j ACCEPT
~]# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow \
0 -m tcp -p tcp --dport 666 -j ACCEPT
--permanent オプションを追加します。
5.14.3. ダイレクトインターフェイスを使用したルールの一覧表示 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを入力します。
firewall-cmd --direct --get-rules ipv4 filter IN_public_allow
~]# firewall-cmd --direct --get-rules ipv4 filter IN_public_allow
--get-rules オプション) は、--add-rule オプションを使用して以前に追加されたルールのみを一覧表示することに注意してください。他の手段で追加された既存の iptables ルールは一覧表示されません。
5.15. リッチランゲージ構文を使用した複雑なファイアウォールルールの設定 リンクのコピーリンクがクリップボードにコピーされました!
5.15.1. リッチ言語コマンドの形式 リンクのコピーリンクがクリップボードにコピーされました!
root として実行する必要があります。ルールを追加するコマンドの書式は以下の通りです。
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
s (秒)、m (分)、h (時) を続けて、時間の単位を指定することができる。デフォルトは秒です。
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
firewall-cmd [--zone=zone] --query-rich-rule='rule'
firewall-cmd [--zone=zone] --query-rich-rule='rule'
yes と出力され、終了ステータスは 0 になります。そうでなければ no と出力され、終了ステータスは 1 になります。ゾーンを省略すると、デフォルトのゾーンが使用されます。
5.15.2. リッチルールの構造について リンクのコピーリンクがクリップボードにコピーされました!
NOT キーワードを使用していますが、コマンドラインでは invert="true" オプションが使用されています。
5.15.3. リッチルールのコマンドオプションについて リンクのコピーリンクがクリップボードにコピーされました!
family- ルールファミリー(
ipv4またはipv6のいずれか)を指定すると、ルールがそれぞれIPv4またはIPv6に制限されます。ルールファミリーが指定されていない場合は、IPv4とIPv6の両方にルールが追加されます。ルールで送信元アドレスまたは宛先アドレスが使用されている場合は、ルールファミリーを提供する必要があります。これは、ポートフォワーディングにも当てはまります。
ソースアドレスおよび宛先のアドレス
source- 送信元アドレスを指定することにより、接続試行の発信元を送信元アドレスに制限できます。ソースアドレスまたはアドレス範囲は、
IPv4またはIPv6のマスクを持つ IP アドレスまたはネットワーク IP アドレスのいずれかです。IPv4の場合、マスクはネットワークマスクまたは単純な番号になります。IPv6の場合、マスクは単純な番号です。ホスト名の使用はサポートされていません。NOTキーワードを追加することで、source address コマンドの意味を反転させることができます。指定されたアドレス以外はすべて一致します。ルールにファミリーが指定されていない場合は、IPv4およびIPv6に MAC アドレスと タイプの IP セットを追加できます。他の IP セットは、ルールのfamily設定と一致する必要があります。 destination- 宛先アドレスを指定することにより、ターゲットを宛先アドレスに限定することができます。宛先アドレスは、IP アドレスまたはアドレス範囲の送信元アドレスと同じ構文を使用します。送信元アドレスと宛先アドレスの使用はオプションであり、すべての要素で宛先アドレスを使用できるわけではありません。これは、たとえば、サービスエントリーでの宛先アドレスの使用によって異なります。
destinationとactionを組み合わせることができます。
要素
service、port、プロトコル、masquerade、icmp-block、forward-port 、および source-port の いずれかのタイプのみ を使用できます。
serviceservice要素は、firewalld が提供するサービスの 1 つです。定義済みサービスの一覧を取得するには、次のコマンドを入力します。サービスが宛先アドレスを提供する場合、ルール内の宛先アドレスと競合し、エラーが発生します。内部で宛先アドレスを使用するサービスは、ほとんどがマルチキャストを使用するサービスである。コマンドは以下の形式になります。firewall-cmd --get-services
~]$ firewall-cmd --get-servicesCopy to Clipboard Copied! Toggle word wrap Toggle overflow service name=service_name
service name=service_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow portport要素には、単一のポート番号またはポート範囲(例:5060-5062)と、その後にtcpまたはudpなどのプロトコルを使用できます。コマンドは以下の形式になります。port port=number_or_range protocol=protocol
port port=number_or_range protocol=protocolCopy to Clipboard Copied! Toggle word wrap Toggle overflow protocolprotocol値は、プロトコル ID 番号またはプロトコル名のいずれかになります。許可されるプロトコルエントリーについては、/etc/protocolsを参照してください。コマンドは以下の形式になります。protocol value=protocol_name_or_ID
protocol value=protocol_name_or_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow icmp-block- このコマンドを使用して、1 つ以上の
ICMPタイプをブロックします。ICMPタイプは、firewalld がサポートするICMPタイプの 1 つです。サポートされているICMPタイプの一覧を取得するには、次のコマンドを入力します。ここではアクションの特定はできません。icmp-block はアクションfirewall-cmd --get-icmptypes
~]$ firewall-cmd --get-icmptypesCopy to Clipboard Copied! Toggle word wrap Toggle overflow rejectを内部で使用します。コマンドは以下の形式になります。icmp-block name=icmptype_name
icmp-block name=icmptype_nameCopy to Clipboard Copied! Toggle word wrap Toggle overflow masquerade- ルール内の IP マスカレードを有効にします。マスカレードをこのエリアに限定するために送信元アドレスを指定できますが、宛先アドレスは指定できません。ここではアクションの特定はできません。
forward-port- プロトコルが
tcpまたはudpとして指定されたローカルポートから、ローカルにある別のポート、別のマシン、または別のマシンの別のポートにパケットを転送します。portとto-portは、単一のポート番号またはポート範囲のいずれかになります。宛先アドレスは、単純な IP アドレスです。ここではアクションの特定はできません。forward-port コマンドは、内部でacceptのアクションを使用します。コマンドは以下の形式になります。forward-port port=number_or_range protocol=protocol / to-port=number_or_range to-addr=addressforward-port port=number_or_range protocol=protocol / to-port=number_or_range to-addr=addressCopy to Clipboard Copied! Toggle word wrap Toggle overflow source-port- パケットのソースポート、つまり接続を試みる際の発信元で使用されるポートに一致します。現在のマシンのポートに一致させるには、
port要素を使用します。source-port要素は、単一のポート番号またはポート範囲(例:5060-5062)のいずれかで、その後にtcpまたはudpとしてプロトコルを指定できます。コマンドは以下の形式になります。source-port port=number_or_range protocol=protocol
source-port port=number_or_range protocol=protocolCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ロギング
log- カーネルロギングを使用して、ルールへの新しい接続試行を syslog などに記録します。ログメッセージに接頭辞として追加される接頭辞テキストを定義できます。ログレベルは、
emerg、alert、crit、error、warning、notice、info、またはdebugのいずれかです。ログの使用はオプションです。でロギングを制限することができます。レートは自然な正の数 [1, ..] で、期間はlog [prefix=prefix text] [level=log level] limit value=rate/duration
log [prefix=prefix text] [level=log level] limit value=rate/durationCopy to Clipboard Copied! Toggle word wrap Toggle overflow s、m、h、dです。sは秒、mは分、hは時間、d日を意味します。最大制限値は1/dです。これは、1 日あたり最大 1 つのログエントリーを意味します。 audit- Audit は、サービス
auditdに送信される監査レコードを使用してロギングを行う別の方法を提供します。監査タイプはACCEPT、REJECT、またはDROPのいずれかにすることができますが、ルールアクションから自動的に 監査 タイプを収集するため、コマンド audit の後に指定されません。監査には独自のパラメーターはありませんが、オプションで制限を追加できます。監査の使用はオプションになります。
アクション
accept|reject|drop|mark- アクションは、
accept、reject、drop、またはmarkのいずれかになります。ルールは、要素またはソースのみを含むことができます。ルールに要素が含まれる場合、その要素に一致する新しい接続は、アクションで処理されます。ルールにソースが含まれている場合、送信元アドレスからのすべてが、指定されたアクションで処理されます。accept | reject [type=reject type] | drop | mark set="mark[/mask]"
accept | reject [type=reject type] | drop | mark set="mark[/mask]"Copy to Clipboard Copied! Toggle word wrap Toggle overflow acceptを指定すると、すべての新しい接続試行が許可されます。rejectを指定すると、それらは拒否され、そのソースには拒否メッセージが表示されます。拒否タイプは、他の値を使用するように設定することができます。dropを指定すると、すべてのパケットが直ちにドロップされ、ソースには何も情報が送られません。markを指定すると、すべてのパケットは、指定された mark とオプションの mask でマークされます。
5.15.4. リッチルールログコマンドの使用 リンクのコピーリンクがクリップボードにコピーされました!
deny チェーンが適切に順序付けされる前に処理されます。これらのルールまたはその一部は、以下のように、ルールのアクションに従って個別のチェーンに配置されます。
zone_log zone_deny zone_allow
zone_log
zone_deny
zone_allow
reject ルールおよび drop ルールは 「ゾーン_deny」 チェーンに置かれ、ログチェーンの後に解析されます。すべての accept ルールは 「ゾーン_allow」 チェーンに置かれ、deny チェーンの後に解析されます。ルールに log が含まれ、deny または allow アクションも含まれる場合、これらのアクションを指定するルールの一部は一致するチェーンに配置されます。
5.15.4.1. リッチルールログコマンドの使用例 1 リンクのコピーリンクがクリップボードにコピーされました!
AH に対して、新しい IPv4 接続および IPv6 接続を有効にします。
rule protocol value="ah" accept
rule protocol value="ah" accept
5.15.4.2. リッチルールログコマンドの使用例 2 リンクのコピーリンクがクリップボードにコピーされました!
FTP の新しい IPv4 および IPv6 接続を許可し、監査を使用して 1 分あたり 1 回ログに記録します。
rule service name="ftp" log limit value="1/m" audit accept
rule service name="ftp" log limit value="1/m" audit accept
5.15.4.3. リッチルールログコマンドの使用例 3 リンクのコピーリンクがクリップボードにコピーされました!
TFTP のアドレス 192.168.0.0/24 からの新しい IPv4 接続を許可し、syslog を使用して 1 分あたり 1 回ログに記録します。
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept
5.15.4.4. リッチルールログコマンドの使用例 4 リンクのコピーリンクがクリップボードにコピーされました!
RADIUS の 1:2:3:4:6:: からの新しい IPv6 接続はすべて拒否され、1 分あたり 3 の速度でログに記録されます。他のソースからの新しい IPv6 接続が許可されます。
rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject rule family="ipv6" service name="radius" accept
rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject
rule family="ipv6" service name="radius" accept
5.15.4.5. リッチルールログコマンドの使用例 5 リンクのコピーリンクがクリップボードにコピーされました!
TCP を使用するポート 4011 の 1: 2:3:4:6:: から受信した IPv6 パケットを、ポート 4012 の 1::2:3:4:7 に転送します。
rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"
rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"
5.15.4.6. リッチルールログコマンドの使用例 6 リンクのコピーリンクがクリップボードにコピーされました!
rule family="ipv4" source address="192.168.2.2" accept
rule family="ipv4" source address="192.168.2.2" accept
firewalld.richlanguage (5) の man ページを参照してください。
5.16. ファイアウォールロックダウンの設定 リンクのコピーリンクがクリップボードにコピーされました!
root として実行している場合は、ファイアウォール設定を変更できます(例: libvirt)。管理者は、この機能を使用してファイアウォール設定をロックし、すべてのアプリケーションでファイアウォール変更を要求できなくするか、ロックダウンのホワイトリストに追加されたアプリケーションのみがファイアウォール変更を要求できるようにすることが可能になります。ロックダウン設定はデフォルトで無効になっています。これを有効にすると、ローカルのアプリケーションやサービスによるファイアウォールへの望ましくない設定変更を確実に防ぐことができます。
5.16.1. コマンドラインクライアントを使用したロックダウンの設定 リンクのコピーリンクがクリップボードにコピーされました!
root で以下のコマンドを実行します。
firewall-cmd --query-lockdown
~]# firewall-cmd --query-lockdown
yes と出力され、終了ステータスは 0 になります。そうでなければ no と出力され、終了ステータスは 1 になります。
root で以下のコマンドを入力します。
firewall-cmd --lockdown-on
~]# firewall-cmd --lockdown-on
root で以下のコマンドを実行します。
firewall-cmd --lockdown-off
~]# firewall-cmd --lockdown-off
5.16.2. コマンドラインクライアントを使用したロックダウンのホワイトリストオプションの設定 リンクのコピーリンクがクリップボードにコピーされました!
ps -e --context
~]$ ps -e --context
ps -e --context | grep example_program
~]$ ps -e --context | grep example_program
root で次のコマンドを実行します。
firewall-cmd --list-lockdown-whitelist-commands
~]# firewall-cmd --list-lockdown-whitelist-commands
root で以下のコマンドを入力します。
firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
~]# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
root で次のコマンドを実行します。
firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
~]# firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
root で次のコマンドを実行します。
firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
~]# firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
yes と出力され、終了ステータスは 0 になります。そうでなければ no と出力され、終了ステータスは 1 になります。
root で次のコマンドを実行します。
firewall-cmd --list-lockdown-whitelist-contexts
~]# firewall-cmd --list-lockdown-whitelist-contexts
root で次のコマンドを実行します。
firewall-cmd --add-lockdown-whitelist-context=context
~]# firewall-cmd --add-lockdown-whitelist-context=context
root で次のコマンドを実行します。
firewall-cmd --remove-lockdown-whitelist-context=context
~]# firewall-cmd --remove-lockdown-whitelist-context=context
root で次のコマンドを実行します。
firewall-cmd --query-lockdown-whitelist-context=context
~]# firewall-cmd --query-lockdown-whitelist-context=context
yes を終了ステータス 0 で出力し、true の場合は no と出力し、それ以外は終了ステータス 1 を出力します。
root で次のコマンドを実行します。
firewall-cmd --list-lockdown-whitelist-uids
~]# firewall-cmd --list-lockdown-whitelist-uids
root で次のコマンドを実行します。
firewall-cmd --add-lockdown-whitelist-uid=uid
~]# firewall-cmd --add-lockdown-whitelist-uid=uid
root で次のコマンドを実行します。
firewall-cmd --remove-lockdown-whitelist-uid=uid
~]# firewall-cmd --remove-lockdown-whitelist-uid=uid
firewall-cmd --query-lockdown-whitelist-uid=uid
~]$ firewall-cmd --query-lockdown-whitelist-uid=uid
yes を終了ステータス 0 で出力し、true の場合は no と出力し、それ以外は終了ステータス 1 を出力します。
root で次のコマンドを実行します。
firewall-cmd --list-lockdown-whitelist-users
~]# firewall-cmd --list-lockdown-whitelist-users
root で次のコマンドを実行します。
firewall-cmd --add-lockdown-whitelist-user=user
~]# firewall-cmd --add-lockdown-whitelist-user=user
root で次のコマンドを実行します。
firewall-cmd --remove-lockdown-whitelist-user=user
~]# firewall-cmd --remove-lockdown-whitelist-user=user
firewall-cmd --query-lockdown-whitelist-user=user
~]$ firewall-cmd --query-lockdown-whitelist-user=user
yes を終了ステータス 0 で出力し、true の場合は no と出力し、それ以外は終了ステータス 1 を出力します。
5.16.3. 設定ファイルを使用したロックダウンのホワイトリストオプションの設定 リンクのコピーリンクがクリップボードにコピーされました!
815 である user ユーザーのすべてのコマンドを有効にするホワイトリスト設定ファイルの例です。
user id と user name の両方が使用されていますが、実際にはどちらか一方のオプションだけが必要です。Python はインタープリターとしてコマンドラインに追加されています。特定のコマンドを使用することもできます(例: /usr/bin/python /bin/firewall-cmd --lockdown-on
/usr/bin/python /bin/firewall-cmd --lockdown-on
/usr/bin/ ディレクトリーに格納され、/bin/ ディレクトリーは /usr/bin/ ディレクトリーへのシンボリックリンクになります。つまり、root で実行する際の firewall-cmd のパスは /bin/firewall-cmd に解決しますが、/usr/bin/firewall-cmd を使用できるようになりました。新たなスクリプトは、すべて新しい格納場所を使用する必要があります。ただし、root で実行するスクリプトが /bin/firewall-cmd パスを使用するように書き込まれている場合は、これまではroot 以外のユーザーにのみ使用されていた /usr/bin/firewall-cmd パスに加えて、このコマンドのパスもホワイトリスト化する必要があります。
5.17. 拒否されたパケットに対するロギングの設定 リンクのコピーリンクがクリップボードにコピーされました!
firewalld に LogDenied オプションを使用すると、拒否されたパケットに単純なロギングメカニズムを追加できます。対象となるのは、拒否または破棄されるパケットになります。ログの設定を変更するには、/etc/firewalld/firewalld.conf ファイルを編集するか、コマンドラインまたは GUI 設定ツールを使用します。
LogDenied を有効にすると、デフォルトルールの INPUT チェイン、FORWARD チェイン、および OUTPUT チェインの reject ルールおよび drop ルールと、ゾーンの最後の reject ルールおよび drop ルールの直前に、ロギングルールが追加されます。この設定に使用できる値は、all、unicast、broadcast、マルチキャスト、および off です。デフォルト設定は off です。ユニキャスト、ブロードキャスト、および マルチキャスト の設定では、pkttype 一致を使用してリンク層パケットタイプを照合します。すべての で、すべて のパケットがログに記録されます。
LogDenied 設定を一覧表示するには、root で以下のコマンドを実行します。
firewall-cmd --get-log-denied
~]# firewall-cmd --get-log-denied
off
LogDenied 設定を変更するには、root で以下のコマンドを実行します。
firewall-cmd --set-log-denied=all
~]# firewall-cmd --set-log-denied=all
success
firewalld GUI 設定ツールで LogDenied 設定を変更するには、firewall-config を起動し、Options メニュー をクリックし、 を選択します。LogDenied ウィンドウが表示されます。メニューから新しい LogDenied 設定を選択し、OK をクリックします。
5.18. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
firewalld に関するその他の情報を提供します。
5.18.1. インストールされているドキュメント リンクのコピーリンクがクリップボードにコピーされました!
- man ページの
firewalld (1)-firewalldのコマンドオプションが説明されています。 firewalld.conf (5)man ページ -firewalldを設定する情報が含まれます。- man ページの
firewall-cmd (1)-firewalldコマンドラインクライアントのコマンドオプションが説明されています。 - man ページの
firewall-config (1)- firewall-config ツールの設定について説明しています。 - man ページの
firewall-offline-cmd (1)-firewalldオフラインコマンドラインクライアントのコマンドオプションが説明されています。 firewalld.icmptype (5)man ページ -ICMPフィルターリングの XML 設定ファイルが説明されています。firewalld.ipset (5)man ページ -firewalldIPセットの XML 設定ファイルが説明されています。- man ページの
firewalld.service (5)- firewalld サービス 用の XML 設定ファイルが説明されています。 firewalld.zone (5)man ページ -firewalldゾーン設定の XML 設定ファイルが説明されています。firewalld.direct (5)man ページ -firewalldダイレクトインターフェイスの設定ファイルが説明されています。- man ページの
firewalld.lockdown-whitelist (5)-firewalldロックダウンホワイトリストの設定ファイルが説明されています。 - man ページの
firewalld.richlanguage (5)-firewalldリッチ言語のルール構文が説明されています。 - man ページの
firewalld.zones (5)- ゾーンの全般的な説明と設定方法が説明されています。 firewalld.dbus (5)man ページ -firewalldのD-Busインターフェイスが説明されています。
5.18.2. オンラインドキュメント リンクのコピーリンクがクリップボードにコピーされました!
- http://www.firewalld.org/ —
firewalldhome page.
第6章 nftables の使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークは、パケットの分類機能を提供し、iptables ツール、ip6tables ツール、arptables ツール、ebtables ツール、および ipset ツールの後継となります。利便性、機能、パフォーマンスにおいて、以前のパケットフィルターリングツールに多くの改良が追加されました。以下に例を示します。
- 線形処理の代わりに組み込みルックアップテーブルを使用
IPv4プロトコルとIPv6プロトコルの両方に対する単一のフレームワーク- 完全ルールセットのフェッチ、更新、および保存を行わず、すべてアトミックに適用されるルール
- ルールセットでのデバッグとトレースのサポート(
nftrace)およびトレースイベントの監視(nftツール) - より統一されたコンパクトな構文、プロトコル固有の拡張なし
- サードパーティーのアプリケーション用 Netlink API
iptables と同様に、nftables はチェーンを保存するためにテーブルを使用します。このチェーンには、アクションを実行する個々のルールが含まれます。nft ツールは、以前のパケットフィルターリングフレームワークのツールをすべて置き換えます。libnftnl ライブラリーは、libmnl ライブラリーを介した Netlink API の nftables との低レベルの対話に使用できます。
nftables ルールセットに追加するため、nft flush ruleset コマンドなどの nftables ルールセット操作は、先に別のレガシーコマンドを使用してインストールしたルールセットに影響を及ぼす可能性があることに注意してください。
firewalld または nftables を使用するタイミング
firewalld: 簡単なファイアウォールのユースケースには、firewalldユーティリティーを使用します。このユーティリティーは、使いやすく、このようなシナリオの一般的な使用例に対応しています。nftables:nftablesユーティリティーを使用して、ネットワーク全体など、複雑なパフォーマンスに関する重要なファイアウォールを設定します。
6.1. nftables スクリプトの作成および実行 リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークは、シェルスクリプトを使用して ファイアウォール ルールを維持するための主な利点を提供するネイティブのスクリプト環境を提供します。スクリプトの実行はアトミックです。つまり、システムがスクリプト全体を適用するか、エラーが発生した場合には実行を阻止することを意味します。これにより、ファイアウォールは常に一貫した状態になります。
nftables スクリプト環境を使用すると、以下が可能になります。
- コメントの追加
- 変数の定義
- 他のルールセットファイルの組み込み
nftables スクリプトの作成および実行方法を説明します。
/etc/nftables/ ディレクトリーに *.nft スクリプトを自動的に作成します。このスクリプトには、さまざまな目的でテーブルと空のチェーンを作成するコマンドが含まれます。
6.1.1. 対応している nftables スクリプトの形式 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプト環境は、以下の形式でスクリプトに対応します。
- nft list ruleset コマンドがルールセットを表示するのと同じ形式でスクリプトを作成できます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow nftコマンドと同じ構文を使用できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.2. nftables スクリプトの実行 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプトは、nft ユーティリティーに渡すか、スクリプトを直接実行できます。
前提条件
- 本セクションの手順では、
nftablesスクリプトを/etc/nftables/example_firewall.nftファイルに保存していることを前提としています。
手順6.1 nft ユーティリティーを使用した nftables スクリプトの実行
nftablesスクリプトをnftユーティリティーに渡して実行するには、次のコマンドを実行します。nft -f /etc/nftables/example_firewall.nft
# nft -f /etc/nftables/example_firewall.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順6.2 nftables スクリプトを直接実行します。
- 以下の手順は、一度だけ必要です。
- スクリプトが以下のシバンシーケンスで始まることを確認します。
#!/usr/sbin/nft -f
#!/usr/sbin/nft -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要-fパラメーターを省略すると、nftユーティリティーはスクリプトを読み取らず、Error: syntax error, unexpected newline, expecting string を表示します。 - 必要に応じて、スクリプトの所有者を
rootに設定します。chown root /etc/nftables/example_firewall.nft
# chown root /etc/nftables/example_firewall.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 所有者のスクリプトを実行ファイルに変更します。
chmod u+x /etc/nftables/example_firewall.nft
# chmod u+x /etc/nftables/example_firewall.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- スクリプトを実行します。
/etc/nftables/example_firewall.nft
# /etc/nftables/example_firewall.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力が表示されない場合は、システムがスクリプトを正常に実行します。
nft がスクリプトを正常に実行したり、ルールを誤って配置したり、パラメーターが欠落したり、スクリプト内のその他の問題したりすると、ファイアウォールが期待どおりに動作しない可能性があります。
関連情報
- ファイルの所有者の設定に関する詳細は、
chown (1)の man ページを参照してください。 - ファイルのパーミッション設定の詳細は、
chmod (1)の man ページを参照してください。 - システム起動時に
nftablesルールを読み込む方法は、を参照してください。 「システムの起動時に nftables ルールの自動読み込み」
6.1.3. nftables スクリプトでコメントの使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプト環境は、# 文字の右側にあるすべてをコメントとして解釈します。
例6.1 nftables スクリプトのコメント
6.1.4. nftables スクリプトで変数の使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプトで変数を定義するには、define キーワードを使用します。シングル値および匿名セットを変数に保存できます。より複雑なシナリオの場合は、名前付きセットまたは決定マップを使用します。
値を 1 つ持つ変数
INET_DEV という名前の変数を定義します。
define INET_DEV = enp1s0
define INET_DEV = enp1s0
$ 記号とそれに続く変数名を指定します。
... add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept ...
...
add rule inet example_table example_chain iifname $INET_DEV tcp dport ssh accept
...
匿名セットを含む変数
define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }
define DNS_SERVERS = { 192.0.2.1, 192.0.2.2 }
$ 記号とそれに続く変数名を指定します。
add rule inet example_table example_chain ip daddr $DNS_SERVERS accept
add rule inet example_table example_chain ip daddr $DNS_SERVERS accept
関連情報
- セットの詳細は、「nftables コマンドを使用したセットの使用」 を参照してください。
- 決定マップの詳細は、「nftables コマンドにおける決定マップの使用」 を参照してください。
6.1.5. nftables スクリプトへのファイルの追加 リンクのコピーリンクがクリップボードにコピーされました!
nftables スクリプト環境を使用すると、管理者は include ステートメントを使用して他のスクリプトを 含める ことができます。
nftables には、Red Hat Enterprise Linux では /etc に設定されているデフォルトの検索パスからのファイルが含まれます。
例6.2 デフォルト検索ディレクトリーからのファイルを含む
include "example.nft"
include "example.nft"
例6.3 ディレクトリーからの *.nft ファイルをすべて含む
/etc/nftables/rulesets/ ディレクトリーに保存されている *.nft で終わるすべてのファイルを含めるには、次のコマンドを実行します。
include "/etc/nftables/rulesets/*.nft"
include "/etc/nftables/rulesets/*.nft"
include ステートメントは、ドットで始まるファイルと一致しないことに注意してください。
関連情報
- 詳細は、
nft (8)man ページのInclude filesセクションを参照してください。
6.1.6. システムの起動時に nftables ルールの自動読み込み リンクのコピーリンクがクリップボードにコピーされました!
nftables systemd サービスは、/etc/sysconfig/nftables.conf ファイルに含まれるファイアウォールスクリプトを読み込みます。本セクションでは、システムの起動時にファイアウォールルールを読み込む方法を説明します。
前提条件
nftablesスクリプトは、/etc/nftables/ディレクトリーに保存されます。
手順6.3 システムの起動時に nftables ルールの自動読み込み
/etc/sysconfig/nftables.confファイルを編集します。- nftables パッケージをインストールしたときに
/etc/nftables/で作成された*.nftスクリプトを強化する場合は、これらのスクリプトの include ステートメントのコメントを解除します。 - スクリプトを新規に作成する場合は、そのスクリプトを含む include ステートメントを追加します。たとえば、
nftablesサービスの起動時に/etc/nftables/example.nftスクリプトを読み込むには、以下を追加します。include "/etc/nftables/example.nft"
include "/etc/nftables/example.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 必要に応じて、
nftablesサービスを起動し、システムを再起動せずにファイアウォールルールを読み込みます。systemctl start nftables
# systemctl start nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - nftables サービスを有効にします。
systemctl enable nftables
# systemctl enable nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- 詳細は、「対応している nftables スクリプトの形式」 を参照してください。
6.2. nftables テーブル、チェーン、およびルールの作成および管理 リンクのコピーリンクがクリップボードにコピーされました!
nftables ルールセットを表示する方法と、その管理方法を説明します。
6.2.1. nftables ルールセットの表示 リンクのコピーリンクがクリップボードにコピーされました!
nftables のルールセットには、テーブル、チェーン、およびルールが含まれます。本セクションでは、このルールセットを表示する方法を説明します。
nftables は事前にテーブルを作成しません。これにより、テーブルのないホストに設定されたルールセットを表示すると、nft list ruleset コマンドは出力を表示しません。
6.2.2. nftables テーブルの作成 リンクのコピーリンクがクリップボードにコピーされました!
nftables のテーブルは、チェーン、ルール、セット、およびその他のオブジェクトのコレクションを含む名前空間です。本セクションでは、テーブルの作成方法を説明します。
ip: IPv4 パケットのみに一致します。アドレスファミリーを指定しないと、これがデフォルトになります。ip6: IPv6 パケットのみに一致します。inet: IPv4 パケットと IPv6 パケットの両方に一致します。ARP: IPv4 アドレス解決プロトコル(ARP)パケットに一致します。bridge: ブリッジデバイスを通過するパケットと一致します。netdev: ingress からのパケットに一致します。
手順6.4 nftables テーブルの作成
- nft add table コマンドを使用して、新しいテーブルを作成します。たとえば、
IPv4パケットおよびIPv6パケットを処理する example_table という名前のテーブルを作成するには、次のコマンドを実行します。nft add table inet example_table
# nft add table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、ルールセットのテーブルを一覧表示します。
nft list tables
# nft list tables table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - テーブルで実行できるその他のアクションの詳細は、
nft (8)man ページのTablesセクションを参照してください。
6.2.3. nftables チェーンの作成 リンクのコピーリンクがクリップボードにコピーされました!
- ベースチェーン - ネットワークスタックからのパケットのエントリーポイントとしてベースチェーンを使用できます。
- 通常のチェーン:
jumpターゲットとして通常のチェーンを使用し、ルールをより適切に整理できます。
前提条件
- 新しいチェーンを追加するテーブルが存在する。
手順6.5 nftables チェーンの作成
- nft add chain コマンドを使用して、新しいチェーンを作成します。たとえば、example_table に、example_chain という名前のチェーンを作成するには、次のコマンドを実行します。
nft add chain inet example_table example_chain '{ type filter hook input priority 0 ; policy accept ; }'# nft add chain inet example_table example_chain '{ type filter hook input priority 0 ; policy accept ; }'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要シェルで、セミコロンがコマンドの最後として解釈されないようにするには、セミコロンをバックスラッシュでエスケープする必要があります。さらに、一部のシェルは中括弧も解釈するので、中括弧とその中のものはティック(')で引用します。このチェーンは、着信パケットをフィルターリングします。priorityパラメーターは、nftablesが同じフック値を持つチェーンを処理する順序を指定します。優先度の値が低いほど優先されます。policyパラメーターは、このチェーンのルールのデフォルトアクションを設定します。サーバーにリモートでログインし、デフォルトのポリシーを をドロップするように設定すると、他のルールでリモートアクセスが許可されていない場合は、すぐに切断されることに注意してください。 - 必要に応じて、すべてのチェーンを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのChainsセクションを参照してください。
6.2.4. nftables チェーンの最後に対するルールの追加 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- ルールを追加するチェーンが存在する。
手順6.6 nftables チェーンの最後に対するルールの追加
- 新しいルールを追加するには、nft add rule コマンドを使用します。たとえば、example_table の example_chain に、ポート 22 の TCP トラフィックを許可するルールを追加するには、次のコマンドを実行します。
nft add rule inet example_table example_chain tcp dport 22 accept
# nft add rule inet example_table example_chain tcp dport 22 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 代わりに、ポート番号の代わりにサービスの名前を指定することもできます。この例では、ポート番号22の代わりにsshを使用できます。サービス名は、/etc/servicesファイルのエントリーに基づいてポート番号に解決されることに注意してください。 - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのRulesセクションを参照してください。
6.2.5. nftables チェーンの先頭へのルールの挿入 リンクのコピーリンクがクリップボードにコピーされました!
nftables チェーンの先頭にルールを追加する方法を説明します。
前提条件
- ルールを追加するチェーンが存在する。
手順6.7 nftables チェーンの先頭へのルールの挿入
- 新しいルールを挿入するには、nft insert rule コマンドを使用します。たとえば、ポート
22で TCP トラフィックを許可するルールを example_table の example_chain に挿入するには、次のコマンドを実行します。nft insert rule inet example_table example_chain tcp dport 22 accept
# nft insert rule inet example_table example_chain tcp dport 22 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 代わりに、ポート番号の代わりにサービスの名前を指定することもできます。この例では、ポート番号22の代わりにsshを使用できます。サービス名は、/etc/servicesファイルのエントリーに基づいてポート番号に解決されることに注意してください。 - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのRulesセクションを参照してください。
6.2.6. nftables チェーンの特定の位置へのルールの挿入 リンクのコピーリンクがクリップボードにコピーされました!
nftables チェーンで、既存のルールの前後にルールを追加する方法を説明します。これにより、正しい場所に新しいルールを配置することができます。
前提条件
- ルールを追加するチェーンが存在する。
手順6.8 nftables チェーンの特定の位置へのルールの挿入
- nft -a list ruleset コマンドを使用して、ハンドルを含む example_table のすべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -aを使用すると、ハンドルが表示されます。次の手順で新しいルールを配置するときに、この情報が必要です。 - example_table の example_chain チェーンに新しいルールを挿入します。
- ハンドル 3 の前に、ポート 636 で TCP トラフィックを許可するルールを挿入するには、次のコマンドを実行します。
nft insert rule inet example_table example_chain position 3 tcp dport 636 accept
# nft insert rule inet example_table example_chain position 3 tcp dport 636 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ハンドル 3 の後ろに、ポート 80 で TCP トラフィックを許可するルールを追加するには、次のコマンドを実行します。
nft add rule inet example_table example_chain position 3 tcp dport 80 accept
# nft add rule inet example_table example_chain position 3 tcp dport 80 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- アドレスファミリーの詳細は、
nft (8)man ページのAddressfamily セクションを参照してください。 - チェーンで実行できるその他のアクションの詳細は、
nft (8)man ページのRulesセクションを参照してください。
6.3. nftables を使用した NAT の設定 リンクのコピーリンクがクリップボードにコピーされました!
nftables を使用すると、以下のネットワークアドレス変換(NAT)タイプを設定できます。
- マスカレーディング
- ソース NAT (
SNAT) - 宛先 NAT (
DNAT) - リダイレクト
6.3.1. 異なる NAT タイプ: マスカレード、ソース NAT、宛先 NAT、リダイレクト リンクのコピーリンクがクリップボードにコピーされました!
NAT)タイプになります。
マスカレードおよびソースの NAT (SNAT)
NAT タイプのいずれかを使用して、パケットのソース IP アドレスを変更します。たとえば、インターネットサービスプロバイダーは、10.0.0.0/8 などのプライベート IP 範囲はルーティングしません。ネットワークでプライベート IP 範囲を使用し、ユーザーがインターネット上のサーバーにアクセスできるようにする必要がある場合は、この範囲のパケットのソース IP アドレスをパブリック IP アドレスにマップします。
SNAT の両方は非常に似ています。相違点は次のとおりです。
- マスカレードは、出力インターフェイスの IP アドレスを自動的に使用します。したがって、出力インターフェイスが動的 IP アドレスを使用する場合は、マスカレードを使用します。
SNATは、パケットのソース IP アドレスを指定された IP に設定し、送信インターフェイスの IP を動的に検索しません。したがって、SNATはマスカレードよりも高速です。送信インターフェイスが固定 IP アドレスを使用する場合はSNATを使用します。
宛先 NAT (DNAT)
NAT タイプを使用して、着信トラフィックを別のホストにルーティングします。たとえば、Web サーバーが予約済み IP 範囲の IP アドレスを使用しているため、インターネットから直接アクセスできない場合は、ルーターに DNAT ルールを設定し、着信トラフィックをこのサーバーにリダイレクトできます。
リダイレクト
6.3.2. nftables を使用したマスカレードの設定 リンクのコピーリンクがクリップボードにコピーされました!
nftables はソース IP を置き換えるときに新しい IP を自動的に使用します。
ens3 インターフェイスを介してホストから ens3 に設定された IP にホストから出るパケットのソース IP を置き換える方法を説明します。
手順6.9 nftables を使用したマスカレードの設定
- テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - テーブルに
preroutingおよびpostroutingチェーンを追加します。nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要preroutingチェーンにルールを追加しなくても、nftablesフレームワークでは、受信パケット返信に一致するようにこのチェーンが必要になります。シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--オプションを nft コマンドに渡す必要があることに注意してください。 ens3インターフェイスの送信パケットに一致するルールをpostroutingチェーンに追加します。nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.3.3. nftables を使用したソース NAT の設定 リンクのコピーリンクがクリップボードにコピーされました!
SNAT)を使用して、インターフェイスを介して特定の IP アドレスに送信するパケットの IP を変更できます。
ens3 インターフェイスを介してルーターから 192.0.2.1 に、パケットのソース IP を置き換える方法を説明します。
手順6.10 nftables を使用したソース NAT の設定
- テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - テーブルに
preroutingおよびpostroutingチェーンを追加します。nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要preroutingチェーンにルールを追加しなくても、nftablesフレームワークでは、このチェーンが発信パケット返信に一致するようにする必要があります。シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--オプションを nft コマンドに渡す必要があることに注意してください。 ens3を介した送信パケットのソース IP を192.0.2.1に置き換えるルールをpostroutingチェーンに追加します。nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1
# nft add rule nat postrouting oifname "ens3" snat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- 詳細は、「特定のローカルポートで着信パケットを別のホストに転送」 を参照してください。
6.3.4. nftables を使用した宛先 NAT の設定 リンクのコピーリンクがクリップボードにコピーされました!
NAT により、ルーター上のトラフィックをインターネットから直接アクセスできないホストにリダイレクトできます。
80 および 443 に送信された受信トラフィックを、IP アドレス 192.0.2.1 を持つホストにリダイレクトする方法を説明します。
手順6.11 nftables を使用した宛先 NAT の設定
- テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - テーブルに
preroutingおよびpostroutingチェーンを追加します。nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } nft add chain nat postrouting { type nat hook postrouting priority 100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要postrouting チェーンにルールを追加しなくても、nftablesフレームワークでは、このチェーンが発信パケット返信に一致するようにする必要があります。シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--オプションを nft コマンドに渡す必要があることに注意してください。 - IP が 192.0.2.1 のホストにポート 80 および 443 に送信された
ens3インターフェイスの着信トラフィックをリダイレクトするルールを prerouting チェーンに追加します。nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1# nft add rule nat prerouting iifname ens3 tcp dport { 80, 443 } dnat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 環境に応じて、SNAT ルールまたはマスカレードルールを追加して、ソースアドレスを変更します。
ens3インターフェイスが動的 IP アドレスを使用している場合は、マスカレードルールを追加します。nft add rule nat postrouting oifname "ens3" masquerade
# nft add rule nat postrouting oifname "ens3" masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow ens3インターフェイスが静的 IP アドレスを使用する場合は、SNATルールを追加します。たとえば、ens3が 198.51.100.1 IP アドレスを使用する場合:nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1
# nft add rule nat postrouting oifname "ens3" snat to 198.51.100.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- 詳細は、「異なる NAT タイプ: マスカレード、ソース NAT、宛先 NAT、リダイレクト」 を参照してください。
6.3.5. nftables を使用したリダイレクトの設定 リンクのコピーリンクがクリップボードにコピーされました!
リダイレクト 機能は、チェーンフックに応じてパケットをローカルマシンにリダイレクトする宛先ネットワークアドレス変換(DNAT)の特別なケースです。
手順6.12 nftables を使用したリダイレクトの設定
- テーブルを作成します。
nft add table nat
# nft add table natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - テーブルに prerouting チェーンを追加します。
nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }# nft -- add chain nat prerouting { type nat hook prerouting priority -100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow シェルが優先度の負の値を nft コマンドのオプションとして解釈しないように、--オプションを nft コマンドに渡す必要があることに注意してください。 - 22 ポートの着信トラフィックを 2222 ポートにリダイレクトするルールを prerouting チェーンに追加します。
nft add rule nat prerouting tcp dport 22 redirect to 2222
# nft add rule nat prerouting tcp dport 22 redirect to 2222Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- 詳細は、「異なる NAT タイプ: マスカレード、ソース NAT、宛先 NAT、リダイレクト」 を参照してください。
6.4. nftables コマンドを使用したセットの使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークは、セットをネイティブにサポートします。たとえば、ルールが複数の IP アドレス、ポート番号、インターフェイス、またはその他の一致基準に一致する必要がある場合など、セットを使用できます。
6.4.1. nftables での匿名セットの使用 リンクのコピーリンクがクリップボードにコピーされました!
{ 22, 80, 443 } などの中括弧で囲まれたコンマ区切りの値が含まれます。IP アドレスやその他の一致基準に匿名セットを使用することもできます。
前提条件
inetファミリーに example_chain チェーンと example_table テーブルが存在する。
手順6.13 nftables での匿名セットの使用
- たとえば、ポート
22、80、および443への着信トラフィックを許可するルールを example_table の example_chain に追加するには、次のコマンドを実行します。nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } accept# nft add rule inet example_table example_chain tcp dport { 22, 80, 443 } acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、example_table ですべてのチェーンとそのルールを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4.2. nftables で名前付きセットの使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークは、変更可能な名前付きセットに対応します。名前付きセットは、テーブル内の複数のルールで使用できる要素の一覧または範囲です。匿名セットに対する別の利点として、セットを使用するルールを置き換えることなく、名前付きセットを更新できます。
- 192.
0.2.1 や192.0.2.0/24 など、IPv4 アドレスまたは範囲を含むセットの場合はipv4_addr。 - 2001:db8:
1::1 や 2001:db8:1::1/64 など、IPv6アドレスまたは範囲を含むセットの場合はipv6_addr。 52:54:00:6b:66:42 など、メディアアクセス制御(MAC)アドレスの一覧を含むセットの場合はether_addr。tcpなど、インターネットプロトコルタイプの一覧を含むセットの場合はinet_proto。sshなどのインターネットサービスの一覧を含むセットの場合はinet_service。- パケット
マークの一覧を含むセットの場合は mark。パケットマークは、任意の正の 32 ビットの整数値にすることができます(0から2147483647)。
前提条件
- example_chain チェーンと example_table テーブルが存在する。
手順6.14 nftables で名前付きセットの使用
空のファイルを作成します。以下の例では、
IPv4アドレスのセットを作成します。- 複数の
IPv4アドレスを保存できるセットを作成するには、次のコマンドを実行します。nft add set inet example_table example_set { type ipv4_addr \; }# nft add set inet example_table example_set { type ipv4_addr \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4アドレス範囲を保存できるセットを作成するには、次のコマンドを実行します。nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }# nft add set inet example_table example_set { type ipv4_addr \; flags interval \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
重要シェルで、セミコロンがコマンドの最後として解釈されないようにするには、セミコロンをバックスラッシュでエスケープする必要があります。- 必要に応じて、セットを使用するルールを作成します。たとえば、次のコマンドは、example_set の
IPv4アドレスからのパケットをすべて破棄するルールを example_table の example_chain に追加します。nft add rule inet example_table example_chain ip saddr @example_set drop
# nft add rule inet example_table example_chain ip saddr @example_set dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow example_set が空のままなので、ルールには現在影響がありません。 IPv4 アドレスを example_set に追加します。
- 個々の
IPv4アドレスを保存するセットを作成する場合は、次のコマンドを実行します。nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }# nft add element inet example_table example_set { 192.0.2.1, 192.0.2.2 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4範囲を保存するセットを作成する場合は、次のコマンドを実行します。nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }# nft add element inet example_table example_set { 192.0.2.0-192.0.2.255 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IP アドレス範囲を指定する場合は、上記の例の192.0.2.0/24など、CIDR(Classless Inter-Domain Routing)表記を使用することもできます。
6.4.3. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
nft (8) の Sets セクションを参照してください。
6.5. nftables コマンドにおける決定マップの使用 リンクのコピーリンクがクリップボードにコピーされました!
nft は一致基準をアクションにマッピングすることで、パケット情報に基づいてアクションを実行できます。
6.5.1. nftables での匿名マップの使用 リンクのコピーリンクがクリップボードにコピーされました!
{ match_criteria : action } ステートメントです。ステートメントには、複数のコンマ区切りマッピングを含めることができます。
手順6.15 nftables での匿名マップの使用
- example_table を作成します。
nft add table inet example_table
# nft add table inet example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow - example_table に
tcp_packetsチェーンを作成します。nft add chain inet example_table tcp_packets
# nft add chain inet example_table tcp_packetsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - このチェーンのトラフィックをカウントする
tcp_packetsにルールを追加します。nft add rule inet example_table tcp_packets counter
# nft add rule inet example_table tcp_packets counterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - example_table で
udp_packetsチェーンを作成します。nft add chain inet example_table udp_packets
# nft add chain inet example_table udp_packetsCopy to Clipboard Copied! Toggle word wrap Toggle overflow - このチェーンのトラフィックをカウントする
udp_packetsにルールを追加します。nft add rule inet example_table udp_packets counter
# nft add rule inet example_table udp_packets counterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 着信トラフィックのチェーンを作成します。たとえば、example_table で着信トラフィックをフィルターする
incoming_trafficという名前のチェーンを作成するには、次のコマンドを実行します。nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \; }# nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 匿名マップを持つルールを
incoming_trafficに追加します。nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }# nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 匿名マップはパケットを区別し、プロトコルに基づいて別のカウンターチェーンに送信します。 - トラフィックカウンターの一覧を表示する場合は、example_table を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow tcp_packetsおよびudp_packetsチェーンのカウンターは、受信したパケットとバイトの数の両方を表示します。
6.5.2. nftables での名前付きマップの使用 リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークは、名前付きマップに対応します。テーブルの複数のルールでこのマップを使用できます。匿名マップに対する別の利点は、名前付きマップを使用するルールを置き換えることなく、名前付きマップを更新できることです。
- 一致する部分に
192.0.2.1などのIPv4アドレスが含まれるマップの場合はipv4_addr。 - 一致する部分に
2001:db8:1::1 などのIPv6アドレスが含まれるマップの場合はipv6_addr。 52:54:00:6b:66:42 など、一致する部分にメディアアクセス制御(MAC)アドレスが含まれるマップの場合はether_addr。- 一致する部分に
tcpなどのインターネットプロトコルタイプが含まれるマップの場合はinet_proto。 - 一致する部分に
sshや22などのインターネットサービス名のポート番号が含まれるマップの場合はinet_service。 - 一致する部分にパケット
マークが含まれるマップの場合は mark。パケットマークは、任意の正の 32 ビットの整数値(0~2147483647)にできます。 - 一致する部分に
カウンター値が含まれるマップの場合は counter。カウンター値は、正の値の 64 ビットであれば任意の値にすることができます。 - 一致する部分に
クォータ値が含まれるマップの場合は quota。クォータの値は、64 ビットの整数値にできます。
手順6.16 nftables での名前付きマップの使用
- テーブルを作成します。たとえば、
IPv4パケットを処理する example_table という名前のテーブルを作成するには、次のコマンドを実行します。nft add table ip example_table
# nft add table ip example_tableCopy to Clipboard Copied! Toggle word wrap Toggle overflow - チェーンを作成します。たとえば、example_table に、example_chain という名前のチェーンを作成するには、次のコマンドを実行します。
nft add chain ip example_table example_chain { type filter hook input priority 0 \; }# nft add chain ip example_table example_chain { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要シェルで、セミコロンがコマンドの最後として解釈されないようにするには、セミコロンをバックスラッシュでエスケープする必要があります。 - 空のマップを作成します。たとえば、
IPv4アドレスのマップを作成するには、次のコマンドを実行します。nft add map ip example_table example_map { type ipv4_addr : verdict \; }# nft add map ip example_table example_map { type ipv4_addr : verdict \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - マップを使用するルールを作成します。たとえば、次のコマンドは、両方とも example_map で定義されている
IPv4アドレスにアクションを適用するルールを example_table の example_chain に追加します。nft add rule example_table example_chain ip saddr vmap @example_map
# nft add rule example_table example_chain ip saddr vmap @example_mapCopy to Clipboard Copied! Toggle word wrap Toggle overflow IPv4アドレスと対応するアクションを example_map に追加します。nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }# nft add element ip example_table example_map { 192.0.2.1 : accept, 192.0.2.2 : drop }Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、IPv4アドレスのアクションへのマッピングを定義します。上記で作成したルールと組み合わせて、ファイアウォールは 192.0.2.1 からのパケットを受け入れ、192.0.2. からのパケットをドロップします。- 必要に応じて、別の IP アドレスおよび action ステートメントを追加してマップを拡張します。
nft add element ip example_table example_map { 192.0.2.3 : accept }# nft add element ip example_table example_map { 192.0.2.3 : accept }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、マップからエントリーを削除します。
nft delete element ip example_table example_map { 192.0.2.1 }# nft delete element ip example_table example_map { 192.0.2.1 }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、ルールセットを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.5.3. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
nft (8) man ページの Maps セクションを参照してください。
6.6. nftables を使用したポート転送の設定 リンクのコピーリンクがクリップボードにコピーされました!
80 および 443 で着信パケットを Web サーバーに転送するファイアウォールにポート転送ルールを設定できます。このファイアウォールルールを使用すると、インターネットのユーザーは、ファイアウォールの IP またはホスト名を使用して Web サーバーにアクセスできます。
6.6.1. 着信パケットの別のローカルポートへの転送 リンクのコピーリンクがクリップボードにコピーされました!
8022 の着信 IPv4 パケットをローカルシステムのポート 22 に転送する方法を説明します。
手順6.17 着信パケットの別のローカルポートへの転送
- IP アドレスファミリーを使用して、
natという名前のテーブルを作成します。nft add table ip nat
# nft add table ip natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - テーブルに
preroutingおよびpostroutingチェーンを追加します。nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記nft コマンドに--オプションを渡して、シェルが優先度の負の値を nft コマンドのオプションとして解釈しないようにします。 8022ポートの着信パケットをローカルポート22にリダイレクトするルールをpreroutingチェーンに追加します。nft add rule ip nat prerouting tcp dport 8022 redirect to :22
# nft add rule ip nat prerouting tcp dport 8022 redirect to :22Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.6.2. 特定のローカルポートで着信パケットを別のホストに転送 リンクのコピーリンクがクリップボードにコピーされました!
443 の着信 IPv4 パケットを、IP アドレス 192.0.2.1 を持つリモートシステムの同じポート番号に転送する方法を説明します。
前提条件
- パケットを転送するシステムに
rootユーザーとしてログインしている。
手順6.18 特定のローカルポートで着信パケットを別のホストに転送
- IP アドレスファミリーを使用して、
natという名前のテーブルを作成します。nft add table ip nat
# nft add table ip natCopy to Clipboard Copied! Toggle word wrap Toggle overflow - テーブルに
preroutingおよびpostroutingチェーンを追加します。nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; } nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }# nft -- add chain ip nat prerouting { type nat hook prerouting priority -100 \; } # nft add chain ip nat postrouting { type nat hook postrouting priority 100 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記nft コマンドに--オプションを渡して、シェルが優先度の負の値を nft コマンドのオプションとして解釈しないようにします。 - ポート
443の着信パケットを192.0.2.1の同じポートにリダイレクトするルールをpreroutingチェーンに追加します。nft add rule ip nat prerouting tcp dport 443 dnat to 192.0.2.1
# nft add rule ip nat prerouting tcp dport 443 dnat to 192.0.2.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow postroutingチェーンにルールを追加して、送信トラフィックをマスカレードします。nft add rule ip nat postrouting ip daddr 192.0.2.1 masquerade
# nft add rule ip nat postrouting ip daddr 192.0.2.1 masqueradeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - パケット転送を有効にします。
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf sysctl -p /etc/sysctl.d/95-IPv4-forwarding.conf
# echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/95-IPv4-forwarding.conf # sysctl -p /etc/sysctl.d/95-IPv4-forwarding.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7. nftables を使用した接続の量の制限 リンクのコピーリンクがクリップボードにコピーされました!
nftables を使用して、接続の数を制限したり、一定量の接続の確立を試みる IP アドレスをブロックして、大量のシステムリソースを使用しないようにすることができます。
6.7.1. nftables を使用した接続数の制限 リンクのコピーリンクがクリップボードにコピーされました!
nft ユーティリティーの ct count パラメーターを使用すると、管理者は接続数を制限できます。この手順では、着信接続を制限する方法の基本的な例を説明します。
前提条件
- example_table にベースの example_chain が存在する。
手順6.19 nftables を使用した接続数の制限
- IPv4 アドレスから
SSHポート(22)への 2 つの同時接続のみを許可し、同じ IP からの接続をすべて拒否するルールを追加します。nft add rule ip example_table example_chain tcp dport ssh meter
# nft add rule ip example_table example_chain tcp dport ssh meter example_meter { ip saddr ct count over 2 } counter rejectCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 必要に応じて、前の手順で作成した meter を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow elementsエントリーは、現在ルールに一致するアドレスを表示します。この例では、elementsは、SSH ポートへのアクティブな接続がある IP アドレスを一覧表示します。出力には、アクティブな接続の数を表示しないため、接続が拒否された場合は表示されないことに注意してください。
6.7.2. 1 分以内に新しい着信 TCP 接続を 11 個以上試行する IP アドレスのブロック リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークを使用すると、管理者はセットを動的に更新できます。このセクションでは、この機能を使用して、1 分以内に 11 個以上の IPv4 TCP 接続を確立しているホストを一時的にブロックする方法を説明します。nftables は、5 分後に拒否リストから IP アドレスを自動的に削除します。
手順6.20 1 分以内に新しい着信 TCP 接続を 11 個以上試行する IP アドレスのブロック
- ip アドレスファミリーを使用して filter テーブルを作成します。
nft add table ip filter
# nft add table ip filterCopy to Clipboard Copied! Toggle word wrap Toggle overflow - input チェーンを filter テーブルに追加します。
nft add chain ip filter input { type filter hook input priority 0 \; }# nft add chain ip filter input { type filter hook input priority 0 \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow - denylist という名前のセットを filter テーブルに追加します。
nft add set ip filter denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }# nft add set ip filter denylist { type ipv4_addr \; flags dynamic, timeout \; timeout 5m \; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、IPv4 アドレスの動的セットを作成します。timeout 5mパラメーターは、nftablesがセットから 5 分後にエントリーを自動的に削除することを定義します。 - 1 分以内に新規 TCP 接続を 10 個以上確立しようとするホストのソース IP アドレスを
denylistセットに自動的に追加するルールを追加します。nft add rule ip filter input ip protocol tcp ct state new, untracked limit rate over 10/minute add @denylist { ip saddr }# nft add rule ip filter input ip protocol tcp ct state new, untracked limit rate over 10/minute add @denylist { ip saddr }Copy to Clipboard Copied! Toggle word wrap Toggle overflow denylistセットの IP アドレスからの接続をすべて破棄するルールを追加します。nft add rule ip filter input ip saddr @denylist drop
# nft add rule ip filter input ip saddr @denylist dropCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.7.3. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- 詳細は、「nftables で名前付きセットの使用」 を参照してください。
6.8. nftables ルールのデバッグ リンクのコピーリンクがクリップボードにコピーされました!
nftables フレームワークは、管理者がルールをデバッグし、パケットが一致するかどうかを確認するためのさまざまなオプションを提供します。本セクションでは、3 つのオプションを説明します。
6.8.1. カウンターによるルールの作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- ルールを追加するチェーンが存在する。
手順6.21 カウンターによるルールの作成
counterパラメーターを使用して新しいルールをチェーンに追加します。以下の例では、ポート 22 で TCP トラフィックを許可し、このルールに一致するパケットとトラフィックをカウントするカウンターを使用するルールを追加します。nft add rule inet example_table example_chain tcp dport 22 counter accept
# nft add rule inet example_table example_chain tcp dport 22 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - カウンター値を表示するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8.2. 既存のルールへのカウンターの追加 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- カウンターを追加するルールがある。
手順6.22 既存のルールへのカウンターの追加
- チェーンのルール (ハンドルを含む) を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ルールの代わりに counter パラメーターを使用して
カウンターを追加します。以下の例は、前の手順で表示したルールの代わりに、カウンターを追加します。nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter accept
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - カウンター値を表示するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.8.3. 既存のルールに一致するパケットの監視 リンクのコピーリンクがクリップボードにコピーされました!
nftables のトレース機能と nft monitor コマンドを組み合わせると、管理者はルールに一致するパケットを表示できます。この手順では、ルールのトレースと、このルールに一致するパケットの監視を有効にする方法を説明します。
前提条件
- カウンターを追加するルールがある。
手順6.23 既存のルールに一致するパケットの監視
- チェーンのルール (ハンドルを含む) を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ルールを置き換えてトレース機能を追加しますが、
metanftraceset1パラメーターを使用します。以下の例は、前の手順で表示したルールの代わりに、トレースを有効にします。nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 accept
# nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow - nft monitor コマンドを使用してトレースを表示します。以下の例は、コマンドの出力をフィルターリングして、
inet example_table example_chainを含むエントリーのみを表示します。nft monitor | grep "inet example_table example_chain"
# nft monitor | grep "inet example_table example_chain" trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240 trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept) ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告nft monitor コマンドは、トレースが有効なルールの数と、一致するトラフィックの量に応じて、多くの出力を表示できます。grep などのユーティリティーを使用して出力をフィルターリングします。
第7章 システム監査 リンクのコピーリンクがクリップボードにコピーされました!
- イベントの日時、タイプ、結果
- サブジェクトとオブジェクトの機密性のラベル
- イベントを開始したユーザーの ID とイベントの関連性
- Audit 設定の全修正および Audit ログファイルへのアクセス試行
- SSH、Kerberos、およびその他の認証メカニズムの全使用
/etc/passwdなどの信頼できるデータベースへの変更。- システムからの情報のインポート、およびシステムへの情報のエクスポートの試行
- ユーザー ID、サブジェクトおよびオブジェクトラベルなどの属性に基づく include または exclude イベント
- Controlled Access Protection Profile (CAPP)
- Labeled Security Protection Profile (LSPP)
- Rule Set Base Access Control (RSBAC)
- NISPOM (National Industrial Security Program Operating Manual)
- Federal Information Security Management Act (FISMA)
- PCI DSS (Payment Card Industry Data Security Standard)
- セキュリティー技術実装ガイド (Security Technical Implementation Guide (STIG))
- National Information Assurance Partnership (NIAP) および Best Security Industries (BSI) による評価
- Red Hat Enterprise Linux 5 における LSPP/CAPP/RSBAC/EAL4 以降の認定
- Red Hat Enterprise Linux 6 における OSPP/EAL4 以降 (Operating System Protection Profile / Evaluation Assurance Level 4 以降) の認定
使用例
- ファイルアクセスの監視
- Audit は、ファイルやディレクトリーがアクセス、修正、または実行されたか、もしくはファイルの属性が変更されたかを追跡できます。これはたとえば、重要なファイルへのアクセスを検出し、これらのファイルが破損した場合に監査証跡を入手可能とする際に役に立ちます。
- システムコールの監視
- Audit は、一部のシステムコールが使用されるたびにログエントリーを生成するように設定できます。たとえば、
settimeofday、clock_adjtime、およびその他の時間関連のシステムコールを監視することで、システム時間への変更を追跡するために使用できます。 - ユーザーが実行したコマンドの記録
- Audit はファイルが実行されたかどうかを追跡できるため、特定のコマンドの実行を毎回記録するようにルールを定義できます。たとえば、
/binディレクトリー内のすべての実行可能ファイルにルールを定義できます。これにより作成されるログエントリーをユーザー ID で検索すると、ユーザーごとに実行されたコマンドの監査証跡を生成できます。 - システムのパス名の実行の記録
- ルールの呼び出し時にパスを inode に変換するファイルアクセスをウォッチする以外に、ルールの呼び出し時に存在しない場合や、ルールの呼び出し後にファイルが置き換えられた場合でも、Audit がパスの実行をウォッチできるようになりました。これにより、ルールは、プログラム実行ファイルをアップグレードした後、またはインストールされる前にも機能を継続できます。
- セキュリティーイベントの記録
pam_faillock認証モジュールは、失敗したログイン試行を記録できます。Audit で失敗したログイン試行も記録するように設定すると、ログインを試みたユーザーに関する追加情報が提供されます。- イベントの検索
- Audit は ausearch ユーティリティーを提供します。これを使用すると、ログエントリーをフィルターリングし、さまざまな条件に基づいて完全な監査証跡を提供できます。
- サマリーレポートの実行
- aureport ユーティリティーを使用すると、記録されたイベントの日次レポートを生成できます。システム管理者は、このレポートを分析し、疑わしいアクティビティーをさらに調べることができます。
- ネットワークアクセスの監視
- iptables ユーティリティーおよび ebtables ユーティリティーは、Audit イベントをトリガーするように設定できます。これにより、システム管理者はネットワークアクセスを監視できます。
7.1. Audit システムのアーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
- audisp - Audit dispatcher デーモンは Audit デーモンと対話し、さらに処理するためにイベントを他のアプリケーションに送信します。このデーモンの目的は、リアルタイム分析プログラムが Audit イベントと対話できるようにするためのプラグインメカニズムを提供することです。
- auditctl: Audit 制御ユーティリティーは、カーネル Audit コンポーネントと対話してルールを管理し、イベント生成プロセスの多くの設定およびパラメーターを制御します。
- 残りの Audit ユーティリティーは、Audit ログファイルのコンテンツを入力として受け取り、ユーザーの要件に基づいて出力を生成します。たとえば、aureport ユーティリティーは、記録されたすべてのイベントのレポートを生成します。
7.2. audit パッケージのインストール リンクのコピーリンクがクリップボードにコピーされました!
yum install audit
~]# yum install audit
7.3. audit サービスの設定 リンクのコピーリンクがクリップボードにコピーされました!
/etc/audit/auditd.conf ファイルで設定できます。このファイルは、Audit デーモンの動作を変更する設定パラメーターで設定されています。ハッシュ記号(#)に続く空の行とテキストは無視されます。詳細は、auditd.conf(5) の man ページをご覧ください。
7.3.1. セキュアな環境への auditd の設定 リンクのコピーリンクがクリップボードにコピーされました!
auditd 設定は、ほとんどの環境に適しています。ただし、環境が厳格なセキュリティーポリシーを満たす必要がある場合は、/etc/audit/auditd.conf ファイル内の Audit デーモン設定に次の設定が推奨されます。
- log_file
- Audit ログファイル(通常は
/var/log/audit/)を保持するディレクトリーは、別のマウントポイントに存在する必要があります。これにより、その他のプロセスがこのディレクトリー内の領域を使用しないようにし、Audit デーモンの残りの領域を正確に検出します。 - max_log_file
- 1 つの Audit ログファイルの最大サイズを指定します。これは、Audit ログファイルを保持するパーティションで利用可能な領域を完全に使用するように設定する必要があります。
max_log_fileパラメーターは、最大ファイルサイズをメガバイトで指定します。指定する値は、数値にする必要があります。 - max_log_file_action
max_log_fileに設定された制限に達すると実行するアクションを決定します。Audit ログファイルが上書きされないようにkeep_logsに設定する必要があります。- space_left
space_left_actionパラメーターに設定したアクションがトリガーされるディスクに残っている空き領域の量を指定します。管理者は、ディスクの領域を反映して解放するのに十分な時間を設定する必要があります。space_leftの値は、Audit ログファイルが生成される速度によって異なります。space_leftの値が整数として指定される場合、絶対サイズ(MiB)として解釈されます。値が 1 から 99 までの数字とそれに続くパーセンテージ記号(5% など)として指定される場合、監査デーモンはlog_fileを含むファイルシステムのサイズに基づいて絶対サイズをメガバイト単位で計算します。- space_left_action
- 適切な通知方法を使用して、
space_left_actionパラメーターをemailまたはexecに設定することが推奨されます。 - admin_space_left
admin_space_left_actionパラメーターに設定されたアクションがトリガーされる空き領域の絶対最小量を指定します。これは、管理者が実行するアクションをログに記録するのに十分な領域を残す値に設定する必要があります。このパラメーターの数値は、space_leftの数字よりも小さくする必要があります。また、数値にパーセント記号を追加 (1% など) して、Audit デーモンが、ディスクパーティションサイズに基づいて、数値を計算するようにすることもできます。- admin_space_left_action
singleに設定してシステムをシングルユーザーモードにし、管理者がディスク領域を解放できるようにします。- disk_full_action
- Audit ログファイルを保持するパーティションに空き領域がない場合に発生するアクションを指定します。
haltまたはsingleに設定する必要があります。これにより、Audit がイベントをログに記録できなくなると、システムは、シングルユーザーモードでシャットダウンまたは動作します。 - disk_error_action
- Audit ログファイルを保持するパーティションでエラーが検出された場合に発生するアクションを指定します。ハードウェアの誤作動処理に関するローカルセキュリティーポリシーに応じて、
syslog、single、またはhaltに設定する必要があります。 - flush
incremental_asyncに設定する必要があります。これはfreqパラメーターと組み合わせて機能し、ハードドライブとのハード同期を強制する前にディスクに送信できるレコードの数を決定します。freqパラメーターは100に設定する必要があります。このパラメーターにより、アクティビティーが集中した際に高いパフォーマンスを保ちつつ、Audit イベントデータがディスクのログファイルと確実に同期されるようになります。
7.4. audit サービスの起動 リンクのコピーリンクがクリップボードにコピーされました!
auditd が設定されたら、サービスを起動して Audit 情報を収集し、ログファイルに保存します。root ユーザーで以下のコマンドを実行し、auditd を起動します。
service auditd start
~]# service auditd start
auditd デーモンと正しく対話する唯一の方法です。auid 値が適切に記録されるように、service コマンドを使用する必要があります。systemctl コマンドは、enable と status の 2 つのアクションにのみ使用できます。
auditd が開始するように設定するには、次のコマンドを実行します。
systemctl enable auditd
~]# systemctl enable auditd
auditd でさまざまなアクションを実行できます。ここで、action は以下のいずれかになります。
- stop
auditdを停止します。- restart
auditdを再起動します。- reload または force-reload
/etc/audit/ auditd.confファイルから auditd の設定を再読み込みします。- rotate
/var/log/audit/ディレクトリーのログファイルをローテーションします。- resume
- Audit イベントのログが一旦停止した後、再開します。たとえば、Audit ログファイルが含まれるディスクパーティションの未使用領域が不足している場合などです。
- condrestart または try-restart
- auditd がすでに実行されている場合にのみ、これを再起動します。
- status
- auditd の実行ステータスを表示します。
7.5. Audit ルールの定義 リンクのコピーリンクがクリップボードにコピーされました!
- 制御ルール
- Audit システムの動作とその設定の一部を変更できるようにします。
- ファイルシステムのルール
- ファイルウォッチとも呼ばれ、特定のファイルやディレクトリーへのアクセスを監査することができます。
- システムコールのルール
- 指定されたプログラムが行うシステムコールのログ記録を許可します。
- auditctl ユーティリティーを使用してコマンドラインで設定します。これらのルールは、再起動しても持続しないことに注意してください。詳細は、「auditctlを使用した Audit ルールの定義」 を参照してください。
/etc/audit/audit.rulesファイル内。詳細は、を参照してください。 「/etc/audit/audit.rulesファイルでの永続的な監査ルールと制御の定義」
7.5.1. auditctlを使用した Audit ルールの定義 リンクのコピーリンクがクリップボードにコピーされました!
CAP_AUDIT_CONTROL 機能が必要で、ユーザーメッセージをログに記録するために必要な CAP_AUDIT_WRITE 機能が必要です。
制御ルールの定義
-b- カーネル内の既存の Audit バッファーの最大量を設定します。以下に例を示します。
auditctl -b 8192
~]# auditctl -b 8192Copy to Clipboard Copied! Toggle word wrap Toggle overflow -f- 重大なエラーが検出されたときに実行されるアクションを設定します。以下に例を示します。
auditctl -f 2
~]# auditctl -f 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の設定は、重大なエラーが発生した場合にカーネルパニックを引き起こします。 -e- Audit システムを有効または無効にするか、その設定をロックします。以下に例を示します。
auditctl -e 2
~]# auditctl -e 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドは、Audit 設定をロックします。 -r- 1 秒あたりに生成されるメッセージのレートを設定します。以下に例を示します。
auditctl -r 0
~]# auditctl -r 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の設定では、生成されるメッセージにレート制限は設定されていません。 -s- Audit システムのステータスを報告します。以下に例を示します。
auditctl -s
~]# auditctl -s AUDIT_STATUS: enabled=1 flag=2 pid=0 rate_limit=0 backlog_limit=8192 lost=259 backlog=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow -l- 現在ロードされているすべての Audit ルールを一覧表示します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -D- 現在読み込まれているすべての Audit ルールを削除します。以下に例を示します。
auditctl -D
~]# auditctl -D No rulesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
ファイルシステムルールの定義
auditctl -w path_to_file -p permissions -k key_name
auditctl -w path_to_file -p permissions -k key_name
- path_to_file は、監査対象となるファイルまたはディレクトリーです。
- permissions は、ログに記録されるパーミッションです。
r—- ファイルまたはディレクトリーへの読み取りアクセス。w— ファイルまたはディレクトリーへの書き込みアクセス。x— ファイルまたはディレクトリーへのアクセスを実行します。a— ファイルまたはディレクトリーの属性の変更。
- key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。
例7.1 ファイルシステムルール
/etc/passwd ファイルへのすべての書き込みアクセスと、すべての属性変更をログに記録するルールを定義するには、以下のコマンドを実行します。
auditctl -w /etc/passwd -p wa -k passwd_changes
~]# auditctl -w /etc/passwd -p wa -k passwd_changes
-k オプションに続く文字列は任意であることに注意してください。
/etc/selinux/ ディレクトリー内のすべてのファイルに対するすべての書き込みアクセスと、すべての属性変更をログに記録するルールを定義するには、以下のコマンドを実行します。
auditctl -w /etc/selinux/ -p wa -k selinux_changes
~]# auditctl -w /etc/selinux/ -p wa -k selinux_changes
auditctl -w /sbin/insmod -p x -k module_insertion
~]# auditctl -w /sbin/insmod -p x -k module_insertion
システムコールルールの定義
auditctl -a action,filter -S system_call -F field=value -k key_name
auditctl -a action,filter -S system_call -F field=value -k key_name
- action と filter は、特定のイベントがログに記録されるタイミングを指定します。action は、
alwaysまたはneverのいずれかです。filter は、イベントに適用されるカーネルルールマッチングフィルターを指定します。rule-matching フィルターは、task、exit、ユーザー、およびexcludeのいずれかです。これらのフィルターの詳細については、「Audit システムのアーキテクチャー」の冒頭を参照してください。 - system_call は、名前でシステムコールを指定します。すべてのシステムコールのリストは、
/usr/include/asm/unistd_64.hファイルにあります。複数のシステムコールを 1 つのルールにまとめることができ、それぞれを独自の-Sオプションの後に指定することができます。 - field=value は、指定されたアーキテクチャー、グループ ID、プロセス ID などに基づいてイベントに一致するようにルールをさらに変更する追加のオプションを指定します。利用可能なすべてのフィールドタイプとその値の完全なリストについては、auditctl(8) の man ページを参照してください。
- key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。
例7.2 システムコールのルール
adjtimex または settimeofday システムコールがプログラムによって使用され、システムが 64 ビットアーキテクチャーを使用するたびにログエントリーを作成するルールを定義するには、以下のコマンドを使用します。
auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
~]# auditctl -a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
~]# auditctl -a always,exit -S unlink -S unlinkat -S rename -S renameat -F auid>=1000 -F auid!=4294967295 -k delete
-F auid!=4294967295 オプションが、ログイン UID が設定されていないユーザーを除外するために使用されています。
-w /etc/shadow -p wa ファイルシステムルールに類似したシステムコールのルールを作成します。
auditctl -a always,exit -F path=/etc/shadow -F perm=wa
~]# auditctl -a always,exit -F path=/etc/shadow -F perm=wa
7.5.2. 実行可能なファイルルールの定義 リンクのコピーリンクがクリップボードにコピーされました!
auditctl -a action,filter [ -F arch=cpu -S system_call] -F exe=path_to_executable_file -k key_name
auditctl -a action,filter [ -F arch=cpu -S system_call] -F exe=path_to_executable_file -k key_name
- action と filter は、特定のイベントがログに記録されるタイミングを指定します。action は、
alwaysまたはneverのいずれかです。filter は、イベントに適用されるカーネルルールマッチングフィルターを指定します。rule-matching フィルターは、task、exit、ユーザー、およびexcludeのいずれかです。これらのフィルターの詳細については、「Audit システムのアーキテクチャー」の冒頭を参照してください。 - system_call は、名前でシステムコールを指定します。すべてのシステムコールのリストは、
/usr/include/asm/unistd_64.hファイルにあります。複数のシステムコールを 1 つのルールにまとめることができ、それぞれを独自の-Sオプションの後に指定することができます。 - path_to_executable_file は、監査される実行可能ファイルへの絶対パスです。
- key_name は、どのルールまたはルールセットが特定のログエントリーを生成したかを特定する際に役立つオプションの文字列です。
例7.3 実行可能なファイルルール
/bin/id プログラムのすべての実行をログに記録するルールを定義するには、以下のコマンドを実行します。
auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id
~]# auditctl -a always,exit -F exe=/bin/id -F arch=b64 -S execve -k execution_bin_id
7.5.3. /etc/audit/audit.rules ファイルでの永続的な監査ルールと制御の定義 リンクのコピーリンクがクリップボードにコピーされました!
/etc/audit/audit.rules ファイルに直接追加するか、/etc/audit/rules.d/ ディレクトリーにあるルールを読み取る augenrules プログラムを使用する必要があります。/etc/audit/audit.rules ファイルは、同じ auditctl コマンドライン構文を使用してルールを指定します。ハッシュ記号(#)に続く空の行とテキストは無視されます。
-R オプションを使用して指定されたファイルからルールを読み取ることもできます。以下に例を示します。
auditctl -R /usr/share/doc/audit/rules/30-stig.rules
~]# auditctl -R /usr/share/doc/audit/rules/30-stig.rules
制御ルールの定義
-b、-D、-e、-f、-r、--loginuid-immutable、および --backlog_wait_time) のみを含めることができます。このオプションの詳細は 「制御ルールの定義」 を参照してください。
例7.4 audit.rulesの制御ルール
ファイルシステムおよびシステムコールのルールの定義
例7.5 audit.rulesのファイルシステムおよびシステムコールのルール
事前設定ルールのファイル
/usr/share/doc/audit/rules/ ディレクトリーには、audit パッケージがさまざまな認定標準に従って事前設定されたルールファイルのセットを提供します。
30-NISPOM.rules- National Industrial Security Program Operating Manual の Information System Security の章で指定されている要件を満たす Audit ルール設定。30-pci-dss-v31.rules- Payment Card Industry Data Security Standard (PCI DSS) v3.1 によって設定された要件を満たす Audit ルールの設定。30-STIG.rules- セキュリティー技術実装ガイド(STIG)によって設定された要件を満たす Audit ルールの設定。
/etc/audit/audit.rules ファイルのバックアップを作成し、選択した設定ファイルを /etc/audit/audit.rules ファイルにコピーします。
cp /etc/audit/audit.rules /etc/audit/audit.rules_backup cp /usr/share/doc/audit/rules/30-stig.rules /etc/audit/audit.rules
~]# cp /etc/audit/audit.rules /etc/audit/audit.rules_backup
~]# cp /usr/share/doc/audit/rules/30-stig.rules /etc/audit/audit.rules
/usr/share/doc/audit/rules/README-rules ファイルを参照してください。
永続ルールを定義する augenrules の使用
/etc/audit/rules.d/ ディレクトリーにあるルールを読み取り、audit.rules ファイルにコンパイルします。このスクリプトは、.rules で終わるすべてのファイルを、自然なソート順序に基づいて特定の順序で処理します。このディレクトリーのファイルは、以下の意味を持つグループに分類されます。
- 10 - カーネルおよび auditctl の設定
- 20 - 一般的なルールに該当してしまう可能性もあるが、ユーザー側で独自ルールを作成することも可能
- 30 - 主なルール
- 40 - 任意のルール
- 50 - サーバー固有のルール
- 70 - システムのローカルルール
- 90 - ファイナライズ (不変)
/etc/audit/rules.d/ にコピーされます。たとえば、STIG 設定でシステムを設定し、10-base-config、30-stig、31-privileged、99-finalize の各ルールをコピーします。
/etc/audit/rules.d/ ディレクトリーにルールを取得し、--load ディレクティブを指定して augenrules スクリプトを実行してそれらを読み込みます。
audit.rules (8)および augenrules (8) を参照し てください。
7.6. Audit ログファイルについて リンクのコピーリンクがクリップボードにコピーされました!
/var/log/audit/audit.log ファイルに保存します。ログローテーションが有効な場合は、ローテーションされた audit.log ファイルは同じディレクトリーに保存されます。
/etc/ssh/sshd_config ファイルの読み取りまたは変更の試行をすべてログに記録します。
-w /etc/ssh/sshd_config -p warx -k sshd_config
-w /etc/ssh/sshd_config -p warx -k sshd_config
auditd デーモンが実行している場合は、たとえば以下のコマンドを使用して、Audit ログファイルに新しいイベントを作成します。
cat /etc/ssh/sshd_config
~]$ cat /etc/ssh/sshd_config
audit.log ファイルでは以下のようになります。
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config" type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman" type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 objtype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0 type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
type=SYSCALL msg=audit(1364481363.243:24287): arch=c000003e syscall=2 success=no exit=-13 a0=7fffd19c5592 a1=0 a2=7fffd19c4b50 a3=a items=1 ppid=2686 pid=3538 auid=1000 uid=1000 gid=1000 euid=1000 suid=1000 fsuid=1000 egid=1000 sgid=1000 fsgid=1000 tty=pts0 ses=1 comm="cat" exe="/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="sshd_config"
type=CWD msg=audit(1364481363.243:24287): cwd="/home/shadowman"
type=PATH msg=audit(1364481363.243:24287): item=0 name="/etc/ssh/sshd_config" inode=409248 dev=fd:00 mode=0100600 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0 objtype=NORMAL cap_fp=none cap_fi=none cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1364481363.243:24287) : proctitle=636174002F6574632F7373682F737368645F636F6E666967
type= キーワードで始まります。各レコードは、空白またはコンマで区切られた複数の name=value ペアで設定されます。上記のイベントの詳細な分析は以下のようになります。
1 つ目のレコード
type=SYSCALLtypeフィールドには、レコードのタイプが含まれます。この例では、SYSCALL値は、このレコードがカーネルへのシステムコールによってトリガーされることを指定しています。利用可能なすべてのタイプ値のリストとその説明については、Audit Record Types を参照してください。msg=audit(1364481363.243:24287):msgフィールドは以下を記録します。audit (time_stamp: ID)形式のレコードのタイムスタンプと一意のID。複数のレコードが同じ Audit イベントの一部として生成されている場合は、同じタイムスタンプおよび ID を共有できます。タイムスタンプは Unix の時間形式です (1970 年 1 月 1 日 00:00:00 UTC からの秒数)。- カーネルまたはユーザー空間のアプリケーションが提供するさまざまなイベント固有の
name=valueペア。
arch=c000003earchフィールドには、システムの CPU アーキテクチャーに関する情報が含まれます。c000003eの値は 16 進数表記でエンコードされます。ausearch コマンドで Audit レコードを検索する場合は、-iオプションまたは--interpretオプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。c000003e値はx86_64として解釈されます。syscall=2syscallフィールドは、カーネルに送信されたシステムコールのタイプを記録します。値2は、/usr/include/asm/unistd_64.hファイルで人間が判読できる値と一致します。この場合、2はオープンシステムコールです。ausyscall ユーティリティーを使用すると、システムコール番号を、人間が判読できるものに変換できます。ausyscall --dump コマンドを使用して、すべてのシステムコールの一覧とその数字を表示します。詳細は、ausyscall(8) の man ページを参照してください。success=nosuccessフィールドは、その特定のイベントで記録されたシステムコールが成功したか失敗したかを記録します。この例では、呼び出しが成功しませんでした。exit=-13exitフィールドには、システムコールによって返される終了コードを指定する値が含まれます。この値は、システムコールにより異なります。次のコマンドを実行すると、この値を人間が判読可能なものに変換できます。ausearch --interpret --exit -13
~]# ausearch --interpret --exit -13Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、監査ログに終了コード-13で失敗したイベントが含まれていることを前提としています。a0=7fffd19c5592,a1=0,a2=7fffd19c5592,a3=aa0toa3フィールドは、このイベントにおけるシステムコールの最初の 4 つの引数を 16 進数表記で記録します。これらの引数は、使用されるシステムコールによって異なります。ausearch ユーティリティーで解釈できます。items=1itemsフィールドには、syscall レコードに続く PATH 補助レコードの数が含まれます。ppid=2686ppidフィールドは、親プロセス ID (PPID)を記録します。この場合、2686はbashなどの親プロセスの PPID です。pid=3538pidフィールドは、プロセス ID (PID)を記録します。この場合、3538はcatプロセスの PID です。auid=1000auidフィールドは、loginuid である Audit ユーザー ID を記録します。この ID は、ログイン時にユーザーに割り当てられ、ユーザーの ID が変更された場合でもすべてのプロセスに継承されます(例: su - john コマンドでユーザーアカウントの切り替え)。uid=1000uidフィールドは、解析しているプロセスを開始したユーザーのユーザー ID を記録します。ユーザー ID は、ausearch -i --uid UID のコマンドを使用してユーザー名に解釈できます。gid=1000gidフィールドは、解析しているプロセスを開始したユーザーのグループ ID を記録します。euid=1000euidフィールドは、解析しているプロセスを開始したユーザーの実効ユーザー ID を記録します。suid=1000suidフィールドは、解析しているプロセスを開始したユーザーの設定ユーザー ID を記録します。fsuid=1000fsuidフィールドは、解析しているプロセスを開始したユーザーのファイルシステムユーザー ID を記録します。egid=1000egidフィールドは、解析しているプロセスを開始したユーザーの実効グループ ID を記録します。sgid=1000sgidフィールドは、解析しているプロセスを開始したユーザーのセットグループ ID を記録します。fsgid=1000fsgidフィールドは、解析しているプロセスを開始したユーザーのファイルシステムグループ ID を記録します。tty=pts0ttyフィールドは、解析しているプロセスが呼び出された端末を記録します。ses=1sesフィールドは、解析しているプロセスが呼び出されたセッションのセッション ID を記録します。comm="cat"commフィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドライン名を記録します。この場合、この Audit イベントをトリガーするために cat コマンドを使用します。exe="/bin/cat"exeフィールドは、解析しているプロセスを呼び出すために使用された実行可能ファイルへのパスを記録します。subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023subjフィールドは、解析しているプロセスが実行時にラベル付けされた SELinux コンテキストを記録します。key="sshd_config"keyフィールドは、Audit ログでこのイベントを生成したルールに関連付けられた管理者定義の文字列を記録します。
2 つ目のレコード
type=CWD- 2 つ目のレコードでは、
typeフィールドの値はCWD- 現在の作業ディレクトリーです。このタイプは、最初のレコードで指定されたシステムコールを開始したプロセスの作業ディレクトリーを記録するために使用されます。この記録の目的は、相対パスが関連する PATH 記録に保存された場合に、現行プロセスの位置を記録することにあります。これにより、絶対パスを再構築できます。 msg=audit(1364481363.243:24287)msgフィールドは、最初のレコードと同じタイムスタンプと ID 値を保持します。タイムスタンプは Unix の時間形式です (1970 年 1 月 1 日 00:00:00 UTC からの秒数)。cwd="/home/user_name"cwdフィールドには、システムコールが呼び出されたディレクトリーへのパスが含まれます。
3 つ目のレコード
type=PATH- 3 つ目のレコードでは、
typeフィールドの値はPATHです。Audit イベントには、システムコールに引数として渡されるすべてのパスのPATH-type レコードが含まれます。この Audit イベントでは、1 つのパス(/etc/ssh/sshd_config)を引数として使用されました。 msg=audit(1364481363.243:24287):msgフィールドは、1 番目と 2 番目のレコードと同じタイムスタンプと ID 値を保持します。item=0itemフィールドは、SYSCALLタイプレコードで参照されているアイテムの合計数のうち、現在のレコードがどのアイテムであるかを示します。この数はゼロベースで、値0は最初の項目であることを示します。name="/etc/ssh/sshd_config"nameフィールドは、システムコールに引数として渡されたファイルまたはディレクトリーのパスを記録します。ここでは、/etc/ssh/sshd_configファイルです。inode=409248inodeフィールドには、このイベントで記録されたファイルまたはディレクトリーに関連付けられた inode 番号が含まれます。以下のコマンドは、inode 番号409248に関連するファイルまたはディレクトリーを表示します。find / -inum 409248 -print
~]# find / -inum 409248 -print /etc/ssh/sshd_configCopy to Clipboard Copied! Toggle word wrap Toggle overflow dev=fd:00devフィールドは、このイベントで記録されたファイルまたはディレクトリーを含むデバイスのマイナーおよびメジャー ID を指定します。この場合、値は/dev/fd/0デバイスを表します。mode=0100600modeフィールドは、ファイルまたはディレクトリーのパーミッションを記録します。これは、st_modeフィールドの stat コマンドで返される数値表記でエンコードされます。詳細は、stat (2)の man ページを参照してください。この場合、0100600は-rw-------として解釈できます。つまり、root ユーザーのみが/etc/ssh/sshd_configファイルへの読み取りおよび書き込みパーミッションを持ちます。ouid=0ouidフィールドは、オブジェクトの所有者のユーザー ID を記録します。ogid=0ogidフィールドは、オブジェクトの所有者のグループ ID を記録します。rdev=00:00rdevフィールドには、特別なファイルに対してのみ記録されたデバイス識別子が含まれます。ここでは、記録されたファイルは通常のファイルであるため、このフィールドは使用されません。obj=system_u:object_r:etc_t:s0objフィールドは、実行時に記録されたファイルまたはディレクトリーにラベル付けされた SELinux コンテキストを記録します。objtype=NORMALobjtypeフィールドは、指定したシステムコールのコンテキストで各パスレコード操作の意図を記録します。cap_fp=nonecap_fpフィールドは、ファイルまたはディレクトリーオブジェクトで許可されたファイルシステムベースの機能の設定に関連するデータを記録します。cap_fi=nonecap_fiフィールドは、ファイルまたはディレクトリーオブジェクトの継承されたファイルシステムベースの機能の設定に関連するデータを記録します。cap_fe=0cap_feフィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能の有効ビットの設定を記録します。cap_fver=0cap_fverフィールドは、ファイルまたはディレクトリーオブジェクトのファイルシステムベースの機能のバージョンを記録します。
4 つ目のレコード
type=PROCTITLEtypeフィールドには、レコードのタイプが含まれます。この例では、PROCTITLE値は、このレコードがカーネルへのシステムコールによってトリガーされたこの Audit イベントをトリガーした完全なコマンドラインを提供することを指定しています。proctitle=636174002F6574632F7373682F737368645F636F6E666967proctitleフィールドは、解析しているプロセスを開始するために使用したコマンドのコマンドラインを記録します。このフィールドは 16 進数の表記で記録され、Audit ログパーサーに影響が及ばないようにします。このテキストは、この Audit イベントを開始したコマンドに復号します。ausearch コマンドで Audit レコードを検索する場合は、-iオプションまたは--interpretオプションを使用して、16 進数の値を人間が判読できる値に自動的に変換します。636174002F6574632F7373682F737368645F636F6E666967値はcat /etc/ssh/sshd_configとして解釈されます。
例7.6 追加の audit.log イベント
auditd デーモンが正常に起動したことを記録します。ver フィールドは、起動した Audit デーモンのバージョンを示します。
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=1000 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
type=DAEMON_START msg=audit(1363713609.192:5426): auditd start, ver=2.2 format=raw kernel=2.6.32-358.2.1.el6.x86_64 auid=1000 pid=4979 subj=unconfined_u:system_r:auditd_t:s0 res=success
type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=1000 auid=1000 ses=1 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="root" exe="/bin/su" hostname=? addr=? terminal=pts/0 res=failed'
type=USER_AUTH msg=audit(1364475353.159:24270): user pid=3280 uid=1000 auid=1000 ses=1 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:authentication acct="root" exe="/bin/su" hostname=? addr=? terminal=pts/0 res=failed'
7.7. Audit ログファイルの検索 リンクのコピーリンクがクリップボードにコピーされました!
/var/log/audit/audit.log ファイルを検索します。ausearch options -if file_nameコマンドを使用して、別のファイル を指定できます。1 つの ausearch コマンドで複数のオプションを指定することは、フィールドタイプ間で AND 演算子を使用し、同じフィールドタイプの複数のインスタンス間で OR 演算子を使用することと同じです。
例7.7 ausearch を使用した Audit ログファイルの検索
/var/log/audit/audit.log ファイルで失敗したログイン試行を検索するには、次のコマンドを使用します。
ausearch --message USER_LOGIN --success no --interpret
~]# ausearch --message USER_LOGIN --success no --interpret
ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i
~]# ausearch -m ADD_USER -m DEL_USER -m ADD_GROUP -m USER_CHAUTHTOK -m DEL_GROUP -m CHGRP_ID -m ROLE_ASSIGN -m ROLE_REMOVE -i
auid)を使用して、特定のユーザーが実行したすべてのログに記録されたアクションを検索するには、次のコマンドを使用します。
ausearch -ua 1000 -i
~]# ausearch -ua 1000 -i
ausearch --start yesterday --end now -m SYSCALL -sv no -i
~]# ausearch --start yesterday --end now -m SYSCALL -sv no -i
7.8. Audit レポートの作成 リンクのコピーリンクがクリップボードにコピーされました!
/var/log/audit/ ディレクトリー内のすべての audit.log ファイルがレポートを作成するためにクエリーされます。aureport options -if file_nameコマンドを使用して、レポートを実行する別のファイル を指定できます。
例7.8 aureport を使用した Audit レポートの生成
aureport --start 04/08/2013 00:00:00 --end 04/11/2013 00:00:00
~]# aureport --start 04/08/2013 00:00:00 --end 04/11/2013 00:00:00
aureport -x
~]# aureport -x
aureport -x --summary
~]# aureport -x --summary
aureport -u --failed --summary -i
~]# aureport -u --failed --summary -i
aureport --login --summary -i
~]# aureport --login --summary -i
1000 のすべてのファイルアクセスイベントを検索する ausearch クエリーからレポートを生成するには、以下のコマンドを使用します。
ausearch --start today --loginuid 1000 --raw | aureport -f --summary
~]# ausearch --start today --loginuid 1000 --raw | aureport -f --summary
aureport -t
~]# aureport -t
7.9. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
オンラインのリソース
- RHEL Audit System Refence: https://access.redhat.com/articles/4409591
- Linux Audit ドキュメントのプロジェクトページ (https://github.com/linux-audit/audit-documentation/wiki)
インストールされているドキュメント
/usr/share/doc/audit/ ディレクトリーにあります。
man ページ
- audispd.conf(5)
- auditd.conf(5)
- ausearch-expression(5)
- audit.rules(7)
- audispd(8)
- auditctl(8)
- auditd(8)
- aulast(8)
- aulastlog(8)
- aureport(8)
- ausearch(8)
- ausyscall(8)
- autrace(8)
- auvirt(8)
第8章 設定コンプライアンスおよび脆弱性スキャンの開始 リンクのコピーリンクがクリップボードにコピーされました!
8.1. RHEL における設定コンプライアンスツール リンクのコピーリンクがクリップボードにコピーされました!
- SCAP Workbench - scap-workbench グラフィカルユーティリティーは、単一のローカルシステムまたはリモートシステムで設定スキャンと脆弱性スキャンを実行するように設計されています。これらのスキャンと評価に基づくセキュリティーレポートの生成にも使用できます。
- OpenSCAP: OpenSCAP ライブラリーは、付随する oscap コマンドラインユーティリティーとともに、ローカルシステムで設定スキャンと脆弱性スキャンを実行し、設定コンプライアンスコンテンツを検証し、これらのスキャンおよび評価に基づいてレポートおよびガイドを生成するように設計されています。
- SCAP セキュリティーガイド(SSG) - scap-security-guide パッケージは、Linux システムのセキュリティーポリシーの最新コレクションを提供します。このガイダンスは、セキュリティー強化に関する実践的なアドバイスのカタログから設定されます (該当する場合は、法規制要件へのリンクが含まれます)。このプロジェクトは、一般的なポリシー要件と特定の実装ガイドラインとの間にあるギャップを埋めることを目的としています。
- Script Check Engine (SCE) - SCE は SCAP プロトコルの拡張であり、管理者は Bash、Python、Ruby などのスクリプト言語を使用してセキュリティーコンテンツを作成できます。SCE 拡張機能は、openscap-engine-sce パッケージで提供されます。SCE 自体は SCAP 環境の一部ではありません。
関連情報
oscap (8): oscap コマンドラインユーティリティーの man ページは、利用可能なオプションとその使用方法に関する完全な一覧を提供します。- Red Hat Security Demos: Creating Customized Security Policy Content to Automate Security Compliance - Red Hat Enterprise Linux に含まれるツールを使用してセキュリティーコンプライアンスを自動化し、業界標準のセキュリティーポリシーとカスタムセキュリティーポリシーの両方に準拠するためのハンズオンラボ。トレーニングや、このラボ演習へのアクセスを希望する場合は、Red Hat アカウントチームにお問い合わせください。
- Red Hat Security Demos: Defend Yourself with RHEL Security Technologies - OpenSCAP を含む Red Hat Enterprise Linux で利用可能な主要なセキュリティー技術を使用して、RHEL システムの全レベルでセキュリティーを実装する方法を学ぶためのハンズオンラボ。トレーニングや、このラボ演習へのアクセスを希望する場合は、Red Hat アカウントチームにお問い合わせください。
scap-workbench (8)- SCAP Workbench アプリケーションの man ページでは、アプリケーションの基本情報と、SCAP コンテンツの潜在的なソースへのリンクが提供されます。scap-security-guide (8)-scap-security-guide プロジェクトの man ページでは、利用可能な SCAP セキュリティープロファイルに関する詳細が記載されています。また、OpenSCAP ユーティリティーを使用して提供されたベンチマークを使用する例も含まれています。- Security Compliance Management in the Administering Red Hat Satellite Guide には、Red Hat Satellite で OpenSCAP を使用する方法の詳細が記載されています。
8.2. 脆弱性スキャン リンクのコピーリンクがクリップボードにコピーされました!
8.2.1. Red Hat Security Advisories OVAL フィード リンクのコピーリンクがクリップボードにコピーされました!
8.2.2. システムの脆弱性のスキャン リンクのコピーリンクがクリップボードにコピーされました!
手順
- openscap-scanner パッケージおよび bzip2 パッケージをインストールします。
yum install openscap-scanner bzip2
~]# yum install openscap-scanner bzip2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - お使いのシステムに対応した最新の RHSA OVAL 定義ファイルをダウンロードします。以下に例を示します。
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL7/rhel-7.oval.xml.bz2 | bzip2 --decompress > rhel-7.oval.xml
~]# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL7/rhel-7.oval.xml.bz2 | bzip2 --decompress > rhel-7.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - システムの脆弱性をスキャンし、vulnerability.html ファイルに結果を保存します。
oscap oval eval --report vulnerability.html rhel-7.oval.xml
~]# oscap oval eval --report vulnerability.html rhel-7.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- 結果をブラウザーで確認します。以下に例を示します。
firefox vulnerability.html &
~]$ firefox vulnerability.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- man ページの
oscap (8)
8.2.3. リモートシステムの脆弱性のスキャン リンクのコピーリンクがクリップボードにコピーされました!
oscap-ssh ツールを使用して、OpenSCAP スキャナーでリモートシステムの脆弱性を確認することもできます。
前提条件
- リモートシステムに openscap-scanner パッケージがインストールされている。
- リモートシステムで SSH サーバーが実行している。
手順
- openscap-utils パッケージおよび bzip2 パッケージをインストールします。
yum install openscap-utils bzip2
~]# yum install openscap-utils bzip2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - システムに最新 RHSA OVAL 定義をダウンロードします。
wget -O - https://www.redhat.com/security/data/oval/v2/RHEL7/rhel-7.oval.xml.bz2 | bzip2 --decompress > rhel-7.oval.xml
~]# wget -O - https://www.redhat.com/security/data/oval/v2/RHEL7/rhel-7.oval.xml.bz2 | bzip2 --decompress > rhel-7.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 脆弱性に対して、ホスト名 machine1、ポート 22 で実行する SSH、およびユーザー名 joesec でリモートシステムをスキャンし、結果を remote-vulnerability.html ファイルに保存します。
oscap-ssh joesec@machine1 22 oval eval --report remote-vulnerability.html rhel-7.oval.xml
~]# oscap-ssh joesec@machine1 22 oval eval --report remote-vulnerability.html rhel-7.oval.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- man ページの
oscap-ssh (8)
8.3. 設定コンプライアンススキャン リンクのコピーリンクがクリップボードにコピーされました!
8.3.1. RHEL 7 の設定コンプライアンス リンクのコピーリンクがクリップボードにコピーされました!
コンプライアンススキャンリソースの構造
8.3.2. OpenSCAP スキャン結果の例 リンクのコピーリンクがクリップボードにコピーされました!
| 結果 | 説明 |
|---|---|
| Pass | スキャンでは、このルールとの競合が見つかりませんでした。 |
| Fail | スキャンで、このルールとの競合が検出されました。 |
| Not checked | OpenSCAP はこのルールの自動評価を実行しません。システムがこのルールに手動で準拠しているかどうかを確認してください。 |
| Not applicable | このルールは、現在の設定には適用されません。 |
| Not selected | このルールはプロファイルには含まれません。OpenSCAP はこのルールを評価せず、結果にこのようなルールは表示されません。 |
| Error | スキャンでエラーが発生しました。詳細は、--verbose DEVEL オプションを指定して oscap- scanner コマンドを入力できます。バグレポート を作成することを検討してください。 |
| Unknown | スキャンで予期しない状況が発生しました。詳細は、--verbose DEVEL オプションを指定して oscap- scanner コマンドを入力できます。バグレポート を作成することを検討してください。 |
8.3.3. 設定コンプライアンスのプロファイルの表示 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- openscap-scanner パッケージおよび scap-security-guide パッケージがインストールされている。
手順
- SCAP Security Guide プロジェクトが提供する設定コンプライアンスプロファイルで、利用可能なファイルをすべて一覧表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - oscap info サブコマンドを使用して、選択したデータストリームに関する詳細情報を表示します。データストリームを含む XML ファイルは、名前に
-ds文字列で示されます。Profilesセクションで、利用可能なプロファイルとその ID の一覧を確認できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - データストリームファイルからプロファイルを選択し、選択したプロファイルに関する追加情報を表示します。これを行うには、
--profileオプションと、前のコマンドの出力に表示される ID の接尾辞を指定して oscap info を使用します。たとえば、PCI-DSS プロファイルの ID はxccdf_org.ssgproject.content_profile_pci-dssで、--profileオプションの値は_pci-dssです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - または、GUI を使用する場合は scap-security-guide-doc パッケージをインストールし、Web ブラウザーで
file:///usr/share/doc/scap-security-guide-doc-0.1.46/ssg-rhel7-guide-index.htmlファイルを開きます。Guide to the Secure Configuration of Red Hat Enterprise Linux 7 ドキュメントの右上のフィールドで必要なプロファイルを選択すると、後続の評価のために、関連するコマンドに ID がすでに含まれていることを確認できます。
関連情報
- man ページの
scap-security-guide (8)には、プロファイルの一覧も含まれています。
8.3.4. 特定のベースラインによる設定コンプライアンスの評価 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- openscap-scanner パッケージおよび scap-security-guide パッケージがインストールされている。
- システムが準拠する必要があるベースライン内のプロファイルの ID を知っている必要があります。ID を見つけるには、「設定コンプライアンスのプロファイルの表示」を参照してください。
手順
- 選択したプロファイルでそのシステムがどのように複雑であるかを評価し、スキャン内容を保存すると、以下のように HTML ファイル (report.html) に結果が表示されます。
sudo oscap xccdf eval --report report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]$ sudo oscap xccdf eval --report report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - オプション: ホスト名 machine1、ポート 22 で実行されている SSH、およびユーザー名 joesec を使用してリモートシステムをスキャンし、脆弱性を確認して、結果を remote-report.html ファイルに保存します。
oscap-ssh joesec@machine1 22 xccdf eval --report remote_report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]$ oscap-ssh joesec@machine1 22 xccdf eval --report remote_report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
scap-security-guide (8)のman ページ- scap-security-guide-doc パッケージでインストールされているGuide to the Secure Configuration of Red Hat Enterprise Linux 7
8.4. 特定のベースラインに合わせたシステムの修復 リンクのコピーリンクがクリップボードにコピーされました!
Remediate オプションを有効にしてシステム評価を慎重に実行しないと、システムが機能しなくなることがあります。Red Hat は、セキュリティーを強化した修正で加えられた変更を元に戻す自動手段は提供していません。修復は、デフォルト設定の RHEL システムで対応しています。インストール後にシステムが変更した場合は、修正を実行しても、必要なセキュリティープロファイルに準拠しない場合があります。
前提条件
- RHEL 7 システムに、scap-security-guide パッケージがインストールされている。
手順
oscapコマンドに--remediateオプションを指定して使用します。sudo oscap xccdf eval --profile ospp --remediate /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]$ sudo oscap xccdf eval --profile ospp --remediate /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。
検証
- システムの OSPP プロファイルへのコンプライアンスを評価し、スキャン結果を
ospp_report.htmlファイルに保存します。oscap xccdf eval --report ospp_report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]$ oscap xccdf eval --report ospp_report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
scap-security-guide (8)およびoscap (8)のman ページ
8.5. SSG Ansible Playbook を使用して特定のベースラインに合わせるようにシステムを修正 リンクのコピーリンクがクリップボードにコピーされました!
SCAP Security Guide プロジェクトの Ansible Playbook ファイルを使用して、特定のベースラインでシステムを修正します。この例では、OSPP (Protection Profile for General Purpose Operating Systems) の保護プロファイルを使用します。
Remediate オプションを有効にしてシステム評価を慎重に実行しないと、システムが機能しなくなることがあります。Red Hat は、セキュリティーを強化した修正で加えられた変更を元に戻す自動手段は提供していません。修復は、デフォルト設定の RHEL システムで対応しています。インストール後にシステムが変更した場合は、修正を実行しても、必要なセキュリティープロファイルに準拠しない場合があります。
前提条件
- RHEL 7 システムに、scap-security-guide パッケージがインストールされている。
- ansible パッケージがインストールされている。詳細は、Ansible インストールガイドを参照してください。
手順
- Ansible を使用して、OSPP に合わせてシステムを修正します。
ansible-playbook -i localhost, -c local /usr/share/scap-security-guide/ansible/ssg-rhel7-role-ospp.yml
~]# ansible-playbook -i localhost, -c local /usr/share/scap-security-guide/ansible/ssg-rhel7-role-ospp.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - システムを再起動します。
検証
- システムの OSPP プロファイルへのコンプライアンスを評価し、スキャン結果を
ospp_report.htmlファイルに保存します。oscap xccdf eval --profile ospp --report ospp_report.html /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]# oscap xccdf eval --profile ospp --report ospp_report.html /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
scap-security-guide (8)およびoscap (8)のman ページ
8.6. システムを特定のベースラインに合わせるための修復用 Ansible Playbook の作成 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- システムに、scap-security-guide パッケージがインストールされている。
手順
- システムをスキャンして結果を保存します。
oscap xccdf eval --profile ospp --results ospp-results.xml /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]# oscap xccdf eval --profile ospp --results ospp-results.xml /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 前の手順で生成されたファイルに基づいて Ansible Playbook を生成します。
oscap xccdf generate fix --fix-type ansible --profile ospp --output ospp-remediations.yml ospp-results.xml
~]# oscap xccdf generate fix --fix-type ansible --profile ospp --output ospp-remediations.yml ospp-results.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow ospp-remediations.ymlファイルには、手順 1 で実行されたスキャン中に失敗したルールの Ansible 修復が含まれます。この生成されたファイルを確認したら、ansible-playbook ospp-remediations.yml コマンドを使用して適用できます。
検証
- お使いのテキストエディターで、手順 1 で実行したスキャンで失敗したルールが
ospp-remediations.ymlファイルに含まれていることを確認します。
関連情報
scap-security-guide (8)およびoscap (8)のman ページ
8.7. SCAP Workbench を使用したカスタムプロファイルでシステムのスキャン リンクのコピーリンクがクリップボードにコピーされました!
8.7.1. SCAP Workbench を使用したシステムのスキャンおよび修復 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- scap-workbench パッケージがシステムにインストールされている。
手順
- GNOME クラシック デスクトップ環境から SCAP Workbench を実行するには、
Superキーを押してアクティビティーの概要に入り、scap-workbench と 入力 して Enter キーを押します。または、次のコマンドを実行します。scap-workbench &
~]$ scap-workbench &Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 次のオプションのいずれかを使用して、セキュリティーポリシーを選択します。
- 開始ウィンドウの
Load Contentボタン Open content from SCAP Security GuideFileメニューでOther Content を開き、該当する XCCDF、SCAP RPM、またはデータストリームファイルを検索します。
- チェックボックスを選択して、システム設定の自動修正を有効にすることができます。このオプションを有効にすると、SCAP Workbench は、ポリシーにより適用されるセキュリティールールに従ってシステム設定の変更を試みます。このプロセスは、システムスキャン中に失敗した関連チェックを修正しようとします。警告
Remediateオプションを有効にしてシステム評価を慎重に実行しないと、システムが機能しなくなることがあります。Red Hat は、セキュリティーを強化した修正で加えられた変更を元に戻す自動手段は提供していません。修復は、デフォルト設定の RHEL システムで対応しています。インストール後にシステムが変更した場合は、修正を実行しても、必要なセキュリティープロファイルに準拠しない場合があります。 - ボタンをクリックして、選択したプロファイルでシステムをスキャンします。
- スキャン結果を XCCDF ファイル、ARF ファイル、または HTML ファイルの形式で保存するには、 コンボボックスをクリックします。人間が読める形式のスキャンレポートを作成するには、
HTML Reportオプションを選択します。XCCDF 形式および ARF (データストリーム) 形式は、追加の自動処理に適しています。3 つのオプションはすべて繰り返し選択できます。 - 結果ベースの修復をファイルにエクスポートするには、 ポップアップメニューを使用します。
8.7.2. SCAP Workbench を使用したセキュリティープロファイルのカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
手順
- SCAP Workbench を実行し、
Open content from SCAP Security GuideまたはFileメニューのOpen Other Contentを使用してカスタマイズするプロファイルを選択します。 - 選択したセキュリティープロファイルを必要に応じて調整するには、 ボタンをクリックします。これにより、オリジナルの XCCDF ファイルを変更することなく、現在選択されている XCCDF プロファイルを変更することができる新しいカスタマイズウィンドウが開きます。新しいプロファイル ID を選択します。
- 論理グループに分類されたルールを持つツリー構造を使用するか、
Searchフィールドを使用して変更するルールを検索します。 - ツリー構造のチェックボックスを使用した include ルールまたは exclude ルール、または必要に応じてルールの値を変更します。
- ボタンをクリックして変更を確認します。
- 変更内容を永続的に保存するには、以下のいずれかのオプションを使用します。
FileメニューのSave Customization Onlyを使用して、カスタマイズファイルを別々に保存します。FileメニューのSave Allを使用して、すべてのセキュリティーコンテンツを一度に保存します。Into a directoryオプションを選択すると、SCAP Workbench は XCCDF またはデータストリームファイルとカスタマイズファイルの両方を指定された場所に保存します。これはバックアップソリューションとして使用できます。As RPMオプションを選択すると、SCAP Workbench に、データストリームファイルおよびカスタマイズファイルを含む RPM パッケージを作成できます。これは、リモートでスキャンできないシステムにセキュリティーコンテンツを配布したり、詳細な処理のためにコンテンツを配信するのに便利です。
8.8. インストール直後にセキュリティープロファイルに準拠するシステムのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
8.8.1. グラフィカルインストールを使用したベースライン準拠の RHEL システムのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
前提条件
グラフィカルインストールプログラムで起動している。OSCAP Anaconda Add-on はテキストのみのインストールをサポートしていないことに注意してください。インストール概要画面にアクセスしている。
手順
インストール概要 画面から、ソフトウェアの選択 をクリックします。ソフトウェアの選択 画面が開きます。- ベース環境
ペインから、サーバー 環境を選択します。ベース環境は、1 つだけ選択できます。 完了 をクリックして設定を適用し、インストール概要 画面に戻ります。Security Policyをクリックします。セキュリティーポリシー 画面が開きます。- システムでセキュリティーポリシーを有効にするには、
セキュリティーポリシーの適用をONに切り替えます。 - プロファイルペインから
Protection Profile for General Purpose Operating Systemsを選択します。 プロファイルの選択をクリックして選択を確定します。- ウィンドウの下部に表示される変更
または完了ペインの変更を確認します。残りの手動変更を完了します。 - OSPP には厳密なパーティション要件があるため、
/boot、/home、/var、/var/log、、および/var/tmp/var/用に個別のパーティションを作成します。log/audit - グラフィカルインストールプロセスを完了します。注記グラフィカルインストールプログラムは、インストールに成功すると、対応するキックスタートファイルを自動的に作成します。
/root/anaconda-ks.cfgファイルを使用して、OSPP 準拠のシステムを自動的にインストールできます。
検証
- インストール完了後にシステムの現在のステータスを確認するには、システムを再起動して新しいスキャンを開始します。
oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]# oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- パーティション設定の詳細は、グラフィカルユーザーインターフェイスを使用した RHEL のインストールを参照してください。
8.8.2. キックスタートを使用したベースライン準拠の RHEL システムのデプロイメント リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- システムに、scap-security-guide パッケージがインストールされている。
手順
- キックスタートファイル
/usr/share/scap-security-guide/kickstart/ssg-rhel7-ospp-ks.cfgを、選択したエディターで開きます。 - 設定要件を満たすように、パーティション設定スキームを更新します。OSPP に準拠するには、
/boot、/home、/var、/var/log、/var/tmp、および/var/用の個別のパーティションを保持する必要があります。ただし、これらのパーティションのサイズは変更できます。log/audit警告OSCAP Anaconda Add-onはテキストのみのインストールをサポートしていないため、キックスタートファイルのtextオプションを使用しないでください。詳細は RHBZ#1674001 を参照してください。 - キックスタートインストールを開始する方法は、キックスタートインストールの開始を参照してください。
検証
- インストール完了後にシステムの現在のステータスを確認するには、システムを再起動して新しいスキャンを開始します。
oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]# oscap xccdf eval --profile ospp --report eval_postinstall_report.html /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- 詳細は、OSCAP Anaconda Add-on プロジェクトページを参照してください。
8.9. コンテナーおよびコンテナーイメージの脆弱性スキャン リンクのコピーリンクがクリップボードにコピーされました!
8.9.1. oscap-dockerを使用したコンテナーイメージとコンテナーの脆弱性のスキャン リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- openscap-containers パッケージがインストールされます。
手順
- コンテナーまたはコンテナーイメージの ID を取得します。以下に例を示します。
docker images
~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi7/ubi latest 096cae65a207 7 weeks ago 239 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow - コンテナーまたはコンテナーイメージで脆弱性をスキャンし、結果を vulnerability.html ファイルに保存します。
oscap-docker image-cve 096cae65a207 --report vulnerability.html
~]# oscap-docker image-cve 096cae65a207 --report vulnerability.htmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要コンテナーをスキャンするには、引数image-cveをcontainer-cveに置き換えてください。
検証
- 任意のブラウザーで結果を調べます。以下に例を示します。
firefox vulnerability.html &
~]$ firefox vulnerability.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- 詳細は、
oscap-docker (8)およびの man ページを参照してください。oscap (8)
8.9.2. atomic scanを使用したコンテナーイメージとコンテナーの脆弱性のスキャン リンクのコピーリンクがクリップボードにコピーされました!
atomic scan [OPTIONS] [ID]
~]# atomic scan [OPTIONS] [ID]
ユースケース
- すべてのコンテナーイメージをスキャンするには、
--imagesディレクティブを使用します。 - すべてのコンテナーをスキャンするには、
--containersディレクティブを使用します。 - 両方のタイプをスキャンするには、
--allディレクティブを使用します。 - 利用可能なすべてのコマンドラインオプションを一覧表示するには、atomic scan
--helpコマンドを使用します。
前提条件
- atomic install rhel7/openscap コマンドを使用して、Red Hat Container Catalog (RHCC) から OpenSCAP コンテナーイメージをダウンロードしてインストール している。
手順
- 最新の OpenSCAP コンテナーイメージがあることを確認し、定義が最新であることを確認します。
atomic help registry.access.redhat.com/rhel7/openscap | grep version
~]# atomic help registry.access.redhat.com/rhel7/openscap | grep versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow - いくつかの既知のセキュリティー脆弱性がある RHEL 7.2 コンテナーイメージをスキャンします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- Red Hat Enterprise Linux Atomic Host の製品ドキュメント には、atomic コマンドの使用方法およびコンテナーの詳細な説明が記載されています。
- Red Hat カスタマーポータルでは、Atomic コマンドラインインターフェイス (CLI) のガイド を提供しています。
8.10. 特定のベースラインを使用したコンテナーまたはコンテナーイメージの設定コンプライアンスの評価 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- openscap-utils パッケージおよび scap-security-guide パッケージがインストールされている。
手順
- コンテナーまたはコンテナーイメージの ID を取得します。以下に例を示します。
docker images
~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi7/ubi latest 096cae65a207 7 weeks ago 239 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow - OSPP プロファイルでコンテナーイメージのコンプライアンスを評価し、スキャン結果を report.html HTML ファイルに保存します。
sudo oscap-docker 096cae65a207 xccdf eval --report report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xml
~]$ sudo oscap-docker 096cae65a207 xccdf eval --report report.html --profile ospp /usr/share/xml/scap/ssg/content/ssg-rhel7-ds.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow PCI-DSS ベースラインで設定コンプライアンスを評価する場合は、096cae65a207 をコンテナーイメージの ID に、ospp の値を pci-dss に置き換えてください。
検証
- 結果をブラウザーで確認します。以下に例を示します。
firefox report.html &
~]$ firefox report.html &Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
- 詳細は、
oscap-docker (8)およびの man ページを参照してください。scap-security-guide (8)
8.11. atomic scanを使用したコンテナーイメージとコンテナーの設定コンプライアンスのスキャンと修正 リンクのコピーリンクがクリップボードにコピーされました!
8.11.1. atomic scanを使用したコンテナーイメージとコンテナーの設定コンプライアンスのスキャン リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- atomic install rhel7/openscap コマンドを使用して、Red Hat Container Catalog (RHCC) から OpenSCAP コンテナーイメージをダウンロードしてインストール している。
手順
- configuration_compliance スキャン用に OpenSCAP イメージによって提供される SCAP コンテンツを一覧表示します。
atomic help registry.access.redhat.com/rhel7/openscap
~]# atomic help registry.access.redhat.com/rhel7/openscapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 最新の Red Hat Enterprise Linux 7 コンテナーイメージの米国国防情報システム局のセキュリティー技術実装ガイド (DISA STIG) ポリシーへの準拠を検証し、スキャンから HTML レポートを生成します。atomic scan --scan_type configuration_compliance --scanner_args xccdf-id=scap_org.open-scap_cref_ssg-rhel7-xccdf-1.2.xml,profile=xccdf_org.ssgproject.content_profile_stig-rhel7-disa,report registry.access.redhat.com/rhel7:latest
~]# atomic scan --scan_type configuration_compliance --scanner_args xccdf-id=scap_org.open-scap_cref_ssg-rhel7-xccdf-1.2.xml,profile=xccdf_org.ssgproject.content_profile_stig-rhel7-disa,report registry.access.redhat.com/rhel7:latestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上記のコマンドの出力の最後には、スキャンに関連するファイルの情報が含まれています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow atomic scan は、/var/lib/atomic/openscap/ ディレクトリーのスキャンからすべての結果とレポートを含むサブディレクトリーを生成します。設定準拠のため、スキャンごとに結果を含む arf.xml ファイルが生成されます。人間が判読可能な HTML 形式のレポートファイルを生成するには、reportサブオプシ ョンを--scanner_argsオプションに追加してください。 - オプション: DISA STIG Viewer が読み取り可能な XCCDF 結果を生成するには、
stig-viewerサブオプションを--scanner_argsオプションに追加します。この結果は、stig.xml に配置されます。
--scanner_args オプションの xccdf-id サブオプションが省略された場合、スキャナーは、選択されたデータストリームファイルの最初の XCCDF コンポーネントでプロファイルを検索します。データストリームファイルの詳細については、「RHEL 7 の設定コンプライアンス」 を参照してください。
8.11.2. atomic scanを使用したコンテナーイメージとコンテナーの設定コンプライアンスの修正 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- atomic install rhel7/openscap コマンドを使用して、Red Hat Container Catalog (RHCC) から OpenSCAP コンテナーイメージをダウンロードしてインストール している。
手順
- configuration_compliance スキャン用に OpenSCAP イメージによって提供される SCAP コンテンツを一覧表示します。
atomic help registry.access.redhat.com/rhel7/openscap
~]# atomic help registry.access.redhat.com/rhel7/openscapCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 指定したポリシーにコンテナーイメージを修復するには、設定コンプライアンスをスキャンするときに
--remediateオプションを atomic scan コマンドに追加します。次のコマンドは、Red Hat Enterprise Linux 7 コンテナーイメージから DISA STIG ポリシーに準拠した新しい修復済みコンテナーイメージをビルドします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - オプション: atomic scan コマンドの出力は、修復されたイメージ ID を報告します。イメージを覚えやすくするために、以下のような名前を付けてください。
docker tag 9bbc7083760e rhel7_disa_stig
~]# docker tag 9bbc7083760e rhel7_disa_stigCopy to Clipboard Copied! Toggle word wrap Toggle overflow
8.12. RHEL 7 で対応する SCAP セキュリティーガイドプロファイル リンクのコピーリンクがクリップボードにコピーされました!
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| CIS Red Hat Enterprise Linux 7 Benchmark for Level 2 - Server | xccdf_org.ssgproject.content_profile_cis |
RHEL 7.9.9 以前:2.2.0
RHEL 7.9.10 以降:3.1.1
|
| CIS Red Hat Enterprise Linux 7 Benchmark for Level 1 - Server | xccdf_org.ssgproject.content_profile_cis_server_l1 |
RHEL 7.9.10 以降:3.1.1
|
| CIS Red Hat Enterprise Linux 7 Benchmark for Level 1 - Workstation | xccdf_org.ssgproject.content_profile_cis_workstation_l1 |
RHEL 7.9.10 以降:3.1.1
|
| CISRed Hat Enterprise Linux 7 ベンチマーク for Level 2 - Workstation | xccdf_org.ssgproject.content_profile_cis_workstation_l2 |
RHEL 7.9.10 以降:3.1.1
|
| Security of Information Systems (ANSSI) BP-028 Enhanced Level | xccdf_org.ssgproject.content_profile_anssi_nt28_enhanced |
RHEL 7.9.4 以前:ドラフト
RHEL 7.9.5 から RHEL 7.9.24:1.2
RHEL 7.9.25 以降:2.0
|
| French National Agency for the Security of Information Systems (ANSSI) BP-028 High Level | xccdf_org.ssgproject.content_profile_anssi_nt28_high |
RHEL 7.9.6 以前:ドラフト
RHEL 7.9.7 から RHEL 7.9.24:1.2
RHEL 7.9.25 以降:2.0
|
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Intermediary Level | xccdf_org.ssgproject.content_profile_anssi_nt28_intermediary |
RHEL 7.9.4 以前:ドラフト
RHEL 7.9.5 から RHEL 7.9.24:1.2
RHEL 7.9.25 以降:2.0
|
| French National Agency for the Security of Information Systems (ANSSI) BP-028 Minimal Level | xccdf_org.ssgproject.content_profile_anssi_nt28_minimal |
RHEL 7.9.4 以前:ドラフト
RHEL 7.9.5 から RHEL 7.9.24:1.2
RHEL 7.9.25 以降:2.0
|
| C2S for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_C2S | バージョン付けなし |
| Criminal Justice Information Services (CJIS) Security Policy | xccdf_org.ssgproject.content_profile_cjis | 5.4 |
| Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) | xccdf_org.ssgproject.content_profile_cui | r1 |
| Australian Cyber Security Centre (ACSC) Essential Eight | xccdf_org.ssgproject.content_profile_e8 | バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) | xccdf_org.ssgproject.content_profile_hipaa | バージョン付けなし |
| NIST National Checklist Program Security Guide | xccdf_org.ssgproject.content_profile_ncp | バージョン付けなし |
| OSPP: 汎用オペレーティングシステム v4.2.1 の保護プロファイル | xccdf_org.ssgproject.content_profile_ospp | 4.2.1 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss_centric |
RHEL 7.9.12 以前:3.2.1
7.9.13 以降のバージョンで削除されました。詳細は、RHBZ#2038165 を参照してください。
|
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss | 3.2.1 |
| [ドラフト] DISA STIG for Red Hat Enterprise Linux Virtualization Host (RHELH) | xccdf_org.ssgproject.content_profile_rhelh-stig | ドラフト |
| VPP - Protection Profile for Virtualization v.1.0 for Red Hat Enterprise Linux Hypervisor (RHELH) | xccdf_org.ssgproject.content_profile_rhelh-vpp | 1.0 |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| Standard System Security Profile for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| DISA STIG for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_stig |
RHEL 7.9.0 および 7.9.1: 1.4
RHEL 7.9.2 から 7.9.4: V3R1
RHEL 7.9.5 および 7.9.6:V3R2
RHEL 7.9.7 から RHEL 7.9.9:V3R3
RHEL7.9.10 および RHEL7.9.11:V3R5
RHEL 7.9.12 および RHEL 7.9.13:V3R6
RHEL 7.9.14 to RHEL 7.9.16:V3R7
RHEL 7.9.17 to RHEL 7.9.20:V3R8
RHEL 7.9.21 to RHEL 7.9.24:V3R10
RHEL 7.9.25 以降:V3R12
|
| DISA STIG with GUI for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_stig_gui |
RHEL 7.9.7 から RHEL 7.9.9:V3R3
RHEL7.9.10 および RHEL7.9.11:V3R5
RHEL 7.9.12 および RHEL 7.9.13:V3R6
RHEL 7.9.14 to RHEL 7.9.16:V3R7
RHEL 7.9.17 to RHEL 7.9.20:V3R8
RHEL 7.9.21 to RHEL 7.9.24:V3R10
RHEL 7.9.25 以降:V3R12
|
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| ドラフト - ANSSI DAT-NT28 (拡張) | xccdf_org.ssgproject.content_profile_anssi_nt28_enhanced | ドラフト |
| ドラフト - ANSSI DAT-NT28 (高) | xccdf_org.ssgproject.content_profile_anssi_nt28_high | ドラフト |
| ドラフト - ANSSI DAT-NT28 (中間) | xccdf_org.ssgproject.content_profile_anssi_nt28_intermediary | ドラフト |
| ドラフト - ANSSI DAT-NT28 (最小) | xccdf_org.ssgproject.content_profile_anssi_nt28_minimal | ドラフト |
| C2S for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_C2S | バージョン付けなし |
| Criminal Justice Information Services (CJIS) Security Policy | xccdf_org.ssgproject.content_profile_cjis | 5.4 |
| Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) | xccdf_org.ssgproject.content_profile_cui | r1 |
| Australian Cyber Security Centre (ACSC) Essential Eight | xccdf_org.ssgproject.content_profile_e8 | バージョン付けなし |
| Health Insurance Portability and Accountability Act (HIPAA) | xccdf_org.ssgproject.content_profile_hipaa | バージョン付けなし |
| NIST National Checklist Program Security Guide | xccdf_org.ssgproject.content_profile_ncp | バージョン付けなし |
| OSPP: 汎用オペレーティングシステム v4.2.1 の保護プロファイル | xccdf_org.ssgproject.content_profile_ospp | 4.2.1 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss_centric | 3.2.1 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss | 3.2.1 |
| [ドラフト] DISA STIG for Red Hat Enterprise Linux Virtualization Host (RHELH) | xccdf_org.ssgproject.content_profile_rhelh-stig | ドラフト |
| VPP - Protection Profile for Virtualization v.1.0 for Red Hat Enterprise Linux Hypervisor (RHELH) | xccdf_org.ssgproject.content_profile_rhelh-vpp | 1.0 |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| Standard System Security Profile for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| DISA STIG for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_stig | 1.4 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| C2S for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_C2S | バージョン付けなし |
| Criminal Justice Information Services (CJIS) Security Policy | xccdf_org.ssgproject.content_profile_cjis | 5.4 |
| Health Insurance Portability and Accountability Act (HIPAA) | xccdf_org.ssgproject.content_profile_hipaa | バージョン付けなし |
| Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) | xccdf_org.ssgproject.content_profile_nist-800-171-cui | r1 |
| OSPP: 汎用オペレーティングシステム v. の保護プロファイル4.2 | xccdf_org.ssgproject.content_profile_ospp42 | 4.2 |
| 米国政府共通設定基準 | xccdf_org.ssgproject.content_profile_ospp | 3.9 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss_centric | 3.2.1 |
| PCI-DSS v3.2.1 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss | 3.2.1 |
| VPP - Protection Profile for Virtualization v.1.0 for Red Hat Enterprise Linux Hypervisor (RHELH) | xccdf_org.ssgproject.content_profile_rhelh-vpp | 1.0 |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| Standard System Security Profile for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| DISA STIG for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_stig-rhel7-disa | 1.4 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| C2S for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_C2S | バージョン付けなし |
| Criminal Justice Information Services (CJIS) Security Policy | xccdf_org.ssgproject.content_profile_cjis | 5.4 |
| Health Insurance Portability and Accountability Act (HIPAA) | xccdf_org.ssgproject.content_profile_hipaa | バージョン付けなし |
| Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) | xccdf_org.ssgproject.content_profile_nist-800-171-cui | r1 |
| OSPP: 汎用オペレーティングシステム v. の保護プロファイル4.2 | xccdf_org.ssgproject.content_profile_ospp42 | 4.2 |
| 米国政府共通設定基準 | xccdf_org.ssgproject.content_profile_ospp | 3.9 |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss_centric | 3.1 |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss | 3.1 |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| Standard System Security Profile for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| DISA STIG for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_stig-rhel7-disa | 1.4 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| C2S for Red Hat Enterprise Linux | xccdf_org.ssgproject.content_profile_C2S | バージョン付けなし |
| Criminal Justice Information Services (CJIS) Security Policy | xccdf_org.ssgproject.content_profile_cjis-rhel7-server | 5.4 |
| 汎用システムの共通プロファイル | xccdf_org.ssgproject.content_profile_common | バージョン付けなし |
| 標準的な Docker ホストのセキュリティープロファイル | xccdf_org.ssgproject.content_profile_docker-host | バージョン付けなし |
| Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) | xccdf_org.ssgproject.content_profile_nist-800-171-cui | r1 |
| 米国政府共通設定基準 (USGCB / STIG) - ドラフト | xccdf_org.ssgproject.content_profile_ospp-rhel7 | 3.9 |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss_centric | 3.1 |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss | 3.1 |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| 標準システムセキュリティープロファイル | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| DISA STIG for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_stig-rhel7-disa | 1.4 |
| STIG for Red Hat Virtualization Hypervisor | xccdf_org.ssgproject.content_profile_stig-rhevh-upstream | 1.4 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| C2S for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_C2S | バージョン付けなし |
| Criminal Justice Information Services (CJIS) Security Policy | xccdf_org.ssgproject.content_profile_cjis-rhel7-server | 5.4 |
| 汎用システムの共通プロファイル | xccdf_org.ssgproject.content_profile_common | バージョン付けなし |
| 標準的な Docker ホストのセキュリティープロファイル | xccdf_org.ssgproject.content_profile_docker-host | バージョン付けなし |
| Unclassified Information in Non-federal Information Systems and Organizations (NIST 800-171) | xccdf_org.ssgproject.content_profile_nist-800-171-cui | r1 |
| 米国政府共通設定基準 (USGCB / STIG) - ドラフト | xccdf_org.ssgproject.content_profile_ospp-rhel7 | 3.9 |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss_centric | 3.1 |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss | 3.1 |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| 標準システムセキュリティープロファイル | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| DISA STIG for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_stig-rhel7-disa | 1.4 |
| STIG for Red Hat Virtualization Hypervisor | xccdf_org.ssgproject.content_profile_stig-rhevh-upstream |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| C2S for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_C2S | バージョン付けなし |
| Criminal Justice Information Services (CJIS) Security Policy | xccdf_org.ssgproject.content_profile_cjis-rhel7-server | 5.4 |
| 汎用システムの共通プロファイル | xccdf_org.ssgproject.content_profile_common | バージョン付けなし |
| CNSSI 1253 Low/Low/Low Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_nist-cl-il-al | バージョン付けなし |
| 米国政府共通設定基準 (USGCB / STIG) | xccdf_org.ssgproject.content_profile_ospp-rhel7-server | バージョン付けなし |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 | xccdf_org.ssgproject.content_profile_pci-dss | 3.1 |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| 標準システムセキュリティープロファイル | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| GUI を実行している STIG for Red Hat Enterprise Linux 7 Server | xccdf_org.ssgproject.content_profile_stig-rhel7-server-gui-upstream | 1.4 |
| STIG for Red Hat Enterprise Linux 7 Server | xccdf_org.ssgproject.content_profile_stig-rhel7-server-upstream | 1.4 |
| STIG for Red Hat Enterprise Linux 7 Workstation | xccdf_org.ssgproject.content_profile_stig-rhel7-workstation-upstream | 1.4 |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| 汎用システムの共通プロファイル | xccdf_org.ssgproject.content_profile_common | バージョン付けなし |
| PCI-DSS v3 Control Baseline for Red Hat Enterprise Linux 7 のドラフト | xccdf_org.ssgproject.content_profile_pci-dss | ドラフト |
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
| 標準システムセキュリティープロファイル | xccdf_org.ssgproject.content_profile_standard | バージョン付けなし |
| STIG for Red Hat Enterprise Linux 7 Server のプレリリースのドラフト | xccdf_org.ssgproject.content_profile_stig-rhel7-server-upstream | ドラフト |
| プロファイル名 | プロファイル ID | ポリシーバージョン |
|---|---|---|
| Red Hat Corporate Profile for Certified Cloud Providers (RH CCP) | xccdf_org.ssgproject.content_profile_rht-ccp | バージョン付けなし |
関連情報
- RHEL 8 のプロファイルの詳細は、RHEL 8 で対応している SCAP Security Guide プロファイルを参照してください。
第9章 米連邦政府の標準および規制 リンクのコピーリンクがクリップボードにコピーされました!
9.1. FIPS (Federal Information Processing Standard) リンクのコピーリンクがクリップボードにコピーされました!
9.1.1. FIPS モードの有効化 リンクのコピーリンクがクリップボードにコピーされました!
システムのインストール時
fips=1 カーネルオプションを追加します。このオプションを使用すると、すべてのキーの生成は FIPS 承認のアルゴリズムで行われ、継続的な監視テストが実施されます。インストール後、システムは FIPS モードで自動的に起動するように設定されます。
システムインストールの後
- dracut-fips パッケージをインストールします。
yum install dracut-fips
~]# yum install dracut-fipsCopy to Clipboard Copied! Toggle word wrap Toggle overflow AES New Instructions (AES-NI) をサポートしている CPU の場合は、dracut-fips-aesni パッケージもインストールしてください。yum install dracut-fips-aesni
~]# yum install dracut-fips-aesniCopy to Clipboard Copied! Toggle word wrap Toggle overflow initramfsファイルを再生成します。dracut -v -f
~]# dracut -v -fCopy to Clipboard Copied! Toggle word wrap Toggle overflow モジュール内の整合性検証を有効にし、カーネル起動時に必要なすべてのモジュールが存在するようにするには、initramfsファイルを再生成する必要があります。警告この操作は、既存のinitramfsファイルを上書きします。- ブートローダーの設定を変更します。FIPS モードで起動するには、ブートローダーのカーネルコマンドラインに
fips=1オプションを追加してください。/bootまたは/boot/EFI/パーティションが別のパーティションにある場合は、boot= <partition> (ここでの < partition > は/bootを表します)パラメーターをカーネルコマンドラインに追加します。ブートパーティションを特定するには、次のコマンドを入力します。df /boot
~]$ df /boot Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 495844 53780 416464 12% /bootCopy to Clipboard Copied! Toggle word wrap Toggle overflow ブート間でデバイスの名前が変更された場合でもboot=設定オプションが機能するようにするには、次のコマンドを実行して、パーティションのユニバーサル一意識別子 (UUID) を識別します。blkid /dev/sda1
~]$ blkid /dev/sda1 /dev/sda1: UUID="05c000f1-f899-467b-a4d9-d5ca4424c797" TYPE="ext4"Copy to Clipboard Copied! Toggle word wrap Toggle overflow UUID をカーネルコマンドラインに追加します。boot=UUID=05c000f1-f899-467b-a4d9-d5ca4424c797
boot=UUID=05c000f1-f899-467b-a4d9-d5ca4424c797Copy to Clipboard Copied! Toggle word wrap Toggle overflow お使いのブートローダーによっては、以下のように変更してください。- GRUB 2
/etc/defaultof /boot> オプションを追加します。/grubファイルのGRUB_CMDLINE_LINUXキーにfips=1および boot=<partition/etc/default/grubに変更を適用するには、以下のようにgrub.cfgファイルを再構築します。- BIOS ベースのマシンでは、
rootで以下のコマンドを入力します。grub2-mkconfig -o /etc/grub2.cfg
~]# grub2-mkconfig -o /etc/grub2.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow - UEFI ベースのマシンでは、
rootで以下のコマンドを入力します。grub2-mkconfig -o /etc/grub2-efi.cfg
~]# grub2-mkconfig -o /etc/grub2-efi.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- zipl (IBM z Systems アーキテクチャーのみ)
fips=1およびboot=<partition of /boot> オプションを/etc/zipl.confのカーネルコマンドラインに追加し、次のように入力して変更を適用します。zipl
~]# ziplCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- プレリンクが無効になっていることを確認してください。モジュール内の整合性検証を適切に動作させるには、ライブラリーとバイナリーの事前リンクを無効にする必要があります。事前リンクは、デフォルトではインストールされていない prelink パッケージによって実行されます。prelink がインストールされていない限り、この手順は必要ありません。事前リンクを無効にするには、
/etc/sysconfig/prelink設定ファイルでPRELINKING=noオプションを設定します。すべてのシステムファイルで既存の事前リンクを無効にするには、prelink -u -a コマンドを使用します。 - システムを再起動します。
コンテナーでの FIPS モードの有効化
- dracut-fips パッケージがコンテナーにインストールされます。
/etc/system-fipsファイルは、ホストからコンテナーにマウントされます。
9.2. NISPOM (National Industrial Security Program Operating Manual) リンクのコピーリンクがクリップボードにコピーされました!
9.3. PCI DSS (Payment Card Industry Data Security Standard) リンクのコピーリンクがクリップボードにコピーされました!
9.4. セキュリティー技術実装ガイド リンクのコピーリンクがクリップボードにコピーされました!
付録A 暗号の標準 リンクのコピーリンクがクリップボードにコピーされました!
A.1. 同期式の暗号 リンクのコピーリンクがクリップボードにコピーされました!
A.1.1. 高度暗号化標準 — AES リンクのコピーリンクがクリップボードにコピーされました!
A.1.1.1. AES の歴史 リンクのコピーリンクがクリップボードにコピーされました!
A.1.2. データ暗号化標準 — DES リンクのコピーリンクがクリップボードにコピーされました!
A.1.2.1. DES の歴史 リンクのコピーリンクがクリップボードにコピーされました!
A.2. 公開鍵の暗号化 リンクのコピーリンクがクリップボードにコピーされました!
A.2.1. Diffie-Hellman リンクのコピーリンクがクリップボードにコピーされました!
A.2.1.1. Diffie-Hellman の歴史 リンクのコピーリンクがクリップボードにコピーされました!
A.2.2. RSA リンクのコピーリンクがクリップボードにコピーされました!
A.2.3. DSA リンクのコピーリンクがクリップボードにコピーされました!
A.2.4. SSL/TLS リンクのコピーリンクがクリップボードにコピーされました!
A.2.5. Cramer-Shoup 暗号システム リンクのコピーリンクがクリップボードにコピーされました!
A.2.6. ElGamal 暗号 リンクのコピーリンクがクリップボードにコピーされました!
付録B 更新履歴 リンクのコピーリンクがクリップボードにコピーされました!
| 改訂履歴 | |||
|---|---|---|---|
| 改訂 1-43 | Fri Feb 7 2020 | ||
| |||
| 改訂 1-42 | Fri Aug 9 2019 | ||
| |||
| 改訂 1-41 | Sat Oct 20 2018 | ||
| |||
| 改訂 1-32 | Wed Apr 4 2018 | ||
| |||
| 改訂 1-30 | Thu Jul 27 2017 | ||
| |||
| 改訂 1-24 | Mon Feb 6 2017 | ||
| |||
| 改訂 1-23 | Tue Nov 1 2016 | ||
| |||
| 改訂 1-19 | Mon Jul 18 2016 | ||
| |||
| 改訂 1-18 | Mon Jun 27 2016 | ||
| |||
| 改訂 1-17 | Fri Jun 3 2016 | ||
| |||
| 改訂 1-16 | Tue Jan 5 2016 | ||
| |||
| 改訂 1-15 | Tue Nov 10 2015 | ||
| |||
| 改訂 1-14.18 | Mon Nov 09 2015 | ||
| |||
| 改訂 1-14.17 | Wed Feb 18 2015 | ||
| |||
| 改訂 1-14.15 | Fri Dec 06 2014 | ||
| |||
| 改訂 1-14.13 | Thu Nov 27 2014 | ||
| |||
| 改訂 1-14.12 | Tue Jun 03 2014 | ||
| |||