2015/01/03 CentOS7.0





RoundCubeMailでウェブメールサーバを構築

RoundCubeMailはウェブメールサーバーです。
Apache上で動作するPHPベースのメールクライアントです。
ほかのソフトに比べ、画面がモダンで日本語対応しているのが特長です。



RoundCubeはメールサーバへの接続にIMAPを使用します。POP3は使用できません。

ここでは1台のサーバでSMTP/IMAP/HTTP/ウェブメールサーバをやらせます。
設定の流れとしては

RoundCubeが動作するようセキュリティの変更 (FirewallSELinuxの設定)
  ↓
RoundCubeでアクセスできるSMTPサーバの構築 (Postfixの設定)
  ↓
RoundCubeでアクセスできるIMAPサーバの構築 (Dovecotの設定)
  ↓
RoundCubeが動作できるHTTPサーバの構築 (Apacheの設定)
  ↓
RoundCubeが使用するDBの構築 (MariaDBの設定)
  ↓
RoundCubeのインストール (リポジトリの追加とインストール)
  ↓
RoundCubeが動作できるHTTPサーバの設定 (Apacheの設定)
  ↓
RoundCubeの構築 (RoundCubeMailの初期設定)
  ↓
トラブル対処 (エラーが表示されるとき)

オマケ メールボックスにMailDir形式を使用する場合


ファイアウォールの設定

ウェブメールサービスに必要なポート80番と、メールサーバが外部からメールを受信するのに必要なポート25番を開放します。
CentOS7からはファイアウォールがiptablesからfirewall-cmdへと変更されています。
GUIから変更するのも簡単ですが、コマンドからも変更できます。


現在のファイアウォールプロファイルを確認
#firewall-cmd --get-active-zone

デフォルトプロファイルを変更(必要なら)
#firewall-cmd --set-default-zone=trusted

ファイアウォールのゾーンを変更(必要なら)
#firewall-cmd --zone=trusted --change-interface=(インターフェイス名)

ファイアウォールにhttpポートとSMTPポートを許可
#firewall-cmd --zone=trusted --add-service=http
#firewall-cmd --zone=trusted --add-service=smtp



SELinuxの無効化

/etc/selinux/configを編集します。
SELINUX = disabled (編集)

変更後、再起動。もしくは「setenforce 0」コマンドで一時的にSELinuxを無効化する。
無効化しておかないと、SMTPの送信テストに失敗します。



Postfixの設定

Postfixは「外部からメールを受信する機能」と「メールを送信する機能」の両方を設定します。

/etc/postfix/main.cfを編集します。

mydestinationに、自分のドメイン名を設定します。これで外部から受け取ったexamle.localドメインのメールを自分のディスクに保存してくれるようになります。
mydestination = $myhostname, localhost.$mydomain, localhost, example.local (追加)

inet_interfacesに外部から通信できるアドレスを記載します。
inet_interfaces = localhost, 192.168.1.100 (追加)

必要なら、上位メールサーバを指定します。
relayhost = 192.168.1.1 (変更)

デーモンを起動し、自動起動を有効にする。
#systemctl enable postfix
#systemctl start postfix



Dovecotの設定

IMAPサーバとして動作するDovecotをインストールします。

#yum install dovecot

Dovecotは1.0と2.0でコンフィグの構造が異なります。(ここでは2.0)
/etc/dovecot/dovecot.confを編集します。

dovecotが使用するプロトコルを指定します。ここではIMAPに限定してます。
protocols = imap (編集)



/etc/dovecot/conf.d/10-auth.confを編集します。

平文のパスワードを許可します。
disable_plaintext_auth = no (編集)



/etc/dovecot/conf.d/10-mail.confを編集します。

これはDovecotが参照するメールボックスの位置です。Postfixの保存形式と揃えます。
Postfixはデフォルトのままなので「/var/mailディレクトリへメールボックス形式がユーザ名で保存される」に合わせてあります。
mail_location = mbox:/var/mail:INBOX=/var/mail/%u (編集)

Dovecotがメールボックスへアクセスするために、メールボックスのオーナーであるmailアカウントを使用します。
mail_access_groups = mail (編集)


