送信用サーバ Postfix をインストール

今回、VPS上にメールサーバーを構築する上で、PostfixDovecotという定番タッグを使います。

まずはSMTPサーバーであるPostfixからインストールします。

# Postfixインストール
> yum install postfix

> vim /etc/postfix/main.cf

# 自FQDN(メールサーバのホスト名)を指定
myhostname = mail.qrineforest.ml

# 自ドメイン名を指定
mydomain = qrineforest.ml

# ローカルからのメール送信時の送信元メールアドレス@以降にドメイン名を付加
myorigin = $mydomain

# 外部からのメール受信を許可
inet_interfaces = all

# 自ドメイン宛メールを受信できるようにする
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# メールボックス形式をMaildir形式にする
home_mailbox = Maildir/

# メールサーバーソフト名の隠蔽化(セキュリティ対策)
smtpd_banner = $myhostname ESMTP unknown

##########
# 以下追記分
##########
# メール送信上限サイズ(20MB = 20 * 1024 * 1024) ※ 0 = 無制限
message_size_limit = 10485760
# メール受信上限サイズ(50MB = 50 * 1024 * 1024) ※ 0 = 無制限
# mailbox_size_limit = 0

# ユーザーを探れないようにしアカウント流出を防ぐ(セキュリティ対策)
disable_vrfy_command = yes

# 接続元の制限(スパム対策)
smtpd_client_restrictions =
 check_client_access hash:/etc/postfix/access
 reject_rbl_client zen.spamhaus.org
 reject_rbl_client all.rbl.jp
 reject_non_fqdn_sender
 reject_unknown_sender_domain

# エンベロープアドレス(MAIL FROM)による制限(スパム対策)
smtpd_sender_restrictions =
 reject_rhsbl_sender zen.spamhaus.org
 reject_unknown_sender_domain

# SASL(Simple Authentication and Security Layer)は認証部分だけを切り離して外部モジュールを使用できるようにするもの(仕組み)
# SASL認証を有効化
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
# smtpd_sasl_pathは認証に関してDoveco側とやりとりする際の指定
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_type = dovecot # Dovecot SASL ライブラリを指定

# メール送受信経路を暗号化するための設定
smtpd_use_tls = yes
# 宛先のメールサーバがTLSに対応していれば、通信を暗号化する
smtp_tls_security_level = may
# SSL証明書のパスを指定
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
smtpd_tls_key_file = /etc/pki/tls/private/server.key
# セッションキャッシュ場所
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
# キャッシュ保持期間(24時間に指定)
smtpd_tls_session_cache_timeout = 86400s

# 認証を通過したものはリレーを許可する(permit_sasl_authenticated)
smtpd_recipient_restrictions =
 permit_mynetworks,
 permit_sasl_authenticated,
 reject_unauth_destination


# smtps(SMTP-Auth over SSL)有効化
> vim /etc/postfix/master.cf

# 以下のコメントを外す  ※OP25B対策としてsubmissionポートを有効にする
submission inet n - n - - smtpd
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
smtps inet n - n - - smtpd
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject

# ルックアップテーブルの作成
> postmap /etc/postfix/access
# 設定のチェック
> postfix check

# Postfixの自動起動設定
> chkconfig postfix on
> service postfix start

 

受信メッセージのサイズに関していくつか留意点があるのでメモしておきます。

動画が添付されている場合などサイズの大きなメールを送受信するには、mailbox_size_limit(受信サイズ上限)message_size_limit(送信サイズ上限)を適切に設定する必要があります。

サイズ上限はそれぞれ任意に設定できますが、注意点として送信サイズ上限 ≦ 受信サイズ上限という関係を満たさなければなりません。ちなみに、それぞれのデフォルト値は「送信上限サイズ10MB」「受信上限サイズ50MB」のようです。また、0に指定すると無制限という意味になります。

 

受信用サーバ Davecot をインストール

 

Postfixに続き、受信用のPOPサーバであるDovecotのインストール及び設定を行います。

#1.Dovecotのインストール
> yum install dovecot

#2.使用プロトコルの設定
> vim /etc/dovecot/dovecot.conf

# メール取り出しに使うプロトコルを指定 ※2つ指定しておけばメールクライアントから任意に選択できる
protocols = imap pop3

