9.4. 設定例
9.4.1. Squid を非標準のポートに接続させる
前述の Boolean を施行し、特定のポートに限ったアクセスをデフォルトで許可することで SELinux が Squid を補完している実践的な例を以下に示します。また、Boolean を変更する方法、およびその変更により許可されるアクセスについても示します。
以下に示す例は、 シンプルな Squid 設定に対してどのように SELinux が影響を与えることができるのかを示す一例に過ぎません。 Squid に関する総合的な説明は本ガイドの範疇を越えてしまいますので、 詳細については、 公式の Squid ドキュメント を参照してください。 ここでは、 Squid ホストにはインターネットアクセスがあり、2 種類のネットワークインターフェースが備わっていることを前提としています。 また、ファイアウォールでは、Squid がリッスンするデフォルトの TCP ポート (TCP 3128) を使った内部インターフェース上のアクセスを許可するよう設定されていることを前提としています。
- root ユーザーになり squid パッケージをインストールします。
rpm -q squid
を実行して squid パッケージがインストールされているか確認します。 インストールされていない場合は、 root ユーザーでyum install squid
を実行しインストールを行ないます。 - メインの設定ファイル
/etc/squid/squid.conf
を編集し、cache_dir
ディレクティブが以下のようにアンコメントされているか確認します。cache_dir ufs /var/spool/squid 100 16 256
上記では、 この設定例で使用するcache_dir
ディレクティブのデフォルト設定を定義しています。 Squid ストレージフォーマット (ufs)、 キャッシュを配置するシステム上のディレクトリ (/var/spool/squid)、 キャッシュに使用するメガバイト単位のディスク領域 (100)、 第一レベルのキャッシュディレクトリ数と第二レベルのキャッシュディレクトリ数 (16 と 256) の設定情報で構成されています。 - 同じ設定ファイル内の
http_access allow localnet
ディレクティブもアンコメントされているか確認してください。 Red Hat Enterprise Linux では、 Squid のデフォルトインストールで自動的に設定されるlocalnet
ACL からのトラフィックを許可します。 既存する RFC1918 ネットワーク上のクライアントマシンにプロキシを通過できるアクセスを許可します (この設定例ではこれで充分です)。 - 同じ設定ファイル内の
visible_hostname
ディレクティブもアンコメントされ、 マシンのホスト名が設定されているか確認してください。 値はホストの完全修飾ドメイン名にします。visible_hostname squid.example.com
- root ユーザーで
service squid start
を実行し、squid
を起動します。 はじめてsquid
を起動すると、 前のステップでcache_dir
ディレクティブに指定したキャッシュディレクトリがこのコマンドにより初期化されてからsquid
デーモンが起動されます。squid
の起動に成功すると、 以下のような出力となります。# /sbin/service squid start init_cache_dir /var/spool/squid... Starting squid: . [ OK ]
squid
プロセス ID (PID) が制限のあるサービスとして起動されているか確認します。この例ではsquid_var_run_t
の値で確認します。# ls -lZ /var/run/squid.pid -rw-r--r--. root squid unconfined_u:object_r:squid_var_run_t:s0 /var/run/squid.pid
- この時点で、前に設定していた
localnet
ACL に接続しているクライアントマシンは、そのプロキシとしてこのホストの内部インターフェースを使用できるようになります。これはシステム全体または一般的な全 Web ブラウザのセッティングで設定することができます。これで Squid では目的のマシンのデフォルトポートでリッスンするようになりますが (TCP 3128)、目的のマシンで許可されるのは、一般的なポートを介したインターネット上の他のサービスへの発信接続のみになります。これが SELinux 自体で定義されているポリシーになります。SELinux では、次のステップで示すように非標準のポートへのアクセスは拒否されます。 - TCP ポート 10000 での web サイトのリスニングなど、 Squid プロキシを介し非標準のポートを使った要求がクライアントによって行なわれると、 次のような拒否がログ記録されます。
SELinux is preventing the squid daemon from connecting to network port 10000
- このアクセスを許可する場合は、 デフォルトでは無効になっている
squid_connect_any
Boolean を変更する必要があります。squid_connect_any
Boolean をオンにするには、 root ユーザーで次のコマンドを実行します。# setsebool -P squid_connect_any on
注記
再起動後、setsebool
による変更を維持したくない場合は-P
オプションを使用しないでください。 - クライアントの代わりとして、いずれのポートでも Squid による接続の開始が許可されるようになるため、 クライアントはインターネット上の非標準のポートにアクセスできるようになります。