メールサーバー(Postfix+Dovecot) 構築
メールサーバー構築
メールサーバーはインターネットを通じて電子メールを送受信するためのサーバーアプリケーションプログラム:Message Transfer Agent (MTA)です。
MTAは、Sendmail, Postfix, QMail, Microsoft Exchange Server がありますが、Linuxで最も一般的で現在も開発が盛んな Postfix とセキュリティが強固な 受信サーバー Dovecot をインストールしましょう。
Postfix インストール
postfix が CentOS にあらかじめインストールされていないか確認しましょう。インストールされていなければ出力されません。
# rpm -qa | grep postfix
インストールされていなければインストールしましょう。
# yum -y install postfix
設定ファイルを編集しましょう。
メール送信を暗号化する場合は、秘密鍵・公開鍵ファイル(TLS/SSL関連)も設定しましょう。
ファイルの作成方法については セキュリティ証明 OpenSSL に記載しています。
# vi /etc/postfix/main.cf
...
# メールサーバーFQN名を追加
myhostname = mail.kentokyo.com
...
# メールサーバードメイン名を追加
mydomain = kentokyo.com
...
# ローカルユーザーからのメールを外部に配送する場合は@とドメイン名を追加
myorigin = $mydomain
...
# 外部からのメール受信を許可に変更
inet_interfaces = all
#inet_interfaces = localhost
...
# $mydomain宛てのメールを受信
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
...
# 存在しないメールアドレス(ユーザ)宛のメールの受信を拒否
local_recipient_maps = proxy:unix:passwd.byname $alias_maps
...
# メールボックスの形式をMaildirに変更
home_mailbox = Maildir/
...
# 接続されたときにメールサーバーソフト名を表示させないように
smtpd_banner = $myhostname ESMTP unknown
...
# VRFYコマンドの使用を禁止
disable_vrfy_command = yes
# 接続元の制限(スパムメール対策)
smtpd_client_restrictions =
check_client_access hash:/etc/postfix/access
reject_rbl_client zen.spamhaus.org
reject_non_fqdn_sender
reject_unknown_sender_domain
# エンベロープアドレス(MAIL FROM)による制限(スパムメール対策)
smtpd_sender_restrictions =
reject_rhsbl_sender zen.spamhaus.org
reject_unknown_sender_domain
# SMTP認証設定有効に
smtpd_sasl_auth_enable = yes
# Dovecot SASL ライブラリを指定
smtpd_sasl_type = dovecot
# Dovecot SASL ライブラリの認証ソケットファイル /var/spool/postfix/ からの相対パスで記述
smtpd_sasl_path = private/auth
# 古いバージョンの AUTH コマンド (RFC 2554) を実装した SMTP クライアントとの相互運用性を有効にする
broken_sasl_auth_clients = yes
########## TLS/SSL関連 ##########
# TLSを有効化
smtpd_use_tls = yes
# 宛先のメールサーバがTLSに対応していれば、通信を暗号化する
smtp_tls_security_level = may
# サーバ証明書と秘密鍵を指定
smtpd_tls_cert_file = /etc/pki/tls/certs/newcert.pem
smtpd_tls_key_file = /etc/pki/tls/private/newkey.pem
# TLSログレベルの設定
# 0:出力しない 1:TLSハンドシェイクと証明書情報 2:TLSネゴシエーションの全て
smtpd_tls_loglevel = 1
# 暗号に関する情報を "Received:" メッセージヘッダに含める
smtpd_tls_received_header = yes
# 接続キャッシュファイルの指定
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache
# キャッシュの保持時間の指定
smtpd_tls_session_cache_timeout = 3600s
# 認証を通過したものはリレーを許可する(permit_sasl_authenticated)
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
# vi /etc/postfix/master.cf
...
# SUBMISSIONポート、SMTPSを有効にします
submission inet n - n - - smtpd
# SUBMISSIONポートでSMTP認証を有効にします" -o"の前に
# 必ず一つ以上の半角スペースを入れておいてください。入れないと起動でエラーになります。
-o smtpd_sasl_auth_enable=yes
...
smtps inet n - n - - smtpd
...
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
メールボックスの形式をMaildir にしたので既存のユーザーと新規ユーザーのメールボックスを変更しましょう。
作成するときにそのユーザーがオーナーとして、パーミッションは700でないと配信されません。
まず、root ユーザーのメールボックスを作成します。
# mkdir -p /root/Maildir/{cur,new,tmp}
# chown root:root -R /root/Maildir
# chmod 700 /root/Maildir
既存ユーザーのメールボックスを作成します。
# mkdir -p /home/ken/Maildir/{cur,new,tmp}
# chown ken:ken -R /home/ken/Maildir
# chmod 700 /home/ken/Maildir
新規ユーザーに対しては/etc/skel配下にひな形のメールボックスを作成しておけば、ユーザーを作成した際に自動で配置されます。
# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# chmod -R 700 /etc/skel/Maildir/
SMTP認証設定
メールを正しく配送するための設定が必要になります。
設定例では以下の条件で作成しています。
SMTP認証アプリケーションインストール
cyrus-saslをインストールします。
# yum -y install cyrus-sasl
saslを起動し、自動起動まで設定します。
CentOS 7 の場合
# systemctl start saslauthd
# systemctl enable saslauthd
CentOS 6 の場合
# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on
存在しないユーザーへのメールは一旦メールキューに溜まってしまい、サーバーに負荷を掛けるため破棄するようにしましょう。
# vi /etc/postfix/main.cf
...
# 以下を最終行へ追加して、存在しないユーザー宛メールを unknown_user へ配送します。
local_recipient_maps =
luser_relay = unknown_user@localhost
unknown_user に配送されたメールを破棄するように /etc/aliases に追加して設定を反映します。
# echo unknown_user: /dev/null >> /etc/aliases
# newaliases
メールサーバー起動
Postfix サーバーを起動し、自動起動を有効にしましょう。
CentOS 7 の場合は
# systemctl start postfix.service
# systemctl enable postfix.service
CentOS 6 の場合は
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on
もし、Postfix サーバーを起動出来なかった場合は、状態を確認しエラーの箇所を修正します。
# systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: active (running) since 水 2017-11-29 21:09:20 JST; 6s ago
Process: 2314 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
Process: 2310 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 2300 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 2385 (master)
CGroup: /system.slice/postfix.service
...
メールサーバー公開
メールサーバーをインターネット上で公開しましょう。
また、ファイアーウォールが開いていないなら、smtpポートを開きます。
ルータのポートも開いておいてください。
# /sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
# /sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
# /sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
# /sbin/iptables -A INPUT -p tcp --dport 465 -j ACCEPT
# /sbin/iptables -A INPUT -p tcp --dport 587 -j ACCEPT
# /sbin/iptables -A INPUT -p tcp --dport 993 -j ACCEPT
# /sbin/iptables -A INPUT -p tcp --dport 995 -j ACCEPT
# firewall-cmd --add-service=smtp
# firewall-cmd --add-service=pop3 --permanent
# firewall-cmd --add-port=143/tcp --permanent
# firewall-cmd --add-port=465/tcp --permanent
# firewall-cmd --add-port=587/tcp --permanent
# firewall-cmd --add-port=993/tcp --permanent
# firewall-cmd --add-port=995/tcp --permanent
# firewall-cmd --reload
# firewall-cmd --list-ports
25/tcp 587/tcp 465/tcp 993/tcp 995/tcp
Dovecot のインストール
インストール
POP/IMAP サーバー Dovecot をインストールしましょう。
# yum -y install dovecot
設定
受信プロトコルを POP/IMAP 両方に対応できるように設定ファイルを編集しましょう。
# vi /etc/dovecot/dovecot.conf
...
protocols = imap pop3
...
暗号化通信 imaps と pop3s を有効にし、imap と pop3 を無効化しましょう。
また、Dovecot に SASL ライブラリの認証ソケットファイルを指定しましょう。
平文で受信する pop3 と imap を使用しないのであれば、それぞれの port = 0 とします。
# vi /etc/dovecot/conf.d/10-master.conf
...
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
}
}
...
service auth {
...
# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
認証方式を設定しましょう。
# vi /etc/dovecot/conf.d/10-auth.conf
...
disable_plaintext_auth = no
...
auth_mechanisms = plain login
...
SSL/TLS を有効化してサーバ証明書と秘密鍵を指定しましょう。
ファイルの作成方法については セキュリティ証明 OpenSSL に記載しています。
# vi /etc/dovecot/conf.d/10-ssl.conf
...
ssl = yes
...
ssl_cert = </etc/pki/tls/certs/newcert.pem
ssl_key = </etc/pki/tls/private/newkey.pem
...
メールボックスを設定しましょう。
# vi /etc/dovecot/conf.d/10-mail.conf
...
mail_location = maildir:~/Maildir
...
メールログを設定しましょう。
# vi /etc/dovecot/conf.d/10-logging.conf
...
log_path = /var/log/dovecot.log
...