Postfix + Dovecot + PostfixAdmin(PostgreSQL) インストール

2021-06-24

概要

以前の記事「Postfix + Dovecot + PostfixAdmin(MySQL) インストール」で、DBをMySQLを利用してPostfixadminをインストールする方法を紹介しました。今回は、同じDBでもMySQLを利用せずPostgreSQLを利用した場合のインストール方法を紹介します。OSはCentOS 6.8で動作確認しています。

作業内容(Postfix)

  • 必要なパッケージインストール
  • PostgreSQLの設定
  • バーチャルユーザー作成
  • 設定ファイル編集
  • MTA切替

作業内容(Dovecot)

  • 設定ファイル編集
  • 自動起動及びサービス起動

作業内容(PostfixAdmin)

  • パッケージダウンロード及び解凍
  • 設定ファイル編集
  • Apacheの設定等

Postfix

必要なパッケージインストール

postfix, php, postgresqkなどを必要なパッケージをyumでインストールします

# yum install postfix httpd
# yum install php php-pgsql php-mbstring php-imap postgresql-server
# yum install cyrus-sasl-plain cyrus-sasl-md5
# yum install dovecot

PostgreSQLの設定

DBを初期化します

# su postgres -
$ initdb -D /var/lib/pgsql/data
$ exit

PostgreSQLを起動及び自動起動の設定をします

# /etc/rc.d/init.d/postgresql start
# chkconfig postgresql on

postgresのパスワード設定を設定します。下記の設定ではパスワードはpost693gresと設定しています

# su - postgres
$ psql
postgres=# alter user postgres with password 'post693gres';
postgres=# select usename,passwd from pg_shadow;
postgres=# \q
$ exit

postfixadminで利用するDBを作成します。ユーザーは「postfixadmin」、DB名は「postfixadmin」、パスワードは「post439ad」とします

# su - postgres
$ psql
postgres=# CREATE ROLE postfixadmin WITH LOGIN PASSWORD 'post439ad';
postgres=# CREATE DATABASE postfixadmin OWNER postfixadmin ENCODING 'UTF8';
postgres=# \q
$ exit

バーチャルユーザー作成

「vuser」というバーチャルユーザーを作成し、バーチャル用のメールディレクトリ(/home/vmailbox)をパーミッションなどの設定をします。

# mkdir /home/vmailbox
# groupadd -g 600 vuser
# useradd -g vuser -u 600 -d /home/vmailbox -s /sbin/nologin vuser
# chown vuser:vuser /home/vmailbox
# chmod 771 /home/vmailbox

設定ファイル編集

Postfixの設定ファイルの設定をしていきます。
主に設定するのはドメインやメールディレクトリなどの初期設定、SMTP-Authに関する設定、virtual domainsの設定、メールボックスサイズ制限 などです。メールボックスは無制限に設定しています

# cp -p /etc/postfix/main.cf /etc/postfix/main.cf.org
# vi /etc/postfix/main.cf

myhostname  = mail.example.com
mydomain = example.com
myorigin = $myhostname
inet_interfaces = all
mydestination = 
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
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes


# virtual domains
virtual_transport = virtual
virtual_mailbox_base = /home/vmailbox
virtual_alias_maps = pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf
# 事前準備で用意したユーザID,グループID
virtual_minimum_uid = 600
virtual_uid_maps = static:600
virtual_gid_maps = static:600

message_size_limit = 102400000
mailbox_size_limit = 102400000

# メールボックスサイズ制限
virtual_mailbox_limit = 0
virtual_mailbox_limit_maps = pgsql:/etc/postfix/pgsql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes

main.cfから外部参照しているファイルを設定していきます

# vi /etc/postfix/pgsql_virtual_alias_maps.cf
user = postfixadmin
password = post439ad
hosts = localhost
dbname = postfixadmin
table = alias
select_field = goto
where_field = address

# vi /etc/postfix/pgsql_virtual_domains_maps.cf
user = postfixadmin
password = post439ad
hosts = localhost
dbname = postfixadmin
table = domain
select_field = domain
where_field = domain

# vi /etc/postfix/pgsql_virtual_mailbox_maps.cf
user = postfixadmin
password = post439ad
hosts = localhost
dbname = postfixadmin
table = mailbox
select_field = maildir
where_field = username

# vi /etc/postfix/pgsql_virtual_mailbox_limit_maps.cf
user = postfixadmin
password = post439ad
hosts = localhost
dbname = postfixadmin
table = mailbox
select_field = quota
where_field = username

Submissionポート(587)設定するので、master.cfを変更します

