Postfix
ここ3日ほど、サーバー移転であれやこれやもがいていました。
どうやら、目安が立ったところで前からやろうと思っていた各種設定の整理整頓を始めます。
例えば Postfix。メールの送受信出来れば良かったのに、relay するから sasl 設定して、自己証明書で ssl して、SPF, dkim, dmarc も追加、let’s encrypt も入れて、ついでに spam 対策もやろうとかやっているうちにmain.cf がぐちゃぐちゃになってしまい、なんかちゃんと動いているからまぁ良いや、、、そのうちちゃんと綺麗に書き直そう、、、現在に至ると言うのが現状です。
今回のサーバー移転では移転先の環境を1からやったので いやがおうにも(いやがうえにもが正しい言い方らしいw)整理する羽目になったのでした。って偉そうに言うほどのものでも無いけど、何をやっているかコメントを沢山入れたものをつくったので、恥ずかしげも無く公開する。
ちなみに私は Postfix の experimental release と言うそのまま直訳すると開発・実験版を使用している。
そんなもん、怖くて使えないって人も居るだろうが、中の人が言うには“it runs on all of Wietse’s systems so it is production quality.” 作者の Wietse さんシステムで動いていて、「製品品質」との事なのでと今までの経験上特にトラブルになったことも無いので結構安心して使っている。もしよろしければ皆様もどうぞ。
今回は let’s encrypt で証明書を取得済みを前提としている。また、今回は postfix の部分のみ、後日 opendkim, opendmarc, dovecot を別稿で追加するのでご了承頂きたい。
では私の main.cf と master.cf を次に。ご参考になったら幸いです。
では、今日はこの辺で失礼します。
main.cf
compatibility_level=3.8
# 信用するのはこのサーバーだけ mynetworks を設定すると無効になるので注意
# デフォルトだが書いておく
mynetworks_style = host
# 世界とメールのやりとりが出来る様に
inet_interfaces = all
# alias の在処
alias_database = hash:/etc/mail/aliases
alias_maps = hash:/etc/mail/aliases
# コマンド追加
allow_mail_to_commands = alias,forward,include
# myorigin はこのサーバから出るメールはなんと名乗るか。@の後の事
mydomain = example.com
myhostname = www.example.com
myorigin = example.com
# @の後がどんなメールだったら受け取るか
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
# メールの配送形式
home_mailbox = Maildir/
# デフォルトは postfix を使っている事を返すので分からない様にする
# 規約では bannerの最初は$myhostnameを記載しなければいけないので従う
smtpd_banner = $myhostname ESMTP
# メールアカウントチェック対策
# ユーザー存在確認されても答えない。
disable_vrfy_command = yes
# 接続後の挨拶(HELO)を強制
smtpd_helo_required = yes
# 誤作動防止とETRNコマンドも制限しておく
smtpd_delay_reject = yes
smtpd_etrn_restrictions =
permit_mynetworks
reject
# 自分の送信メールのヘッダからローカルIPを消す
header_checks= regexp:/usr/local/etc/postfix/header_checks
always_add_missing_headers = yes
# RCPT TO及びMAIL FROMで正しい文法を強制
strict_rfc821_envelopes = yes
# スパムの踏み台を防止(デフォルト)
allow_untrusted_routing = no
# 前もってコマンドを送ってくる無礼なやつは拒否!
smtpd_data_restrictions =
reject_unauth_pipelining
# 宛先不明は /dev/null
# デフォルトはそんな宛先無いよと言う返事を返すけど知らんぷりする。
# 管理者の意向次第だがこれを利用したスパムもある様なので私はこれで良いと思っている。
# 但し、typo したメール差出人は送ったのになーとなる事だけは覚えておこう。
local_recipient_maps =
luser_relay = unknown_user@localhost
# HELOコマンド受信時のホスト名による受信制限
# DNS に登録されていない、FQDNが解決できない、ホスト名の文法が不正の場合に拒否
smtpd_helo_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unknown_hostname
reject_non_fqdn_hostname
reject_invalid_hostname
permit
# ドメインが解決できない、FQDNが解決できない場合に拒否
smtpd_sender_restrictions =
permit_mynetworks
reject_unknown_sender_domain
reject_non_fqdn_sender
# smtpd_recipient_restrictions = は古い書式
# ver2.10以降この記述でリレーの抜け穴を防止する
smtpd_relay_restrictions =
permit_mynetworks
permit_sasl_authenticated
defer_unauth_destination
# sasl 認証
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain
# cyrus の場合はこちら
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
# dovecot の場合はこちら
#smtpd_sasl_type = dovecot
#smtpd_sasl_path = private/auth
# SMTP 配送のTLS 設定
smtp_tls_CAfile = /usr/local/etc/ssl/cert.pem
smtp_tls_key_file = /usr/local/etc/letsencrypt/live/example.com/privkey.pem
smtp_tls_cert_file = /usr/local/etc/letsencrypt/live/example.com/fullchain.pem
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_protocols = >=TLSv1.2
smtp_tls_mandatory_protocols = >=TLSv1.2
# SMTP 受信のTLS 設定
smtpd_tls_CAfile = /usr/local/etc/ssl/cert.pem
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /usr/local/etc/letsencrypt/live/example.com/privkey.pem
smtpd_tls_cert_file = /usr/local/etc/letsencrypt/live/example.com/fullchain.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_protocols = >=TLSv1.2
smtpd_tls_mandatory_protocols = >=TLSv1.2
smtpd_tls_mandatory_ciphers = medium
# 以下の暗号形式については mozilla さんにお任せ
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam.pem
# not actually 1024 bits, this applies to all DHE >= 1024 bits
smtpd_tls_dh1024_param_file = /usr/local/etc/postfix/dhparam.pem
tls_medium_cipherlist = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
tls_preempt_cipherlist = no
# opendkim と opendmarc
smtpd_milters =
unix:/var/run/milteropendkim/milteropendkim.sock
unix:/var/run/opendmarc/opendmarc.sock
non_smtpd_milters =
unix:/var/run/milteropendkim/milteropendkim.sock
unix:/var/run/opendmarc/opendmarc.sock
master.cf 必要部分のみ
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
#smtp inet n - n - 1 postscreen
#smtpd pass - - n - - smtpd
#dnsblog unix - - n - 0 dnsblog
#tlsproxy unix - - n - 0 tlsproxy
# Choose one: enable submission for loopback clients only, or for any client.
#127.0.0.1:submission inet n - n - - smtpd
submission inet n - n - - smtpd
# -o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
# -o smtpd_reject_unlisted_recipient=no
# Instead of specifying complex smtpd_<xxx>_restrictions here,
# specify "smtpd_<xxx>_restrictions=$mua_<xxx>_restrictions"
# here, and specify mua_<xxx>_restrictions in main.cf (where
# "<xxx>" is "client", "helo", "sender", "relay", or "recipient").
# -o smtpd_client_restrictions=
# -o smtpd_helo_restrictions=
# -o smtpd_sender_restrictions=
# -o smtpd_relay_restrictions=
-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
コメント