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

By: r reeves
はじめに
目的: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でログインできる事を確認する。
管理者としてログインできたら最低限の初期設定を済ませる。
管理者アカウントのパスワードを変更する。
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宛へ転送される。