・ システムアカウントとE-mailアカウントは別にしたい ・ user1@hirohiro716.comのようなアドレスで主に送受信する ・ 別名でuser1@alias.hirohiro716.comでも受信したい ・ メーリングリストも使用したい
・ AlmaLinuxのバージョン: 8.5 ・ Postfixのバージョン: 3.5.8 ・ Dovecotのバージョン: 2.3.8 ・ プロトコル: smtp/smtps/imaps/pop3s
DNSレコード
先にDNSレコードを登録しておく。
mydomain: email.hirohiro716.com
virtual_mailbox_domains: hirohiro716.com
virtual_alias_domains: alias.hirohiro716.com
email.hirohiro716.com A 0 153.126.160.145 hirohiro716.com A 0 153.126.160.145 hirohiro716.com MX 10 hirohiro716.com hirohiro716.com TXT 0 v=spf1 +mx ~all alias.hirohiro716.com A 0 153.126.160.145 alias.hirohiro716.com MX 10 alias.hirohiro716.com alias.hirohiro716.com TXT 0 v=spf1 +mx ~all
SSL証明書
この手順ではZeroSSLで発行した証明書を使用する。ZeroSSLにログインして発行した証明書のzipファイルを解凍する。
# unzip email.hirohiro716.com.zip -d /etc/ssl/email.hirohiro716.com/
解凍されたファイルは「ca_bundle.crt」「certificate.crt」「private.key」で、中間CA証明書がないので作成する。
# cd /etc/ssl/email.hirohiro716.com/ # cat certificate.crt ca_bundle.crt > fullchain.crt
証明書のSELinuxコンテキストのラベル付けを復元する。
# restorecon -RF /etc/ssl/email.hirohiro716.com/
Dovecot
Dovecotをインストールする。
# dnf install dovecot
SSL証明書の設定をする。
※変更箇所のみ記載
ssl_cert = </etc/ssl/email.hirohiro716.com/fullchain.crt ssl_key = </etc/ssl/email.hirohiro716.com/private.key
使用するプロトコルを設定する。
※変更箇所のみ記載
protocols = imap pop3
認証の際に受け付けるポート、Postfix認証用ソケットファイルの設定をする。ソケットファイルのパーミッションとか所有者とかはコメントを読む限り0666で問題なさそうなのでそのまま。
※変更箇所のみ記載
service imap-login { inet_listener imap { port = 0 } inet_listener imaps { port = 993 ssl = yes } } service pop3-login { inet_listener pop3 { port = 0 } inet_listener pop3s { port = 995 ssl = yes } } unix_listener /var/spool/postfix/private/auth { mode = 0666 }
バーチャルメールボックス用のシステムアカウントとディレクトリを作成する。
# groupadd -g 5000 vmail # useradd -u 5000 -g vmail -s /sbin/nologin vmail # mkdir /var/spool/mail/virtual # chown vmail:vmail /var/spool/mail/virtual # chmod 770 /var/spool/mail/virtual
Dovecotにバーチャルメールボックスの場所を設定する。
※変更箇所のみ記載
mail_location = maildir:/var/spool/mail/virtual/%d/%n/Maildir
Dovecotの認証方法に関する設定を変更する。システムアカウントで認証はしない。
※変更箇所のみ記載
#!include auth-system.conf.ext !include auth-passwdfile.conf.ext !include auth-static.conf.ext
auth-passwdfile.conf.extはデフォルトのまま使用する。
passdb { driver = passwd-file args = scheme=CRYPT username_format=%u /etc/dovecot/users } userdb { driver = passwd-file args = username_format=%u /etc/dovecot/users }
auth-passwdfile.conf.extで指定されているusersファイルを作成する。
user1@hirohiro716.com:{PLAIN}password-1234 user2@hirohiro716.com:{PLAIN}password-5678
auth-static.conf.extを編集して作成したアカウント「vmail」を指定する。homeの指定はしなくても大丈夫だと思われる。
※変更箇所のみ記載
userdb { driver = static args = uid=vmail gid=vmail }
Postfix
基本的な設定
Postfixをインストールする。
# dnf install postfix
main.cfを編集して基本的な設定をする。
※変更箇所のみ記載
# Not matching the actual hostname. myhostname = email.hirohiro716.com mydomain = $myhostname myorigin = $mydomain # Receive mail on all network interfaces. inet_interfaces = all # Disable IPv6. inet_protocols = ipv4 # Specifies the domain that this machine delivers locally. mydestination = $myhostname, localhost.$mydomain, localhost # Not publish. smtpd_banner = $myhostname ESMTP unknown # Certificate settings. smtpd_tls_cert_file = /etc/ssl/email.hirohiro716.com/fullchain.crt smtpd_tls_key_file = /etc/ssl/email.hirohiro716.com/private.key # Disable user search. disable_vrfy_command = yes # SASL settings. smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination # Client restriction settings. smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit # HELO restriction settings. smtpd_helo_required = yes smtpd_helo_restrictions = permit_mynetworks, reject_unknown_hostname, reject_non_fqdn_hostname, reject_invalid_hostname, permit # Sender restriction settings. smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain, reject_non_fqdn_sender
master.cfを編集して利用するプロトコルの種類を設定する。smtpsのsmtpd_tls_wrappermodeを有効にしないとtcp/465でもSTARTTLSが試行される。
※変更箇所のみ記載
smtp inet n - n - - smtpd submission inet n - n - - smtpd smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes
メールの容量に関する設定
現在のサイズに関する設定値を確認する。
berkeley_db_create_buffer_size = 16777216 berkeley_db_read_buffer_size = 131072 body_checks_size_limit = 51200 bounce_size_limit = 50000 header_size_limit = 102400 lmdb_map_size = 16777216 mailbox_size_limit = 51200000 message_size_limit = 10240000 tcp_windowsize = 0
メールボックスが50MB、メッセージが10MBに制限されている。ちょっと少ないので設定変更する。再度「main.cf」を編集して最下部に追記する。
※追記する箇所のみ記載
# Maximum mailbox size 1GB. Maximum message size 20MB. mailbox_size_limit = 1024000000 message_size_limit = 20480000
バーチャルメールボックスの設定
バーチャルメールボックスの設定をする。再度「main.cf」を編集して最下部に追記する。
※追記する箇所のみ記載
# Virtual mailbox settings. virtual_mailbox_domains = hirohiro716.com virtual_mailbox_base = /var/spool/mail/virtual virtual_mailbox_maps = hash:/etc/postfix/vmailbox virtual_uid_maps = static:5000 virtual_gid_maps = static:5000
main.cfで指定したバーチャルメールボックスの場所を定義するファイルを作成する。
user1@hirohiro716.com hirohiro716.com/user1/Maildir/ user2@hirohiro716.com hirohiro716.com/user2/Maildir/
作成したvmailboxから検索テーブル(vmailbox.db)を生成する。
# postmap /etc/postfix/vmailbox
バーチャルエイリアスの設定
バーチャルエイリアスの設定をする。再度「main.cf」を編集して最下部に追記する。
※追記する箇所のみ記載
# Virtual ailias settings. virtual_alias_domains = alias.hirohiro716.com virtual_alias_maps = hash:/etc/postfix/virtual
main.cfで指定したバーチャルエイリアスの転送先を定義するファイルを作成する。
@alias.hirohiro716.com @hirohiro716.com
作成したvirtualから検索テーブル(virtual.db)を生成する。
# postmap /etc/postfix/virtual
メーリングリストの設定
メーリングリストはバーチャルエイリアスの設定で実現する。再度「main.cf」を編集して「virtual_alias_maps」に「regexp:/etc/postfix/ml」をカンマ区切りで追記する。
※変更箇所のみ記載
virtual_alias_maps = hash:/etc/postfix/virtual, regexp:/etc/postfix/ml
main.cfで指定したメーリングリストの設定を定義するファイルを作成する。
# Group1 /^group1@(hirohiro716\.com|alias\.hirohiro716\.com)$/ user1@hirohiro716.com, user2@hirohiro716.com, # Team2 /^team2@(hirohiro716\.com|alias\.hirohiro716\.com)$/ user1@hirohiro716.com,
ファイアウォールの例外設定をする。
# firewall-cmd --permanent --add-service={smtp,smtp-submission,smtps,imaps,pop3s} # firewall-cmd --reload
サービスを有効化して実行する。
# systemctl enable --now dovecot # systemctl enable --now postfix