9.4. 設定例

9.4.1. Squid を非標準のポートに接続させる

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

    注記

    再起動後、 setsebool による変更を維持したくない場合は -P オプションを使用しないでください。
  10. クライアントの代わりとして、いずれのポートでも Squid による接続の開始が許可されるようになるため、 クライアントはインターネット上の非標準のポートにアクセスできるようになります。