Postfix 3.4 ソースインストール CentOS7(マルチドメイン)

Postfix 3.4 マルチドメイン版、ソースインストールをCentOS7上で行ってみました。

以前は、Postfix3.3をAmazonLinux2に入れてチェックしました。
Postfix 3.3 on Amazon Linux 2 ソースインストール 2018年7月版

Postfix 3.6 ソースインストール CentOS Stream8
Postfix 3.6、マルチドメン版をソースからインストールします。 Postfix 3.4 + CentOS7版は、上記から CentOS Stream8 CentOS9の中止、CentOS8のサポート短縮など、Cen...

↑ CentOS Stream8、Postfix 3.6版

関連記事

Postfix 3.4 [RainLoop] CentOS7 (マルチドメイン) (2019/05/31 追加)
Postfix 3.4 [迷惑メール対策 SpamAssassin ユーザ毎] CentOS7 (マルチドメイン) (2019/05/30 追加)
Postfix 3.4 [迷惑メール対策 SpamAssassin メール振り分け] CentOS7 (マルチドメイン) (2019/05/24 追加)
Postfix 3.4 [迷惑メール対策 SpamAssassin] CentOS7 (マルチドメイン) (2019/05/21 追加)
Postfix 3.4 [迷惑メール対策 DKIM] CentOS7 (マルチドメイン) (2019/05/20 追加)
Postfix 3.4 [迷惑メール対策 SPF] CentOS7 (マルチドメイン) (2019/05/14 追加)
Postfix 3.4 [SSL 送受信] CentOS7(マルチドメイン) (2019/05/12 追加)
Postfix 3.4 [dovecot] CentOS7(マルチドメイン) (2019/05/11 追加)

ポート変更

CentOS7 firewall 設定 / ConoHa VPS

にある、SSHポートの変更を行います。

ホスト名変更

CentOS7 ホスト名を変更する方法

で、「ホスト名」の変更を行います。

事前インストール

# yum update
# yum remove mariadb-libs
# yum groupinstall "Development Tools"
# yum install openssl-devel

↑必要な物を入れておきます。

MySQL 5.7

# rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
# yum install mysql-community-server

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
Importing GPG key 0xXXXXXXXX:
 Userid     : "MySQL Release Engineering <mysql-build@oss.oracle.com>"
 Fingerprint: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
 Package    : mysql57-community-release-el7-11.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

Is this ok [y/N]:

途中、上記のようなメッセージが出てきます。
ダウンロード時の検証を行うため、サーバー内に、キーがないため、
「キーを入れるよ。いい?」というメッセージです。
「y」を押して進みます。
# mysqld --version
mysqld  Ver 5.7.26 for Linux on x86_64 (MySQL Community Server (GPL))

↑ 5.7.26が入りました。
# systemctl start mysqld.service
# systemctl enable mysqld.service

↑起動と、自動起動を設定します。
# cat /var/log/mysqld.log | grep password
2019-XX-XXTXX:XX:XX.285326Z 1 [Note] A temporary password is generated for root@localhost: (初期パスワード)

↑最初に設定されたパスワードを表示させます。

↓初期設定を行います。

# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root: (初期パスワード)

↑「cat」で表示されたパスワードを入れます。
The existing password for the user account root has expired. Please set a new password.
New password:(新たに入力したパスワード)
Re-enter new password: (新たに入力したパスワード)

↑新規にパスワードを入れます。
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) :

↑上記、「パスワードの強度が100だが、再度、変更する?」
(100が最高で、十分、複雑な英数字だよ!と、言われている)
と、聞かれました。複雑なパスワードを入れましたので・・・

Yを押してみるそして・・・

New password: (安易なパスワード)
Re-enter new password: (安易なパスワード)

↑ここで、安易な(簡単な)パスワードを入力すると、
Estimated strength of the password: 0 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :

↑「強度がゼロじゃー」ということで、再度設定を求められます。

先ほどの100のパスワードを再度入れます。

次に進ます。

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

↑匿名ユーザを削除するか。「y」を押します。削除したほうがセキュリティが向上します。
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

↑リモートから、「root」でログインするのを禁止するか。「y」で禁止をすると、セキュリティが向上します。
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

↑「test」というデータベースを削除するか。「y」で削除したほうが、セキュリティが向上します。
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

すべてを設定して、再読込をするか。「y」とします。
Success.
All done! 

で、完了します。

Postfix 3.4 本体 インストール

# yum install mysql-devel

icu4c-64_2

