Postfix をインストールします。CentOS 7.2では最小構成の場合でも、デフォルトでインストールされている場合があります。(Amazon EC2, Microsft Azure など)
インストール手順の詳細は「CentOS7にPostfixをインストールする (MTA - SMTPサーバーのインストール)」を参照してください。
Dovecot をインストールします。
インストール手順の詳細は「CentOS 7にDovecotをインストールする (POP/IMAPサーバーのインストール)」を参照してください。
コマンドを実行して、mySQLのドライバをインストールします。
MariaDBをインストールします。
インストール手順の詳細は「CentOS7 に MariaDB をインストールする」を参照してください。
MariaDBの初期設定をします。
コマンドを実行します。詳細は「MariaDB の初期設定をする (mysql_secure_installation コマンドによる初期設定)」を参照してください。
コマンドを実行してSQLコマンドプロンプトを表示します。
メールサーバーのユーザー情報を格納するためのデータベースを作成します。今回は"mail"データベースを作成します。
CREATE DATABASE mail;
SQLコマンドを実行します。
PostfixやDovecotからデータベースにアクセスするためのデータベースユーザーを作成します。下記のSQLコマンドを実行します。
CREATE USER 'mail_admin'@'%' identified by '(パスワード)';
データベースユーザーのパスワードにはアルファベットと数字のみにしてください。パスワードに記号を含めると、うまく動作しないことがります。
作成したデータベースのユーザーに権限を付与します。SQLプロンプトで下記のSQLを実行します。
GRANT SELECT, INSERT, UPDATE, DELETE ON mail.* TO 'mail_admin'@'%';
続いてデータベースのテーブルを作成します。
コマンドを実行してSQLコマンドプロンプトを表示します。
先ほど作成した、mail データベース内にテーブルを作成するため、mail データベースを選択します。SQL コマンドプロンプトで下記のコマンドを実行してmail データベースを選択します。
USE mail;
サーバーで受信するドメインを保存するテーブルを作成します。下記のSQLを実行します。
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
メールユーザーの情報を格納するテーブルを作成します。
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(80) NOT NULL, PRIMARY KEY (email) );
CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) );
以上でテーブルの作成は完了です。
メールサーバーに接続できるアドレスを設定します。今回は外部から接続してメールを送信できるメールサーバーを構築するため、
/etc/postfix/main.cf ファイルの
ドメイン宛のメールはバーチャルメールボックスで受け取るため、mydestinationが上記になっていることを確認します。
または
とします。
main.cfのvirtual_uid_maps(後述)で指定するuidを持つユーザーを作成します。以下のコマンドを実行します。
/etc/postfix/main.cf ファイルに以下を追記します。
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_minimum_uid=100
virtual_uid_maps=static:5000
virtual_gid_maps=static:5000
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
SMTP-Auth を利用する場合、/etc/postfix/main.cf に以下を追記します。
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
MariaDBと連動させるため、sasl認証は、Dovecotのものを利用します。"smtpd_sasl_type = dovecot"により、Dovecot SASLによるSMTP Authを利用します。
"smtpd_sasl_path = private/auth" はDovecot SASL の認証ソケットファイル /var/spool/postfix/ からの相対パスで記述します。この記述は、Dovecotの設定ファイル "/etc/dovecot/conf.d/10-master.conf" の unix_listener のパスと一致させる必要があります。("smtpd_sasl_path = private/auth" と記述した場合は、10-master.confファイルで、"unix_listener /var/spool/postfix/private/auth {......}" と記述します。
サブミッションポートを有効にする場合は、/etc/postfix/master.cf ファイルを編集します。
#submission inet n - n - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
# -o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
の部分を
submission inet n - n - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
-o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
と修正します。もしくは、
submission inet n - n - - smtpd
# -o syslog_name=postfix/submission
# -o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
# -o smtpd_reject_unlisted_recipient=no
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
と変更します。
/etc/postfix ディレクトリにmariaDbとのプロキシファイルを作成します。
user = mail_admin
password = (mail_admin ユーザーのMariaDBのパスワード)
dbname = mail
query = SELECT domain AS virtual FROM domains WHERE domain='%s'
hosts = 127.0.0.1
user = mail_admin
password = (mail_admin ユーザーのMariaDBのパスワード)
dbname = mail
query = SELECT destination FROM forwardings WHERE source='%s'
hosts = 127.0.0.1
user = mail_admin
password = (mail_admin ユーザーのMariaDBのパスワード)
dbname = mail
query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
hosts = 127.0.0.1
user = mail_admin
password = (mail_admin ユーザーのMariaDBのパスワード)
dbname = mail
query = SELECT email FROM users WHERE email='%s'
hosts = 127.0.0.1
バーチャルメールボックスのドメインのディレクトリを作成します。(ディレクトリを作成しない場合でも、PostfixやDovecotでディレクトリを作成してくれる場合もあります。)
MXレコードを設定します。
ルーターでポートが解放されていない場合、外部からメールサーバーに通信できません。ルーターのポートを開放します。ポート25、110、サブミッションポートを利用する場合はポート587を開きます。
Amazon EC2やMicrosoft Azureの場合は、ルーターがない代わりに、セキュリティールールでポート25,110,サブミッションポートを利用する場合はポート587を開放します。
サービスの設定ができていても、ファイアウォールでメールサーバーのポートが開いていない場合、通信ができません。ファイアウォールを設定して、メールサーバーで利用するポート(25,110,587)を開放します。
続いてDovecotの設定をします。「CentOS7 で Postfix + Dovecot + MariaDBでバーチャルメールボックスを利用してメールを送受信する (2) - dovecot の設定」の記事を参照してください。