さくらの VPS での Postfix と Dovecot によるメールサーバーの構築法を説明します。
記事を書いた後に間違いがないか一応検証済みです。
うまく動かない場合にはコメント欄からご指摘ください。
この記事を書くに当たり使用したバージョンはそれぞれ以下の通りである。
●Postfix 2.6.6
●Dovecot 2.0.9
インストール後であれば、次のコマンドでバージョンを確認できる。
●smtpd_sasl_type [ja] Postfix SMTP サーバが認証に Dovecot を使うように設定している。 ●smtpd_sasl_path [ja] Dovecot に認証を依頼するための追加の設定を行っている。 ●smtpd_sasl_security_options [ja] 匿名での認証を禁止する設定を行っている。
●smtpd_tls_security_level [ja] Postfix SMTP サーバーの SMTP TLS セキュリティレベルの設定。 STARTTLS のサポートをクライアントに通知するが、強要はしないように設定している。 ●smtpd_tls_key_file [ja] 作成しておいた秘密鍵を指定する。(PEM フォーマット、暗号化無し) ●smtpd_tls_cert_file [ja] 自己署名証明書を指定する。
●virtual_mailbox_domains [ja] ドメインのリストを指定する。それらはこのメールサーバーが最終配送先となる。 ●virtual_mailbox_base [ja] $virtual_mailbox_maps テーブル検索結果の全てのパスに付けられるプレフィックス。 ●virtual_mailbox_maps [ja] 受信したメールのアドレス毎の、保存するディレクトリの参照方法を指定する。 $virtual_mailbox_base がプレフィックスとして付加される。 ●virtual_uid_maps [ja] MTA が受信者のメールボックスへの書き込みに使用する受信者ごとの uid を持つ検索テーブル。 ●virtual_gid_maps [ja] MTA が受信者のメールボックスへの書き込みに使用する受信者ごとの gid を持つ検索テーブル。 ●virtual_alias_maps [ja] メール転送の設定を記述したファイルを指定する。
$ postconf mail_version
mail_version = 2.6.6
$ dovecot --version
2.0.9
Dovecot のバージョン1と2では設定ファイルの構成や設定の内容に差異があるので注意が必要である。
設定方針
(一)バーチャルメールボックスを利用し、メールアカウントと Unix ユーザーアカウントとを分けて管理する。
(二)自サーバ宛のメールの配送と、サブミッションポート経由で SSL + SMTP AUTH で認証されたクライアントからの外部へのリレーのみを許可する。
(三)SMTP AUTH の認証に使うアカウントとバーチャルメールボックスのアカウントは Dovecot で一元管理する。
※全ての設定が完了し、メールの送受信ができるようになったら、最後にもう一度 /var/log/maillog を見て、warning などが無いか確認してください!
ホスト名の設定
まずはサーバーのホスト名を設定する。デフォルトのlocalho
st.localdomain
のままでは、spamhaus.org のリストに載ってしまい、そのリストを利用しているメールサーバー︵例えば Windows Live Hotmail︶にメールが届かなくなってしまうためである。
/etc/sysconfig/network の HOSTNAM
E=localhost.localdomain
のところを www9999xx.sakura.ne.jp 形式のドメインに変更すれば良い。
HOSTNAME=www9999xx.sakura.ne.jp
※後で設定する virtual_mailbox_domains と mydestination の重複を防ぐため、ここには独自ドメインを指定しない。
設定の変更を反映させるためにサーバーを再起動する。
$ reboot
この設定を行わず、spamhaus.org のリストに載ってしまった状態で hotmail にメールを送ると、次のようなメッセージが返ってくる。
550 OU-001 (SNT0-MC4-F25) Unfortunately, messages from xxx.xxx.xxx.xxx weren't sent.
この場合、リストから消してもらう手続きが必要になる。
参考
hotmailにメール送ったら550 OU-001とか言って戻ってくる
パッケージのインストール
yum でインストールする。cyrus-sasl-md5 は SMTP AUTH で CRAM-MD5 による認証を行う為に必要となる。$ yum install postfix dovecot cyrus-sasl-md5
次に、sendmail が動いている場合にはそれを停止し、自動起動の設定を解除し、さらにサーバーで使う MTA を postfix に設定する。
ただし、さくらの VPS には最初から sendmail がインストールされていないので、この手順は飛ばしてよい。
$ /etc/init.d/sendmail stop
$ chkconfig sendmail off
$ alternatives --config mta
There are 2 programs which provide 'mta'.
Selection Command
-----------------------------------------------
*+ 1 /usr/sbin/sendmail.sendmail
2 /usr/sbin/sendmail.postfix
Enter to keep the current selection[+], or type selection number: 2
それではさっそくローカルでの配送が出来るかテストしてみよう。
まずは postfix を起動し、ついでに自動起動の設定も行っておく。
$ /etc/init.d/postfix start
$ chkconfig postfix on
次に sendmail コマンドで root ユーザー宛にメールを送ってみる。
$ sendmail root
From: root
To: root
Subject: test
test
.
受け取ったメールは mail コマンドで確認できる。
次の様にメールが届いていれば成功である。
$ mail
Heirloom Mail version 12.4 7/29/08. Type ? for help.
"/var/spool/mail/root": 1 messages 1 unread
>N 1 root@www9999ue.sakur Wed May 16 12:30 14/473 "test"
&q
メールが届いていなかった場合には、/var/log/maillog を見て問題を解決する。
※この後の設定においても、期待通りに動かなかった場合にはこのログファイルを見て対処していくことになる。
それではわかりやすいところから準備を進めて行こう。
バーチャルメールボックス管理ユーザーの作成
バーチャルメールボックスを読み書きするための Unix ユーザーを作成する。 ここでは vmail というユーザーを作成し、UID/GID はわかりやすいように 10000 にする。 また、バーチャルメールボックスのメールは /var/mail/virtual ディレクトリ以下に保存することにし、ホームディレクトリをそこに設定する。 ログイン出来る必要は無いので、シェルは /sbin/nologin に設定する。$ groupadd -g 10000 vmail
$ useradd -u 10000 -g 10000 -d /var/mail/virtual -r -s /sbin/nologin vmail
$ mkdir /var/mail/virtual
$ chown vmail:vmail /var/mail/virtual
$ chmod 700 /var/mail/virtual
これらの設定はこの通りでなくても構わないが、後の設定で使うので、変更した場合には設定内容を適切に読み替えること。
バーチャルメールボックスのアカウントの設定
それでは次にバーチャルメールボックスのアカウント、即ち、メールアカウントの設定を行う。 バーチャルメールボックスのアカウントは Unix ユーザーとは別に /etc/dovecot/passwd というファイルで管理していくことにする。 ︵このファイル名が気に入らなければ好きなファイル名に変更して良いが、その場合は後の設定を適切に読み替えること。︶ メールクライアントとのメール送受信時の認証に、ここで設定したユーザー名とパスワードを使うことになる。 /etc/dovecot/passwd ファイルにはパスワードのハッシュ値を記述するため、まずはそれを取得しよう。 それには doveadm pw コマンドを使用する。︵Dovecot の以前のバージョンでは dovecotpw コマンドが使われていた。︶$ doveadm pw
Enter new password:
Retype new password:
{CRAM-MD5}836e14f966d9af5b2c7a1a07a45292b4b0a1805bc050343491cbc18f0539962f
それでは /etc/dovecot/passwd ファイルを作成する。
このファイルにはユーザー名とパスワードのハッシュ値を ":" で区切って記述する。
後の設定で、このファイルを Dovecot が認証に使う情報として指定する。[詳細]
test@example.com:{CRAM-MD5}836e14f966d9af5b2c7a1a07a45292b4b0a1805bc050343491cbc18f0539962f
test2@example.com:{CRAM-MD5}836e14f966d9af5b2c7a1a07a45292b4b0a1805bc050343491cbc18f0539962f
上記の例では、test@example.com と test2@example.com の二つのメールアカウントを作成している。
ここからの設定例では、メールアドレスに使う独自ドメインを example.com としている。
※したがって、実際の設定では example.com の箇所を各自がメールアドレスに使う独自ドメインに置き換えること。
また、メールアドレスとメールを保存するディレクトリとの対応を記述したファイルを用意する必要がある。
/etc/postfix/vmailbox ファイルを作成し、以下の内容を記述する。
test@example.com example.com/test/Maildir/
test2@example.com example.com/test2/Maildir/
このファイルを編集した後は postmap コマンドでデータベースに変換する。
$ postmap /etc/postfix/vmailbox
エイリアスの設定
.forward の様にメールの転送を行いたい時、この設定を行う。バーチャルメールボックスに届いたメールを転送するには、/etc/postfix/virtual ファイルで設定を行う。 次のように転送元と転送先を空白(半角スペースやタブ)で区切って指定すればよい。 転送先はカンマで区切って複数指定できる。 受信メールアドレスに指定するメールアドレスは、﹁バーチャルメールボックスのアカウントの設定﹂をしていないものでも良い。 [詳細](受信メールアドレス) (転送先1), (転送先2), ...
転送しつつ、元のメールボックスにもメールを残しておきたい場合には、転送先に転送元のメールアドレスを書いておけば良い。(転送の無限ループにはなりません。)
このファイルを変更した後は次のコマンドを実行する。
$ postmap /etc/postfix/virtual
SSL 自己署名証明書と秘密鍵の作成
メールサーバーとメールクライアントの間の通信を暗号化するため、openssl コマンドで自己署名証明書と秘密鍵を作成する。 Common Name には、後で DNS にMXレコードを登録するドメイン名を指定しておくと、 (セキュリティ証明書 (.der) ファイルをメールクライアントにインポートすることで) 自己署名証明書の警告を抑制できる。 次のようにワイルドカードを使って *.example.com の様に指定しておけば良い。$ cd /etc/pki/tls/certs
$ openssl req -new -x509 -nodes -days 365 -out mail.crt -keyout mail.key
Generating a 2048 bit RSA private key
...+++
....+++
writing new private key to 'mail.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:*.example.com
Email Address []:
$ chmod 600 mail.key
セキュリティ証明書 (.der) は次のコマンドで作成できる。
$ openssl x509 -in mail.crt -outform der -out mail.der
Postfix の設定
準備ができたので、次は Postfix の設定を行う。 基本的な設定は/etc/postfix/main.cf
で行い、さらに細かい設定は
/etc/postfix/master.cf
で行う。以下のコマンドを使うとデフォルト値と異なる設定を一覧で確認できる。
$ postconf -n
これらの設定についての詳しい情報は以下のリンク先から得られる。
●Postfix Documentation [日本語訳]
●All main.cf parameters [日本語訳]
●master.cf file format [日本語訳]
main.cf の設定
main.cf で次の設定を行う。inet_interfaces = all
smtpd_banner = $myhostname ESMTP unknown
smtpd_client_restrictions =
reject_rbl_client all.rbl.jp,
reject_rbl_client bl.spamcop.net
# SASL
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_security_options = noanonymous
# TLS
smtpd_tls_security_level = may
smtpd_tls_key_file = /etc/pki/tls/certs/mail.key
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
# Virtual
virtual_mailbox_domains = example.com
virtual_mailbox_base = /var/mail/virtual
virtual_mailbox_maps = hash:/etc/postfix/vmailbox
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
virtual_alias_maps = hash:/etc/postfix/virtual
設定の意味
●inet_interfaces
[ja]
メールを受信するインターフェース。
●smtpd_banner
[ja]
メールサーバーソフト名を隠蔽する設定を行っている。
●smtpd_client_restrictions
[ja]
迷惑メールの受信を拒否する為の設定を行っている。
●smtpd_sasl_type [ja] Postfix SMTP サーバが認証に Dovecot を使うように設定している。 ●smtpd_sasl_path [ja] Dovecot に認証を依頼するための追加の設定を行っている。 ●smtpd_sasl_security_options [ja] 匿名での認証を禁止する設定を行っている。
●smtpd_tls_security_level [ja] Postfix SMTP サーバーの SMTP TLS セキュリティレベルの設定。 STARTTLS のサポートをクライアントに通知するが、強要はしないように設定している。 ●smtpd_tls_key_file [ja] 作成しておいた秘密鍵を指定する。(PEM フォーマット、暗号化無し) ●smtpd_tls_cert_file [ja] 自己署名証明書を指定する。
●virtual_mailbox_domains [ja] ドメインのリストを指定する。それらはこのメールサーバーが最終配送先となる。 ●virtual_mailbox_base [ja] $virtual_mailbox_maps テーブル検索結果の全てのパスに付けられるプレフィックス。 ●virtual_mailbox_maps [ja] 受信したメールのアドレス毎の、保存するディレクトリの参照方法を指定する。 $virtual_mailbox_base がプレフィックスとして付加される。 ●virtual_uid_maps [ja] MTA が受信者のメールボックスへの書き込みに使用する受信者ごとの uid を持つ検索テーブル。 ●virtual_gid_maps [ja] MTA が受信者のメールボックスへの書き込みに使用する受信者ごとの gid を持つ検索テーブル。 ●virtual_alias_maps [ja] メール転送の設定を記述したファイルを指定する。
master.cf の設定
submission ポートを使って送信する時の設定を次のようにする。 ほとんどは既に記述されているので、コメントアウトを解除すれば良い。submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject_unauth_destination
設定の意味
●smtpd_tls_security_level
[ja]
TLS による暗号化を強制する。
●smtpd_sasl_auth_enable
[ja]
Postfix SMTP サーバの SASL 認証を有効にする。
●smtpd_client_restrictions
[ja]
認証に成功したクライアントからのメールのみ受け取る。
●smtpd_recipient_restrictions
[jp]
認証に成功したクライアントのみ SMTP 接続を許可する。
sm
tpd_sasl_auth_enable=yes
を指定したときは、smtpd_recipient_restrictions
に permit_sasl_authenticated
を指定できる。
設定の変更を反映させるため、Postfix を再起動する。
$ /etc/init.d/postfix restart
inet_interfaces
などの設定変更は reload では反映されないので、必ず restart すること。
Dovecot の設定
Dovecot の設定ファイルの場所は以下のコマンドで確認できる。$ dovecot -n | head -1
最近のさくらの VPS であれば、それは /etc/dovecot/dovecot.conf のはずである。
そのファイルから /etc/dovecot/conf.d ディレクトリにある複数の設定ファイルが読み込まれるようになっている。
現在の設定を、幾つもの設定ファイルに順番に目を通す手間を掛けずに、確認するために次のコマンドを利用できる。
$ dovecot -n
このコマンドはデフォルト値と異なる設定を一覧で表示する。
Dovecot の設定に関する詳しい情報は以下のリンク先から得られる。
●Dovecot Wiki
しかし、Dovecot version 1 の Main Configuration にあたるリファレンスが Dovecot 2 にはまだ用意されていないようだ。(2012-05-20 現在)
以下の設定はすべてまとめて dovecot.conf に書いても良いが、せっかく設定ファイルが分かれているので、その意に沿って設定する。
dovecot.conf の設定
これは SMTP AUTH 認証のために必要な設定である。 Postfix のsmtpd_sasl_path
の設定と関係している。
# Postfix SMTP Auth
service auth {
unix_listener /var/spool/postfix/private/dovecot-auth {
group = postfix
mode = 0660
user = postfix
}
}
したがって、これを記述しておかないと次の様なログが /var/log/maillog に出力され、メールを送信できない。
warning: SASL: Connect to private/dovecot-auth failed: Connection refused
fatal: no SASL authentication mechanisms
conf.d/10-mail.conf の設定
メールを保存する場所を $mail_home からの相対パスで指定する。mail_location = maildir:~/Maildir
詳細
conf.d/10-ssl.conf の設定
作成しておいた SSL 自己証明書と秘密鍵を登録する。ssl_cert = </etc/pki/tls/certs/mail.crt
ssl_key = </etc/pki/tls/certs/mail.key
conf.d/10-auth.conf の設定
コメントアウトを解除し、次のように設定する。auth_mechanisms = cram-md5 plain login
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext
詳細
conf.d/auth-passwdfile.conf.ext の設定
認証に使うパスワードファイルを指定する。 即ち、﹁バーチャルメールボックスのアカウントの設定﹂で用意したファイルを指定する。 このファイルに最初から書いてある内容は、コメントアウトなどで無効化しておこう。passdb {
driver = passwd-file
args = scheme=CRAM-MD5 username_format=%u /etc/dovecot/passwd
}
詳細
conf.d/auth-static.conf.ext の設定
userdb の設定で、メールにアクセスするために使うシステムユーザーとグループ、および、ホームディレクトリを指定する。 Postfix のvirtual_mailbox_base
, virtu
al_mailbox_maps
の設定に、Dovecot の m
ail_home
(home
), mail_location
の設定を合わせる。
userdb {
driver = static
args = uid=vmail gid=vmail home=/var/mail/virtual/%d/%n
}
詳細: userdb,
static,
variables
Dovecot を起動し、また、自動起動の設定を行う。
$ /etc/init.d/dovecot start
$ chkconfig dovecot on
iptables の設定
メールの送受信に使用するポートへの接続を許可する。 具体的には、SMTP(25, 587), POP3(110), POP3s(995), IMAP4(143), IMAP4s(993) である。 設定例‥ /etc/sysconfig/iptables の適切な位置に次の行を追加する。-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 110 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 143 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 587 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 993 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 995 -j ACCEPT
設定の変更を反映させるため、iptables を再起動する。
$ /etc/init.d/iptables restart
DNS の設定
pop, imap, smtp, mail などのサブドメインを使うのが一般的なようだ。次の様に設定する。a * IPアドレス
mx mail.example.com. 10
IPアドレス のところには、サーバーのIPアドレスを指定する。
(unknown user: "test")ってなってしまいます
testで送信(test→gmail)→OK test宛に送信(gmail→test)→NG
どうなんでしょうか・・・
/etc/dovecot/passwd ファイルの内容を再度ご確認ください。
test@your.domain に関する設定が記述されていますか?
/etc/dovecot/passwd内で設定はしていたのですが改行していなかったためでした 改行したらすんなり行きました
お騒がせしてスミマセン・・・
なるほど、うまくいって何よりです。
CentOS ならば 64bit でも基本的には同じ手順で良いと思います。 ただ、デフォルトでインストールされているソフトウェアがさくらの VPS とは異なるはずですので、その点は注意が必要です。 Sendmail の停止などが必要かもしれません。
> なかなかできません。
どこがうまくいきませんか?
POP で接続する時の認証がうまくいっていないようです。 認証に関係ありそうな設定(/etc/dovecot/passwd やメールクライアントも含む)を確認し、それらをわざと変更したときの maillog の内容の変化を参考に対応するのが良いと思います。
> dovecot: pop3-login: Aborted login (no auth attempts)
このログだけでは原因の特定が難しいと思いましたので
こちらの設定では、windows live mail では 認証が通らないようなんですが、なにがまちがっているのでしょうか?
Windows Live Hotmail へ送るためには、最近この記事に追加した「ホスト名の設定」を行う必要があります。一番上の方に書いてあるので参考にしてください。 また、既に spamhaus.org のリストに shotaro kawaguchi さんのドメインが登録されていると考えられます。その場合、リストから消してもらう手続きが必要になります。これは「ホスト名の設定」のところの [参考] のリンク先の記事を参考に行えば良いです。
たびたびすみません。 windows live mail の認証方式が APOP か PLAIN とみたのですが、これは関係ありますか?
少し勘違いしておりました。
> windows live mail では 認証が通らない…
とのことですが、何の認証のことでしょうか?
私のマシンで試してみたところ、確かに Thunderbird では簡単にアカウント追加と送受信ができましたが、Outlook ではうまく設定できませんでした。 Outlook 2010 では、メニューバーの [ファイル] → [情報] → [アカウントの追加] → [自分で電子メールや・・・(手動設定)] → [インターネット電子メール] → [詳細設定] → [詳細設定]タブ の辺りで暗号化の種類などを選択できましたが、どうも「アカウント設定のテスト」がうまくいきませんでした。
暗号化接続の種類として SSH や TLS も選択できましたが、軽く調べただけでは正しい設定方法はわかりませんでした。
ピンバック: Hello world! | KHe7@WWW
(設定内容、および、設定変更後の再起動)
■手順
●ホスト名の設定 ●reboot ●パッケージのインストール︵既にインストール済みなので、nothing to doとなります︶ ●/etc/init.d/postfix start ●chkconfig postfix on ご指摘頂いた、確認事項は以下です。 ホスト名 → HOSTNAME=www9999xx.sakura.ne.jp の形で設定しています。 再現性 → 今回も同様に、puttyが止まってしまいました。。 ●/var/log/maillog の内容 → 以下のエラーが表示されていました。 Apr 24 15:00:00 www9999xx postfix/sendmail[1446]: fatal: root(0): error reading input: Input/output error 大変恐縮なのですが、何かヒントでも頂けるととてもありがたいです。 宜しくお願い致します。PuTTY が止まってしまうという現象についてですが、これは接続が断たれることにより止まっているのでしょうか?
入力待ちなど、他の原因で止まっているということはありませんか?
Ctrl + Z や Ctrl + C などにも反応しないのでしょうか?
原因がわかって良かったです!
を実行していかいからではないでしょうか?
同じエラーが出たので調べたところ、 Dovecotの設定でauth-passwdfile.conf.extのuserdbのセクションも上のpassdbと同じ設定に変えてあげないといけないようでした。
main.cf の virtual_mailbox_domains の設定が、<作ったメールアドレス> のドメインと同じになっていることを確認してください。
NORIさん、お返事ありがとうございます!
メールアドレスは、 「xxxx@mail.ドメイン」にしたのですが、
virtual_mailbox_domains =ドメイン から
virtual_mailbox_domains =mail.ドメイン
に変更して、
/etc/init.d/postfix restart
うまくいってよかったです!!
dovecot の conf.d/10-ssl.conf の設定があやしいです。 このファイルで SSL/TLS の設定をしています。
と設定したらどうでしょうか?
すみません、それはちょっとわかりません。
まずは /var/log/maillog を見て、warning などが無いか確認すると良いと思います。