postfix + SMTP-AUTHへの切り替え
まずsendmail, fetchmailを外して、postfixとfetchmailを導入する。
次にpostfixにSMTP-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