デーモンを起動し、自動起動を有効にする。
#systemctl enable dovecot
#systemctl start dovecot.service



Apacheの設定

httpdがインストールされていなければインストールします。

#yum install httpd

PHPのインストール

#yum install php

/etc/php.iniを編集します。

date.timezone = 'Asia/Tokyo'
default_charset = "UTF-8"



MariaDBの設定

MariaDB(MySQLのフォーク)をインストールします。

#yum install  mariadb mariadb-server

/etc/my.cnfを編集します。
[mysqld]
character-set-server = utf8


デーモンを自動起動に設定し、起動します。
#systemctl enable mariadb.service
#systemctl start mariadb.service


MariaDBの管理者パスワードを設定しておきます。
#mysqladmin -u root password 'mariadbpass'



RoundCubeMailのインストール

RoundCubeMailは通常のリポジトリに含まれていません。
企業向けリポジトリであるEPELを追加してから、インストールします。
※注意点 Apacheが先にインストールされていないと、RoundCube向けのアクセス制御ファイルがApacheのconfディレクトリにインストールされません。

#yum install -y epel-release
#yum install -y roundcubemail


RoundCube用テーブルの作成

roundcubeというユーザとをroundcubemailというテーブルを作成し、アクセス権を与えます。

#mysql -u root -p
Enter password:[パスワード入力]
MariaDB [(none)]> create database roundcubemail character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all on roundcubemail.* to roundcube@localhost identified by 'roundcubepass';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit

RoundCubeのDB情報を取り込みます。パスワードはroundcubeユーザで指定したパスワードです。
#mysql -u roundcube roundcubemail -p < /usr/share/roundcubemail/SQL/mysql.initial.sql



Apacheの設定

HTTPのRoundCubeパスのアクセスを許可します
/etc/httpd/conf.d/roundcubemail.confを編集します。

<Directory /usr/share/roundcubemail/>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted (編集)
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
    </IfModule>
</Directory>

<Directory /usr/share/roundcubemail/installer/>
    <IfModule mod_authz_core.c>
        # Apache 2.4
        Require all granted (編集)
    </IfModule>
    <IfModule !mod_authz_core.c>
        # Apache 2.2
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1
        Allow from ::1
    </IfModule>
</Directory>


デーモンを自動起動に設定し、httpdを起動します。

#systemctl enable httpd
#systemctl start httpd.service



RoundCubeMailの初期設定

ブラウザで http://サーバアドレス/roundcubemail/installer/ へアクセスします。、
正常にインストールがされていれば、画面にOKの文字が並びます。

(DB周辺にNot Availableがありますが、MySQLがOKになっていれば問題ありません)



NextでCreate Configの画面に移動します。



まずは重要な、DBへの接続パスです。


MySQLにテーブルを作成したときの情報を使用します。
roundcubemailというテーブル名、roundcubeというユーザ名とパスワードを入力します。


次に使用するIMAPサーバの情報を入力します。
ここではlocalhostを使用するのでデフォルトのままでいいです。


送信に使用するSMTPサーバの情報を入力します。localhostを使用します。
※環境によっては「localhost=::1」となり、IPv6上にPostfixが起動してないとアクセスに失敗します。
 その場合はlocalhostをやめ、127.0.0.1としましょう。


最後にCreate Configをクリックします。
すると、生成されたコンフィグファイルが表示されます。

このコンフィグをサーバへ送り込みます。

Downloadをクリックしてファイルを取得するか、表示されているコンフィグをコピーして、RoundCubeをホストしているサーバの /etc/roundcubemail/config.inc.php として保存します。
WinSCPなどを使用する、TeraTermなどでコンフィグを張り付ける、サーバ上でブラウザを起動してコピペする、などの方法を使って送り込んでください。


コンフィグを送り込んだら、Continueをクリックします。

TestConfigがOKになっていることを確認します。
MariaDBへの接続のパスワードなどが間違っているとエラーが表示されます。


SMTPテスト

エラーが出る場合、SELinuxが有効になってる可能性があります。


IMAPテスト

エラーになる場合、dovecotのmail_access_groupsが漏れている場合が考えられます。

