![]() |
![]() |
![]() |
milter managerリファレンスマニュアル | ![]() |
---|
FreeBSDに特化したmilter managerのインストール方法について説明します。FreeBSDに依存しない一般的なインストール情報は インストール を見てください。
FreeBSD 8.1-RELEASEを想定しています。
以下のパッケージをインストールすることにより、関連するパッケージもインストールされます。
% sudo /usr/local/sbin/portupgrade -NRr lang/ruby18 glib20
MTAはPostfixを利用することとします。
% sudo /usr/local/sbin/portupgrade -NRr postfix
milterはspamass-milter、clamav-milter、milter-greylistを使用することとします。
% sudo /usr/local/sbin/portupgrade -NRr -m "WITH_CHARSET=utf-8" ja-mecab ja-mecab-ipadic % sudo /usr/local/sbin/portupgrade -NRr -m "ENCODING=utf-8" ja-p5-Text-MeCab % sudo /usr/local/sbin/portupgrade -NRr ja-p5-Mail-SpamAssassin % sudo /usr/local/sbin/portupgrade -NRr spamass-milter % sudo /usr/local/sbin/portupgrade -NRr -m 'WITH_POSTFIX=true' milter-greylist % sudo /usr/local/sbin/portupgrade -NRr -m 'WITH_MILTER=true' clamav
~/src/以下で作業をすることとします。また、/usr/local/以下にインストールします。
% mkdir -p ~/src/ % cd ~/src/ % fetch http://downloads.sourceforge.net/milter-manager/milter-manager-1.6.3.tar.gz % tar xvzf milter-manager-1.6.3.tar.gz % cd milter-manager-1.6.3 % ./configure CPPFLAGS="-I/usr/local/include" % gmake % sudo gmake install
milterの基本的な設定方針は以下の通りです。
UNIXドメインソケットで接続を受け付けるようにします。これは、セキュリティ面と速度面の理由からです。
milterの実効ユーザも一般ユーザにします。これもセキュリティ面の理由からです。UNIXドメインソケットはグループでの読み書き権限を設定します。読み書き権限のあるグループとしてmailグループを使用し、postfixユーザはmailグループに所属させます。
必要のない配送遅延をできるだけ抑えるため、milter-greylistは S25R にマッチするときのみ適用します。しかし、これはmilter-managerが自動で行うため、特に設定する必要はありません。
まず、spamdの設定をします。
以下のような内容の/usr/local/etc/mail/spamassassin/local.cfを作成します。これで、スパム判定された場合のみ、その詳細をヘッダに追加するようになります。
remove_header ham Status remove_header ham Level
spamdを有効にするため、/etc/rc.confに以下を追加します。
spamd_enable=YES
SMTPクライアントの同時接続数が多い場合は、最大同時接続数を増やします。デフォルトでは5接続になっています。迷惑メールを送る多くのSMTPクライアントはmilter-greylistでブロックされて、SpamAssassinまでは処理がまわってきません。まずは、SMTPクライアントの同時接続数の1/3程度にしておき、運用後に調整するとよいでしょう。例えば、同時に最大で約100接続ほどのSMTP接続がある場合は以下のように同時に30接続受け付けるようにするとよいでしょう。
spamd_flags="-c --max-children=30 "
運用後はmilter managerの統計情報をグラフ化し、調整してください。
spamdを起動します。
% sudo /usr/local/etc/rc.d/sa-spamd start
次にspamass-milterの設定をします。spamass-milterはspamdユーザ・spamdグループで動かすことにします。
デフォルトではspamass-milterは/var/run/spamass-milter.sockにソケットファイルを作成します。しかし、/var/run/以下にはroot権限がないと新しくファイルを作成することができません。そのため、/var/run/spamass-milter/ディレクトリを作成し、そのディレクトリの所有者をspamdユーザにします。ソケットファイルはそのディレクトリ以下に作成することにします。
% sudo mkdir /var/run/spamss-milter/ % sudo /usr/sbin/chown spamd:spamd /var/run/spamss-milter
/etc/rc.confに以下を追加します。
spamass_milter_enable="YES" spamass_milter_user="spamd" spamass_milter_group="spamd" spamass_milter_socket="/var/run/spamss-milter/spamass-milter.sock" spamass_milter_socket_owner="spamd" spamass_milter_socket_group="mail" spamass_milter_socket_mode="660" spamass_milter_localflags="-u spamd -- -u spamd"
spamass-milterを起動します。
% sudo /usr/local/etc/rc.d/spamass-milter start
まず、ClamAV本体の設定をします。
/etc/rc.confに以下を追加してclamdとfreshclamを有効にします。
clamav_clamd_enable="YES" clamav_freshclam_enable="YES"
clamdとfreshclamを起動します。
% sudo /usr/local/etc/rc.d/clamav-clamd start % sudo /usr/local/etc/rc.d/clamav-freshclam start
clamav-milterはデフォルトではclamavユーザ・clamavグループで起動します。一般ユーザなのでその設定を利用することにし、ソケットの書き込み権限のみを変更します。
/etc/rc.confに以下を追加します。
clamav_milter_enable="YES" clamav_milter_socket_mode="660" clamav_milter_socket_group="mail"
必要であれば/usr/local/etc/clamav-milter.confを変更します。例えば、以下のように変更します。
/usr/local/etc/clamav-milter.conf
変更前:
#OnInfected Quarantine #AddHeader Replace #LogSyslog yes #LogFacility LOG_MAIL #LogInfected Basic
変更後:
OnInfected Reject AddHeader Replace LogSyslog yes LogFacility LOG_MAIL LogInfected Full
それぞれ以下のような設定です。
ウィルスに感染したメールを受信拒否します。デフォルトではQuarantineでPostfixのholdキューに溜まりますが、定期的にholdキューを確認するのでなければ受信拒否した方がメンテナンスが楽になります。 |
|
既存のX-Virus-Scannedヘッダがあっても上書きするようになります。この設定を有効にすることにより受信側でのウィルスチェックの結果がヘッダに入ることになります。通常、送信側より受信側の方のチェックの方が信頼できるはずなので(送信側が正しく報告しているかどうかは確かめられない)、この設定を有効にしておくとよいでしょう。 |
|
syslogにログを出力します。負荷が大きい場合は無効にするとよいでしょう。 |
|
syslogのfacilityをLOG_MAILにして、/var/log/maillogにログを出力します。 |
|
ウィルスメールを見つけたときに詳細なログを出力します。 |
clamav-milterを起動します。
% sudo /usr/local/etc/rc.d/clamav-milter start
milter-greylistはsmmspユーザ・mailグループで実行します。smmspユーザはデフォルト設定のユーザであり、Postfixを使っている環境では使用されていないユーザなので、そのまま使うことにします。
/usr/local/etc/mail/greylist.conf.sampleを/usr/local/etc/mail/greylist.confにコピーし、以下のような設定にします。
IPアドレスのマッチには前半24ビットのみを使う(送信元が複数のMTAを利用している場合のGreylistの悪影響を抑えるため)
再送チェック時間を30分後(デフォルト)から10分後に短くする(Greylistの悪影響を抑えるため)
オートホワイトリストの期間を1日(デフォルト)から1週間に伸ばす(Greylistの悪影響を抑えるため)
デフォルトでGreylistを使う
変更前:
racl whitelist default
変更後:
subnetmatch /24 greylist 10m autowhite 1w racl greylist default
/etc/rc.confに以下を追加します。
miltergreylist_enable="YES" miltergreylist_runas="smmsp:mail"
また、/etc/rc.conf.d/miltergreylistを作成し、ソケットファイルのパーミッションを設定します。sleep 1はmilter-greylistの起動待ちのためです。もし、1秒では足りない場合は、/usr/local/etc/rc.d/clamav-milterのようにもう少し賢くする方がよいと思います。
/etc/rc.conf.d/miltergreylist
start_postcmd=start_postcmd start_postcmd() { sleep 1 /bin/chmod g+w $miltergreylist_sockfile /usr/bin/chgrp mail $miltergreylist_sockfile }
milter-greylistを起動します。
% sudo /usr/local/etc/rc.d/milter-greylist start
milter-managerはmilter-managerユーザで動作させるので、milter-managerユーザを作成します。
% sudo /usr/sbin/pw groupadd milter-manager % sudo /usr/sbin/pw useradd milter-manager -g milter-manager -G mail -m
milter-managerはシステムにインストールされているmilterを検出します。以下のコマンドでspamass-milter、clamav-milter、milter-greylistを検出していることを確認してください。
% sudo /usr/local/sbin/milter-manager -u milter-manager --show-config
以下のように表示されていれば検出は成功しています。
... define_milter("milter-greylist") do |milter| milter.connection_spec = "unix:/var/milter-greylist/milter-greylist.sock" ... milter.enabled = true ... end .. define_milter("clamav-milter") do |milter| milter.connection_spec = "unix:/var/run/clamav/clmilter.sock" ... milter.enabled = true ... end .. define_milter("spamass-milter") do |milter| milter.connection_spec = "unix:/var/run/spamass-milter/spamass-milter.sock" ... milter.enabled = true ... end ..
milterの名前、ソケットのパス、enabledがtrueになっていることを確認してください。異なっていた場合は、 設定 を参考に/usr/local/etc/milter-manager/milter-manager.confを編集してください。ただ、できれば、設定を変更せずに使用できるようにしたいと考えています。もし、検出できなかった環境のことを教えてもらえれば、milter-manager.confを編集しなくとも使用できるように検出方法を改良することができるかもしれません。
FreeBSD上ではデフォルトでは/var/run/milter-manager/milter-manager.sockというソケットファイルを作成します。そのため、事前に/var/run/milter-manager/ディレクトリを作成しておく必要があります。
% sudo mkdir -p /var/run/milter-manager % sudo /usr/sbin/chown -R milter-manager:milter-manager /var/run/milter-manager
milter-managerの設定が完了したので、起動の設定をします。
FreeBSD用の起動スクリプトが/usr/local/etc/milter-manager/rc.d/milter-managerにインストールされています。/usr/local/etc/rc.d/以下にシンボリックリンクを作成し、自動起動するようにします。
% cd /usr/local/etc/rc.d/ % sudo ln -s /usr/local/etc/milter-manager/rc.d/milter-manager ./
/etc/rc.confに以下を追加してmilter-managerを有効にします。
milter_manager_enable="YES"
milter-managerを起動します。
% sudo /usr/local/etc/rc.d/milter-manager start
/usr/local/bin/milter-test-serverで起動の確認をすることができます。
% sudo -u milter-manager milter-test-server -s unix:/var/run/milter-manager/milter-manager.sock
このように表示されれば成功です。
status: pass elapsed-time: 0.128 seconds
起動に失敗しているときはこのように表示されます。
Failed to connect to unix:/var/run/milter-manager/milter-manager.sock: No such file or directory
失敗している時はログを頼りに問題を解決します。--verboseオプションをつけると詳細なログが表示されます。また、デーモンプロセスにしないことにより、標準出力にもログが表示されます。
/etc/rc.confに以下を追加します。これにより、標準出力に詳細なログが表示されます。
milter_manager_debug="YES"
milter-managerをもう一度起動します。
% sudo /usr/local/etc/rc.d/milter-manager start
問題があればログが表示されます。起動しているmilter-managerはCtrl+cで終了することができます。
問題が解決した後は、/etc/rc.confに追加したmilter_manager_debugをコメントアウトし、デーモンプロセスで起動するように戻してから、milter-managerを起動しなおしてください。
まず、postfixユーザをmailグループに追加します。
% sudo /usr/sbin/pw groupmod mail -m postfix
次に、milterの設定をします。
/usr/local/etc/postfix/main.cfに以下を追加します。
milter_protocol = 6 # Postfix 2.5以上の場合 milter_default_action = accept milter_connect_macros = j {daemon_name} v {client_addr} milter_mail_macros = {auth_author} {auth_type} {auth_authen}
それぞれ以下のような設定です。
続いて、Postfixにmilter-managerを登録します。spamass-milter、clamav-milter、milter-greylistはmilter-manager経由で利用するので、Postfixにはmilter-managerだけを登録すればよいことに注意してください。
/usr/local/etc/postfix/main.cfに以下を追加します。
smtpd_milters = unix:/var/run/milter-manager/milter-manager.sock
Postfixの設定を再読み込みします。
% sudo /usr/local/etc/rc.d/postfix reload
以上で設定は完了です。
milter-managerはいくつかsyslogにログを出力します。mail.infoに出力するので、正常に動作していればmilter-managerからのログが/var/log/maillogにログがでるはずです。テストメールを送信して確認してください。
milter-managerを導入することにより、milterとPostfixを連携させる手間が削減されています。
通常であれば、Postfixのsmtpd_miltersにspamass-milter、clamav-milter、miler-greylistのソケットを指定する必要があります。しかし、milter-managerを導入することにより、milter-managerのソケットのみを指定するだけですむようになりました。各milterのソケットはmilter-managerが検出するため、typoなどの小さいですが気づきにくいミスに惑わされることがなくなります。
また、ここでは触れませんでしたが、milter-managerは/etc/rc.conf内のXXX_enabled="NO"の設定も検出します。そのため、milterを無効にしたい場合は、他のサーバプロセスと同様に以下のような手順になります。
% sudo /usr/local/etc/rc.d/XXX stop % sudo vim /etc/rc.conf # XXX_enabled="YES" => XXX_enabled="NO"
後は、milter-managerの設定を再読み込みすれば、milterが無効になったことを検出し、無効になったmilterとは接続しなくなります。
% sudo /usr/local/etc/rc.d/milter-manager reload
Postfixのmain.cfを変更する必要はありません。
FreeBSD上でmilterを複数使っている場合は、milter-managerを導入して、管理コストを削減することができます。
milter managerは運用を支援するツールも提供しています。インストールは必須ではありませんが、それらを導入することで運用コストを削減することができます。それらのツールもインストールする場合は FreeBSDへインストール(任意) を参照してください。