# wget http://download.icu-project.org/files/icu4c/64.2/icu4c-64_2-src.tgz
(↑上記ではなく↓で)
# wget https://github.com/unicode-org/icu/releases/download/release-64-2/icu4c-64_2-src.tgz
(↑2020/07/30 修正)
# tar xzvf icu4c-64_2-src.tgz
# cd icu/source
# ./runConfigureICU Linux
# make
# make install

db-4.8.30

# wget http://download.oracle.com/berkeley-db/db-4.8.30.tar.gz
# tar zxvf db-4.8.30.tar.gz
# cd db-4.8.30/build_unix/
# ../dist/configure --prefix=/usr/
# make
# make install

# echo /usr/lib > /etc/ld.so.conf.d/usr-lib.conf
# ldconfig

Postfix 3.4.5

# tar xzvf postfix-3.4.5.tar.gz 
# cd postfix-3.4.5/
# make makefiles CCARGS='-DUSE_TLS -DUSE_SASL_AUTH -DHAS_MYSQL -DDEF_SERVER_SASL_TYPE=\"dovecot\" -I/usr/local/include -I/usr/include/mysql/' AUXLIBS="-lssl -lcrypto -L/usr/local/lib" 'AUXLIBS_MYSQL=-L/usr/lib64/mysql -lmysqlclient -lz -lm'
# make
# make install

httpd 2.4,php 7.3

# yum -y install yum-utils
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# rpm -ivh epel-release-latest-7.noarch.rpm
# yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# yum-config-manager --enable remi-php73
# yum install php73 php73-php httpd mod_ssl

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
Importing GPG key 0xxxxxxxx:
 Userid     : "Remi Collet <RPMS@FamilleCollet.com>"
 Fingerprint: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
 Package    : remi-release-7.6-2.el7.remi.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-remi
 

Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
Importing GPG key 0xxxxxxxx:
 Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 Fingerprint: XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
 Package    : epel-release-7-11.noarch (@extras)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

↑インストール中、キーがないよということで、「y」を入れて、インストールします。
# yum install --enablerepo=remi,remi-php73 php73-php-mysqlnd php73-php-mbstring
# ln -s /usr/bin/php73 /usr/bin/php

# httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   XXX XX 2019 XX:XX:XX

# php -v
PHP 7.3.5 (cli) (built: XXX XX 2019 XX:XX:XX) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.5, Copyright (c) 1998-2018 Zend Technologies

↑http 2.4 と、php 7.3 が入りました。
# vi /etc/httpd/conf/httpd.conf
AddType application/x-httpd-php .php

↑phpを有効にします。
# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
Options Indexes FollowSymLinks
↓
Options All -Indexes +SymLinksIfOwnerMatch -FollowSymLinks

AllowOverride None
↓
AllowOverride All
</Directory>

↑httpd.confファイルの「<Directory “/var/www/html”>」部分の2行を変更します。(2019/07/06 追記)

PostfixAdmin 3.2

PostfixAdmin本体

postfixをWEB上から管理するツールを入れます。

# wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz
# tar xzvf postfixadmin-3.2.tar.gz 
# cp -a postfixadmin-3.2 /var/www/postfixadmin

# vi /etc/httpd/conf/httpd.conf
Alias /postfixadmin "/var/www/postfixadmin/public"

http://(ドメイン)/postfixadmin/
が管理画面になるように設定をします。
セキュリティ上、「postfixadmin」以外の文字列にしたほうがいいかと思います。
無差別にアタックがあります。

DBに登録

# mysql -u root -p

でログインをして、PostfixAdmin用のDBを作成します。
use mysql;
INSERT INTO user (host,User,authentication_string,ssl_cipher,x509_issuer,x509_subject) VALUES ('localhost','(postfixadminユーザー)',password('(postfixadminパスワード)'),'','','');
INSERT INTO db (host,db,user) VALUES ('localhost','(postfixadminデータベース)','(postfixadminユーザー)');
UPDATE db SET Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Execute_priv='Y',Event_priv='Y',Trigger_priv='Y' where db='(postfixadminデータベース)';
create database (postfixadminデータベース);
flush privileges;

postfixadminの設定関係

# cd /var/www/postfixadmin
# vi config.local.php
<?php
$CONF['configured'] = true;
$CONF['default_language'] = 'ja';
$CONF['database_user'] = '(postfixadminユーザー)';
$CONF['database_password'] = '(postfixadminパスワード)';
$CONF['database_name'] = '(postfixadminデータベース)';
$CONF['admin_email'] = '(連絡先メールアドレス)';
$CONF['quota'] = 'YES';
?>

httpd 関係ののパラメーター設定

# systemctl enable httpd.service
# systemctl start httpd.service

↑起動&自動起動を設定します。
# cd /var/www/postfixadmin
# mkdir templates_c
# chmod 777 templates_c

