5.16. ファイアウォールロックダウンの設定
ローカルアプリケーションやサービスは、
root
として実行している場合は、ファイアウォール設定を変更できます(例: libvirt)。管理者は、この機能を使用してファイアウォール設定をロックし、すべてのアプリケーションでファイアウォール変更を要求できなくするか、ロックダウンのホワイトリストに追加されたアプリケーションのみがファイアウォール変更を要求できるようにすることが可能になります。ロックダウン設定はデフォルトで無効になっています。これを有効にすると、ローカルのアプリケーションやサービスによるファイアウォールへの望ましくない設定変更を確実に防ぐことができます。
5.16.1. コマンドラインクライアントを使用したロックダウンの設定
ロックダウンが有効になっているかどうかを確認するには、
root
で以下のコマンドを実行します。
~]# firewall-cmd --query-lockdown
ロックダウンが有効な場合は、コマンドにより yes
と出力され、終了ステータスは 0
になります。そうでなければ no
と出力され、終了ステータスは 1
になります。
ロックダウンを有効にするには、
root
で以下のコマンドを入力します。
~]# firewall-cmd --lockdown-on
ロックダウンを無効にするには、
root
で以下のコマンドを実行します。
~]# firewall-cmd --lockdown-off
5.16.2. コマンドラインクライアントを使用したロックダウンのホワイトリストオプションの設定
ロックダウンのホワイトリストには、コマンド、セキュリティーのコンテキスト、ユーザー、およびユーザー ID を追加できます。ホワイトリストのコマンドエントリーがアスタリスク「*」で終了している場合は、そのコマンドで始まるすべてのコマンドラインが一致することになります。「*」がなければ、コマンドと引数が完全に一致する必要があります。
ここでのコンテキストは、実行中のアプリケーションやサービスのセキュリティー (SELinux) コンテキストです。実行中のアプリケーションのコンテキストを確認するには、次のコマンドを実行します。
~]$ ps -e --context
このコマンドは、実行中のアプリケーションをすべて返します。grep ツールを介して出力をパイプ処理して、対象のアプリケーションを取得します。以下に例を示します。
~]$ ps -e --context | grep example_program
ホワイトリストにあるコマンドラインの一覧を表示するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-commands
ホワイトリストに command コマンドを追加するには、
root
で以下のコマンドを入力します。
~]# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
ホワイトリストから command コマンドを削除するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
command コマンドがホワイトリストにあるかどうかを確認するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
このコマンドは、true の場合は yes
と出力され、終了ステータスは 0
になります。そうでなければ no
と出力され、終了ステータスは 1
になります。
ホワイトリストにあるセキュリティーコンテキストの一覧を表示するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-contexts
ホワイトリストに context コンテキスト を追加するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-context=context
ホワイトリストから context コンテキスト を削除するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-context=context
context コンテキスト がホワイトリストにあるかどうかを確認するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --query-lockdown-whitelist-context=context
yes
を終了ステータス 0
で出力し、true の場合は no
と出力し、それ以外は終了ステータス 1
を出力します。
ホワイトリストにあるユーザー ID の一覧を表示するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-uids
ホワイトリストにユーザー ID ( uid )を追加するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-uid=uid
ホワイトリストからユーザー ID ( uid )を削除するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-uid=uid
ホワイトリストにユーザー ID (uid) があるかどうかを確認するには、次のコマンドを実行します。
~]$ firewall-cmd --query-lockdown-whitelist-uid=uid
yes
を終了ステータス 0
で出力し、true の場合は no
と出力し、それ以外は終了ステータス 1
を出力します。
ホワイトリストにあるユーザー名の一覧を表示するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-users
ユーザー名( user )をホワイトリストに追加するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-user=user
ホワイトリストからユーザー名( user )を削除するには、
root
で次のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-user=user
ホワイトリストにユーザー名 (user) があるかどうかを確認するには、次のコマンドを実行します。
~]$ firewall-cmd --query-lockdown-whitelist-user=user
yes
を終了ステータス 0
で出力し、true の場合は no
と出力し、それ以外は終了ステータス 1
を出力します。
5.16.3. 設定ファイルを使用したロックダウンのホワイトリストオプションの設定
デフォルトのホワイトリスト設定ファイルには、NetworkManager コンテキストと、libvirt のデフォルトのコンテキストが含まれます。リストには、ユーザー ID (0) もあります。
<?xml version="1.0" encoding="utf-8"?> <whitelist> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <selinux context="system_u:system_r:virtd_t:s0-s0:c0.c1023"/> <user id="0"/> </whitelist>
以下は、firewall-cmd ユーティリティーで、ユーザー ID が
815
である user ユーザーのすべてのコマンドを有効にするホワイトリスト設定ファイルの例です。
<?xml version="1.0" encoding="utf-8"?> <whitelist> <command name="/usr/bin/python -Es /bin/firewall-cmd*"/> <selinux context="system_u:system_r:NetworkManager_t:s0"/> <user id="815"/> <user name="user"/> </whitelist>この例では、
user id
と user name
の両方が使用されていますが、実際にはどちらか一方のオプションだけが必要です。Python はインタープリターとしてコマンドラインに追加されています。特定のコマンドを使用することもできます(例: /usr/bin/python /bin/firewall-cmd --lockdown-on
-lockdown-on コマンドのみが許可されます)。
注記
Red Hat Enterprise Linux 7 では、すべてのユーティリティーが
/usr/bin/
ディレクトリーに格納され、/bin/
ディレクトリーは /usr/bin/ ディレクトリーへのシンボリックリンクになります。つまり、root
で実行する際の firewall-cmd のパスは /bin/firewall-cmd に解決しますが、/usr/bin/firewall-cmd を使用できるようになりました。新たなスクリプトは、すべて新しい格納場所を使用する必要があります。ただし、root
で実行するスクリプトが /bin/firewall-cmd パスを使用するように書き込まれている場合は、これまではroot
以外のユーザーにのみ使用されていた /usr/bin/firewall-cmd パスに加えて、このコマンドのパスもホワイトリスト化する必要があります。
コマンドの名前属性の最後にある 「*」 は、この文字列で始まるすべてのコマンドが一致することを意味します。「*」 がない場合は、引数を含む絶対コマンドが一致する必要があります。