自宅サーバ リプレース

ずいぶん前からIntelのD510MOが買ってあって、これで新しいサーバを組もうと思っていたのですが、このところ相当仕事が忙しくて、全く時間が無かった・・・というか寝る時間すらなかったので、かなりほって置いたのですが、やっと組み立てました。
Pentium4の531からAtomD510への移行ということで、スペックアップというよりは省電力化、静音化を狙ってという意味合いが強いです。外部公開する必要があるサービスはDNSとメールだけなので、別にスペックは必要無いのです。メールが増えてきたのでディスク容量は大幅に増加させましたが。
OSはOpenSolarisも考えましたが、Sunの買収により今後の動向が心配だったので、別のOSに移行する事にしました。個人的な趣味でFreeBSD / NetBSDでも良かったし、無難にCentOSという選択肢もアリだったのですが、GUIが使えるようにしておきたかった事と、クライアントPCとしても使ってみたかったのでUbuntu Serverにしてみました。

基本的にはDNSサーバもBind9からBind9、メールサーバもPostfix→Postfix、Dovecot→Dovecotという事でデータ移行を含めても数時間でさっくり動かすことが出来ました。
ついでにhavpとclamsmtpもインストールして、Web、メールのウイルスチェックも実施する事に。


  • メールのウイルスチェック

まずPostfixの設定から。

/etc/postfix/main.cfに

content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings

/etc/postfix/master.cfに

127.0.0.1:10026 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8

と追記する。

次にClamsmtpの設定をする。
/etc/clamsmtp.confに

OutAddress: 127.0.0.1:10026
Listen: 127.0.0.1:10025

と記述する。
これでサービスを再起動。

# sudo service postfix stop
# sudo service clamsmtp restart
# sudo service postfix start

メールの送受信時に自動的にウイルスチェックがされるはず。
メールのルーティングは inet_interface:25 → Postfix → 127.0.0.1:10025 → Clamsmtp → 127.0.0.1:10026 → Postfix → MXを参照してメールを配信 となる。(TrendMicroの製品なんかとほとんど一緒ですね。)

あとは自動起動の設定を確認。

# sudo sysv-rc-conf --level 2345 clamsmtp on


メールの送受信時にウイルスを検出した場合、
ログ(/var/log/clamav/clamav.log)に
Thu Feb 2 18:55:04 2011 -> /var/spool/clamsmtp/clamsmtpd.yYRpsm: Eicar-Test-Signature FOUND
のように記録されるので、正常に動作していることを確認できる。


  • Webのウイルスチェック


havpを設定する。/etc/havp/havp.config

USER havp
GROUP havp
DAEMON true
PIDFILE /var/run/havp/havp.pid
SERVERNUMBER 8
MAXSERVERS 100
ACCESSLOG /var/log/havp/access.log
ERRORLOG /var/log/havp/havp.log
LOG_OKS true
LOGLEVEL 0
SCANTEMPFILE /var/spool/havp/havp-XXXXXX
TEMPDIR /var/tmp
DBRELOAD 60
TRANSPARENT false
FORWARDED_IP false
X_FORWARDED_FOR false
PORT 8080
BIND_ADDRESS 172.16.xxx.xxx
SOURCE_ADDRESS 172.16.xxx.xxx
TEMPLATEPATH /etc/havp/templates/en
WHITELISTFIRST true
WHITELIST /etc/havp/whitelist
BLACKLIST /etc/havp/blacklist
FAILSCANERROR true
SCANNERTIMEOUT 10
RANGE false
PRELOADZIPHEADER true
SCANIMAGES true
MAXSCANSIZE 5000000
KEEPBACKBUFFER 200000
KEEPBACKTIME 5
TRICKLING 1
TRICKLINGBYTES 10
MAXDOWNLOADSIZE 0
STREAMUSERAGENT Player Winamp iTunes QuickTime Audio RMA/ MAD/ Foobar2000 XMMS
STREAMSCANSIZE 20000
DISABLELOCKINGFOR ClamAV:BinHex ClamAV:PDF ClamAV:ZIP AVG:ALL
IGNOREVIRUS Oversized. Encrypted. Phishing.
ENABLECLAMLIB true
CLAMDBDIR /var/lib/clamav
CLAMBLOCKBROKEN false
CLAMBLOCKENCRYPTED false
CLAMBLOCKMAX false
CLAMMAXSCANSIZE 20
CLAMMAXFILES 50
CLAMMAXFILESIZE 100
CLAMMAXRECURSION 8
ENABLECLAMD false
ENABLEFPROT false
ENABLEAVG false
ENABLEAVESERVER false
ENABLESOPHIE false
ENABLETROPHIE false
ENABLENOD32 false
ENABLEAVAST false
ENABLEARCAVIR false
ENABLEDRWEB false

こんな感じに設定すると、havpがProxyサーバになって8080ポートで待ち受けしてくれて、ClamAVのライブラリを使ってウイルスチェックを行ってくれる。ほぼデフォルトの設定そのままだけど、パフォーマンスを考える必要がないので問題無いかなと思っている。
個人的にはSquidと多段Proxyの構成にして、クライアント→Squid→Havpという風に使うのがいいと思う。アクセスログの解析を考えると、Squidのログが使いやすいと思うので。
人によっては更にコンテンツフィルタが必要だったりするかも知れないけど、その場合はSquidとHavpの間に挟める形がベストだろう。

ちなみにSquidとの間に挟める場合はhavp.configを

PORT 10080
BIND_ADDRESS 127.0.0.1
SOURCE_ADDRESS 172.16.xxx.xxx

と書き換え、Squidの設定(squid.conf)で親プロキシの設定としてhavpを指定する。

cache_peer localhost parent 10080 0


で、サービスを再起動するとProxy経由でアクセスするとウイルスを検出するようになる。

$ sudo service squid stop
squid stop/waiting
$ sudo service havp stop
Stopping havp: havp.
Cleaning up /var/spool/havp... done
Unmounting /var/spool/havp ...done
$ sudo service havp start
Mounting /var/lib/havp/havp.loop under /var/spool/havp ...done
Cleaning up /var/spool/havp... done
Starting havp: Starting HAVP Version: 0.91
havp.
$ sudo service squid start
squid start/running, process 29937


動作確認はアクセスログ(/var/log/havp/access.log)を確認するか、Eicarテストウイルスにアクセスしてみれば、すぐに判る。

http://www.eicar.org

Eicar-TestVirus-Site

テストファイルをクリックすると、
Havp-Alert-Screen
というウイルスを検出したのでアクセスをブロックした画面が表示される。アラート画面は普通のhtmlファイルなので、ちょろっと弄れば日本語メッセージにしたりカスタマイズはやりやすそうだ。