postfix + SMTP-AUTHへの切り替え

まずsendmail, fetchmailを外して、postfixfetchmailを導入する。
次にpostfixSMTP-AUTH対応に。

http://www.miloweb.net/smtpauth.html
http://www.miloweb.net/mail.html

を参考にさせていただき、概ねうまく行った。
postfix 2.0.20-0vl5.src.rpmを入手して、ただし、cyrus-sasl、cyrus-sasl-develはバイナリRPMを導入し、postfix 2.20はsrc.rpmを手にいれてこれで作業した。db4-devel, MySQL-devel, openldap-devel pcre-develをインストールしてrpm パッケージを作成したところ無事にインストールできた。

ページにあること以外でハマッタのは、cyrus-saslのパスワード設定で/etc/sasldbがうまくできなかったこと。

# saslpasswd -c -u `postconf -h myhostname` ユーザーID
Password:******
Again (for verification):******
saslpasswd: generic failure

と言われてしまう。myorigin = smtpd_sasl_local_domain = DOM
でないとだめと言う記述が

http://64.233.179.104/search?q=cache:Is1SHPddAM4J:www.matthiola.com/savablog/archives/200310/262318.html+/etc/sasldb+create+&hl=ja&lr=lang_ja&client=firefox-a

にあったので、/etc/postfix/main.cfをそのようにしたらうまくいった。

つぎに、postfixの設定であるが、SMTP-AUTHをいれるので不正経由のブロックは厳しく設定する必要がない、利用環境のローカルネットにはDNSがないため、逆ひきできないホストからの接続を許可しないと行けなくなる。これらのことから、/etc/postfix/main.cf の修正(後半部分)は

# HELO コマンドでホスト名を通知しないホストの接続を拒否
smtpd_helo_required = yes

# SMTP の VRFY コマンドを使用不可にする
disable_vrfy_command = yes

# RFC822 で定義されている書式に適合しないメールアドレスが
# 通知された場合、受信を拒否
strict_rfc821_envelopes = yes

#この2つに「 no 」を指定すると何でもかんでも転送拒否してしまう。
allow_percent_hack = yes
swap_bangpath = yes

#ソース・ルート形式で指定されている宛先メールアドレスを拒否。
allow_untrusted_routing = no

#Postfix サーバへの接続は、
#1.SMTP-AUTHで認証できれば許可
#2.自サイトのネットワークから(localhostのみ)無条件で許可、
#3.IP アドレスからホスト名への逆引きができないホストを拒否
#4. それ以外は許可(他からメール到着を想定)
smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks,reject_unknown_client, permit

#ホスト名が正しい書式でホスト名を通知してきたホストのみ接続を許可
#smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, reject_unknown_client, permit
smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unknown_client, permit

#smtpd_recipient_restrictions = permit_mynetworks, reject_sender_login_mismatch, check_relay_domains
#smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains

#実際には存在しないドメイン名が送信元メールアドレスに使われているメールの受信を拒否
#smtpd_sender_restrictions = reject_unknown_sender_domain, reject_sender_login_mismatch
smtpd_sender_restrictions = reject_unknown_sender_domain

# SMTP の ETRN コマンドの使用をホスト名が不正(妖しげ)なホストには使用不可としている
smtpd_etrn_restrictions = permit_mynetworks, reject_invalid_hostname

# mail box size が50MBに制限されるのを避ける
mailbox_size_limit = 0

# SMTP AUTHの利用を設定
smtpd_sasl_auth_enable = yes

# SASL で認証する local domain
smtpd_sasl_local_domain = $myhostname

# 認証無しでも許可するネットワーク
#mynetworks = 192.168.0.0/24, 127.0.0.0/8
mynetworks = 127.0.0.0/8

# リレーを許可するものを設定する。
#1.SMTP認証( SMTP-AUTH )を通過したものを許可
#2.「mynetworks」で設定されたネットワークからの接続を許可
#3. ホスト名と転送先ドメインとして許可されているドメインが
#   宛先メールアドレスに指定されているものを受信
#4.それ以外は拒否することを設定している
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

# 匿名での接続を拒否する。下記のようにnoplaintextと記入するとPLAIN
#での認証を拒否する。
smtpd_sasl_security_options = noanonymous, noplaintext