CentOS6のTCP Wrapperの概要と設定方法について下記資料を読んでまとめました。
Red Hat Enterprise Linux 6 セキュリティガイド”2.6. TCP Wrapper と xinetd”
※目次をクリックすると目次の下部にコンテンツが表示されます。
TCP Wrapperの概要
1)iptable、TCP Wrapper、xinetdの関係
・CentOS6では、iptable、TCP Wrapper、xinetdなどのツールを用いてネットワークサービスへのアクセス制御を階層化して行っている。
・iptableベースのファイアウォールは、カーネルのネットワークスタック内の不要なネットワークパケットを除去する。
・TCP Wrapperはどのホストが”Wrapされた”ネットワークサービスに対して接続許可、拒否を定義し、iptable上に新たな保護層を追加する。
上記”Wrapされた”ネットワークサービスの1つがxinetdスーパーサーバーで、ネットワークサービスのサブセット(telnetやftpなど)への接続を制御する。
2)TCP Wrapperの概要
・ネットワークサービスに対するホストベースのアクセス制御を提供。
・パッケージ内の最も重要なコンポーネントは/lib/libwrap.soまたは/lib64/libwrap.soライブラリ。
一般的に言うと、TCPで”Wrapされた”サービスとはlibwrap.soライブラリに対してコンパイルされたもの。
・TCPで”Wrapされた”サービスへの接続を試行する際には、クライアントが接続を許可されるかどうかを決定するために、アクセスファイル(/etc/hosts.allowおよび/etc/hosts.deny)を参照する。
・多くの場合、要求しているクライアントと要求されたサービスの名前を/var/log/secureまたは/var/log/messagesに書き込むために、syslogデーモン(syslogd)を使用する。
・クライアントが接続を許可されると、TCP Wrapperは要求されたサービスへの接続制御を解放し、それ以降はクライアントとサーバー間の通信に介入しない。
・アクセス制御とロギング以外にも、クライアントとやりとりするためのコマンドを実行できる。
利用例としては、/usr/sbin/sshd、/usr/sbin/sendmail、/usr/sbin/xinetdなどがあり、libwrap.soライブラリにリンクされている。
※ネットワークサービスのバイナリがlibwrap.soにリンクされていることを確認するには、rootユーザーで下記を実行する。
ldd バイナリ名 | grep libwrap
例)
・CentOS6では、iptable、TCP Wrapper、xinetdなどのツールを用いてネットワークサービスへのアクセス制御を階層化して行っている。
・iptableベースのファイアウォールは、カーネルのネットワークスタック内の不要なネットワークパケットを除去する。
・TCP Wrapperはどのホストが”Wrapされた”ネットワークサービスに対して接続許可、拒否を定義し、iptable上に新たな保護層を追加する。
上記”Wrapされた”ネットワークサービスの1つがxinetdスーパーサーバーで、ネットワークサービスのサブセット(telnetやftpなど)への接続を制御する。
2)TCP Wrapperの概要
・ネットワークサービスに対するホストベースのアクセス制御を提供。
・パッケージ内の最も重要なコンポーネントは/lib/libwrap.soまたは/lib64/libwrap.soライブラリ。
一般的に言うと、TCPで”Wrapされた”サービスとはlibwrap.soライブラリに対してコンパイルされたもの。
・TCPで”Wrapされた”サービスへの接続を試行する際には、クライアントが接続を許可されるかどうかを決定するために、アクセスファイル(/etc/hosts.allowおよび/etc/hosts.deny)を参照する。
・多くの場合、要求しているクライアントと要求されたサービスの名前を/var/log/secureまたは/var/log/messagesに書き込むために、syslogデーモン(syslogd)を使用する。
・クライアントが接続を許可されると、TCP Wrapperは要求されたサービスへの接続制御を解放し、それ以降はクライアントとサーバー間の通信に介入しない。
・アクセス制御とロギング以外にも、クライアントとやりとりするためのコマンドを実行できる。
利用例としては、/usr/sbin/sshd、/usr/sbin/sendmail、/usr/sbin/xinetdなどがあり、libwrap.soライブラリにリンクされている。
※ネットワークサービスのバイナリがlibwrap.soにリンクされていることを確認するには、rootユーザーで下記を実行する。
ldd バイナリ名 | grep libwrap
例)
# ldd /usr/sbin/sshd | grep libwrap libwrap.so.0 => /lib/libwrap.so.0 (0x0031b000)
3)TCP Wrapperの利点
・接続しているクライアントと”Wrapされた”ネットワークサービスは共にTCP Wrapperが使用されていることを認識させずに動作する。
・TCP Wrapperは、保護対象のネットワークサービスとは独立して動作し、数多くのサーバーアプリケーションがアクセス制御設定ファイルの共通セットを共有して、よりシンプルな管理を行えるようにする。
TCP Wrapperのパッケージ
①TCP Wrapperのライブラリのパッケージ
私のCentOS6の環境では、xinetdを利用していなかったのでTCP Wrapperも利用していないと思っていたのですが、下記のTCP Wrapperのライブラリのパッケージがインストールされていました。
私のCentOS6の環境では、xinetdを利用していなかったのでTCP Wrapperも利用していないと思っていたのですが、下記のTCP Wrapperのライブラリのパッケージがインストールされていました。
$ yum info tcp_wrappers-libs Installed Packages Name : tcp_wrappers-libs Arch : x86_64 Version : 7.6 Release : 57.el6 Size : 128 k Repo : installed From repo : anaconda-CentOS-201112091719.x86_64 Summary : Libraries for tcp_wrappers URL : ftp://ftp.porcupine.org/pub/security/index.html License : BSD Description : tcp_wrappers-libs contains the libraries of the tcp_wrappers : package.
②TCP Wrapperのデーモンプログラム
上記ライブラリとは別にデーモンプログラム用のパッケージもありましたが、こちらはインストールされていませんでした。
$ yum info tcp_wrappers Available Packages Name : tcp_wrappers Arch : x86_64 Version : 7.6 Release : 57.el6 Size : 61 k Repo : base Summary : A security tool which acts as a wrapper for TCP daemons URL : ftp://ftp.porcupine.org/pub/security/index.html License : BSD Description : The tcp_wrappers package provides small daemon programs which can : monitor and filter incoming requests for systat, finger, FTP, : telnet, rlogin, rsh, exec, tftp, talk and other network services. : : Install the tcp_wrappers program if you need a security tool for : filtering incoming network services requests. : : This version also supports IPv6.
TCP Wrapperの設定方法
1)TCP Wrapperの設定ファイル
・一般的にホストアクセスファイルと呼ばれる、/etc/hosts.allowと/etc/hosts.denyを使用する。
・hosts.allowにあるアクセスルールが最初に適用されるので、それらのルールがhosts.denyで指定されたルールよりも優先される。
そのため、サービスへのアクセスが hosts.allowで許可されると、hosts.denyにある同じサービスへのアクセス拒否ルールは無視される。
・各ファイルにあるルールは上から下に読み込まれ、指定されたサービスに最初にマッチするルールのみが適用される。
・サービスについてのルールがどのファイルにも見つからないか、またはいずれのファイルも存在しなければ、サービスへのアクセスは許可される。
・TCPでラップされたサービスは、ホストのアクセスファイルからのルールをキャッシュしないので、hosts.allowやhosts.denyのすべての変更は、ネットワークサービスを再起動しなくても直ちに有効になる。
・ホストのアクセスファイルの最後の行が改行文字(Enterキーを押して作成される)でなければ、ファイルにある最後のルールは失敗して、エラーが /var/log/messagesまたは/var/log/secureのどちらかにログ記録される。
①/etc/hosts.allow
TCPでラップされたサービスは/etc/hosts.allowファイルを順番に解析し、そのサービスに指定された最初のルールを適用する。
マッチするルールを見つけると、接続を許可し、見つからなければ、次のステップに進む。
②/etc/hosts/deny
TCPでラップされたサービスは/etc/hosts.denyファイルを順番に解析し、マッチするルールを見つけると、接続を拒否し、見つからなければ、サービスへのアクセスを許可する。
2)アクセスルールのフォーマット
〇構文
<daemon list> : <client list> [: <option> : <option> : …]
・空行またはハッシュ(#)で始まる行は無視される。
①daemon list
・コンマ区切りのプロセス名(サービス名ではない)の一覧。
・ALLですべてのデーモンにマッチ。
②client list
・ホスト名、IPアドレス、特別なパターン、またはワイルドカードのコンマ区切りのリスト。
・ALLですべてのホストにマッチ。
③option
・ルールが起動されたときに実行されるオプションのアクション、またはアクションのコロン区切りのリスト。
・オプションのフィールドは、拡張、シェルコマンドの起動、アクセスの許可または拒否、および他のロギング動作をサポートする。
例)オプションを指定した例
・一般的にホストアクセスファイルと呼ばれる、/etc/hosts.allowと/etc/hosts.denyを使用する。
・hosts.allowにあるアクセスルールが最初に適用されるので、それらのルールがhosts.denyで指定されたルールよりも優先される。
そのため、サービスへのアクセスが hosts.allowで許可されると、hosts.denyにある同じサービスへのアクセス拒否ルールは無視される。
・各ファイルにあるルールは上から下に読み込まれ、指定されたサービスに最初にマッチするルールのみが適用される。
・サービスについてのルールがどのファイルにも見つからないか、またはいずれのファイルも存在しなければ、サービスへのアクセスは許可される。
・TCPでラップされたサービスは、ホストのアクセスファイルからのルールをキャッシュしないので、hosts.allowやhosts.denyのすべての変更は、ネットワークサービスを再起動しなくても直ちに有効になる。
・ホストのアクセスファイルの最後の行が改行文字(Enterキーを押して作成される)でなければ、ファイルにある最後のルールは失敗して、エラーが /var/log/messagesまたは/var/log/secureのどちらかにログ記録される。
①/etc/hosts.allow
TCPでラップされたサービスは/etc/hosts.allowファイルを順番に解析し、そのサービスに指定された最初のルールを適用する。
マッチするルールを見つけると、接続を許可し、見つからなければ、次のステップに進む。
②/etc/hosts/deny
TCPでラップされたサービスは/etc/hosts.denyファイルを順番に解析し、マッチするルールを見つけると、接続を拒否し、見つからなければ、サービスへのアクセスを許可する。
2)アクセスルールのフォーマット
〇構文
<daemon list> : <client list> [: <option> : <option> : …]
・空行またはハッシュ(#)で始まる行は無視される。
①daemon list
・コンマ区切りのプロセス名(サービス名ではない)の一覧。
・ALLですべてのデーモンにマッチ。
②client list
・ホスト名、IPアドレス、特別なパターン、またはワイルドカードのコンマ区切りのリスト。
・ALLですべてのホストにマッチ。
③option
・ルールが起動されたときに実行されるオプションのアクション、またはアクションのコロン区切りのリスト。
・オプションのフィールドは、拡張、シェルコマンドの起動、アクセスの許可または拒否、および他のロギング動作をサポートする。
例)オプションを指定した例
sshd : .example.com \ : spawn /bin/echo `/bin/date` access denied>>/var/log/sshd.log \ : deny
※それぞれのオプションフィールドの前にはバックスラッシュ(\)が付けられることに注意。
TCP Wrapperの詳細設定
1)syslogでロギング
severity指示文を使用してログファシリティおよびルールの優先レベルを指定できる。
①emergの優先度でデフォルトのファシリティ(authpriv)を指定する例
sshd : .example.com : severity emerg
②alertの優先度でlocal0ファシリティを指定する例
sshd : .example.com : severity local0.alert
2)1つのファイル(hosts.allowまたはhosts.deny)にまとめてallowとdenyを指定
下記例のようにallowまたはdeny指示文を最終オプションとして追加してルールを設定し、一つのファイルで統合することもできる。
sshd : client-1.example.com : allow
sshd : client-2.example.com : deny
3)シェルコマンド
①spawn
・子プロセスとしてシェルコマンドを起動。
・要求しているクライアントについてのより詳しい情報を得るために/usr/sbin/safe_fingerの使用などのタスクを実行できる。
・echoコマンドを使用して特殊なログファイルを作成することもできる。
例)カスタムのログを作成する例
severity指示文を使用してログファシリティおよびルールの優先レベルを指定できる。
①emergの優先度でデフォルトのファシリティ(authpriv)を指定する例
sshd : .example.com : severity emerg
②alertの優先度でlocal0ファシリティを指定する例
sshd : .example.com : severity local0.alert
2)1つのファイル(hosts.allowまたはhosts.deny)にまとめてallowとdenyを指定
下記例のようにallowまたはdeny指示文を最終オプションとして追加してルールを設定し、一つのファイルで統合することもできる。
sshd : client-1.example.com : allow
sshd : client-2.example.com : deny
3)シェルコマンド
①spawn
・子プロセスとしてシェルコマンドを起動。
・要求しているクライアントについてのより詳しい情報を得るために/usr/sbin/safe_fingerの使用などのタスクを実行できる。
・echoコマンドを使用して特殊なログファイルを作成することもできる。
例)カスタムのログを作成する例
in.telnetd : .example.com \ : spawn /bin/echo `/bin/date` from %h>>/var/log/telnet.log \ : allow
②twist
・要求されたサービスを指定したコマンドに置き換える。
・この指示文は、侵入者に対するトラップをセットアップするために使用されることが多くある。
また、接続しているクライアントにメッセージを送るためにも使用できる。
・twist指示文は、ルール行の末尾に置く必要がある。
例)メッセージを通知する例
vsftpd : .example.com \ : twist /bin/echo "421 %h has been banned from this server!"
-
システム管理
- CentOSのブートの流れ、ランレベルの指定
- CentOS6のrc.sysinitスクリプトの処理内容の概要
- procファイルシステムの概要
- sysctlコマンドでカーネルパラメータの参照、変更
- cron、anacronで自動定期実行
- at、batchコマンドの概要
- CentOS6のシステムログ
- rsyslogの設定方法
- システムログのローテート設定
- CentOSのハードウェア情報を表示するコマンド
- CentOSでパーティション、スワップ、ディスク情報を確認
- LinuxのLVMの概要と表示コマンド
- ボリュームグループ、論理ボリューム作成、ファイルシステム作成、マウント設定、物理ボリュームを追加
- CentOSで論理ボリューム、ext4ファイルシステムを拡張
- CentOSのLVMでボリュームグループから物理ボリュームを削除
- WindowsからCentOS6にリモートデスクトップする手順
- viエディタの使用方法
- HTMLのマニュアルをLinuxのターミナル画面上で読む
- findコマンドで直近に更新されたファイルを調べる方法
- Linuxでディスク使用量が多いディレクトリを調べる方法(1)
- Linuxでディスク使用量が多いディレクトリを調べる方法(2)
- psコマンドで全プロセスを表示する方法と表示結果の見方
- プロセス階層、プロセスグループ、セッションを確認するには?
- psコマンドでスレッドに関する情報を表示するには?
- netstat、nmapを使ってリッスンポートを確認する方法
- vmstatコマンドでシステムの状況をモニター
- シェル変数と環境変数の違い
- CentOSのユーザー環境設定ファイル(bashrc、profile)
- 日本語設定、シェル環境設定
- umaskはどこで設定されている?
- CentOS6の各種ネットワーク設定ファイルとインタフェース制御スクリプト
- CentOS6のTCPラッパーの概要と設定方法
- LinuxのNetworkManagerプロセスの概要
- CentOS6のユーザー管理の概要とコマンド操作
- ファイルのパーミッション設定、ディレクトリは要注意
- Linuxでスティッキービットが設定されているか確認する方法
- sudoで特定のコマンドのみをroot権限で実行する
- RHEL6、CentOS6の64ビットサポートとhuge pages
- RHEL6、CentOS6の64ビットサポートとNUMA
Linuxコマンド操作
シェル環境設定
ネットワーク関連
ユーザー管理、権限
64ビットサポート
-
CentOSの概要
- RHEL6、CentOS6の64ビットサポートとhuge pages
- RHEL6、CentOS6の64ビットサポートとNUMA
- CentOS6インストール手順のメモ
- CentOSのブートの流れ、ランレベルの指定
- procファイルシステムの概要
- sysctlコマンドでカーネルパラメータの参照、変更
- CentOS6の各種ネットワーク設定ファイルとインタフェース制御スクリプト
- cron、anacronで自動定期実行
- at、batchコマンドの概要
- CentOS6のシステムログ
- rsyslogの設定方法
- システムログのローテート設定の確認
- CentOSのハードウェア情報を表示するコマンド
- CentOSでパーティション、スワップ、ディスク情報を確認
- LinuxのLVMの概要と表示コマンド
- ボリュームグループ、論理ボリューム作成、ファイルシステム作成、マウント設定、物理ボリュームを追加
- CentOSで論理ボリューム、ext4ファイルシステムを拡張
- CentOSのLVMでボリュームグループから物理ボリュームを削除
- WindowsからCentOS6にリモートデスクトップする手順
- viエディタの使用方法
- HTMLのマニュアルをLinuxのターミナル画面上で読む
- findコマンドで直近に更新されたファイルを調べる方法
- Linuxでディスク使用量が多いディレクトリを調べる方法(1)
- Linuxでディスク使用量が多いディレクトリを調べる方法(2)
- ディスク使用量が多いディレクトリを抽出するbashスクリプト
- psコマンドで全プロセスを表示する方法と表示結果の見方
- プロセス階層、プロセスグループ、セッションを確認するには?
- psコマンドでスレッドに関する情報を表示するには?
- netstat、nmapを使ってリッスンポートを確認する方法
- 日本語設定、シェル環境設定
- CentOSのユーザー環境設定ファイル(bashrc、profile)
- umaskはどこで設定されている?
- シェル変数と環境変数の違い
- CentOSのネットワークフィルタリング設定を一から行う
- CentOS6のTCPラッパーの概要と設定方法
- CentOS6のユーザー管理の概要とコマンド操作
- ファイルのパーミッション設定、ディレクトリは要注意
- Linuxでスティッキービットが設定されているか確認する方法
- sudoで特定のコマンドのみをroot権限で実行する
システム管理
Linuxコマンド操作
シェル環境設定
ネットワーク関連
ユーザー管理、権限
-
ネットワーク、ポート番号
- iptablesを使ってCentOSのファイアウォール設定
- CentOS6のTCPラッパーの概要と設定方法
- nmapでオープンしているポート番号とバージョンを確認
- yumコマンドで最新のパッケージにアップデート
- 更新可能なRPMパッケージのリストをメールで送信する
- CentOSで不要なサービスは起動しないようにする
- RPMパッケージのインテグリティチェック
- cronで使用するファイルのパーミッション設定
- CentOSのumaskの設定
- ユーザーホームディレクトリ内の権限設定をセキュアにする
- CentOSのパスワードファイルのパーミッション設定
- findコマンドでファイル書込権限をいっせいにチェック
- findコマンドでセットユーザ(グループ)IDが不要にセットされていないかチェック
- findコマンドで所有者、グループが存在しないファイルを抽出
- ログイン時などに表示されるシステムバナーを変更するには?
- CentOSのユーザーアカウントのパスワードポリシーを設定
- pam_cracklibモジュールでパスワードポリシーを設定
- pam_unix.soモジュールを使って過去のパスワード再使用を制限する
- システムコンソールでのrootログインを制限する方法
- suコマンドによるrootへのスイッチを制限する
- root権限でのコマンド実行、sudoだと監査ログが取得できる
- デーモン用アカウントなどに対しシェルを使用を無効にする
- パスワード認証を失敗時にアカウントをロックアウトする設定
- rootアカウントのPATH環境変数のセキュリティについて
- NTPのセキュリティを考慮した設定
- セキュリティを考慮してX Windowsを設定または削除する方法
- ファイルの改ざん対策用にTripwireを導入
- CentOSにホスト型侵入検知ソフトAIDE(Advanced Intrusion Detection Environment)を導入
- アイドルのシェルを自動で強制終了させるには?
- CentOSでコアダンプを無効にする方法
- Linuxのbash脆弱性CVE-2014-6271、Shellshockを修整
- CentOSでバッファーオーバーフロー脆弱性に対する防御機能が有効になっているか確認する
yum、rpmパッケージ、サービス
パーミッション
ログイン、認証、パスワード、アカウント制御
ツール
トラブルシューティング