procmailだけは使いたくない、というところからスタートして悩む。
ClamSMTPが localhost:10025 で待っててくれているところまでは元々あるんだから、
という経路を
にすればいいはずだ。
spamc が起動するプログラムが localhost:10025 に接続して SMTPしゃべってくれさえすればいい、のだが ヘッダー情報は素通しにしたいというCプログラムが見つからない。
ここはRubyの出番? ちょっとシングルクオート/ダブルクオートなしで書いてみるテスト。
ruby -r net/smtp -e Net::SMTP.start\(%q/localhost/,10025\)\{\|smtp\|smtp.send_mail\ \$stdin,%q/hogefrom@example.com/\,%q/hogeto@example.com/\}
結局実行ファイルを作ることにした。ファイル名は/local/bin/smtp10025
にしておく。
#!/usr/local/bin/ruby require 'net/smtp' sender = ARGV[0] recip = ARGV.dup recip.shift # shift is destructive method Net::SMTP.start('localhost',10025) {|smtp| smtp.send_mail $stdin, sender, recip}
。
master.cf の ClamSMTP 設定のところに、spamd という service を追加で定義する。
# content filter scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes localhost: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 # SpamAssassin spamd unix - n n - - pipe user=spamd argv=/usr/local/bin/spamc -U /var/run/spamd/spamd -e /local/bin/smtp10025 ${sender} ${recipient}
main.cf で、content_filter = scan:127.0.0.1:10025
となっていたところを、content_filter = spamd
に変更する。
################################################################ # Content Filter # # content_filter = scan:127.0.0.1:10025 content_filter = spamd receive_override_options = no_address_mappings
今回はまた強力な布陣だこと。業務系にいきなり適用するのも恐いが、ほおっておくのはもっと恐いみたいな。
SSL経由で接続設定をしていて、以下のエラーメッセージでつながらない状況。
pop3d-ssl: couriertls: connect: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
TLS_PROTOCOL パラメータを TLS1にするとどうなるか実験した後、SSLv3 に戻したりしていたのだが、
##NAME: TLS_PROTOCOL:0 # # TLS_PROTOCOL sets the protocol version. The possible versions are: # # SSL2 - SSLv2 # SSL3 - SSLv3 # TLS1 - TLS1
TLS_PROTOCOL=SSLv3 という不正な値設定をしていたのが原因だった orz
設定ファイルに書く値としては TLS_PROTOCOL=SSL3 が正解。確かに wrong version number だよ。
Gmailでの POP3 over SSL + SMTP AUTH TLS を使うためのメーラ設定。 ログインしなくても見える。
jailの中でmake作業するのはやっぱり1テンポ面倒なので、外側でmakeしてインストーラを工夫することにした。
#!/bin/sh J=/var/jail/mimori.org mkdir $J/var/jail (cd $J/var/jail; ln -s ../.. mimori.org) svc -d $J/local/service/apache2-mimori echo cd $PWD > 03install-sub.sh echo make install >> 03install-sub.sh chmod +x 03install-sub.sh chroot $J /bin/sh $PWD/03install-sub.sh (cd $J/local/conf; mkdir SAMPLE mv highperformance-std.conf SAMPLE; mv highperformance.conf SAMPLE; mv httpd-std.conf SAMPLE; mv ssl-std.conf SAMPLE; ) (cd $J/local; rm -rf manual) svc -u $J/local/service/apache2-mimori
変数を定義している割には、別環境で使う時にはそこの変更だけでは済まないインチキスクリプト。 変数1箇所で汎用性を高めようとするならrubyスクリプトにした方がいいけど、そんなには使い回さないしなあ…