↑ディレクトリを作成しておきます。
# firewall-cmd --permanent --add-service=http
# firewall-cmd --permanent --add-service=https
# firewall-cmd --reload

↑CentOS7、Firewallのポートを空けておきます。

http://(サーバーIPアドレス)/postfixadmin/setup.php

↑ブラウザで、アクセスをして、セットアップを実行します。

「Change setup password」
というところで、新しいパスワードを入れます。

$CONF[‘setup_password’] = ‘(英数字の長い文字列)’;
を入れよ。
と指示されるので、「config.local.php」に追加します。

再び
http://(サーバーのIPアドレス)/postfixadmin/setup.php
にアクセス。

「Create superadmin account」
と画面がでるので、
管理者用のメールとパスワードを設定します。

これで、
http://(サーバーのIPアドレス)/postfixadmin/
からログインができます。

バーチャルドメイン用 postfixの設定

/mail をメール専用アカウントの保存用ルートディレクトリとし、
各ユーザーのメールボックスは /mail/(独自ドメイン)/user(@前)/ とします。

# groupadd -g 10000 vuser
# useradd -g vuser -u 10000 vuser

↑バーチャルドメインで処理するユーザーの作成
# mkdir /mail
# chown vuser:vuser /mail
# chmod 771 /mail

↑メール保存用ルートディレクトリの作成
vi /etc/postfix/mysql_virtual_alias_maps.cf
user = (postfixadminユーザー)
password = (postfixadminパスワード)
hosts = localhost
dbname = (postfixadminデータベース)
table = alias
select_field = goto
where_field = address

vi /etc/postfix/mysql_virtual_domains_maps.cf
user = (postfixadminユーザー)
password = (postfixadminパスワード)
hosts = localhost
dbname = (postfixadminデータベース)
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = '1'

vi /etc/postfix/mysql_virtual_mailbox_maps.cf
user = (postfixadminユーザー)
password = (postfixadminパスワード)
hosts = localhost
dbname = (postfixadminデータベース)
table = mailbox
select_field = maildir
where_field = username

# chown :postfix /etc/postfix/mysql_virtual_*
# chmod 640 /etc/postfix/mysql_virtual_*

バーチャルドメイン用 Postfix設定ファイル main.cf の編集
vi /etc/postfix/main.cf

myhostname = (ローカルホスト名)
mydomain = (ローカルドメイン名)
myorigin = $myhostname
relay_domains = $mydestination
 
home_mailbox = Maildir/
 
----- 以下を最終行に追記
local_transport = local
virtual_transport = virtual
virtual_mailbox_base = /mail
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 = 10000
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
 
maximal_backoff_time = 800s
minimal_backoff_time = 100s
bounce_queue_lifetime = 60m
maximal_queue_lifetime = 60m
 
message_size_limit = 20480000
 
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_local_domain = $myhostname
smtpd_relay_restrictions = permit_mynetworks,  permit_sasl_authenticated, permit_auth_destination, reject_unauth_destination, reject

Postfix用 Firewall調整

あらかじめ、必要なポートを空けておきます。

# firewall-cmd --permanent --add-service=pop3
# firewall-cmd --permanent --add-service=pop3s
# firewall-cmd --permanent --add-service=smtp-submission
# firewall-cmd --permanent --add-service=smtp
# firewall-cmd --permanent --add-service=smtps
# firewall-cmd --permanent --add-service=imap
# firewall-cmd --permanent --add-service=imaps
# firewall-cmd --reload

Postfix 3.4 起動 (2019/05/11 更新)

vi /etc/systemd/system/postfix.service
-------------------------------------------
[Unit]
Description=postfix
After=network.target

[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/sbin/postfix start
ExecStop=/usr/sbin/postfix stop

[Install]
WantedBy=multi-user.target

systemctl start postfix
systemctl enable postfix

↑ postfixを起動して、自動起動も設定します。

http://(サーバーのIPアドレス)/postfixadmin/
から、ドメインとメールアドレスを設定してみます。
テストなので、移行前のドメインでもテストはできます。

コマンドプロンプトから、
# mail
コマンドで、設定したメールアドレス宛てに送付してみます。

PostfixAdminで、ドメイン等を設定しても
/mail/以下は、空ですが、メールを送るとディレクトリが自動的に作成されます。

# ls -l /mail/(ドメイン)/(@前)/new/
を見てみると、

-rw------- 1 vuser vuser  509 XXX XX XX:XX XXXXXX.XXXXXX.XXX.XXXXX.XXX

とメールが到着しているのが確認されました。

次回、POPなどの受信系を整備します。

タイトルとURLをコピーしました