30 January 2008

PostfixとDovecotの設定 on Fedora 8

サーバ管理用に、メールシステムを整備する。
プロバイダのSMTPサーバを経由して、インターネット上のアドレスへもメールを送信できるようにする。

Postfix SMTPサーバのインストール


[root@localhost ~]# yum install postfix

設定ファイルの編集

/etc/postfix/main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix ← インストーラが自動的に作成したユーザ
myhostname = localhost.localdomain ← ホスト名.ドメイン名を設定
mydomain = localdomain ← ドメイン名を設定
myorigin = $myhostname ← メール送信時 From欄に設定されるホスト名.ドメイン名を設定
inet_interfaces = all ← 受信制限(今回はFW内で運用する個人サーバのため、allのまま
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/ ← 個人ディレクトリ下に、自動的にMailDirディレクトリが作成される
#mail_spool_directory = /var/spool/mail ← sendmailで使っていたUNIX形式ディレクトリには格納しない(コメントアウト)
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) ← 他のユーザが使う場合は、バージョン名など隠したほうがいいかも
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop

念のために、Postfix専用ユーザが作られているか確認。(Dovecotのインストール後の状態で、Dovecotユーザも作成されている)

/etc/passwd

postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dovecot:x:97:97:dovecot:/usr/libexec/dovecot:/sbin/nologin

メールサーバの切り替え


[root@localhost ~]# /usr/sbin/alternatives --config mta
2 プログラムがあり 'mta' を提供します。

選択 コマンド
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: 2

サービスの自動起動を念のため確認


[root@localhost ~]# chkconfig --list | grep -e postfix
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Dovecot IMAP/POP3 サーバのインストール


[root@localhost ~]# yum install dovecot

設定ファイルの編集

/etc/dovecot.conf

protocols = pop3 ← 今回は内部管理用なのでPOP3しか使わない
mail_location = maildir:~/Maildir

サービスの自動起動設定を行う


[root@localhost var]# chkconfig dovecot on

[root@localhost var]# chkconfig --list | grep -e dovecot
dovecot 0:off 1:off 2:off 3:off 4:off 5:off 6:off

rootあてのメールを、POP3でアクセス可能なユーザに転送

rootのメールボックスはPOP3で開くことができないので、管理用のユーザにメールを全て転送する。

設定ファイルの編集

/etc/aliases

root: 転送先のユーザ名

インターネット宛てのメールを、プロバイダのSMTPサーバに転送する設定

プロバイダのSMTPサーバは、ユーザ名:パスワードでの認証に加えて、メールのFROM欄が有効なユーザのアドレスかをチェックしている。
その方式に対応した設定を行う。

設定ファイルの編集

/etc/postfix/main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
mail_owner = postfix
myhostname = localhost.localdomain
mydomain = localdomain
myorigin = internet-provider.ne.jp ← 実際のプロバイダのホスト.ドメイン名をFROM欄に設定する
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, internet-provider.ne.jp ← 内部宛のメールも、ドメイン名が付くことへの対策
relayhost = [smtp.internet-provider.ne.jp]:587 ← プロバイダのSMTPサーバとポート番号
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
#mail_spool_directory = /var/spool/mail
smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop

smtp_sasl_auth_enable = yes ← SMTP認証の設定を追加
smtp_sasl_password_maps = hash:/etc/postfix/isp_auth ← SMTP認証のユーザ名:パスワードの格納されたファイル
smto_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = cram-md5, login, plain ← SMTP認証の方式

サブミッションポートの場合は、ポートを開く設定変更

/etc/postfix/master.cf

submission inet n - n - - smtpd ← この行を有効化

SMTP認証の方式は、telnetでプロバイダのSMTPサーバに接続してみて確認する。


[root@localhost ~]# telnet smtp.internet-provider.ne.jp 587
Trying 172.198.10.1...
Connected to smtp.internet-provider.ne.jp.
Escape character is '^]'.
220 smtp.internet-provider.ne.jp ESMTP Sendmail 8.13.6/8.13.6; Wed, 30 Jan 2008 23:23:05 +0900 (JST)
ehlo localhost.localdomain
250-smtp.internet-provider.ne.jp Hello proxy.internet-provider.ne.jp [172.198.101.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN ← SMTP認証の方式
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 smtp.internet-provider.ne.jp closing connection
Connection closed by foreign host.

ユーザ名とパスワードの格納されたファイルを作成する

/etc/postfix/isp_auth

[smtp.internet-provider.ne.jp]:587 user@internet-provider.ne.jp:password

データベースファイルに変換する


[root@localhost postfix]# /usr/sbin/postmap isp_auth

SMTPのクライアント認証を追加

そのマシン自体に着信するメール以外は、認証されないと送信できない設定。

/etc/postfix/main.cf

# SMTP Authorization with SASL
# (incoming smtp access to this Postfix)

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $mydomain
smtpd_recipient_restrictions = permit_sasl_authenticated,reject
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

saslauthd の設定で、Linuxのユーザ名とパスワードで認証するよう設定する。
(CLAM-MD5で認証したい場合は、saslpasswd2でパスワードDBファイルを作り、それを利用する)

/usr/lib/sasl/smtpd.conf

# Authenticate with Linux user/password
pwcheck_method: saslauthd

# Authenticate with independant db made with saslpasswd
#pwcheck_method: sasldb

saslauthdサービスを自動起動するよう設定する。