#3.認証方法設定
#dovecotでは、様々な認証方式を使うことができますが、
#SSLを使った暗号化方式は後ほど導入するとして、
#まずは平文によるパスワード認証を最低限使えるようにします。
> vim /etc/dovecot/conf.d/10-auth.conf

# 平文(plain text)での認証を許可する
#disable_plaintext_auth = yes
#↓
disable_plaintext_auth = no

# 認証方式を平文とする
auth_mechanism = plain login

# メールボックスの設定
> vim /etc/dovecot/conf.d/10-mail.conf

# 各ユーザー毎のメールボックスの設定をMaildir形式で指定する。
mail_location = maildir:~/Maildir





# Postfix(SMTPサーバ)からの認証要求の受付設定
# Postfixが接続を受け付ける際の認証にdovecotを利用するためには、dovecot側でpostfixの認証要求を受け付ける設定を行う必要があります。
> vim /etc/dovecot/conf.d/10-master.conf

service imap-login {
    inet_listener imap {
        #port = 143 ↓ 暗号化なしのimapを禁止するため0を指定
        port = 0
    }
    inet_listener imaps {
        # コメントアウト
        port = 993
        ssl = yes
    }
}

service pop3-login {
     inet_listener pop3 {
         #port = 110 ↓ 暗号化なしのpopを禁止するため0を指定
         port = 0
     }

     inet_listener pop3s {
        # コメントアウト
        port = 995
        ssl = yes
    }
}
service auth {
    #unix_listener /var/spool/postfix/private/auth {
    # mode = 0666
    #}
    # ↓(変更)
    unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
    }
}


# 暗号化の設定
> vim /etc/dovecot/conf.d/10-ssl.conf
# ssl = yes のコメントを外す
ssl = yes
# 証明書と秘密鍵のパスを指定する ※httpsのSSL証明書を転用する
ssl_cert = </etc/pki/tls/certs/server.crt
ssl_key = </etc/pki/tls/private/server.key


# 自動起動設定及び起動
> chkconfig dovecot on
> service dovecot start

 

 

各メールボックスのフォルダ構成については、下記リンク先の方法で構築します。デフォルトのままだと、様々なメールクライアントからメール設定した際に、メールクライアント毎のフォルダが乱立してしまうのでそれを防ぐための手順です。

Maildir形式でのフォルダ構成

https://wiki2.dovecot.org/MailboxFormat/Maildir#Directory_Structure

 

 

 

ポートの開放

Dovecotには最初から暗号化するimapspop3sというプロトコルを使用しています。暗号化してないimapやpop3は設定で使わないことにしましたよね。

imaps:993番ポート、pop3:995番ポートですのでiptablesで許可設定を追記します。

Postfixでの暗号化はSTARTTLSという仕組みを利用します。これは、最初はsmtpsubmissionポートをそのまま使用し、平文で通信を開始して途中から暗号化による通信に切り替えますのでポートの使い回しができます。このため、Postfixでは暗号化用の別のポートを開いてやる必要はありませんので、smtp:25submission:587を開ければOKです。

> vi /etc/sysconfig/iptables
# 以下をHTTP関係の設定の下あたりに追記
-A INPUT -m state --state NEW -p tcp --syn --dport 25 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --syn --dport 587 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --syn --dport 993 -j ACCEPT
-A INPUT -m state --state NEW -p tcp --syn --dport 995 -j ACCEPT

# iptablesを再起動
> service iptables restart

これでメール関係のポートを開通できました。許可したポートについて一応下表で説明します。

プロトコル 説明
smtp(25) 他のメールサーバ(MTA)からの受信や返信の為に必須
submission(587) パソコンのメーラーからのメール送信の為に必須(通常のISPはOP25B(Outbound Port 25 Blocking)を行っておりメーラーからメール送信できないようになっている)
imaps(993) 暗号化通信によるIMAPを使ったメールの受信(取りだし)の為に必要
pop3s(995) 暗号化通信によるPOP3を使ったメールの受信(取りだし)の為に必要

 

ちなみに、外部からポート開閉状況を確認したい場合はtelnetコマンドから行うことが出来ます。次のように行うことでポートの状況を簡単に確認できます。

例1:外部から接続できる(ポート開放がされてる)

telnet <ホスト名> <確認するポート番号>

