[PostfixAdmin]メールサーバーの建て方

先日の作業はメールサーバーの構築だったんですが、久々すぎて手順をすっかり忘れていました。
手順なんて調べればいくらでも出てきそうですけれど、リマインドも兼ねて手順を書いておきます。
前提として、

  • サーバー環境はCentOS6、root権限あり
  • なるべくyumパッケージを利用する
  • アカウントとメール転送の管理をWeb上から行えるようにする。
    Apacheは既に動いており、PostfixAdmin用にSSL付VirtualHostを追加可能。

以上の条件から、使用するパッケージは Postfix+Dovecot+PostfixAdmin+MySQL に決まり。

以下、ドメインは example.com として解説します。

Directory

まずメールを保存するアカウントを用意します。名前はmailboxとしましょう。
ユーザーidは500番からとなっているので、それより少しだけ若い499……は使われていたので498で作ります。
グループidはユーザーidと同じにする必要は無いのですが、わかりやすくするため同じにしておきます。
(青字が入力)


メールを保存する場所ですが、今回は容量に余裕のある /home 下にします。
今作ったアカウントのホームディレクトリ /home/mailbox 以下がいいでしょう。
ここでは /home/mailbox/domains/<domain>/<user>/ で考えます。
メール受信時に自動的に作成されるようですので、特に改めて作成はしません。

MySQL

メールボックス情報(ドメイン、アカウント、転送)を管理するDBMSとしてMySQLを導入します。
といっても作業対象サーバーでは入ってたのですが、入っていなければyumで導入して起動します。
(青字が入力、赤字は注釈)


メールシステムで使うためのアカウントとDBを作成します。
アカウント名は mailsystem DB名は postmap としましょうか。password の部分は適当なランダム文字列に変えてください。


Apache

PostfixAdmin を公開するためのサブドメインを作ります。
既存のドメイン内のURLに置く場合は設定方法が変わりますが、ここでは触れません(ヒントはAlias)。
PostfixAdminを置く場所は mailbox のホームを利用して /home/mailbox/PostfixAdmin としましょう。

ApacheにVirtualHostを登録します。 ドメインですが今回は、SSLを使う場合はあまり自由が利かない(ワイルドカード証明書は高く、通常証明書なら追加発行が必要)ため example.com を使い、443以外のポート番号を割り当てます。たとえばSMTPポートは25なので、HTTPSの443とくっつけて25443とか。
そうするとURLは https://example.com:25443/ になります。
Apacheに追加する設定はこんな感じ。


SSL鍵に関するパス(SSLCertificateで始まるキーの値)は実際の鍵ファイルのパスに変更してください。
ログファイル名(ErrorLogとCustomLog)は管理者が識別できるなら何でもいいです。

なお、*.example.com のワイルドカード証明書があるか、Server Name Indicationが使用可能で mail.example.com のSSL証明書を別途用意してもよい場合は、 mail.example.com のサブドメインで公開することもできます(ただしDNS設定変更が別途要ります)。
その場合、上の緑の部分を以下のように差し替えます。
(赤字は注釈なので、実際には記述しない)


この設定だと https://mail.example.com/ でアクセスできます。

設定を投入したらApacheに反映します。
(青字が入力、赤字は注釈)


Apacheを再起動すると、新しいURLにアクセスできるはずです。
ファイルが無いので初期状態ページが表示されるだけですが。

PostfixAdmin

PostfixAdmin を導入します。
PostfixAdminを置く場所は mailbox のホームを利用して /home/mailbox/PostfixAdmin としましょう。

パッケージはSourceForgeのサイトからダウンロードします。サイトに行き【sf Download】というボタンを押すとダウンロードページに行きダウンロードが始まりますが、ダウンロードをキャンセルしてdirect linkを右クリックして リンクURLをコピー すると、wgetコマンドでダウンロードするためのURLが得られるはずです。
(この手順に従う人が古いバージョンを取得しないよう、下にはあえてURLそのものは書きません)
記事執筆時点の最新版はバージョン2.3.6でしたので、それをwgetで取得し展開します。URLに & が含まれるとコマンドが誤動作を起こす(シェルが解釈しちゃう)ので、クォーテーションで囲むのはさりげに重要。


設定ファイル config.inc.php を編集します。以下、変更箇所のみ解説。 (青字が入力した内容、赤字は注釈)


設定したら、 PostfixAdmin のディレクトリをドキュメントルートに載せます。


PostfixAdminがApacheで公開されるようになったので、 https://example.com:25443/setup.php へアクセスします。
Postfix Admin Setup Checker なるものが表示されるので、各ステータスがOKなのを確認します。エラーがある場合は、不足するパッケージを導入したり設定を修正したりして、エラーを改修してください。
ページの一番下に Change setup password と書かれたところに適当なパスワードを入れるとセットアップ用パスワードが変更……されません。
入力するとこんな文字が出てきます。


さっき設定ファイル中で空のままにしていた $CONF['setup_password'] に、ここで書かれてるランダムな文字列を設定します。
そして同じページへ再アクセスすると、一番下の部分が Create superadmin account に変わっています。
さっき入力したパスワード、作成したい管理アカウントの名前と、そのアカウントのパスワード(2回)を入力して 管理者追加 を押すと、 PostfixAdmin の管理者が作成できます。
(DBの作成や設定をミスしていると、作成できないかもしれません)

https://example.com:25443/ のほうで、作成した管理者アカウントでログインしてみて、入れることを確認しましょう。
入れたら、 setup.php のアクセス権を 600 とかに変えて、管理者の作成ができないようにしてしまいましょう。

最初はメールアドレスどころかドメインも空っぽなので、メールドメイン example.com を登録します。
そして送受信のテストにも必要ですので、メールアカウントを1つ作ります(たとえば test@example.com とか)。[ようこそメールの送信]チェックボックスは、Postfixをまだセットアップしていないので機能しません。入れないように。
(PostfixAdminの操作説明は省きます)

Dovecot

PostfixがSMTP認証するのにDovecotの機能を利用するため、こっちを先に入れます。
MySQLと同じくyumから。現在バージョン2.0.9でした。あとMySQLアクセスするため dovecot-mysql パッケージも入れます。


Dovecot の設定ファイルは /etc/dovecot/dovecot.conf/etc/dovecot/conf.d/*.conf に分散されていますが、管理を面倒にしないために
既存ファイルの修正は最小限にして、 /etc/dovecot/dovecot_local.conf を作ってそこで追加の設定をします。
あとMySQLから情報取得するための設定を/etc/dovecot/dovecot_mysql.confに入れます。

/etc/dovecot/dovecot.conf


/etc/dovecot/conf.d/10-auth.conf


/etc/dovecot/conf.d/10-ssl.conf


/etc/dovecot/dovecot_local.conf(新規作成)


/etc/dovecot/dovecot_mysql.conf(新規作成)


dovecot_local.conf で設定するSSL証明書ですが、ApacheやPostfixと異なり、CA証明書を登録する設定項目がありません。
ではどうするかというと……1ファイルにサイト証明書とCA証明書を一緒に入れてしまうのです。
テキストエディタで作ってもいいですし、コマンド一発でやるならcatで


とすればいいです。
ただし example.com.crt ファイル中の最後の文字が改行ではない場合、出来上がった example.com.chain.crt ファイルは故障してしまいますので気をつけてください。
その場合は作成コマンド(例)はこうなります。


設定したら起動します。


さきほどPostfixAdminで作ったアカウント test@example.com を使って、POPアクセスが可能かどうか確認します。注意点として、

  • SSLでしかアクセスできない(Gmailと同じ?)
  • POPアカウント名=メールアドレス
  • メールは一通もない。Postfix未整備なので送信も受信もできない。

なので、あくまでPOPアクセスしてエラーが出ないことだけを確認します。

Postfix

ようやくPostfixを入れます……といきたいですが、今回は初めから入っていたりします。
Linuxは何らかのSMTPサーバーが入っており、ローカル専用で動いているのが慣例なので、そこにPostfixが採用されている場合もあります。
ので、Postfixが入っていない場合、入っているSMTPサーバーを削除してからPostfixを導入しないといけません。
今回その手順は省略します。めんどいので。

設定変更に入りますが、そういった事情でPostfixが既に動いている場合、いったん止めたほうがいいかもしれません。


設定ですが、 /etc/postfix に色々入っていますが、重要なのは main.cf と master.cf の2つ。
あとMySQLへのアクセス用に3ファイルを追加します。

/etc/postfix/main.conf(編集要点のみ記述、赤字は解説)


/etc/postfix/master.conf(編集要点のみ記述、赤字は解説)


/etc/postfix/mysql_virtual_alias_maps.cf(新規作成)


/etc/postfix/mysql_virtual_domains_maps.cf(新規作成)


/etc/postfix/mysql_virtual_mailbox_maps.cf(新規作成)


設定したら、Postfixを起動します。


Postfixを起動するとメールの送受信が可能になるので、テストします。
注意点として、基本的に送信もSSLと認証を使わないと行えないのと、DNS設定されていない場合は外部SMTPサーバーからはメールが届きません

  • test@example.com から test@example.com にメールを送り、送受信ともに可能か
  • test@example.com から外部のメールアドレスにメールを送り、正しく配送されるか。
  • メールソフトのSMTP設定で【SSL使用】と【SMTP認証】を外して、test@example.com にメール送信可能か。
  • メールソフトのSMTP設定で【SSL使用】と【SMTP認証】を外して、外部のメールアドレスにメールを送り、正しく拒否されるか

上記テストが全て通れば一応メールサーバーは完成です。

DNS設定変更

完成したメールサーバーを実際に運用するために、DNSにMXレコードを登録します。
これをやらないと外部メールサーバーからメールが届きません。

設定の仕方はここでは触れません。ドメイン業者ごとに微妙に違いますし、業者に問い合わせてください。
設定後、各サーバーのDNS(リゾルバ)に反映されるまでは時間がかかります。
自分のサーバー上で反映されたかどうかは、以下のコマンドを打つと確認できます。


DNS設定がインターネット内に充分に反映されたら、最後の試験を行います。

  • 外部サーバーのメールアカウントから test@example.com にメールを送り、正しく配送されるか。

メールが届いたら、メールシステムは完成です。
お疲れ様でした。


投稿者:

さみどり

さみどり

パラファミリーの技術担当です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です