postfix

Table of Contents

Postfix+Dovecot+MySQL+Postfixadminで仮想サーバ対応のメールサーバを構築
Dovecot,MySQL,Postfixadminは別記事で参照
インストールの前提条件は、MySQLがインストール済み

インストール

# dnf install postfix postfix-mysql

バーチャルドメイン用のユーザを作成

# groupadd -g 10000 vuser
# useradd -g vuser -u 10000 vuser
# cd /home/
# chmod 771 vuser/

postfixの設定

mysql_virtual_alias_maps.cf
# vi /etc/postfix/mysql_virtual_alias_maps.cf
-----------------------------------------------
user = postfix
password = (パスワード)
hosts = localhost
dbname = postfixdb
table = alias
select_field = goto
where_field = address
-----------------------------------------------
mysql_virtual_domains_maps.cf
# vi /etc/postfix/mysql_virtual_domains_maps.cf
-----------------------------------------------
user = postfix
password = (パスワード)
hosts = localhost
dbname = postfixdb
table = domain
select_field = domain
where_field = domain
additional_conditions = and active = '1'
-----------------------------------------------
mysql_virtual_mailbox_maps.cf
# vi /etc/postfix/mysql_virtual_mailbox_maps.cf
-----------------------------------------------
user = postfix
password = (パスワード)
hosts = localhost
dbname = postfixdb
table = mailbox
select_field = maildir
where_field = username
-----------------------------------------------
mysql_virtual_mailbox_limit_maps.cf
# vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
-----------------------------------------------
user = postfix
password = (パスワード)
hosts = localhost
dbname = postfixdb
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'
-----------------------------------------------
/etc/postfix/mysql_sender_login_maps.cf
# vi /etc/postfix/mysql_sender_login_maps.cf
-----------------------------------------------
user = postfix
password = (パスワード)
hosts = localhost
dbname = postfixdb
query = SELECT username FROM mailbox WHERE username='%s'
-----------------------------------------------
アクセス権の変更
# chmod 640 /etc/postfix/mysql_virtual_alias_maps.cf
# chmod 640 /etc/postfix/mysql_virtual_domains_maps.cf
# chmod 640 /etc/postfix/mysql_virtual_mailbox_maps.cf
# chmod 640 /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
# chmod 640 /etc/postfix/mysql_sender_login_maps.cf
# chown root:postfix /etc/postfix/mysql_virtual_alias_maps.cf
# chown root:postfix /etc/postfix/mysql_virtual_domains_maps.cf
# chown root:postfix /etc/postfix/mysql_virtual_mailbox_maps.cf
# chown root:postfix /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
# chown root:postfix /etc/postfix/mysql_sender_login_maps.cf
Main.cf
# cp /etc/postfix/main.cf /etc/postfix/main.cf.org
# vi /etc/postfix/main.cf
-----------------------------------------------
#ホスト名
myhostname = mail.chinaz.org
#ドメイン名
mydomain = chinaz.org
#メールに使用するドメイン名
myorigin = $mydomain
#Mailを受信するネットワーク
inet_interfaces = all
#使用プロトコル:ipv4
inet_protocols = ipv4
#ローカル配送するドメイン名
mydestination = $myhostname, localhost.$mydomain, localhost
#メール保管形式:Maildir形式の場合、"/"で終わらせる
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown

#SMTP Auth Seting
# SASL認証を有効
smtpd_sasl_auth_enable = yes
# 認証に使うSASLプラグインの種類
smtpd_sasl_type = dovecot
# 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
#RCPT TO コマンドの場面で適用するアクセス制限
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
# SMTPサーバーがクライアントに提供する認証メカニズムを制限(noanonymous 匿名ログインを許可しない)
smtpd_sasl_security_options = noanonymous
# 古いバージョンのAUTHコマンドの互換(Outlook Express を使用する場合のみ有効にする)
broken_sasl_auth_clients = yes
mua_helo_restrictions = permit_mynetworks, reject_non_fqdn_hostname, reject_invalid_hostname, permit

# Virtual Domains
#local は、ローカル宛、バーチャル宛を区別して配信する
local_transport = local
#virtualは、バーチャルドメインで運用の設定
virtual_transport = virtual
#メールボックスのベースパス
virtual_mailbox_base = /home/vuser
#メールアドレスやドメインを他のローカルまたはリモートアドレスに エイリアスする
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
#バーチャルエイリアスドメイン
virtual_alias_domains = $virtual_alias_maps
#メール配送 transport を使って配送されるドメインの リスト
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
#マッチするドメインの全ての有効な アドレス
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
#メールボックスまたは maildir 所有者の UID の下限を指定
virtual_minimum_uid = 600
#バーチャルメールボックスはすべて固定された uid および gid 10000 が所有するということを指定
virtual_uid_maps = static:10000
virtual_gid_maps = static:10000
# Mailbox limit(クォーターの設定はなし)
virtual_mailbox_limit = 0
# TLS
#宛先MTAが対応していればSTARTTLSを使用する。正規の証明書が使われていなくても通信する。宛先MTAがSTARTTLSに対応していない場合は平文で通信が行われる。
smtp_tls_security_level = may
#TLSで通信しているかどうかログ
smtp_tls_loglevel = 1
#RSA鍵と証明書を指定
smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt
smtpd_tls_key_file = /etc/pki/tls/certs/server.key
-----------------------------------------------

25番ポートを使用せずSubmissionポートの587番でSMTP送信ができるように設定

# cp -p /etc/postfix/master.cf /etc/postfix/master.cf.org
# vi /etc/postfix/master.cf
-----------------------------------------------
submission inet n       -       n       -       -       smtpd
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_helo_restrictions=$mua_helo_restrictions
-----------------------------------------------

受信拒否リスト(reject_client.db)の作成

# touch /etc/postfix/reject_client
# postmap /etc/postfix/reject_client

設定ファイルのチェック

# postfix check

起動設定

# systemctl start postfix
# systemctl disable postfix

ポートのオープン

# firewall-cmd --zone=external --add-service=smtp --permanent
# firewall-cmd --zone=external --add-service=smtps --permanent
# firewall-cmd --zone=external --add-service=smtp-submission --permanent
# firewall-cmd --zone=internal --add-service=smtp --permanent
# firewall-cmd --zone=internal --add-service=smtps --permanent
# firewall-cmd --zone=internal --add-service=smtp-submission --permanent
# firewall-cmd --reload

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です