Linux/Mail/Postfix
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
ns-lab
nowsky system-lab
DigiLoog
Linux
Windows
開始行:
*Postfix [#efc9c1c0]
MTA(メール中継エージェント)の一つ。コンフィグレベルでSend...
転送先がSMTPをサポートしていれば、フィルタリング、ウイル...
~
*構築環境 [#n6efed31]
今回検証した環境はこちら
-openSUSE 13.1 x86_64
※CentOS 6.x等の非Systemd環境で構築する場合には、各スクリ...
~
*構築 [#b06b4623]
&size(16){&font(b){1. ディレクトリ構成};};
普通は"/var/spool"以下にメールデータを格納するのだが、
今回はちょっと特殊な構成な点と、色々なミドルウェアとの連...
メールデータディレクトリのみデフォルトから変更している。
メールデータディレクトリ:/var/hostname/spool/*
Postfixのコンフィグディレクトリ:/etc/postfix/*
Postfixのシステムコンフィグファイル:/etc/sysconfig/postfix
今回はこのディレクトリ構成でMTA(Postfix)の構築を行う
~
&size(16){&font(b){2. インストール};};
ソースからmakeするのが筋なのだろうが、面倒だったのでyast...
zypperとかyumとかapt-getでも同様に行ける。
# yast
[Software] -> [Software Management] -> [Search Phras...
実際にインストールするのは、"postfix","postfix-devel...
~
*設定 [#g166e06c]
&size(16){&font(b){・説明};};
Postfixのメインコンフィグを書き換えていく。
存在しないコンフィグファイルがあった場合は新規作成をする。
~
設定ファイルのオーナー&グループはroot:rootで、パーミッシ...
しかし、&font(b){以下の設定ファイル};はオーナー&グループ...
/etc/postfix/header_checks
/etc/postfix/mysql_virtual_alias_maps.cf
/etc/postfix/mysql_virtual_domains_maps.cf
/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
/etc/postfix/mysql_virtual_mailbox_maps.cf
~
基本的にデフォルトのパラメータやディレクトリ構成を使用す...
しかし、ユーザ情報はMySQLで管理する構成なので、
PostfixからMySQLへのアクセスを行う設定ファイルを追加作成...
設定例としてMySQLはlocalhostに構築済みかつ、MySQL用のパラ...
・MySQLユーザ名:postfix-mysql-user
・MySQLパスワード:postfix-mysql-pass
・MySQLのDB名:postfix-user-db
~
あと、現状のPostfixコンフィグの何処を書き換えたかうろ覚え...
変更した設定ファイル内容を全て列挙する。
1). 下記の書き換え項目に挙っていない所は全てコメントアウ...
2). 書き換えに上がっていない設定ファイルはデフォルトのま...
~
&size(16){&font(b){/etc/postfix/main.cf};};
##
## 基本設定
##
## マニュアル [http://www.postfix-jp.info/trans-2.2/jhtm...
##
# Postfixのキューディレクトリ。キューディレクトリはデフ...
queue_directory = /var/spool/postfix
# Postfixの管理コマンド
command_directory = /usr/sbin
# Postfixのサポート、デーモンの各プログラムがあるディレ...
daemon_directory = /usr/lib/postfix
# Postfixが書き込むディレクトリ。所有ユーザが$mail_owner...
data_directory = /var/lib/postfix
# Postfixデーモンの実行ユーザ
mail_owner = postfix
# MTAのメール受け取り用ホスト名。FQDNで書く必要がある
myhostname = mail.hoge.org
# MTAのドメイン名。$myhostnameからホスト部分を取った値に...
mydomain = hoge.org
# ローカルのPostfixから送信したメールが、何処のメールサ...
# 通常は "$myhostname" を指定する事となる
# バーチャルドメインを使いつつ、ローカルroot宛メールをal...
myorigin = server-name.hoge.org
# メールを受け取るNICのアドレス。allを指定すると全てから...
inet_interfaces = all
# メール配送を許可するドメインのリスト。
# バーチャルドメインのみを利用する場合は "mydestination ...
# バーチャルドメインを使いつつ、ローカルroot宛メールをal...
mydestination = $myorigin, localhost
# 受信者アドレスがローカルIPで、受信者条件に合致しない時...
unknown_local_recipient_reject_code = 550
# 信頼されたネットワーク。MTAのサーバ自体(127.0.0.1/32)...
mynetworks = 192.168.0.0/24, 127.0.0.1/32
# Postfixがメールをリレーしようとする配送先MTAドメイン
relay_domains = $mydestination
# Postfixの認証(ユーザのログイン)で使用されるエイリアス...
alias_maps = hash:/etc/aliases
# newaliasesコマンドで更新されるエイリアスデータベース
alias_database = hash:/etc/aliases
# メールの保存ディレクトリ名と保存形式。今回はMailDir形...
# 下記だと各ユーザの"mail"というディレクトリの中にメール...
home_mailbox = mail/
# メールの配送に使用するコマンド。つまり、Postfixの受信...
# 今回は、procmailでの振り分けを行うのでprocmailのバイナ...
mailbox_command = /usr/bin/procmail
# ローカルIPアドレスが付与されるReceivedヘッダを削除する...
header_checks = regexp:/etc/postfix/header_checks
# STARTTLS、SMTP over SSLなど拡張機能利用時のPostfixアプ...
mail_name = unknown
# SMTPのリターンコードが220の時に付随するテキスト。unkno...
smtpd_banner = $myhostname ESMTP unknown
# リモートクライアントかサーバが$debug_peer_listパラメー...
debug_peer_level = 2
# デーモンが"-D"オプションで呼ばれた時に実行される外部コ...
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin
ddd $daemon_directory/$process_name $process_id & s...
# Sendmail互換機能。Postfixキューにメールを投げるのに使...
sendmail_path = /usr/sbin/sendmail
# Sendmail互換機能。localのエイリアスDBを再構築する際に...
newaliases_path = /usr/bin/newaliases
# Sendmail互換機能。Postfixのメールキューをリストアップ...
mailq_path = /usr/bin/mailq
# Postfixコマンド、Postfixディレクトリを所有するグループ
# このパラメータを変更した場合、"postfix set-permissions...
setgid_group = maildrop
# Postfixのドキュメント(HTML)ファイルのディレクトリ
html_directory = /usr/share/doc/packages/postfix-doc/html
# Postfixのマニュアルがインストールされたディレクトリ
manpage_directory = /usr/share/man
# Postfixの設定例があるディレクトリ
sample_directory = /usr/share/doc/packages/postfix-doc/s...
# PostfixのREADMEファイルのディレクトリ
readme_directory = /usr/share/doc/packages/postfix-doc/R...
# Postfixが待ち受けるプロトコル。ipv4=IPv4,ipv6=IPv6,all...
inet_protocols = ipv4
##
## [独自追加部分] - SASL設定
##
# PostfixのSASL認証を有効にする
smtpd_sasl_auth_enable = yes
# Receivedヘッダーに認証ユーザ名を表示する
smtpd_sasl_authenticated_header = yes
# DovecotのSASL認証を利用する
smtpd_sasl_type = dovecot
# DovecotのSASL認証用デーモンのソケットを指定
smtpd_sasl_path = private/auth
# SASL認証のレルム(realm)の指定
smtpd_sasl_local_domain = $myhostname
# クライアントに許可(提供)する認証方法
# noplaintext : 平分パスワードを非許可
# noactive : "non-dictionary active"攻撃に脆弱な認...
# nodictionary : "passive dictionary"攻撃に脆弱な認証...
# noanonymous : 匿名ログインを非許可
# mutual_auth : 相互認証を提供する方法のみ許可
smtpd_sasl_security_options = noanonymous
# SMTPクライアントがSMTPセッションで"HELO"or"EHLO"コマン...
smtpd_helo_required = yes
# PostfixがSMTP"RCPT TO"コマンドの際に適用するアクセス制...
smtpd_recipient_restrictions = permit_mynetworks, permit...
# 古いバージョンのSMTP"AUTH"コマンドとの相互運用性を有効...
broken_sasl_auth_clients = yes
# PostfixでTLSを有効にする。Postfix2.3以降だと"smtpd_tls...
smtpd_use_tls = yes
# Postfixで暗号化されていないSASL認証を受け付けない。"sm...
smtpd_tls_auth_only = yes
# PEMフォーマットのSMTP(Postfix)サーバ用RSA証明書ファイル
smtpd_tls_cert_file = /etc/pki/tls/mail.hoge.crt
# PEMフォーマットのSMTP(Postfix)サーバ用RSA秘密鍵ファイル
smtpd_tls_key_file = /etc/pki/tls/mail.hoge.key
# PostfixのTLSセッションキャッシュを含むファイルの名前。...
smtpd_tls_session_cache_database = btree:/var/lib/postfi...
# 擬似乱数生成用のソースファイル。デバイスファイルを指定...
tls_random_source = dev:/dev/urandom
# SMTPの"SMTP VRFY"コマンドを無効化する
disable_vrfy_command = yes
##
## [独自追加部分] - バーチャルドメイン設定
##
## 先頭に"mysql:"と付いている箇所はMySQLのDB値を取得する...
##
# $mydestinationでリストアップされたドメインへの配送方法...
# "virtual" だと仮想配送(バーチャルドメイン)を行う
# "local" だと、一度ローカル配送(alias)を実施した後にバ...
# バーチャルドメインを使いつつ、ローカルroot宛メールをal...
local_transport = local
# $virtual_mailbox_domainsでリストアップされたドメインで...
virtual_transport = procmail
# 特定メールアドレス、ドメインのエイリアスファイルを指定
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_al...
# 指定されたバーチャルエイリアスドメインの最終配送先
# $virtual_alias_maps内に受信者アドレスが存在しない場合...
virtual_alias_domains = $virtual_alias_maps
# バーチャルドメインのトップレベルメールスプールディレク...
# $virtual_mailbox_mapsテーブル検索結果の全てのPATHの先...
virtual_mailbox_base = /var/hoge/mail-spool
# $virtual_mailbox_domainsに対応する有効なアドレスのオプ...
# $virtual_mailbox_baseの値がこのPATHの前に付けられるの...
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_...
# 指定ファイル内から受信者アドレスの検索を行い、存在しな...
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtu...
# メールの最大サイズ(Byte換算)。0だと無制限
message_size_limit = 10485760
# MTAサーバでのQuota制限に引っかかった場合、エラーメール...
virtual_overquota_bounce = yes
# 受信メールボックスのみを制限する
virtual_mailbox_limit_inbox = yes
# バーチャルドメイン毎の最大メールボックスを記述したエイ...
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_vi...
# $virtual_mailbox_limit_mapsの値で、最大メールボックス...
virtual_mailbox_limit_override = yes
# PostfixのユーザIDの最小値を指定する。この値以下のユー...
virtual_minimum_uid = 5000
# 用意したユーザIDを指定する。5000以降にしておくとシステ...
virtual_uid_maps = static:5000
# 用意したグループIDを指定する。5000以降にしておくとシス...
virtual_gid_maps = static:5000
# キューに入った後にフィルタリング処理を行うMTAの名前と...
# Postfixのコンフィグ(master.cf)に書いた値を指定する。他...
# 今回はウイルスチェックを通す為、amavisの待機ポートを指...
content_filter = amavis:[localhost]:10026
# 受信者確認、アドレス書き換えの処理を指定する
# no_unknows_recipient_checks : 知らない受信者でも拒否...
# 外部コンテンツフィルタ...
# no_address_mappings : バーチャルエイリアスマ...
# 外部コンテンツフィルタ...
# no_header_body_check : ヘッダー・ボディチェッ...
# 外部コンテンツフィルタ...
receive_override_options = no_address_mappings
~
&size(16){&font(b){/etc/postfix/header_checks};};
/^Received:/ IGNORE
~
&size(16){&font(b){/etc/postfix/mysql_virtual_alias_maps....
PostfixからDB接続を行う場合、maps.cfファイルのhostsをloca...
MySQLのローカルソケット(.sock)を使ってDB接続を行うように...
&color(#ff0000){TCP/IPで接続する場合は、127.0.0.1とIPアド...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = alias
select_field = goto
where_field = address
~
&size(16){&font(b){/etc/postfix/mysql_virtual_domains_map...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = ...
~
&size(16){&font(b){/etc/postfix/mysql_virtual_mailbox_lim...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
~
&size(16){&font(b){/etc/postfix/mysql_virtual_mailbox_map...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = '1'
~
&size(16){&font(b){/etc/postfix/vquota};};
# 該当メールアドレスのバーチャルクォータを指定
# ドメインのオーナーアドレスとかは下記みたいに個別指定に...
hoge-owner@mail.hoge.org 524288000
# ドメイン全体でのバーチャルドメインクォータを指定
# 『個別メールクォータ容量≦ドメイン全体でのクォータ容量...
@mail.hoge.org 524288000
~
&size(16){&font(b){/etc/postfix/master.cf};};
本来ならchroot環境にするべきなのだが、
chrootにすると何故かMySQLとの連携で転けたので今回はノーマ...
あと、基本的に"下記のまま"記述をし、下記に書いていない箇...
# ======================================================...
# Postfix Document
# http://www.postfix-jp.info/trans-2.3/conf/master.cf.jp
# ======================================================...
# service type private unpriv chroot wakeup maxproc ...
# (yes) (yes) (yes) (never) (100)
# ======================================================...
smtp inet n - n - - ...
## amavisとの連携オプションを指定する。
## サーバの性能によってプロセス数を調整する(今のPCスペッ...
amavis unix - - n - 4 ...
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
## TLS認証やSASL-AUTHの使用設定を行う。
## 今回の構成ならyesにする必要がある。
smtps inet n - n - - ...
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
pickup fifo n - n 60 1 ...
cleanup unix n - n - 0 ...
qmgr fifo n - n 300 1 ...
tlsmgr unix - - n 300 1 ...
rewrite unix - - n - - ...
bounce unix - - n - 0 ...
defer unix - - n - 0 ...
trace unix - - n - 0 ...
verify unix - - n - 1 ...
flush unix n - n 1000? 0 ...
proxymap unix - - n - - ...
proxywrite unix - - n - 1 ...
smtp unix - - n - - ...
relay unix - - n - - ...
showq unix n - n - - ...
error unix - - n - - ...
retry unix - - n - - ...
discard unix - - n - - ...
local unix - n n - - ...
virtual unix - n n - - ...
lmtp unix - - n - - ...
anvil unix - - n - 1 ...
## amavisでスキャンを行ったメッセージのサーバ(MTA)内受信...
## 今回は1台の物理サーバで全てのメール転送プロセスを処理...
## "localhost"の"10025ポート"で受信する様に設定してある。
## また、mynetworksを指定し信頼するネットワークの指定も...
## 他のパラメータについては、必要に応じて適宜設定を行う。
localhost:10025 inet n - n - -...
-o content_filter=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_restriction_classes=
-o mynetworks=192.168.0.0/24,127.0.0.1/32
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o local_recipient_maps=
-o relay_recipient_maps=
scache unix - - n - 1 ...
## userには、main.cfの$home_mailboxディレクトリへの書き...
## 今回はPostfixAdminとの連携を行うので、PostfixAdminで...
procmail unix - n n - - ...
flags=R user=postfixadmin argv=/usr/bin/procmail -t -m...
~
&size(16){&font(b){/etc/sysconfig/postfix};};
OSのディストリビューションによっては編集する必要がある。
基本はデフォルト値にして、Postfixのコンフィグで設定を書い...
POSTFIX_RELAYHOST=""
POSTFIX_LISTEN=""
POSTFIX_INET_PROTO=""
POSTFIX_MYHOSTNAME=""
POSTFIX_MASQUERADE_DOMAIN=""
POSTFIX_LOCALDOMAINS=""
POSTFIX_NULLCLIENT="no"
POSTFIX_DIALUP="no"
POSTFIX_NODNS="no"
POSTFIX_CHROOT="no"
POSTFIX_UPDATE_CHROOT_JAIL="no"
POSTFIX_WITH_LDAP="no"
POSTFIX_WITH_MYSQL="no"
POSTFIX_MYSQL_CONN="socket"
POSTFIX_LAPTOP="no"
POSTFIX_UPDATE_MAPS="yes"
# デフォルト値の末尾に"helo_access relay"を追記
POSTFIX_MAP_LIST="virtual transport access canonical sen...
POSTFIX_TRANSPORT_MAPS=""
POSTFIX_RBL_HOSTS=""
POSTFIX_BASIC_SPAM_PREVENTION="off"
POSTFIX_SMTPD_CLIENT_RESTRICTIONS=""
POSTFIX_SMTPD_HELO_RESTRICTIONS=""
POSTFIX_SMTPD_SENDER_RESTRICTIONS=""
POSTFIX_SMTPD_RECIPIENT_RESTRICTIONS=""
POSTFIX_MDA="local"
POSTFIX_SMTP_AUTH_SERVER="no"
POSTFIX_SMTP_AUTH="no"
POSTFIX_SMTP_AUTH_OPTIONS=""
POSTFIX_SMTP_TLS_SERVER="no"
POSTFIX_SMTP_TLS_SERVER_LEGACY_SUPPORT="no"
POSTFIX_SMTP_TLS_CLIENT="no"
##
## 以下、SSLファイルの指定は"main.cf"の設定値の方が優先...
##
POSTFIX_SSL_PATH="/etc/postfix/ssl"
POSTFIX_TLS_CAFILE="cacert.pem"
POSTFIX_TLS_CERTFILE="certs/postfixcert.pem"
POSTFIX_TLS_KEYFILE="certs/postfixkey.pem"
##
## [修正箇所] - SSL証明書作成時に入力した(する)値を設定...
##
# SSL証明書の"Country Name"の値 = 日本ならJP
POSTFIX_SSL_COUNTRY="JP"
# SSL証明書の"State or Province Name"の値 = 都道府県
POSTFIX_SSL_STATE="Tokyo"
# SSL証明書の"Locality Name"の値 = 市区町村。個人鯖とか...
POSTFIX_SSL_LOCALITY="-"
# SSL証明書の"Organization Name"の値 = 組織名。個人鯖な...
POSTFIX_SSL_ORGANIZATION="hoge.org"
# SSL証明書の"Organizational Unit Name"の値 = 組織内での...
POSTFIX_SSL_ORGANIZATIONAL_UNIT="-"
# SSL証明書の"Common Name"の値 = Postfixの稼働するマシン...
POSTFIX_SSL_COMMON_NAME="mail.hoge.org"
# SSL証明書の"Email Address"の値 = ドメインのオーナーア...
POSTFIX_SSL_EMAIL_ADDRESS="hoge-owner@mail.hoge.org"
# メールボックスの容量リミットを無制限にする
POSTFIX_ADD_MAILBOX_SIZE_LIMIT="0"
# メール一通の容量リミットを無制限にする
POSTFIX_ADD_MESSAGE_SIZE_LIMIT="0"
# サービスロケーションプロトコルの切り替え。デフォルト値...
POSTFIX_REGISTER_SLP="yes"
# Postfixの稼働するサーバでのネットワークスタイルを書く...
POSTFIX_ADD_MYNETWORKS_STYLE="subnet"
~
*メールディレクトリ [#i4e72752]
メール保存用ディレクトリを作成してパーミッションも設定する
# mkdir /var/hoge/mail-spool
# chown postfixadmin.postfix /var/hoge/mail-spool
# chmod 750 /var/hoge/mail-spool
~
*起動設定 [#ff2fda5b]
yastやchkconfigを使って自動起動の設定を行う。
-yast
# yast
[System] -> [Services Manager] -> [postfix] -> "Enab...
-chkconfig
# chkconfig postfix on
-init.d
●起動
# /etc/init.d/postfix start
●停止
# /etc/init.d/postfix stop
●再起動
# /etc/init.d/postfix restart
~
*SASL認証 [#f8e85460]
Postfix SASL認証を行う為の追加設定。
メールをGmailやYahooメール等から受信する時は必須になる。
-参考サイト
--[[PostfixでSMTP-AUTHを実装する方法(PAM編)>+http://www...
--[[LinuxCommand - saslauthd>+http://www.linuxcommand.org...
1). SMTPとIMAP(POP3)が同居している場合
# zypper install cyrus-sasl-saslauthd
# vi /etc/sysconfig/saslauthd
---
! [1] START=yes
! [2] SASLAUTHD_AUTHMECH=rimap
! [3] OPTIONS="-c -r -m /var/run/saslauthd -O 127.0.0.1"
---
[1] 自動起動ON
[2] 認証方式
[3] saslauthdの起動パラメータ
"-c":認証クレジットをキャッシュする
"-r":SASLAUTHD_AUTHMECHがrimapの時は必須
"-m":saslauthdのソケット
"-O":remapホスト名
==================================================
2). 上位SMTPへリレー配送する場合は、さらに追加設定を行う
# vi /etc/sysconfig/saslauthd
< SASLAUTHD_AUTHMECH=rimap
---
> SASLAUTHD_AUTHMECH=pam
# vi /etc/postfix/main.cf
< smtpd_sasl_type = dovecot
---
> smtpd_sasl_type = cyrus
~
*DNS参照 [#e402ff27]
参考サイト:[[Postfixにhostsを参照させる>+https://aritosa...
relayhostやtransportをAレコード、MXレコードで指定した時、
デフォルトのPostfixではローカルのhostsファイルを参照せず...
名前解決の順番を他のMTAと同じようにする(hosts -> DNS)時や、
DNSで名前解決出来ない場合にhosts参照する(DNS -> hosts)は...
・hosts -> DNS
smtp_host_lookup = native
・DNS -> hosts
smtp_host_lookup = dns native
~
*ドメイン毎の固定配送経路指定 [#b4c189b9]
参考サイト:[[sendmailのmailertableをPostfixで実現する>+h...
Postfix v1では、transportに複数の配送先を指定出来たのだが、
Postfix v2では、transportに複数の配送先を指定出来なくなっ...
この問題を解決する為の[[パッチ>+http://www.tmtm.org/postf...
ソースから入れ直す必要があり面倒なので、設定変更だけでmai...
~
-シナリオ
--基本はPrimaryMTAへ配送
--PrimaryMTAがダウン(ConnTimeout/ConnRefused)していた場合...
--固定配送しないメールは通常通り配送
--メールがループしないようにデフォルトの冗長配送は止める
-
|配送ドメイン |PrimaryMTA [DNS Aレコード] |Secondary...
|@mail01.hoge.org|192.168.1.1 [mail01p.hoge.org]|192.168....
|@mail02.hoge.org|192.168.2.1 [mail02p.hoge.org]|192.168....
-main.cf
default_transport = relay:
-master.cf
relay-mail01 unix - - n - - smtp
-o fallback_relay=[mail01s.hoge.org]
relay-mail02 unix - - n - - smtp
-o fallback_relay=[mail02s.hoge.org]
-transport.maps
mail01.hoge.org relay-mail01:[mail01p.hoge.org]
mail02.hoge.org relay-mail02:[mail02p.hoge.org]
終了行:
*Postfix [#efc9c1c0]
MTA(メール中継エージェント)の一つ。コンフィグレベルでSend...
転送先がSMTPをサポートしていれば、フィルタリング、ウイル...
~
*構築環境 [#n6efed31]
今回検証した環境はこちら
-openSUSE 13.1 x86_64
※CentOS 6.x等の非Systemd環境で構築する場合には、各スクリ...
~
*構築 [#b06b4623]
&size(16){&font(b){1. ディレクトリ構成};};
普通は"/var/spool"以下にメールデータを格納するのだが、
今回はちょっと特殊な構成な点と、色々なミドルウェアとの連...
メールデータディレクトリのみデフォルトから変更している。
メールデータディレクトリ:/var/hostname/spool/*
Postfixのコンフィグディレクトリ:/etc/postfix/*
Postfixのシステムコンフィグファイル:/etc/sysconfig/postfix
今回はこのディレクトリ構成でMTA(Postfix)の構築を行う
~
&size(16){&font(b){2. インストール};};
ソースからmakeするのが筋なのだろうが、面倒だったのでyast...
zypperとかyumとかapt-getでも同様に行ける。
# yast
[Software] -> [Software Management] -> [Search Phras...
実際にインストールするのは、"postfix","postfix-devel...
~
*設定 [#g166e06c]
&size(16){&font(b){・説明};};
Postfixのメインコンフィグを書き換えていく。
存在しないコンフィグファイルがあった場合は新規作成をする。
~
設定ファイルのオーナー&グループはroot:rootで、パーミッシ...
しかし、&font(b){以下の設定ファイル};はオーナー&グループ...
/etc/postfix/header_checks
/etc/postfix/mysql_virtual_alias_maps.cf
/etc/postfix/mysql_virtual_domains_maps.cf
/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
/etc/postfix/mysql_virtual_mailbox_maps.cf
~
基本的にデフォルトのパラメータやディレクトリ構成を使用す...
しかし、ユーザ情報はMySQLで管理する構成なので、
PostfixからMySQLへのアクセスを行う設定ファイルを追加作成...
設定例としてMySQLはlocalhostに構築済みかつ、MySQL用のパラ...
・MySQLユーザ名:postfix-mysql-user
・MySQLパスワード:postfix-mysql-pass
・MySQLのDB名:postfix-user-db
~
あと、現状のPostfixコンフィグの何処を書き換えたかうろ覚え...
変更した設定ファイル内容を全て列挙する。
1). 下記の書き換え項目に挙っていない所は全てコメントアウ...
2). 書き換えに上がっていない設定ファイルはデフォルトのま...
~
&size(16){&font(b){/etc/postfix/main.cf};};
##
## 基本設定
##
## マニュアル [http://www.postfix-jp.info/trans-2.2/jhtm...
##
# Postfixのキューディレクトリ。キューディレクトリはデフ...
queue_directory = /var/spool/postfix
# Postfixの管理コマンド
command_directory = /usr/sbin
# Postfixのサポート、デーモンの各プログラムがあるディレ...
daemon_directory = /usr/lib/postfix
# Postfixが書き込むディレクトリ。所有ユーザが$mail_owner...
data_directory = /var/lib/postfix
# Postfixデーモンの実行ユーザ
mail_owner = postfix
# MTAのメール受け取り用ホスト名。FQDNで書く必要がある
myhostname = mail.hoge.org
# MTAのドメイン名。$myhostnameからホスト部分を取った値に...
mydomain = hoge.org
# ローカルのPostfixから送信したメールが、何処のメールサ...
# 通常は "$myhostname" を指定する事となる
# バーチャルドメインを使いつつ、ローカルroot宛メールをal...
myorigin = server-name.hoge.org
# メールを受け取るNICのアドレス。allを指定すると全てから...
inet_interfaces = all
# メール配送を許可するドメインのリスト。
# バーチャルドメインのみを利用する場合は "mydestination ...
# バーチャルドメインを使いつつ、ローカルroot宛メールをal...
mydestination = $myorigin, localhost
# 受信者アドレスがローカルIPで、受信者条件に合致しない時...
unknown_local_recipient_reject_code = 550
# 信頼されたネットワーク。MTAのサーバ自体(127.0.0.1/32)...
mynetworks = 192.168.0.0/24, 127.0.0.1/32
# Postfixがメールをリレーしようとする配送先MTAドメイン
relay_domains = $mydestination
# Postfixの認証(ユーザのログイン)で使用されるエイリアス...
alias_maps = hash:/etc/aliases
# newaliasesコマンドで更新されるエイリアスデータベース
alias_database = hash:/etc/aliases
# メールの保存ディレクトリ名と保存形式。今回はMailDir形...
# 下記だと各ユーザの"mail"というディレクトリの中にメール...
home_mailbox = mail/
# メールの配送に使用するコマンド。つまり、Postfixの受信...
# 今回は、procmailでの振り分けを行うのでprocmailのバイナ...
mailbox_command = /usr/bin/procmail
# ローカルIPアドレスが付与されるReceivedヘッダを削除する...
header_checks = regexp:/etc/postfix/header_checks
# STARTTLS、SMTP over SSLなど拡張機能利用時のPostfixアプ...
mail_name = unknown
# SMTPのリターンコードが220の時に付随するテキスト。unkno...
smtpd_banner = $myhostname ESMTP unknown
# リモートクライアントかサーバが$debug_peer_listパラメー...
debug_peer_level = 2
# デーモンが"-D"オプションで呼ばれた時に実行される外部コ...
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin
ddd $daemon_directory/$process_name $process_id & s...
# Sendmail互換機能。Postfixキューにメールを投げるのに使...
sendmail_path = /usr/sbin/sendmail
# Sendmail互換機能。localのエイリアスDBを再構築する際に...
newaliases_path = /usr/bin/newaliases
# Sendmail互換機能。Postfixのメールキューをリストアップ...
mailq_path = /usr/bin/mailq
# Postfixコマンド、Postfixディレクトリを所有するグループ
# このパラメータを変更した場合、"postfix set-permissions...
setgid_group = maildrop
# Postfixのドキュメント(HTML)ファイルのディレクトリ
html_directory = /usr/share/doc/packages/postfix-doc/html
# Postfixのマニュアルがインストールされたディレクトリ
manpage_directory = /usr/share/man
# Postfixの設定例があるディレクトリ
sample_directory = /usr/share/doc/packages/postfix-doc/s...
# PostfixのREADMEファイルのディレクトリ
readme_directory = /usr/share/doc/packages/postfix-doc/R...
# Postfixが待ち受けるプロトコル。ipv4=IPv4,ipv6=IPv6,all...
inet_protocols = ipv4
##
## [独自追加部分] - SASL設定
##
# PostfixのSASL認証を有効にする
smtpd_sasl_auth_enable = yes
# Receivedヘッダーに認証ユーザ名を表示する
smtpd_sasl_authenticated_header = yes
# DovecotのSASL認証を利用する
smtpd_sasl_type = dovecot
# DovecotのSASL認証用デーモンのソケットを指定
smtpd_sasl_path = private/auth
# SASL認証のレルム(realm)の指定
smtpd_sasl_local_domain = $myhostname
# クライアントに許可(提供)する認証方法
# noplaintext : 平分パスワードを非許可
# noactive : "non-dictionary active"攻撃に脆弱な認...
# nodictionary : "passive dictionary"攻撃に脆弱な認証...
# noanonymous : 匿名ログインを非許可
# mutual_auth : 相互認証を提供する方法のみ許可
smtpd_sasl_security_options = noanonymous
# SMTPクライアントがSMTPセッションで"HELO"or"EHLO"コマン...
smtpd_helo_required = yes
# PostfixがSMTP"RCPT TO"コマンドの際に適用するアクセス制...
smtpd_recipient_restrictions = permit_mynetworks, permit...
# 古いバージョンのSMTP"AUTH"コマンドとの相互運用性を有効...
broken_sasl_auth_clients = yes
# PostfixでTLSを有効にする。Postfix2.3以降だと"smtpd_tls...
smtpd_use_tls = yes
# Postfixで暗号化されていないSASL認証を受け付けない。"sm...
smtpd_tls_auth_only = yes
# PEMフォーマットのSMTP(Postfix)サーバ用RSA証明書ファイル
smtpd_tls_cert_file = /etc/pki/tls/mail.hoge.crt
# PEMフォーマットのSMTP(Postfix)サーバ用RSA秘密鍵ファイル
smtpd_tls_key_file = /etc/pki/tls/mail.hoge.key
# PostfixのTLSセッションキャッシュを含むファイルの名前。...
smtpd_tls_session_cache_database = btree:/var/lib/postfi...
# 擬似乱数生成用のソースファイル。デバイスファイルを指定...
tls_random_source = dev:/dev/urandom
# SMTPの"SMTP VRFY"コマンドを無効化する
disable_vrfy_command = yes
##
## [独自追加部分] - バーチャルドメイン設定
##
## 先頭に"mysql:"と付いている箇所はMySQLのDB値を取得する...
##
# $mydestinationでリストアップされたドメインへの配送方法...
# "virtual" だと仮想配送(バーチャルドメイン)を行う
# "local" だと、一度ローカル配送(alias)を実施した後にバ...
# バーチャルドメインを使いつつ、ローカルroot宛メールをal...
local_transport = local
# $virtual_mailbox_domainsでリストアップされたドメインで...
virtual_transport = procmail
# 特定メールアドレス、ドメインのエイリアスファイルを指定
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_al...
# 指定されたバーチャルエイリアスドメインの最終配送先
# $virtual_alias_maps内に受信者アドレスが存在しない場合...
virtual_alias_domains = $virtual_alias_maps
# バーチャルドメインのトップレベルメールスプールディレク...
# $virtual_mailbox_mapsテーブル検索結果の全てのPATHの先...
virtual_mailbox_base = /var/hoge/mail-spool
# $virtual_mailbox_domainsに対応する有効なアドレスのオプ...
# $virtual_mailbox_baseの値がこのPATHの前に付けられるの...
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_...
# 指定ファイル内から受信者アドレスの検索を行い、存在しな...
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtu...
# メールの最大サイズ(Byte換算)。0だと無制限
message_size_limit = 10485760
# MTAサーバでのQuota制限に引っかかった場合、エラーメール...
virtual_overquota_bounce = yes
# 受信メールボックスのみを制限する
virtual_mailbox_limit_inbox = yes
# バーチャルドメイン毎の最大メールボックスを記述したエイ...
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_vi...
# $virtual_mailbox_limit_mapsの値で、最大メールボックス...
virtual_mailbox_limit_override = yes
# PostfixのユーザIDの最小値を指定する。この値以下のユー...
virtual_minimum_uid = 5000
# 用意したユーザIDを指定する。5000以降にしておくとシステ...
virtual_uid_maps = static:5000
# 用意したグループIDを指定する。5000以降にしておくとシス...
virtual_gid_maps = static:5000
# キューに入った後にフィルタリング処理を行うMTAの名前と...
# Postfixのコンフィグ(master.cf)に書いた値を指定する。他...
# 今回はウイルスチェックを通す為、amavisの待機ポートを指...
content_filter = amavis:[localhost]:10026
# 受信者確認、アドレス書き換えの処理を指定する
# no_unknows_recipient_checks : 知らない受信者でも拒否...
# 外部コンテンツフィルタ...
# no_address_mappings : バーチャルエイリアスマ...
# 外部コンテンツフィルタ...
# no_header_body_check : ヘッダー・ボディチェッ...
# 外部コンテンツフィルタ...
receive_override_options = no_address_mappings
~
&size(16){&font(b){/etc/postfix/header_checks};};
/^Received:/ IGNORE
~
&size(16){&font(b){/etc/postfix/mysql_virtual_alias_maps....
PostfixからDB接続を行う場合、maps.cfファイルのhostsをloca...
MySQLのローカルソケット(.sock)を使ってDB接続を行うように...
&color(#ff0000){TCP/IPで接続する場合は、127.0.0.1とIPアド...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = alias
select_field = goto
where_field = address
~
&size(16){&font(b){/etc/postfix/mysql_virtual_domains_map...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = ...
~
&size(16){&font(b){/etc/postfix/mysql_virtual_mailbox_lim...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = mailbox
select_field = quota
where_field = username
additional_conditions = and active = '1'
~
&size(16){&font(b){/etc/postfix/mysql_virtual_mailbox_map...
user = postfix-mysql-user
password = postfix-mysql-pass
hosts = localhost
dbname = postfix-user-db
table = mailbox
select_field = maildir
where_field = username
additional_conditions = and active = '1'
~
&size(16){&font(b){/etc/postfix/vquota};};
# 該当メールアドレスのバーチャルクォータを指定
# ドメインのオーナーアドレスとかは下記みたいに個別指定に...
hoge-owner@mail.hoge.org 524288000
# ドメイン全体でのバーチャルドメインクォータを指定
# 『個別メールクォータ容量≦ドメイン全体でのクォータ容量...
@mail.hoge.org 524288000
~
&size(16){&font(b){/etc/postfix/master.cf};};
本来ならchroot環境にするべきなのだが、
chrootにすると何故かMySQLとの連携で転けたので今回はノーマ...
あと、基本的に"下記のまま"記述をし、下記に書いていない箇...
# ======================================================...
# Postfix Document
# http://www.postfix-jp.info/trans-2.3/conf/master.cf.jp
# ======================================================...
# service type private unpriv chroot wakeup maxproc ...
# (yes) (yes) (yes) (never) (100)
# ======================================================...
smtp inet n - n - - ...
## amavisとの連携オプションを指定する。
## サーバの性能によってプロセス数を調整する(今のPCスペッ...
amavis unix - - n - 4 ...
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
## TLS認証やSASL-AUTHの使用設定を行う。
## 今回の構成ならyesにする必要がある。
smtps inet n - n - - ...
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
pickup fifo n - n 60 1 ...
cleanup unix n - n - 0 ...
qmgr fifo n - n 300 1 ...
tlsmgr unix - - n 300 1 ...
rewrite unix - - n - - ...
bounce unix - - n - 0 ...
defer unix - - n - 0 ...
trace unix - - n - 0 ...
verify unix - - n - 1 ...
flush unix n - n 1000? 0 ...
proxymap unix - - n - - ...
proxywrite unix - - n - 1 ...
smtp unix - - n - - ...
relay unix - - n - - ...
showq unix n - n - - ...
error unix - - n - - ...
retry unix - - n - - ...
discard unix - - n - - ...
local unix - n n - - ...
virtual unix - n n - - ...
lmtp unix - - n - - ...
anvil unix - - n - 1 ...
## amavisでスキャンを行ったメッセージのサーバ(MTA)内受信...
## 今回は1台の物理サーバで全てのメール転送プロセスを処理...
## "localhost"の"10025ポート"で受信する様に設定してある。
## また、mynetworksを指定し信頼するネットワークの指定も...
## 他のパラメータについては、必要に応じて適宜設定を行う。
localhost:10025 inet n - n - -...
-o content_filter=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_restriction_classes=
-o mynetworks=192.168.0.0/24,127.0.0.1/32
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o local_recipient_maps=
-o relay_recipient_maps=
scache unix - - n - 1 ...
## userには、main.cfの$home_mailboxディレクトリへの書き...
## 今回はPostfixAdminとの連携を行うので、PostfixAdminで...
procmail unix - n n - - ...
flags=R user=postfixadmin argv=/usr/bin/procmail -t -m...
~
&size(16){&font(b){/etc/sysconfig/postfix};};
OSのディストリビューションによっては編集する必要がある。
基本はデフォルト値にして、Postfixのコンフィグで設定を書い...
POSTFIX_RELAYHOST=""
POSTFIX_LISTEN=""
POSTFIX_INET_PROTO=""
POSTFIX_MYHOSTNAME=""
POSTFIX_MASQUERADE_DOMAIN=""
POSTFIX_LOCALDOMAINS=""
POSTFIX_NULLCLIENT="no"
POSTFIX_DIALUP="no"
POSTFIX_NODNS="no"
POSTFIX_CHROOT="no"
POSTFIX_UPDATE_CHROOT_JAIL="no"
POSTFIX_WITH_LDAP="no"
POSTFIX_WITH_MYSQL="no"
POSTFIX_MYSQL_CONN="socket"
POSTFIX_LAPTOP="no"
POSTFIX_UPDATE_MAPS="yes"
# デフォルト値の末尾に"helo_access relay"を追記
POSTFIX_MAP_LIST="virtual transport access canonical sen...
POSTFIX_TRANSPORT_MAPS=""
POSTFIX_RBL_HOSTS=""
POSTFIX_BASIC_SPAM_PREVENTION="off"
POSTFIX_SMTPD_CLIENT_RESTRICTIONS=""
POSTFIX_SMTPD_HELO_RESTRICTIONS=""
POSTFIX_SMTPD_SENDER_RESTRICTIONS=""
POSTFIX_SMTPD_RECIPIENT_RESTRICTIONS=""
POSTFIX_MDA="local"
POSTFIX_SMTP_AUTH_SERVER="no"
POSTFIX_SMTP_AUTH="no"
POSTFIX_SMTP_AUTH_OPTIONS=""
POSTFIX_SMTP_TLS_SERVER="no"
POSTFIX_SMTP_TLS_SERVER_LEGACY_SUPPORT="no"
POSTFIX_SMTP_TLS_CLIENT="no"
##
## 以下、SSLファイルの指定は"main.cf"の設定値の方が優先...
##
POSTFIX_SSL_PATH="/etc/postfix/ssl"
POSTFIX_TLS_CAFILE="cacert.pem"
POSTFIX_TLS_CERTFILE="certs/postfixcert.pem"
POSTFIX_TLS_KEYFILE="certs/postfixkey.pem"
##
## [修正箇所] - SSL証明書作成時に入力した(する)値を設定...
##
# SSL証明書の"Country Name"の値 = 日本ならJP
POSTFIX_SSL_COUNTRY="JP"
# SSL証明書の"State or Province Name"の値 = 都道府県
POSTFIX_SSL_STATE="Tokyo"
# SSL証明書の"Locality Name"の値 = 市区町村。個人鯖とか...
POSTFIX_SSL_LOCALITY="-"
# SSL証明書の"Organization Name"の値 = 組織名。個人鯖な...
POSTFIX_SSL_ORGANIZATION="hoge.org"
# SSL証明書の"Organizational Unit Name"の値 = 組織内での...
POSTFIX_SSL_ORGANIZATIONAL_UNIT="-"
# SSL証明書の"Common Name"の値 = Postfixの稼働するマシン...
POSTFIX_SSL_COMMON_NAME="mail.hoge.org"
# SSL証明書の"Email Address"の値 = ドメインのオーナーア...
POSTFIX_SSL_EMAIL_ADDRESS="hoge-owner@mail.hoge.org"
# メールボックスの容量リミットを無制限にする
POSTFIX_ADD_MAILBOX_SIZE_LIMIT="0"
# メール一通の容量リミットを無制限にする
POSTFIX_ADD_MESSAGE_SIZE_LIMIT="0"
# サービスロケーションプロトコルの切り替え。デフォルト値...
POSTFIX_REGISTER_SLP="yes"
# Postfixの稼働するサーバでのネットワークスタイルを書く...
POSTFIX_ADD_MYNETWORKS_STYLE="subnet"
~
*メールディレクトリ [#i4e72752]
メール保存用ディレクトリを作成してパーミッションも設定する
# mkdir /var/hoge/mail-spool
# chown postfixadmin.postfix /var/hoge/mail-spool
# chmod 750 /var/hoge/mail-spool
~
*起動設定 [#ff2fda5b]
yastやchkconfigを使って自動起動の設定を行う。
-yast
# yast
[System] -> [Services Manager] -> [postfix] -> "Enab...
-chkconfig
# chkconfig postfix on
-init.d
●起動
# /etc/init.d/postfix start
●停止
# /etc/init.d/postfix stop
●再起動
# /etc/init.d/postfix restart
~
*SASL認証 [#f8e85460]
Postfix SASL認証を行う為の追加設定。
メールをGmailやYahooメール等から受信する時は必須になる。
-参考サイト
--[[PostfixでSMTP-AUTHを実装する方法(PAM編)>+http://www...
--[[LinuxCommand - saslauthd>+http://www.linuxcommand.org...
1). SMTPとIMAP(POP3)が同居している場合
# zypper install cyrus-sasl-saslauthd
# vi /etc/sysconfig/saslauthd
---
! [1] START=yes
! [2] SASLAUTHD_AUTHMECH=rimap
! [3] OPTIONS="-c -r -m /var/run/saslauthd -O 127.0.0.1"
---
[1] 自動起動ON
[2] 認証方式
[3] saslauthdの起動パラメータ
"-c":認証クレジットをキャッシュする
"-r":SASLAUTHD_AUTHMECHがrimapの時は必須
"-m":saslauthdのソケット
"-O":remapホスト名
==================================================
2). 上位SMTPへリレー配送する場合は、さらに追加設定を行う
# vi /etc/sysconfig/saslauthd
< SASLAUTHD_AUTHMECH=rimap
---
> SASLAUTHD_AUTHMECH=pam
# vi /etc/postfix/main.cf
< smtpd_sasl_type = dovecot
---
> smtpd_sasl_type = cyrus
~
*DNS参照 [#e402ff27]
参考サイト:[[Postfixにhostsを参照させる>+https://aritosa...
relayhostやtransportをAレコード、MXレコードで指定した時、
デフォルトのPostfixではローカルのhostsファイルを参照せず...
名前解決の順番を他のMTAと同じようにする(hosts -> DNS)時や、
DNSで名前解決出来ない場合にhosts参照する(DNS -> hosts)は...
・hosts -> DNS
smtp_host_lookup = native
・DNS -> hosts
smtp_host_lookup = dns native
~
*ドメイン毎の固定配送経路指定 [#b4c189b9]
参考サイト:[[sendmailのmailertableをPostfixで実現する>+h...
Postfix v1では、transportに複数の配送先を指定出来たのだが、
Postfix v2では、transportに複数の配送先を指定出来なくなっ...
この問題を解決する為の[[パッチ>+http://www.tmtm.org/postf...
ソースから入れ直す必要があり面倒なので、設定変更だけでmai...
~
-シナリオ
--基本はPrimaryMTAへ配送
--PrimaryMTAがダウン(ConnTimeout/ConnRefused)していた場合...
--固定配送しないメールは通常通り配送
--メールがループしないようにデフォルトの冗長配送は止める
-
|配送ドメイン |PrimaryMTA [DNS Aレコード] |Secondary...
|@mail01.hoge.org|192.168.1.1 [mail01p.hoge.org]|192.168....
|@mail02.hoge.org|192.168.2.1 [mail02p.hoge.org]|192.168....
-main.cf
default_transport = relay:
-master.cf
relay-mail01 unix - - n - - smtp
-o fallback_relay=[mail01s.hoge.org]
relay-mail02 unix - - n - - smtp
-o fallback_relay=[mail02s.hoge.org]
-transport.maps
mail01.hoge.org relay-mail01:[mail01p.hoge.org]
mail02.hoge.org relay-mail02:[mail02p.hoge.org]
ページ名: