Postfix+Dovecot+RainloopでWebメール構築

はじめに

目的:MTAにPostfix、POP3/IMAPサーバーにDovecotを使用し、Rainloopで接続するWebメール環境を構築する。

POP3/IMAPポートは外部に開放せず、DovecotにはRainloopを通してのみ接続する。
RainloopページにはApache2側でIPアドレス制限をかけてセキュリティを高める。
SMTPポートは外部に開放するが、SMTP-Authを用いてメール送信時の踏み台化を防ぐ。

Postfix:2.9.6
Dovecot:2.0.19
Rainloop:1.9.3.365
OS:Ubuntu 12.04 LTS

LAMP環境はすでに構築済みとする。

以下のドメイン名・ユーザー名で構築することとする。

ドメイン名:hoge.com
ユーザー名/パスワード:hoge/hagehage

Postfixの設定

いわゆるSMTPサーバー。ポート25を使用して、外部のSMTPサーバーからのメール受信や、外部SMTPサーバーへのメール送信を行う。MTA(Message Transfer Agent)とも呼ばれる。

セキュリティに無頓着だとスパムメールの送信拠点として悪用されてしまう。今回は、メール送信時にもユーザー名/パスワード認証が必要なSMTP-Authを利用する。

インストール

apt-get経由でインストール可能。

# apt-get install postfix

設定ファイル編集

ドメイン名の書き換え、SMTP-Auth有効化、最低限のスパム対策を施す。
該当箇所のコメントを外し、必要であれば編集・追記する。

# vi /etc/postfix/main.cf
#基本設定
myhostname = hoge.com
mydomain = hoge.com
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relayhost =
relay_domains = $mydestination
home_mailbox = Maildir/ #ユーザーディレクトリ内にメールが格納される
mynetworks = 127.0.0.0/8
inet_interfaces = all
inet_protocols = ipv4

#SMTP-Auth設定(追記する)
#認証にはdovecotを参照させる(Dovecotと同じユーザー名/パスワードで認証可能にする)
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

#スパム対策(追記する)
smtpd_etrn_restrictions = reject
smtpd_helo_required = yes
disable_vrfy_command = yes

再起動

Postfixを再起動させて設定を反映させる。
まだDovecotが無いので動作確認はできない。

# /etc/init.d/postfix restart

Dovecotの設定

DovecotはPostfixが保存したメールをメーラーへと渡すPOP3/IMAPサーバー。
この時のDovecotの認証方法をそのままPostfixのSMTP-Auth認証時に参照させる。

インストール

apt経由でインストール可能。”install dovecot”では見つからないので注意。以下の3つをインストールする。

# apt-get install dovecot-common dovecot-imapd dovecot-pop3d

認証方法を設定する

Dovecotの認証にはいくつかの方法があるが、最もわかりやすいパスワードフアイルを参照する方法(auth-passwdfile)で設定する。OSのpasswdファイルと似た書式でDovecot専用のパスワードファイルを作製し参照させる。

# vi /etc/dovecot/conf.d/10-auth.
disable_plaintext_auth = no   #編集
auth_mechanisms = plain login  #編集 

#!include auth-deny.conf.ext
#!include auth-master.conf.ext
!include auth-system.conf.ext
#!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
!include auth-passwdfile.conf.ext #この行を有効にする
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

パスワードファイルの参照先を設定

# vi /etc/dovecot/conf.d/auth-passwdfile.conf
passdb {
 driver = passwd-file
 #args = scheme=CRYPT username_format=%u /etc/dovecot/users
 args = /etc/dovecot/users #任意の場所
 }
userdb {
 driver = passwd-file
 #args = username_format=%u /etc/dovecot/users
 args = /etc/dovecot/users #上と同じ任意の場所
 }

パスワードファイルを用意

Dovecotのパスワードフアイルは暗号化してから記載する。
ユーザー名:hoge、パスワード:hagehageの時の暗号化文は以下のコマンドで取得できる。

# doveadm pw -s DIGEST-MD5 -u hoge -p hagehage
{DIGEST-MD5}8687f71fc51f3392269ee94cbc1d33f1

参照先として指定した場所にパスワードファイルを作製する。
(ユーザー名):(暗号化済みパスワード) の形式で記載する。

# vi /etc/dovecot/users
hoge:{DIGEST-MD5}8687f71fc51f3392269ee94cbc1d33f1

再起動

Dovecotを再起動し設定を反映させる。

# /etc/init.d/dovecot restart

動作確認

telnetで接続してPostfix・Dovecot認証の動作確認を行う。

POP3動作確認

telnetで接続して認証確認をする。
POP3は平文なので、そのままユーザー名とパスワードを打てば良い。

$ telnet hoge.com 110
USER hoge
+OK
PASS hagehage
+OK Logged in. ←認証OK
QUIT
+OK Logging out.

ここで失敗する場合は、パスワードファイルが正しく指定されているか、パスワードファイル内の記述が正しいかを確認する。

SMTP-Auth動作確認

SMTP-Authには暗号化済みのユーザー名/パスワード文が必要。次のコマンドでユーザー名:hoge・パスワード:hagehage時の暗号化済み文を取得しておく。

$ perl -MMIME::Base64 -e 'print encode_base64("hoge\0hoge\0hagehage");'
aG9nZQBob2dlAGhhZ2VoYWdl

telnetで接続して確認

$ telnet hoge.com 25
EHLO hoge.com
250-hoge.com
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN ←SMTP-Authが有効であることを確認
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN aG9nZQBob2dlAGhhZ2VoYWdl
235 2.7.0 Authentication successful ←認証OK
QUIT
221 2.0.0 Bye

ここで失敗する場合は、Postfixの認証がDovecot参照に設定されているか確認する。

Rainloop設定

メールの送受信を行うメーラーとして、WebメーラーのRainloopを設置する。
設置はhttp://xmodulo.com/rainloop-webmail-ubuntu-server.htmlのガイドに従えばOK。

ダウンロード

http://www.rainloop.net/downloads/より最新版をダウンロードしてくる。

# mkdir /var/www/rainloop
# cd /var/www/rainloop 
# wget http://repository.rainloop.net/v2/webmail/rainloop-latest.zip
# unzip rainloop-latest.zip
# rm rainloop-latest.zip

パーミッション設定

ガイドに従いパーミッションを設定する。

# cd /var/www/rainloop
# find . -type d -exec chmod 755 {} \;
# find . -type f -exec chmod 644 {} \;
# chown -R www-data:www-data /var/www/rainloop

Mysqlユーザー作製

アドレス帳で使用するMySQLデータベースを設定する。
MySQL serverにアクセスし、データベース”rainloop”とユーザー”rainloop”・パスワード”passwd”を作製する。

# mysql -u root
mysql> create database rainloop;
mysql> create user rainloop identified by 'passwd';
mysql> grant all privileges on rainloop.* to rainloop;

動作確認と環境設定

http://hoge.com/rainloop/?admin/へアクセスし、
管理者アカウント:admin/12345でログインできる事を確認する。クリップボード01

管理者としてログインできたら最低限の初期設定を済ませる。

管理者アカウントのパスワードを変更する。
Contactsで用意したMySQLアカウントを設定する。
Domainsでhoge.comを登録し、使用するユーザー名(hoge)をwhitelistへ登録しておく。
その後、http://hoge/com/rainloopにアクセスし、hoge/hagehageでログイン出来ることを確認する。

以上でメールサーバーおよびWebメールの設定が完了した。
iptablesでポート25を開放した後、hoge@hoge.comへメールを送ればrainloop上で閲覧・返信できる。

RainloopのIPアドレス制限

RainloopなどのWebメーラーをメールサーバーと同一サーバー上に設置すると、POP3やIMAPポートを外に公開しなくてもよくなるため、外部メーラーを使うよりセキュアに運用できる。

しかし、Rainloopのログインページから不正アクセスされては意味が無いので、多少の防衛策は張っておく。Rainloopディレクトリに.haccessを設置し、怪しげなアクセス元は弾くようにしておく。

# vi /var/www/rainloop/.htaccess
order deny,allow
deny from all
allow from XXX.XXX.XXX.XXX/16
allow from YYY.YYY.YYY.YYY/16

以上のように自分が普段使うネットワークセグメントからのアクセスしか通さないようにしておく。
自分が使っているプロバイダーのネットワークセグメントはaguse.jpなどで調べられる。

バーチャルユーザーの追加

hoge以外の新しいユーザー名を登録する際、いちいちパスワードファイルを編集するのは煩わしい。
メールの受信だけで良いなら、Postfixのエイリアス機能(メール転送)を使えば簡単にユーザーを増やせる。
SNSの承認などで受信専用のメールアドレスがたくさん必要なときに便利。

# vi /etc/aliases
huge:   hoge
moge:   hoge
hige:   hoge
# newaliases

これで、moge@hoge.com、hige@hoge.com、huge@hoge.comへのメールはすべてhoge@hoge.com宛へ転送される。

  • このエントリーをはてなブックマークに追加