![CentOS7にPostfix & Dovecot & Let's Enclypt環境をitamaeで構築する[2]](/images/2018-12-06_10-53-23.png)
CentOS7にPostfix & Dovecot & Let's Enclypt環境をitamaeで構築する[2]
今回の一番のメイン、PostfixとDovecotのレシピを書きます。といっても、先人様が書いてきてくださった色々な情報を落とし込んでいるだけなんですけどねorz
事前準備: node.yml
今回必要なyamlに追加する項目はこちら
domain: example.com
だけです。
Postfixのレシピ
というわけで、まずはPostfixのレシピから書きます。
package 'postfix'
HOSTNAME = "mail.#{node[:domain]}"
file "/etc/postfix/main.cf" do
action :edit
block do |content|
# メールサーバのホスト名(FQDN)を指定
content.gsub!("#myhostname = host.domain.tld", "myhostname = #{HOSTNAME}")
# メールサーバのドメイン名を指定
content.gsub!("#mydomain = domain.tld", "mydomain = #{node[:domain]}")
# メールアドレスを「ユーザ名@ドメイン名」の形式にする
content.gsub!("#myorigin = $mydomain", "myorigin = $mydomain")
# 全てのホストからメールを受信する
content.gsub!(/^inet_interfaces\s=\s.*$/, "inet_interfaces = all")
# 受信するドメイン宛のメールを指定する
content.gsub!(/^mydestination.*?localhost$/, "mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain")
# メールの格納フォーマットの指定
content.gsub!("#home_mailbox = Maildir/", "home_mailbox = Maildir/")
# 不要な情報を公開しない
content.gsub!("#smtpd_banner = $myhostname ESMTP $mail_name", "smtpd_banner = $myhostname ESMTP unknown")
# --------------------------------------------------
# 追加設定項目
# --------------------------------------------------
additional_option = []
# SASL認証を有効化
additional_option << "smtpd_sasl_auth_enable = yes"
additional_option << "smtpd_sasl_local_domain = $myhostname"
# 認証にDovecotを指定
additional_option << "smtpd_sasl_type = dovecot"
additional_option << "smtpd_sasl_path = private/auth"
# 認証を通過したものはリレーを許可する(permit_sasl_authenticated)
additional_option << "smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination"
# 受信メールサイズを10MBに制限
additional_option << "message_size_limit = 10485760"
# SSLで暗号化するため、TLSを有効化
additional_option << "smtpd_use_tls = yes"
# サーバ証明書と秘密鍵を指定(Let's encrypt)
additional_option << "smtpd_tls_cert_file = /etc/letsencrypt/live/#{HOSTNAME}/fullchain.pem"
additional_option << "smtpd_tls_key_file = /etc/letsencrypt/live/#{HOSTNAME}/privkey.pem"
# 接続キャッシュファイルの指定
additional_option << "smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_scache"
# 存在しないユーザー宛メールの破棄
additional_option << "local_recipient_maps ="
additional_option << "luser_relay = unknown_user@localhost"
content.concat << additional_option.join("\n")
end
end
template "/etc/postfix/master.cf"
file "/etc/sasl2/smtpd.conf" do
action :edit
block do |content|
content.gsub!("pwcheck_method: saslauthd", "pwcheck_method: auxprop")
end
end
# Maildir形式で受信できるようにする
execute 'mkdir -p /etc/skel/Maildir/{new,cur,tmp}'
execute 'chmod -R 700 /etc/skel/Maildir'
# 存在しないユーザー宛のメールを破棄するための設定
execute 'echo unknown_user: /dev/null >> /etc/aliases'
execute 'newaliases'
service 'postfix' do
action [:start, :enable]
end
あとはtemplate "/etc/postfix/master.cf"
しているので、cookbooks/postfix/templates/etc/postfix/master.cfを作っておきます。
Dovecotのレシピ
メールサーバーとメールクライアントの通信のためにDovecotを設定します。ssl証明書が必要なのですが、Let's Encryptを利用しました。(Let's Encryptの設定に関してはこちらを参考に)
package 'dovecot'
HOSTNAME = "mail.#{node[:domain]}"
file "/etc/dovecot/conf.d/10-mail.conf" do
action :edit
block do |content|
content.gsub!("#mail_location =", "mail_location = maildir:~/Maildir")
end
end
file "/etc/dovecot/conf.d/10-ssl.conf" do
action :edit
block do |content|
content.gsub!('ssl = required', 'ssl = yes')
content.gsub!(/ssl_cert = .*$/, "ssl_cert = </etc/letsencrypt/live/#{HOSTNAME}/fullchain.pem")
content.gsub!(/ssl_key = .*$/, "ssl_key = </etc/letsencrypt/live/#{HOSTNAME}/privkey.pem")
end
end
file "delete default 10-master.conf" do
path "/etc/dovecot/conf.d/10-master.conf"
action :delete
end
template "/etc/dovecot/conf.d/10-master.conf"
file "/etc/dovecot/dovecot.conf" do
action :edit
block do |content|
content.gsub!("#protocols = imap pop3 lmtp", "protocols = imap")
end
end
execute "add mail server ports" do
user "root"
cmd = [
'firewall-cmd --add-service=smtp --permanent --zone=public',
'firewall-cmd --add-service=smtps --permanent --zone=public',
'firewall-cmd --add-service=imaps --permanent --zone=public',
'firewall-cmd --reload'
]
command cmd.join('&&')
end
service 'dovecot' do
action [:start, :enable]
end
service 'postfix' do
action [:start, :enable]
end
で、こちらもtemplate "/etc/dovecot/conf.d/10-master.conf"
しているので、cookbooks/dovecot/templates/etc/dovecot/conf.d/10-master.conf.erbを作っておきます。
自分の環境では、すべてimapを利用しているので、pop3は設定していません。
各設定の細かな解説などは他にもっと詳しい方が記事を書いているので、自分はそれをitamaeのレシピにしたらどんな感じかを記事にしておきます(excuteすごい使ってるけど)。
それでは。
※全体的なレシピもGitHubにpushしてあります。