Trying (ipアドレス)...
Connected to (サーバー名).
Escape character is '^]'.

例2:外部から接続できない(ポートが閉じてる)

telnet <ホスト名> <確認するポート番号>
Trying (ipアドレス)...
telnet: Unable to connect to remote host: Attempt to connect timed out without establishing a connection

例2のような場合には、サーバのファイアーウォールの設定を見直したり、25番ポートに限って言えば、ISPがOP25Bをしていないか確認する必要がありますね。

 

メールユーザーの作成

システムログイン不可のメールユーザを作成

※例としてユーザ名を「mailuser」とします

> useradd -s /sbin/nologin mailuser
> passwd mailuser ← パスワード設定
Changing password for user mailuser.
New UNIX password: ******
Retype new UNIX password: ******
passwd: all authentication tokens updated successfully

 

※ 以下追記分 ※

infoアカウントによるメール受信が出来ない件に関してどうやらデフォルトで、info宛てのメールは転送されてしまうらしいので解除します。

# 設定ファイルを編集する
vim /etc/aliases

# ↓をコメントアウト
# info: postmaster

newaliases ← 変更を反映

 

※メールユーザ名変更手順

もしも途中でメールユーザー名を変更したくなった場合は、メールボックスを維持したまま変更したいはずです。その手順をメモしておきます。

グループ名の変更 groupmod コマンドの “-n” オプションで新しい名前を指定します。

groupmod -n NEW_NAME OLD_NAME
#↓
#ホームディレクトリも変える場合は 今のホームディレクトリをリネームしておいて "-d" オプションで指定します。
mv /home/OLD_NAME /home/NEW_NAME
usermod -l NEW_NAME -d /home/NEW_NAME OLD_NAME

※対象のユーザがログイン中の場合は変更できないので注意!!

 

 

パソコン上のメーラーの設定

Thunderbirdの場合

メールアカウント追加ウィザードで以下の情報を入力し、アカウント設定を行う。

基本情報

  • あなたのお名前: メールを送られた者に表示される名前(任意の名前をつけて良い)
  • メールアドレス: <メールユーザ名>@mail.example.com
  • パスワード: 当該メールユーザのパスワード

受信サーバ設定

  • プロトコル:imap
  • ホスト名:mail.example.com ※メールサーバー
  • ポート番号: 993  ※imaps に対応するポート
  • SSL: SSL/TLS
  • 認証方式: 通常のパスワード認証

送信サーバ設定

  • プロトコル:smtp
  • ホスト名: mail.example.com ※メールサーバー
  • ポート番号: 587  ※smtp submission ポート(OP25B対策)
  • SSL: STARTTLS ※トランスポート層上で動作する暗号化技術 TLS(Tranceport Layer Security)を指定
  • 認証方式: 通常のパスワード認証

初めてのメール送受信の際に、サーバ証明書の信頼に関するダイアログが表示されるので、信頼する。

 

Webメーラーの設置

Webメーラー「RoundCube」をインストール

RoundCube Webmail は Ajax を使用したリッチユーザーインタフェースが特徴のWebメールシステムです。Ajaxを使っているため、ユーザビリティに優れており、ローカルインストー ルしたメールクライアントに近い使用感があります(あくまで、従来のWebメーラーと比較して・・・)。

  • ソースからインストール
  • logやtemp用のディレクトリの所有者やパーミッションを変更
  • 初期設定を行う
