読者です 読者をやめる 読者になる 読者になる

pslaboの日記

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

iPad3のSIMロックに関する考察とSIM下駄による解除の試みはSoftbank版iPad3にiPhone用のSIM下駄を履かせてみるにいろいろ書いてます。

ポストした内容のカテゴリー分けがちゃんと出来てないので、過去記事を探したい方はお手数ですが検索で探してみてください。


squid で HTTPS の透過型プロキシを立てる。さらに Google Apps 契約ドメインのアカウントだけが Google にログインできるようにする。

Google Squid

Google Apps Users Group で掲題のネタが出ていたので実装を試してみるテスト。HTTPの透過型プロキシとしては動いているのだけど、Google サービスの利用制限がうまくできていない。。。この設定で意図通りに動いてました。この制限をかけていても Googlegmail.com なアカウントでのログインは行えるので設定が効いていないように見えるのですが、Gmail や Google Drive などのアプリケーションサービスに切り替えようとすると「このサービスは利用できません」と表示されました。

以下の作業手順は CentOS6 向けを想定しています。また、SELinux については enforce だと以下の内容では動きませんので、permissive とかに変えて試してみてください。

なお、この記事の内容をベースにすれば、任意の https 通信に対するフィルタリングを行うことも可能と思いますので、いろいろと応用範囲の広い Tips かもしれません。

サマリ

  • 外向けの 443/TCPsquid の透過型プロキシが横取りできるようにする。このような挙動を SSL interception と言うようです。攻撃目的だと Man in the middle と言いますけど、目的が違うので表現も違うのかな。
  • Google 宛ての通信に X-GoogApps-Allowed-Domains ヘッダを追加して、Google Apps の契約ドメインだけは gmail が使えるようにする。

squid のインストール

リクエストヘッダを追加するには squid 3.3 以降を使う必要があるらしい。リクエストヘッダの追記の設定は request_header_add で行う必要がありますが、これは squid 3.3 以降で利用可能なのだそうです。

しかし最新版は 3.5 ですから、せっかくなので最新版の 3.5 を CentOS に入れることにします。 yum で入れる場合は EPEL リポジトリと、squid のバイナリ配布用リポジトリ設定を追加しておけば以下のコマンド実行でOKです。

yum install perl-Crypt-OpenSSL-X509 squid squid-helpers

squid 3.5 のバイナリパッケージのリポジトリについては以下を参照してください。
http://wiki.squid-cache.org/SquidFaq/BinaryPackages#KnowledgeBase.2FCentOS.Squid-3.5


EPEL についてはここでは説明を省略します。squid バイナリの配布リポジトリは以下のURLで確認のこと。
http://wiki.squid-cache.org/SquidFaq/BinaryPackages#KnowledgeBase.2FCentOS.Squid-3.5

設定調整

squid インストール後の作業は...

  • オレオレCAの作成
  • ssl_crtd の設定
  • squid.conf の設定変更
  • 透過型プロキシのための iptables の設定
  • クライアントにオレオレCAの証明書を入れて動作確認する

となります。

SSL interception ではクライアントがアクセスするHTTPSサーバの証明書をその場で作成する必要があります。上記の作業を行うと、squid がこれを自動で行えるようになります。しかし証明書はオレオレなわけですから、HTTPS なサービスへの接続のたびにクライアント側で証明書の警告が出ます。これは非常によろしくないので「オレオレ証明書を発行するCAの証明書」をクライアント端末にインストールするわけですね。

オレオレCAの作成

既存のオレオレCAが存在する場合は、それを流用してもOKです。

mkdir /etc/squid/ssl_cert
cd /etc/squid/ssl_cert

# オレオレCA作成。
openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -keyout oreoreCA.pem  -out oreoreCA.pem

# オレオレCAの証明書作成。これは利用者のブラウザにインストールするものです。
openssl x509 -in oreoreCA.pem -outform DER -out oreoreCA.der
ssl_crtd の設定
/usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db
chown -R squid /var/lib/ssl_db
squid.conf の設定変更
  • 3128 は通常のプロキシとする。これは動作の比較用。本番運用で通常のプロキシ設定を残していると X-GoogApps-Allowed-Domains を付与できず、GoogleApps の利用制限ができない点に注意すべし。
  • 3129 は HTTP 向けの透過型プロキシとして動かす。
  • 3130 を HTTPS 向けの透過型プロキシとして動かす。
  • Google のサービスを利用可能なドメインを制限する。

なお、以下の設定では SSL証明書の検証が失敗しても処理を継続します。実際の運用ではこの設定ではアウトだと思いますので証明書の検証エラーは処理を継続しないように設定すべきでしょう。

# 正しいFQDNでもよいし、unknown のような文字列でもよいかと。
visible_hostname [適当な文字列]

# ポート毎の挙動の設定
# 3128 は通常の forward proxy との動作比較を想定しています。
# Google Apps 以外の利用制限が正しく動くことが確認できたら設定を消すべきです。
#http_port 3128
http_port  3129 intercept
https_port 3130 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl_cert/oreoreCA.pem

always_direct allow all

# localhost からのリクエストは SSL interception しない。
ssl_bump none localhost

# localhost 以外からのリクエストは SSL interception する。
ssl_bump server-first all

# サーバ証明書の検証エラーは、すべて無視。
# これは試験用の設定。
sslproxy_cert_error allow all

# 検証に失敗した証明書でも受け入れる。
# これも試験用の設定。
sslproxy_flags DONT_VERIFY_PEER

# 以下の2行は Google Apps アカウントだけが Google にログインできるようにするための設定
# この設定を行っても Google へのログイン自体は禁止できないことに注意。
# 本設定で抑止できるのは Gmail や Google Drive 等のアプリケーションサービスの利用に限られる。
acl to_google dstdomain .google.com
request_header_add X-GoogApps-Allowed-Domains 自社ドメイン名 to_google
透過型プロキシのための iptables の設定例(/etc/sysconfig/iptables からの抜粋)
-A PREROUTING  -i eth1 -p tcp --dport 80  -j REDIRECT --to-port 3129
-A PREROUTING  -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 3130

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3129 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3130 -j ACCEPT

see also

http://codepoets.co.uk/2014/squid-3-4-x-with-ssl-for-debian-wheezy/
https://support.google.com/a/answer/1668854?hl=ja

なお、Squid のチューニングに関する書籍をお探しの場合は、こちらをどうぞ。ものは少々古めですが、それなりに参考になるかも?