# vi /etc/postfix/master.cf
smtp      inet  n       -       n       -       -       smtpd
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
#  -o smtpd_sasl_auth_enable=yes

#  ↓↓↓ コメントアウトを外して以下に変更 ↓↓↓

smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
#  -o smtpd_sasl_auth_enable=yes

MTA切替

sendmailの自動起動の削除及びMTAの切替をおこないます。Postfixが標準のMTAの場合は設定は不要です

# /etc/rc.d/init.d/sendmail stop
# chkconfig sendmail off

# alternatives --config mta
  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix

Dovecot 2.x

Dovecot 2.x の設定ファイルを編集していきます。Dovecot 1系と2系では設定ファイルの配置が違うので注意して下さい

使用するプロトコルは、pop3 imapで設定しています。使用する環境によって変更して下さい

# cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.org
# vi /etc/dovecot/dovecot.conf
protocols = pop3 imap

10-mail.confの設定

# vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmailbox/%d/%n
first_valid_uid = 600
first_valid_gid = 600

pop3 imapのみ設定しても、Dovecot2系では、imaps,pop3sのポートがListenするので、「10-master.conf」の設定にimaps,pop3sのport 0を追加してデフォルトポートを起動しないようにする

# vim /etc/dovecot/conf.d/10-master.conf
  inet_listener imaps {
    port = 0
    #port = 993
    #ssl = yes
  }

  inet_listener pop3s {
    port = 0
    #port = 995
    #ssl = yes
  }

10-auth.confの認証関係の設定ファイル

# vim /etc/dovecot/conf.d/10-auth.conf
auth_mechanisms = plain
auth_mechanisms = plain login digest-md5 cram-md5

※以下の行を有効にします
!include auth-system.conf.ext
!include auth-sql.conf.ext

SQL関係の設定をします

# vim /etc/dovecot/conf.d/auth-sql.conf.ext
  passdb sql {
    args = /etc/dovecot-sql.conf
  }
auth_passdb = pgsql /usr/local/etc/dovecot-pgsql.conf

pop3関係の設定

# vim /etc/dovecot/conf.d/20-pop3.conf
  protocol pop3 {
    #pop3_uidl_format = %08Xu%08Xv
    pop3_uidl_format = %08Xu%08Xv    # ←コメント削除
  }

10-master.confの設定

# vi /etc/dovecot/conf.d/10-master.conf
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }

SQL関係の設定をします

# vim /etc/dovecot/dovecot-sql.conf.ext
driver = pgsql
# Use "host= ... pass=foo#bar" if your password has '#' character
connect = host=localhost dbname=postfixadmin user=postfixadmin password=postfixadmin

password_query = SELECT userid AS username, domain, password \
  FROM users WHERE userid = '%n' AND domain = '%d'
user_query = SELECT home, uid, gid FROM users WHERE userid = '%n' AND domain = '%d'

# For using doveadm -A:
iterate_query = SELECT userid AS username, domain FROM users

自動起動及びサービス起動

postfix,Dovecotの起動及び自動起動の設定をおこないます

# /etc/rc.d/init.d/dovecot start
# chkconfig dovecot on
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on

PostfixAdmin

パッケージダウンロード及び解凍

postfixadminをダウンロードして、/var/www/htmlに展開します

# cd /usr/local/src
# wget http://nchc.dl.sourceforge.net/sourceforge/postfixadmin/postfixadmin-3.0.tar.gz
# tar xzvf postfixadmin-3.0.tar.gz
# mv postfixadmin-3.0 /var/www/html/
# mv /var/www/html/postfixadmin-3.0/ /var/www/html/postfixadmin

設定ファイル編集

主に変更箇所のみ記載しています

# vi /var/www/html/postfixadmin/config.inc.php

$CONF['setup_password'] = 'XXXXX';
後から変更(後ほどのWebセットアップで生成されるハッシュ値を入力する)

$CONF['configured'] = true;
$CONF['default_language'] = 'ja';

$CONF['database_type'] = 'pgsql';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'post439ad';
$CONF['database_name'] = 'postfixadmin';

$CONF['encrypt'] = 'md5crypt';

$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';

// Alias control for superadmins
$CONF['alias_control'] = 'YES';

Apacheの設定はIP制限などの設定を以下のように設定しています。

Apacheの設定
# vi /etc/httpd/conf.d/postfixadmin.conf
<Directory "/var/www/html/postfixadmin">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from 192.168.0 #ローカル経由のみ管理画面にアクセス可能


Apache再起動
# /etc/rc.d/init.d/httpd restart

GUIのセットアップは、WEBで情報が多数あるのでその情報を参考にする

LinuxCentOS 6

Posted by admin