全て完了したら、画面下に、
/usr/share/roundcubemail/installer を削除するか、config.inc.phpにenable_installerをdisabledに設定するか、と表示されています。
インストーラーを無効にする必要があります。

/etc/roundcubemail/config.inc.phpへ以下を追加します。

$config['enable_installer'] = false;

設定後、ブラウザでアクセスするとインストーラ画面が拒否されますが、ブラウザのキャッシュが残っていることが多くて正常アクセスが見えてしまうことがあります。
別のPCや別のブラウザからアクセスして確認しましょう。

ブラウザからアクセスすると、ログインユーザを指定します。
http://サーバアドレス/roundcubemail/


ログイン後、メールボックスが表示されます。




トラブル対処

・SMTPテストが失敗する
 SELinuxが有効になっている場合があります。

・SMTPサーバへメールが格納されない
 postfixのmain.confでmydestinationの自ドメインの記述が誤っている可能性があります。

IMAPの試験が失敗する
・メールがまだない
 なにか1通メールを保存しておきます。ログには「* BYE Internal error occurred. Refer to server log
 for more information. Connection closed by foreign host.」と表示されます。
・メールボックスの型が合わない
 Postfixの受信メールの形は、MBoxとMailDir形式があります。
 PostfixがMboxで保存しているのにDovecotがMailDir形式で取り出そうとする。あるいは保存されている
 パスが異なっている場合が考えられます。
・IMAPではなくPOPで構築されている
 dovecot.confでprotocolsでimapを有効にする。
・そもそもIMAPが動作しているか。
 telnetコマンドやメールクライアントを用いて、IMAPでのメール受信が正常に行えるかを確認します。
 telnetの場合、ポート143番へ接続し、以下の順番でIMAPコマンドを実行します。
 コマンドの前に数字をつけるのがIMAPコマンドの文法です。
 #telnet localhost 143
 Connected to localhost.
 1 login username password
 2 list "" *
 3 select INBOX
 4 fetch 1 body[]
 5 logout

 また、通常のメールクライアントで受信できたとしても、それがRoundCubeMailからアクセスできることには
 なりません。
 例えば認証方式の違いやSSLの使用など、メールクライアントが対応しているだけかもしれません。

・RoundCubeMailのログイン画面が現れない
 /etc/httpd/conf.d/roundcubemail..conf でアクセスが制御されていると思われます。
 もしくは単純にファイアウォールが閉まっている可能性があります。CentOS6系とは異なり、
 ファイアウォールプロファイルで制御されています。ネットワークでプロファイルを定義する、あるいは
 デフォルトプロファイルを変更しないと、OSを再起動したりIPアドレスを変更したりすると
 ファイアウォールプロファイルは元に戻ってしまいます。

・RoundCubeMailにログインしても、「権限がない」と表示される
 「エラーが発生しました!」「操作を実行できませんでした。権限がありません」と表示されます。
 原因はDovecotの10-mail.confで「mail_access_groups=mail」が抜けている。
 あるいはpostfixの制御アカウントがmailでなく、別のシステムアカウントによって起動されている。
 postfixサービスの起動に使用されているアカウントを、dovecotで指定します。
 これは/var/mailなど、メールボックスの配置してあるディレクトリで 「ls -l」 を実行して、メールボックスの
 オーナーグループを調べることで確認できます。



メールボックスにMailDir形式を使用する場合

CentOS7のPostfixはデフォルトではmboxを使用します。
./var/mailの下に配置されるユーザ名のファイルがそれです。

MailDir形式を使用したい場合、PostfixとDovecotのメール形式を変更します。

Postfixのmain.cfを編集します。

mail_spool_directory = /var/mail/
末尾にスラッシュを加えるとMailDir形式となります。スラッシュがないとmbox形式となります。

#home_mailbox = MailBox (コメントアウト)
この値が設定されていると、ユーザのホームディレクトリにMailBoxが保存されます。


Dovecotの10-mail.confを編集します。

maildirとコロンの次にパスを指定します。%uはユーザー名という意味です。
mail_localtion = maildir:/var/mail/%u

MailDirをユーザーのホームフォルダに作成する場合は、チルダを使用します。
mail_location = maildir:~/Maildir







prev.gif