20130306233346

Squid+SquidClamAV+ClamAV

やるべきことがある日ほどコンフィグ作業が捗る。最近重宝しているSSL-VPNからのSquidによるProxy利用。AndroidでもiOSでもOpenVPNに対応したので、Squid周りももう少し整頓してみようかな、と思い、安全なSquid利用を出来るようにSquidの通信をClamAVにバイパスしてみる。

流儀はいろいろあるが、一発目に見たサイト「プロキシサーバーでウィルスチェック(Squid+SquidClamAV+ClamAV)」(iptablesの設定ではお世話になりました...) ではsquid.confからurlrewrite_programからsquidclamavを呼び出して実行している模様。なるほど。SquidとClamavは入っているのででは必要なSquidclamavを入れましょう。

# emerge -pv squidclamav
 [ebuild   R    ] net-proxy/c-icap-0.2.2  USE="berkdb ipv6 -ldap" 0 kB
 [ebuild   R    ] net-proxy/squidclamav-6.8  0 kB
# emerge squidclamav
...
Compiling...
...
 * To enable the service, you should add this to your c-icap.conf file:
 *
 *     Service clamav squidclamav.so
 *
 * And then this to squid.conf (for a local ICAP server):
 *
 *     icap_enable on
 *
 *     # not strictly needed, but useful for special access
 *     icap_send_client_ip on
 *     icap_send_client_username on
 *
 *     icap_service clamav respmod_precache bypass=0 icap://localhost:1344/clamav
 *     adaptation_access clamav allow all

なるほど、Gentoo的にはsquidclamavを使うにはc-icapを使いましょう、と。郷に入れば郷に従えということで警告の通りに設定するべきか。ICAPはInternet Content Adaptation Protocolとの事で・・・プロキシのフィルタ機能拡張用のプロトコルとの事です。どうにもフィルタ機能の一部が死んだ時にプロキシ機能全体が止まるのではなく、ある程度は無視してくれるらしい。Squid3系列以降から標準らしいし、汎用的で拡張性も良さそうなのでこの方法で決定。自分の環境はローカルからしか使えない閉じたSquid、閉じたICAPサーバ、そしてClamAV。これらをつなぐために以下の設定を行いました・・・というか、インストール後のメッセージ殆どそのままです。

# vim /etc/c-icap/icap.conf
...
Service clamav squidclamav.so #追記

## ACL & Control
acl localnet  src 173.230.147.180/255.255.255.255 192.168.x.0/255.255.255.0 
acl localnet6 src fe80::f03c:91ff:fe96:3cfd 2001:470:1f04:1a92::2
acl localhost src 127.0.0.1/255.255.255.255 ::1
acl all src 0.0.0.0/0.0.0.0 ::

client_access allow localnet
client_access allow localnet6
client_access allow localhost
client_access deny all
# vim /etc/squidclamav.conf
...
clamd_local /var/run/clamav/clamd.sock         # ClamAVのローカルソケット指定
redirect    http://ika.uso8000k.net/error.html # 検知時の転送先
# vim /etc/squidi/squid.conf
...
# Squid-Clamav
icap_enable on
icap_send_client_ip on
icap_send_client_username on

icap_client_username_header X-Authenticated-User
icap_service clamav respmod_precache bypass=0 icap://localhost:1344/clamav

adaptation_access clamav allow all
# /etc/init.d/c-icap restart
# /etc/init.d/squid  restart

にて、概ね設定完了。正常に起動してエラーもなく問題なし・・・に思われたがテストウィルスのEICARをそのままダウンロードしてしまう。何故だ。ログを見るとSquidで受け付けて正常にWebを見ることができているが一向にICAPに渡らない。ICAP設定はちゃんと書いているしエラーも出ていない・・・と思ってSquidのUSEフラグを確認したら USE=”icap-client” が必要だったらしい。Squidの再コンパイルしたら動きました。ところで、この挙動はICAP非対応の状態でSquidがICAP用設定を読めてしまっていた問題なのだろうか?それともSquidで読んでICAP関連でエラーが出ていたので、そのまま処理をSquidのみで動いていたのだろうか。後者だとわりと仕様の通りに動いていてすっきりします。図らずも一部の機能不全からの共倒れを確認できたことになります。

・・・マシン性能が一杯一杯なので少し大きめのZIPファイル落とすと辛いかも。

なんにしても
∩( ・ω・)∩


Posted by uso8000k | Categories: Diary, Tech | [ツィート(笑)] | [2013/03/06/T23_33_46/]