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 ufs /var/spool/squid 100 16 256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記では、 この設定例で使用するcache_dirディレクティブのデフォルト設定を定義しています。 Squid ストレージフォーマット (ufs)、 キャッシュを配置するシステム上のディレクトリ (/var/spool/squid)、 キャッシュに使用するメガバイト単位のディスク領域 (100)、 第一レベルのキャッシュディレクトリ数と第二レベルのキャッシュディレクトリ数 (16 と 256) の設定情報で構成されています。 - 同じ設定ファイル内の
http_access allow localnetディレクティブもアンコメントされているか確認してください。 Red Hat Enterprise Linux では、 Squid のデフォルトインストールで自動的に設定されるlocalnetACL からのトラフィックを許可します。 既存する RFC1918 ネットワーク上のクライアントマシンにプロキシを通過できるアクセスを許可します (この設定例ではこれで充分です)。 - 同じ設定ファイル内の
visible_hostnameディレクティブもアンコメントされ、 マシンのホスト名が設定されているか確認してください。 値はホストの完全修飾ドメイン名にします。visible_hostname squid.example.com
visible_hostname squid.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow - root ユーザーで
service squid startを実行し、squidを起動します。 はじめてsquidを起動すると、 前のステップでcache_dirディレクティブに指定したキャッシュディレクトリがこのコマンドにより初期化されてからsquidデーモンが起動されます。squidの起動に成功すると、 以下のような出力となります。/sbin/service squid start
# /sbin/service squid start init_cache_dir /var/spool/squid... Starting squid: . [ OK ]Copy to Clipboard Copied! Toggle word wrap Toggle overflow squidプロセス ID (PID) が制限のあるサービスとして起動されているか確認します。この例ではsquid_var_run_tの値で確認します。ls -lZ /var/run/squid.pid
# ls -lZ /var/run/squid.pid -rw-r--r--. root squid unconfined_u:object_r:squid_var_run_t:s0 /var/run/squid.pidCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この時点で、前に設定していた
localnetACL に接続しているクライアントマシンは、そのプロキシとしてこのホストの内部インターフェースを使用できるようになります。これはシステム全体または一般的な全 Web ブラウザのセッティングで設定することができます。これで Squid では目的のマシンのデフォルトポートでリッスンするようになりますが (TCP 3128)、目的のマシンで許可されるのは、一般的なポートを介したインターネット上の他のサービスへの発信接続のみになります。これが SELinux 自体で定義されているポリシーになります。SELinux では、次のステップで示すように非標準のポートへのアクセスは拒否されます。 - TCP ポート 10000 での web サイトのリスニングなど、 Squid プロキシを介し非標準のポートを使った要求がクライアントによって行なわれると、 次のような拒否がログ記録されます。
SELinux is preventing the squid daemon from connecting to network port 10000
SELinux is preventing the squid daemon from connecting to network port 10000Copy to Clipboard Copied! Toggle word wrap Toggle overflow - このアクセスを許可する場合は、 デフォルトでは無効になっている
squid_connect_anyBoolean を変更する必要があります。squid_connect_anyBoolean をオンにするには、 root ユーザーで次のコマンドを実行します。setsebool -P squid_connect_any on
# setsebool -P squid_connect_any onCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記
再起動後、setseboolによる変更を維持したくない場合は-Pオプションを使用しないでください。 - クライアントの代わりとして、いずれのポートでも Squid による接続の開始が許可されるようになるため、 クライアントはインターネット上の非標準のポートにアクセスできるようになります。