kilin> how to> dovecot/imaps/sendmail/smtps/spamassassin

Linux IMAPサーバー (dovecot/sendmail/spamassassin)

(2009.1.17, 2014.1.11)

imapサーバーをたてimaps対応メーラーでメールの管理。dovecotによるimapsサーバー,sendmailによるsmtpsサーバー,spamassassinによるスパムメール対策。
(環境) CentOS 5.1-5.8

dovecot

rootで(以下プロンプトが#ならroot,$なら普通のユーザー)でdovecotをインストール
# yum install dovecot

dovecot設定ファイルの変更と起動

設定ファイルをバックアップしてから,設定変更.
# cd /etc
# cp dovecot.conf dovecot.cont.org
# vi dovecot.conf
プロトコルの追加(imapsのみ).
# Protocols we want to be serving: imap imaps pop3 pop3s
# If you only want to use dovecot-auth, you can set this to "none".
#protocols = imap imaps pop3 pop3s
protocols = imaps
プレインテキストパスワードを使えるようにする.
# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
#disable_plaintext_auth = no
disable_plaintext_auth = no
SSL/TLSを使えるようにする.
# Disable SSL/TLS support.
#ssl_disable = no
ssl_disable = no
pemファイルを設定する.
# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
#ssl_key_file = /etc/pki/dovecot/private/dovecot.pem
ssl_cert_file = /etc/pki/tls/certs/mail.pem
ssl_key_file = /etc/pki/tls/certs/mail.pem
pemファイルの作り方(国,県,市,組織,部署,メールサーバー名,管理者メールアドレスを入力)
# cd /etc/pki/tls/certs/
# make mail.pem

...

-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Kanagawa
Locality Name (eg, city) [Newbury]:Sagamihara
Organization Name (eg, company) [My Company Ltd]:Kitasato University
Organizational Unit Name (eg, section) []:College of Liberal Arts and Sciences
Common Name (eg, your name or your server's hostname) []:mail.kitasato.com
Email Address []:postmaster@kitasato.com
メールサーバー名は,正確に入れること.
なお,pemファイル,PEM (Privacy Enhanced Mail)形式とは,デジタル証明書(X509証明書)を文字列で表現するフォーマット.ここでのmail.pemは,rootの読み書きだけが許可された(600))デジタル署名,公開鍵と秘密鍵の全ての入ったファイルである.
(注)すでにhttpdのSSLの秘密鍵と証明書が作ってある場合は,それを使う.上記mail.pemのかわりに
ssl_cert_file = /etc/pki/tls/certs/server.crt 
ssl_key_file = /etc/pki/tls/certs/server.key
を指定する.また,SSL証明書を購入した場合は,次のように中間証明書を指定する。
ssl_ca_file = /etc/pki/tls/certs/server-chain.crt

ポート993番のオープン(tcp)

rootでGUIログインして,[システム]-[管理]-[セキュリティレベルとファイヤーウォールの設定]でおこなうか,このHowtoのコマンドメモに載っている方法でおこなう.

dovecot再起動と自動起動の設定

# /etc/init.d/dovecot restart
# /sbin/chkconfig dovecot on
以上で,メールクライアントから,imaps(imap, ssl)でサーバーのユーザに同じユーザ名とパスワードを使って安全にimap接続できるようになる.imap接続なので,ローカルに蓄積していたメールや,他のメールサーバーにためていたメールを,メールクライアントソフトを使って,このサーバー一箇所に移動(コピー)して,安全に蓄積管理できる.バックアップは,ホームディレクトリのMaildirディレクトリをtarでバックアップすればいいだけなので,とても楽である.

sendmailによるsmtps

smtpsを使えば,メールクライアントからメールを送るときに,パスワードを盗まれること無く,安全にメールを送れます.

sendmail-cfのインストール

sendmail.mcからsendmail設定ファイル(sendmail.cf)を作成するのに必要なsendmail-cfをインストールする.
# yum install sendmail-cf

sendmail.mcの編集

sendmail.mc,sendmail.cfのバックアップをとって編集開始.
# cd /etc/mail
# cp sendmail.mc sendmail.mc.org
# cp sendmail.cf sendmail.cf.org
# vi sendmail.mc
外部からの受信を許可.(,Addr=127.0.0.1をトル)
DAEMON_OPTIONS(`Port=smtp, Name=MTA')dnl
SMTP-Authの有効化.(行頭のdnlを削除)
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
pemファイルの指定.(太字部分を追加)
dnl define(`confCACERT_PATH',`/usr/share/ssl/certs')
dnl define(`confCACERT',`/usr/share/ssl/certs/ca-bundle.crt')
dnl define(`confSERVER_CERT',`/usr/share/ssl/certs/mail.pem')
dnl define(`confSERVER_KEY',`/usr/share/ssl/certs/mail.pem')
define(`confCACERT_PATH',`/etc/pki/tls/certs')
define(`confCACERT',`/etc/pki/tls/certs/mail.pem')
define(`confSERVER_CERT',`/etc/pki/tls/certs/mail.pem')
define(`confSERVER_KEY',`/etc/pki/tls/certs/mail.pem')
(注)すでにhttpdのSSLの秘密鍵と証明書が作ってある場合は,それを使う.上記mail.pemのかわりに
define(`confCACERT',`/etc/pki/tls/certs/server.crt')
define(`confSERVER_CERT',`/etc/pki/tls/certs/server.crt')
define(`confSERVER_KEY',`/etc/pki/tls/certs/server.key')
を指定する。SSL証明書を購入した場合は,confCACERTに中間証明書を指定する。
define(`confCACERT',`/etc/pki/tls/certs/server-chain.crt')
SMTPSの有効化.(行頭のdnlを削除)
DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s')dnl
sendmail.cfの書き換え.
# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
SMTP-Authの起動と自動起動設定.
# /etc/init.d/saslauthd restart
# /sbin/chkconfig saslauthd on

procmailrcの作成

(sendmailはMaildir形式に対応していない.その対処)
# vi /etc/procmailrc

SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$HOME/procmail.log
#VERBOSE=ON

465番(smtps)ポートのオープン(tcp)

rootでGUIログインして,[システム]-[管理]-[セキュリティレベルとファイヤーウォールの設定]でおこなうか,このHowtoのコマンドメモに載っている方法でおこなう.なお,メーリングリストを使う場合は,25番(smtp)ポートもあけておく.
以上で,メールクライアントから,smtps(smtp, ssl)でサーバーのユーザと同じユーザ名とパスワードを使ってパスワードを盗まれること無く安全にメールを送れるようになる.メールアドレスは,ユーザ名@サーバ名.送信したメールもホームディレクトリのMaildirディレクトリに蓄積される.

spamassassinによる迷惑メール振り分け

RPMforgeリポジトリを導入して,rootで,spamassassinとspamass-milterをインストール。「milterとは mail filter の略で,Sendmailが開発したメールフィルタプラグインの仕組みです。milterを使うことにより, Sendmail本体を変更せずに、迷惑メールフィルタやウィルスチェッ クなどの機能をSendmailに組み込むことができます。」
# yum install spamassassin
# yum install spamass-milter <- RPMforge
# yum install perl-Encode-Detect <- RPMforge

spamassassinの設定

/etc/mail/spamassassin/local.cfを編集。
# vi /etc/mail/spamassassin/local.cf
# スパム判定基準
required_hits 5
# スパムと判断されたメッセージがレポートメッセージに加工されることを防ぐ
report_safe 0
#rewrite_header Subject [SPAM] <- コメントアウトして件名を書き換えないようにする。

# 日本語メール対応
normalize_charset 1
# Fromヘッダで日本語を使う人が当たり前にいるので必須
score FROM_EXCESS_BASE64  0
# 今後、UTF-8の日本語メールが増えてくることを考慮
score MIME_BASE64_TEXT      0
# 署名の整形のためにスペースを多用することに対応
#score TVD_SPACE_RATIO 0
# MIMEエンコードしていないISO-2022-JPのSubjectを許容する
score SUBJ_ILLEGAL_CHARS 0
score SUBJECT_NEEDS_ENCODING 0

#URL.JP http://www.rbl.jp/index-j.php
#short.rbl.jpとvirus.rbl.jpをまとめて使う
header  RCVD_IN_ALL_RBL_JP   eval:check_rbl_txt('rbl.jp', 'all.rbl.jp.')
describe RCVD_IN_ALL_RBL_JP Received via a relay in all.rbl.jp
tflags RCVD_IN_ALL_RBL_JP   net
score RCVD_IN_ALL_RBL_JP 2.0

# 以下は http://fafdsafasd.domain.com/ を検知する定義
urirhssub URLBL_RBLJP url.rbl.jp. A 2
body URLBL_RBLJP eval:check_uridnsbl('URLBL_RBLJP')
describe URLBL_RBLJP Has URI in url.rbl.jp
tflags URLBL_RBLJP net
score URLBL_RBLJP 4.0

# 以下は http://62.231.95.161/ のようなIPアドレスだけのURLを検知する定義
uridnsbl URLBL_IP_RBLJP url.rbl.jp. TXT
body URLBL_IP_RBLJP eval:check_uridnsbl('URLBL_IP_RBLJP')
describe URLBL_IP_RBLJP Has IP URL in url.rbl.jp
tflags URLBL_IP_RBLJP net
score URLBL_IP_RBLJP 4.0

#リストで間違って登録されてしまっても無視するドメイン名
#uridnsbl_skip_domain livedoor.com reset.jp asahi-net.or.jp hi-ho.ne.jp 2ch.net hatena.ne.
jp
#uridnsbl_skip_domain mixi.jp yahoo.co.jp
次のコマンドでlocal.cfの検証。何もメッセージが出なければok
#spamassassin --lint

spamass-milterの設定

/etc/sysconfig/spamass-milterを編集。
# vi /etc/sysconfig/spamass-milter
#EXTRA_FLAGS="-m -r 15"     <- ①コメントアウトして
EXTRA_FLAGS="-i 127.0.0.1"  <- ②この行を加える。
①コメントアウトすると,SpamAssassinによる件名の書き換え許可,スコア15以上のメール受信拒否の無効化。②指定したネットワーク(自分自身)からのメール送信はspam判定しない。

sendmailの設定

sendmail.mcの最後に以下の2行を加えて,sendmail.cfを更新する。see
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass.sock, F=, T=C:15m;S:4m;R:4m;E:10m')
define(`confINPUT_MAIL_FILTERS', `spamassassin')dnl

procmailの設定

procmailrcに以下を加えて,迷惑メールをJunkフォルダに振り分ける。
# vi /etc/procmailrc

SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
#LOGFILE=$HOME/procmail.log
#VERBOSE=ON

#--- ここから追加 ---

LOCKFILE=$HOME/.lockmail

# メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動
:0fw
*!^X-Spam.*
|spamassassin

# メールヘッダー中に「X-Spam-Status: Yes」の記述があれば「.Junk」ディレクトリにメールを格納
:0
* ^X-Spam-Status: Yes
$MAILDIR/.Junk/

スパムメールの学習,ルールセットの更新

スパムメールの学習
# /usr/bin/sa-learn --spam /home/*/Maildir/.Spam/cur

通常のメールを学習

# /usr/bin/sa-learn --ham /home/*/Maildir/cur               <- 受信トレイ
# /usr/bin/sa-learn --ham /home/*/Maildir/.フォルダ名/cur    
# /usr/bin/sa-learn --ham /home/*/Maildir/.フォルダ名*/cur  <- フォルダ下の全フォルダ 

ルールセットの更新

# sa-update
# /etc/init.d/spamassassin restart <- 更新を反映させるために再起動が必要

これらを cron で毎日定時に実行する。

補足)学習結果を削除して初期化するには /home/ユーザ名/.spamassassin/ にあるファイル

bayes_toks
bayes_seen
auto-whitelist <- もしあれば

を削除して

# sa-learn --clean

起動と自動起動の設定

# /etc/init.d/spamassassin restart
# /etc/init.d/spamass-milter restart
# chkconfig spamassassin on
# chkconfig spamass-milter on

念のため

# reboot

その他

/usr/share/spamassassin/に設定ファイルのサンプルなどが入っている。

参考

CentOSで自宅サーバー構築 (http://centossrv.com/) 2008.5現在
2008.07.10: sendmailとspamassassin(http://www.curs-sytes.com/blog/item/157) 2013.10.15現在
SpamAssassinでスパム対策(http://www.miloweb.net/spamassassin.html) 2013.10.15現在
SpamAssassin によるスパムメール対策(http://linux.kororo.jp/cont/server/spamassassin.php) 2013.10.15現在
CentOS メールサーバー構築(sendmail+Dovecot)(http://dev.halhal.info/archives/11) 2013.10.15現在
URL.JP 2014.1.4
sa-update - automate SpamAssassin rule updates 2014.1