postfixadmin + postfix + dovecot 「CentOS 7」インストール
CentOS 7でバーチャルドメイン対応のメールサーバー構築
Posfix + Dovecot + postfixadmin を利用してバーチャルドメイン対応のメールサーバーを構築しました。当初は「CentOS 8」での構築を考えましたが、CentOS 8 + Postfixadminの構成での情報が少なかったのでCentOS 7で構築しました。
OS及びミドルウェアのバージョンは以下のようになります
- Cent OS 7.7
- postfix 2.10.1
- dovecot 2.2.36
- postfixadmin 3.2
- php 7.3
- Apache 2.4.6
Apacheに関しては、既に構築済みとして進めています
Postfix インストール及び設定
Postfixのインストールに必要なパッケージをインストールします
$ sudo yum install gcc gcc-c++ pcre-devel zlib-devel make wget openssl-devel $ sudo yum install libxml2 libxml2-devel libxslt-devel libxslt libxslt-devel gd-devel $ sudo yum install perl-ExtUtils-Embed GeoIP-devel gperftools-devel flex libcap-devel
Postfixをインストールします
$ sudo yum install postfix cyrus-sasl-md5 libdbi-dbd-mysql cyrus-sasl-plain
Postfixで使用するユーザー(postfixadmin )と使用するDB(postfixadmin )を設定します
$ mysql -u root -p mysql> create database postfixadmin character set utf8 collate utf8_bin; mysql> grant all privileges on postfixadmin.* to postfixadmin@'localhost' identified by '(パスワード)'; mysql> select host,user,password from mysql.user; mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | postfixadmin | +--------------------+ 2 rows in set (0.00 sec) mysql> flush privileges;
postfixのバージョンドメインで使用するユーザーを作成します。
ユーザー名は「vuser」としてメールが配送されるディレクトリ「/home/vmailbox」をホームディレクトリとします
$ sudo mkdir /home/vmailbox $ sudo groupadd -g 600 vuser $ sudo useradd -g vuser -u 600 -d /home/vmailbox -s /sbin/nologin vuser $ sudo chown vuser:vuser /home/vmailbox $ sudo chmod 771 /home/vmailbox
Postfixの設定ファイルの「main.cf」を編集します
SMTP認証とバーチャルドメイン関係の設定は最終行に追加します
$ sudo cp -p /etc/postfix/main.cf /etc/postfix/main.cf.org $ sudo vim /etc/postfix/main.cf myhostname = example.com mydomain = example.com myorigin = $mydomain inet_interfaces = all mydestination = mynetworks = 127.0.0.0/8 home_mailbox = Maildir/ smtpd_banner = $myhostname ESMTP unknown # 最終行に追加します # SMTP-Auth smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_local_domain = $mydomain smtpd_client_restrictions = reject_rbl_client bl.spamcop.net, reject_rbl_client cbl.abuseat.org, reject_rbl_client truncate.gbudb.net, check_client_access hash:/etc/postfix/reject_client, permit smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes # Virtual Domains local_transport = local virtual_transport = virtual virtual_mailbox_base = /home/vmailbox virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf virtual_alias_domains = $virtual_alias_maps virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf virtual_minimum_uid = 600 virtual_uid_maps = static:600 virtual_gid_maps = static:600 # Mailbox limit(クォーターの設定はなし) virtual_mailbox_limit = 0 # TLS smtp_tls_security_level = may smtp_tls_loglevel = 1 smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
reject_clientのファイル生成します。このファイルは拒否したいクライアントのIPアドレスを追加していきます。スパム業者等で何回もアクセスしてくるIPアドレスを追加していけばいいかと思います。まだ使わないので空のファイル生成のみおこなっています
$ sudo touch /etc/postfix/reject_client $ sudo postmap /etc/postfix/reject_client
バーチャルドメインに必要な各種ファイル再生します。
mysql_virtual_alias_maps.cf では、DBの接続ユーザー・パスワード・DB名を設定します
$ sudo vi /etc/postfix/mysql_virtual_alias_maps.cf user = postfixadmin password = xxxxxxx hosts = localhost dbname = postfixadmin table = alias select_field = goto where_field = address
mysql_virtual_domains_maps.cf も同様に作成します
$ sudo vi /etc/postfix/mysql_virtual_domains_maps.cf user = postfixadmin password = xxxxxx hosts = localhost dbname = postfixadmin table = domain select_field = domain where_field = domain additional_conditions = and active = '1'
mysql_virtual_mailbox_maps.cf も同様に作成します
$ sudo vi /etc/postfix/mysql_virtual_mailbox_maps.cf user = postfixadmin password = xxxxxxx hosts = localhost dbname = postfixadmin table = mailbox select_field = maildir where_field = username
25番ポートを使用せずSubmissionポートの587番でSMTP送信ができるように設定します。
変更箇所は以下になります
$ sudo cp -p /etc/postfix/master.cf /etc/postfix/master.cf.org $ sudo vi /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
Postfixで使用するSSL証明書を発行します。証明書の発行に関しての住所・連絡先は使用する環境で変更して下さい
$ sudo cd /etc/pki/tls/certs/ $ sudo make mail.pem Country Name (2 letter code) [XX]:JP State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []:
Dovecot インストール及び設定
dovecotをyumでインストールします
$ sudo yum install dovecot dovecot-mysql
dovecotで使用するプロトコルを設定します。pop3 と imapのみを使用するので、そのプロトコルを設定します
$ sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.org $ sudo vi /etc/dovecot/dovecot.conf protocols = pop3 imap
dovecotの設定をおこないます。
# メールが配送されるディレクトリとそのユーザーなどを設定します $ sudo cp /etc/dovecot/conf.d/10-mail.conf /etc/dovecot/conf.d/10-mail.conf.org $ sudo vi /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/home/vmailbox/%d/%n first_valid_uid = 600 first_valid_gid = 600
imapとpop3を有効にして、imaps,pop3sともport 0を追加してデフォルトポートを起動しないようにするする。
$ sudo cp /etc/dovecot/conf.d/10-master.conf /etc/dovecot/conf.d/10-master.conf.org $ sudo vim /etc/dovecot/conf.d/10-master.conf # Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0660 user = postfix group = postfix mode = 0660 } inet_listener imap { port = 143 ←有効化 } inet_listener imaps { #port = 993 #ssl = yes } inet_listener pop3 { port = 110 ←有効化 } inet_listener pop3s { port = 0 #ssl = yes }
10-auth.confを下記のように変更します
$ sudo vim /etc/dovecot/conf.d/10-auth.conf #auth_mechanisms = plain auth_mechanisms = plain login # plaintextの認証を有効 disable_plaintext_auth = no ※以下の行を有効にします !include auth-system.conf.ext !include auth-sql.conf.ext
auth-sql.conf.extを以下のように設定します
$ sudo cp -p /etc/dovecot/conf.d/auth-sql.conf.ext /etc/dovecot/conf.d/auth-sql.conf.ext.org $ sudo vim /etc/dovecot/conf.d/auth-sql.conf.ext passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext }
dovecot-sql.conf.ext を設定します。DB名・DBユーザー・パスワード・クエリなどを設定します
$ sudo vim /etc/dovecot/dovecot-sql.conf.ext driver = mysql default_pass_scheme = MD5-CRYPT connect = host=localhost dbname=postfixadmin user=postfixadmin password=xxxxx password_query = SELECT username as user, password FROM mailbox WHERE username = '%u' AND active = '1' user_query = SELECT concat('/home/vmailbox/', maildir) as home, 600 as uid, 600 as gid FROM mailbox WHERE username = '%u' AND active = '1' iterate_query = SELECT userid AS username, domain FROM users
20-pop3.conf を下記のように設定します
$ sudo vim /etc/dovecot/conf.d/20-pop3.conf protocol pop3 { #pop3_uidl_format = %08Xu%08Xv pop3_uidl_format = %08Xu%08Xv # ←コメント削除 } mail_max_userip_connections = 1000
dovecotの自動起動及びサービスを起動します
$ sudo systemctl enable dovecot.service $ sudo systemctl start dovecot $ sudo systemctl list-unit-files -t service | grep dovecot dovecot.service enabled
saslauthdの自動起動及びサービスを起動します
$ sudo systemctl enable saslauthd.service $ sudo systemctl start saslauthd $ sudp systemctl list-unit-files -t service | grep saslauthd saslauthd.service enabled
postfixの自動起動及びサービスを起動します
$ sudo systemctl enable postfix.service $ sudo systemctl start postfix $ sudo systemctl list-unit-files -t service | grep postfix postfix.service enabled
PHP 7.3 インストール
PHPはyumでインストールされる5系ではなく、PHP 7.3をします
既存のPHPがインストールされている場合は削除する
$ sudo yum list installed | grep php $ sudo yum remove php*
remi, epel レポジトリ設定します
$ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm $ sudo yum install epel-release
remi, epel レポジトリを有効にして、php 7.3 インストールをします
$ sudo yum install --enablerepo=epel,remi,remi-php73 php php-devel php-mbstring php-mysql php-pecl-ssh2 $ php -v PHP 7.3.14 (cli) (built: Jan 21 2020 09:59:50) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.14, Copyright (c) 1998-2018 Zend Technologies
php.iniの設定のタイムゾーンを日本に設定します
$ sudo vim /etc/php.ini date.timezone = Asia/Tokyo
postfixadminをインストール
wgetでpostfixadmin 3.2をダウンロードして、圧縮ファイルを解凍してWEBディレクトリに移動します
$ sudo cd /usr/local/src $ sudo wget http://nchc.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin-3.2.tar.gz $ sudo tar xzvf postfixadmin-3.2.tar.gz $ sudo mv postfixadmin-3.2 /var/www/ $ sudo mv /var/www/postfixadmin-3.2/ /var/www/postfixadmin # 所有者をapacheに変更しておきます $ sudo chown apache:apache -R /var/www/postfixadmin
config.inc.phpを変更します。主にDB関係の設定をおこないます
$ sudo vim /var/www/postfixadmin/config.inc.php <?php $CONF['configured'] = true; $CONF['default_language'] = 'ja'; $CONF['database_type'] = 'mysql'; $CONF['database_user'] = 'postfixadmin'; $CONF['database_password'] = 'xxxxxxxx'; $CONF['database_name'] = 'postfixadmin'; $CONF['admin_email'] = '(管理者メールアドレス)';
postfixadmin.confを作成して、postfixadminに関するApacheの設定おこないます。必要に応じてIP制限・BASIC認証など行います。今回は何も設定をいれていません
$ sudo vi /etc/httpd/conf.d/postfixadmin.conf <VirtualHost *:80> DocumentRoot "/var/www/html" ServerName example.com ErrorLog "logs/error_log" CustomLog "logs/access_log" common Alias /postfixadmin "/var/www/postfixadmin/public" </VirtualHost>
apacheを再起動して設定を読み直します
$ sudo systemctl restart httpd
IP制限は「.htaccess」でおこなうの設定します
$ sudo vim /var/www/postfixadmin/.htaccess Require all denied Require ip xxx.xxx.xxx.xxx Require ip xxx.xxx.xxx.xxx
ブラウザでpostfixadminのサイトにアクセスして管理者ユーザーの設定などの初期設おこないます。
「http://xxxxxxx.com/postfixadmin/setup.php」でブラウザでアクセスすると初期設定画面になります。
管理者のパスワードを行った後に、config.inc.phpにもその時に設定したパスワードのハッシュ値を追加します
$ sudo vi /var/www/postfixadmin/config.inc.php $CONF['setup_password'] = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
また、WEBにアクセスると「ERROR: the templates_c directory doesn’t exist or isn’t writeable for the webserver」になる場合は、templates_c のディレクトリを作成し書込み権限をつけます。
ダウンロードしたpostfixadminのバージョンによっては、templates_c のディレクトリがない場合はあるようです
$ sudo mkdir /var/www/postfixadmin/templates_c $ sudo chmod 755 /var/www/postfixadmin/templates_c $ sudo chown apache:apache /var/www/postfixadmin/templates_c
ディスカッション
コメント一覧
postfixadminのインストール資料、大変参考になります。
ところで、php-imapはどのようにしてインストールしたのでしょうか?
よろしくお願いいたします。
https://ex1.m-yabe.com/archives/5201
の記事で、php-imapのインストール方法を書きました。
remi,epelのレポジトリを有効にすればインストールできるかと思います
$ sudo yum install –enablerepo=epel,remi,remi-php73 php-imap
ありがとうございました。
大変丁寧なpostfixadminのインストールブログを作成いただき 感謝します。
過去に色々なブログ観て4回程 postfixadminの設定に挑戦しましたが
設定が出来ませんでした。
今回も設定が出来ませんでした。
バージョン情報
——————————
PHP 7.4.16
mysql Ver 14.14 Distrib 5.7.33
Cent OS 7.7
Apache/2.4.6
———————————
「http://xxxxxxx.com/postfixadmin/setup.php」ブラウザでアクセスすると
Please edit config.inc.php – change $CONF[‘configured’] to true after setting your database settings
エラーが発生
WinSCPでディレクトリを確認するとsetup.phpは下記のディレクトリありますが、
「http://xxxxxxx.com/postfixadmin//public/setup.php」にブラウザでアクセスすると
The requested URL /postfixadmin/public/setup.php was not found on this server.エラーが発生し
初期設定画面が表示されません。
どの様な原因が想定されるのでしょうか 何卒よろしくおねがいします。
http://xxxxxxx.com/postfixadmin/setup.php にアクセスすると下記のエラーですので、データベースの設定が怪しいです
Please edit config.inc.php – change $CONF[‘configured’] to true after setting your database settings
「/var/www/postfixadmin/config.inc.php」に設定されているデータベースの設定が正しくできていない可能性があると思います
下記のように設定している場合は、config.inc.phpに設定してるデータベースのパラメータでデータベースにアクセスして
設定しているデータベースの確認をできますか?
CONF[‘database_type’] = ‘mysql’;
$CONF[‘database_user’] = ‘postfixadmin’;
$CONF[‘database_password’] = ‘Ast6382Csa’;
$CONF[‘database_name’] = ‘postfixadmin’;
$ mysql -u postfixadmin -pAst6382Csa
MariaDB [(none)]> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| postfixadmin |
+——————–+
2 rows in set (0.00 sec)
「http://xxxxxxx.com/postfixadmin/public/setup.php」にブラウザでアクセスしても
Apache側で、 Alias /postfixadmin “/var/www/postfixadmin/public” のエイリアスが効いているはずですので、
初期画面にはアクセスできないはずです。
「setup.php」のアクセスするURLは
「http://xxxxxxx.com/postfixadmin/setup.php」で正しいと思います
大変お世話になっています。先日ご指摘いただきました。
Mysqlのログインの件は ご指摘いただきました。前の段階で
既にログイン出来ています。
やっと初期画面Postfix Admin Setup Checkerが表示されて
色々エラーが表示されましたが
1つのエラーを残して解決出来ましたが 下記のエラーの解決方法が判りません
———————————————————–
Error: Can’t connect to database
Please edit the $CONF[‘database_*’] parameters in config.local.php.
DEBUG INFORMATION:
————————————————————
config.local.phpは初期画面Postfix Admin Setup Checkerで指摘されましたので
下記のように作成しています。
——————————–
———————————–
どの様な原因が想定されるのでしょうか 何卒よろしくおねがいします。
すみません config.local.phpの部分が送信の時に抜け落ちたようです。
再送します。
——————————–
———————————–