mkdir /var/www/vhosts/mail # メール用のWebサーバルートドキュメントDirを作成
cd /var/www/vhosts/mail
wget "http://downloads.sourceforge.net/project/roundcubemail/roundcubemail/1.0.2/roundcubemail-1.0.2.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Froundcubemail%2Ffiles%2Froundcubemail%2F1.0.2%2F&ts=1408288984&use_mirror=jaist" -O roundcube.tar.gz
tar zxvf roundcube.tar.gz
mv roundcubemail-1.0.2/ roundcube/ # 解凍したディレクトリ名の変更
rm -f roundcube.tar.gz
cd ..
chown -R nginx:nginx mail/ # 所有者及びグループを再帰的に nginx に変更
chmod 775 mail/roundcube/logs # logs の属性を rwxrwxr-x にする
chmod 775 mail/roundcube/temp # temp の属性を rwxrwxr-x にする
vim mail/roundcube/program/lib/Roundcube/rcube_charset.php
・・・省略・・・
// ※丸付き数字等の機種依存文字の文字化け対応
// convert charset using mbstring module
if ($mbstring_list !== false) {
$aliases['WINDOWS-1257'] = 'ISO-8859-13';
// --追加(ここから)--
$aliases['JIS'] = 'ISO-2022-JP-MS';
$aliases['ISO-2022-JP'] = 'ISO-2022-JP-MS';
$aliases['EUC-JP'] = 'EUCJP-WIN';
$aliases['SJIS'] = 'SJIS-WIN';
$aliases['SHIFT_JIS'] = 'SJIS-WIN';
// --追加(ここまで)--
// it happens that mbstring supports ASCII but not US-ASCII
if (($from == 'US-ASCII' || $to == 'US-ASCII') && !in_array('US-ASCII', $mbstring_list)) {
$aliases['US-ASCII'] = 'ASCII';
}
・・・省略・・・
# MIMEタイプ一覧を取得する
wget "http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types" -O mail/roundcube/config/
chown nginx:nginx mail/roundcube/config/mime.types
vim mail/roundcube/config/defaults.inc.php
/* MIMEタイプの場所をフルパスで指定する */
$config['mime_types'] = '/var/www/vhosts/mail/roundcube/config/mime.types';

/* システム全般の設定 */
// 自ドメイン(@移行のやつ)を設定
$config['mail_domain'] = 'sincere-hips.tokyo';
// httpsアクセス(暗号化通信)を強制
$config['force_https'] = true;

データベースを確認し設定する

お名前.com のVPS(KVM)のWordPressプレインストール版では、MySQLが初めから入っているので新規にインストールする必要は無い。なので、設定だけ行っておく。あと、RoundCube用のデータベースも作成する。

  • mysql_secure_installation コマンドを実行し、セキュリティを高める。
  • RoundCube用のDBを作成する。
mysql_secure_installation

Enter current password for root (enter for none):
Set root password? [Y/n]   空ENTER(rootパスワード設定)
New password: ******** rootパスワード応答
Re-enter new password: ******** rootパスワード応答(確認)
Remove anonymous users? [Y/n] y anonymous ユーザーの削除
Disallow root login remotely? [Y/n] y root ユーザーのログインを localhost に制限
Remove test database and access to it? [Y/n] y test データベースの削除
Reload privilege tables now? [Y/n] y 権限変更の反映

# ※-pとパスワードの間に空白を入れてはいけない
mysql -u root -p<さっき設定したパスワード>

mysql> SHOW DATABASES;
 +--------------------+
 | Database |
 +--------------------+
 | information_schema |
 | mysql |
 | performance_schema |
 | wordpress |
 +--------------------+
 4 rows in set (0.04 sec)

# DB「roundcube」を文字コードUTF-8で作成する
mysql> create database roundcube character set utf8;

# 作成したDB「roundcube」にユーザ名「roundcube」パスワード「roundcube」とし全権限を与える
mysql> grant all privileges on roundcube.* to roundcube@localhost identified by 'roundcube';

# ユーザ情報を反映
mysql> flush privileges;
mysql> quit

# 初期化SQLの実行
mysql -u roundcube -proundcube roundcube < /usr/share/roundcubemail/SQL/mysql.initial.sql

RoundCubeのWeb経由設定

それぞれの必要なところのみ編集していき、他は既存の設定を維持。

vim /etc/roundcubemail/default.inc.php

// システム全般の設定


$config['mail_domain'] = 'sincere-hips.tokyo'; // 自ドメイン
$config['force_https'] = true; // httpsアクセス(暗号化通信)を強制

※後でWebブラウザ経由で設定を行うので、ここでは最小限の設定にとどめる。

※ちなみな、他の設定ファイルはそれぞれ以下のような意味

/etc/roundcubemail/db.inc.php → DBに関する設定ファイル

/etc/roundcubemail/main.inc.php → RoundCube本体の設定ファイル

Webサーバの設定

RoundCubeをインストールしただけでは、Webブラウザからアクセスできないので、Webブラウザからアクセスできるように、Nginxの設定ファイルを編集します。

※既存のファイルではなく、新規にRoundCube用の設定ファイルを新規作成する。

HTTPに関する設定

vim /etc/nginx/conf.d/roundcube.http.conf
# HTTPアクセスをHTTPSへリダイレクトするためだけの設定
server {
  listen 80;
  server_name mail.sincere-hips.tokyo;
  rewrite ^(.*)$ https://$host break; # このサーバへのアクセスは有無を言わせずHTTPSへリダイレクト
}

HTTPSに関する設定

vim /etc/nginx/conf.d/roundcube.https.conf
server {
  listen 443 ssl;
  server_name mail.sincere-hips.tokyo;
  root /var/www/vhosts/mail/roundcube;
  index index.php index.html;
  charset utf-8;
  ssl_certificate /etc/pki/tls/certs/server.crt;
  ssl_certificate_key /etc/pki/tls/certs/server.key;
  ssl_session_timeout 15m;
  ssl_protocols SSLv2 SSLv3 TLSv1;
  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
  ssl_prefer_server_ciphers on;

  access_log /var/log/nginx/roundcube.access.log main;
  error_log /var/log/nginx/roundcube.error.log;

  # 制限するファイル設定
  include /etc/nginx/drop;

  # Pass all .php files onto a php-fpm/php-fcgi server.
  # add following 2 lines , if needed.
  # #fastcgi_param PATH_INFO $fastcgi_path_info;
  # #fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
  location ~ .php$ {
    try_files $uri =404;
    fastcgi_keep_conn on;
    fastcgi_split_path_info ^(.+.php)(.*)$;
    fastcgi_pass phpfpm;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

Webブラウザからの設定

ここまできたら、大詰めです。最後に、Webブラウザ経由で最終的な設定を行います。この作業が完了すれば、晴れて自サーバーのWebメールが使えるようになります。

  • https://sincere-hips.tokyo/roundcubemail/installer/ にアクセス
  • 必要な項目を設定
  • 設定の確認テスト
  • インストーラー削除

 

インストーラにアクセス

とりあえず、下記のURLにブラウザからアクセスします。

mail.server.com 部分は適宜、自メールサーバーのホスト名に置き換えること。

https://mail.server.com/roundcubemail/installer/

アクセスすると、サーバの状況(PHPやDBなどに関して)チェックページが表示されるので、問題がなければ「NEXT」ボタンを押下。そして、必要な項目を設定していきます。

  • Logging & Debugging
    • log_driver: syslog ※ログを/var/log/messagesに出力するようにします
  • Database setup
    • db_dsnw ※使用するDBの接続情報です
      • Database server: localhost
      • Database name: roundcube
      • Database user name: roundcube
      • Database password: roundcube
  • IMAP Settings
    • default_host: ssl://localhost
    • default_port: 993 (imaps用のポート)
    • ※SMTPはSASLによる認証機構のためポートも標準だがIMAPSは初めからPKI(公開鍵基盤)上で動作するため、sslスキームの付与が必要。
    • ※「auto_create_user」にチェックが入っていることを確認する!
  • SMTP Settings
    • smtp_server: localhost
    • smtp_port: 25 ※ OP25B対策の場合は587にする
    • 「Use the current IMAP username and password for SMTP authentication」にチェック
    • ※↑ SMTP認証にIMAPサーバーのユーザー名/パスワードを使用する
  • Display settings & user prefs
    • language: ja_JP
    • 「If preview pane is enabled」にチェック
    • ※↑ メール一覧の下にプレビュー画面を表示する

「CREATE CONFIG」ボタンを押下すると、設定ファイルが作成されます。

「CONTINUE」ボタン押下

 

設定をテストする

最後に、行った設定に問題が無いか確認する。(基本的に全てOKとなっていれば大丈夫)

<送信テスト>
User: CentOS上のメール用ユーザ名
Password: メール用ユーザに設定したパスワード
Sender: <user>@sincere-hips.tokyo
Recipient: テストメール送信先のメールアドレス

「Send test mail」ボタンを押下して「OK」となればOK

<受信サーバログインテスト>
Username: CentOS上のメール用ユーザ名
Password: メール用ユーザに設定したパスワード

「Check login」ボタンを押下して「OK」となればOK

インストーラーの削除

※インストーラーを削除する前に、RoundCubeのログイン画面からログインできることを確認しておく。

rm -rf /var/www/vhosts/mail/roundcube/installer/