Fedora Core 6 postfix



前書き (執筆:2007/05/14)

このページではPostfixをFedora Core 6(以下 FC6)に用意されているRPM(パッケージ)を利用する方法を記載しています。
執筆時点で最新の用意されているPostfixのバージョンは 2.3.3-2 になります。
Postfix公式サイトでは 執筆時 2.4.1 のソースファイルが配布されています。
どちらを使うかは、運用スタイルに合わせて検討してください。

Postfixとは?

PostfixとはMTA(Message Transfer Agent:メール配送エージェント)のひとつ。
Fedoraには標準でsendmailが装備されています。
受信形式がMailbox形式のほか、Maildir形式もサポートされ高機能かつ設定が容易に行えることで人気のMTAです。

Postfixのインストール

まずRPMパッケージがインストールされているか確認します。

# rpm -qa postfix
postfix-2.3.3-2

と表示されればインストールされています。(数字の部分はバージョンですので異なる場合があります。)
インストールされていない場合は yum を使ってインストールします。

# yum install postfix

最新版のPostfixがダウンロードされます。
最後にインストールしていいか(y/n)と聞かれるので y でインストールします。

sendmailの停止

すでにsendmailが動いているのでこれを停止させ、自動起動しないように設定を変更します。

# /etc/rc.d/init.d/sendmail stop
# chkconfig --del sendmail

sendmailからの切り替え設定

sendmailからPostfixに切り替える設定です。

# alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number:

ここで 2 [enter] を選択入力し、postfix が標準MTAになるようにします。

基本設定 main.cf の修正

設定ファイルは /etc/postfix/main.cf になります。
必要最低限と思われる箇所のみ抜粋していますので、実際のファイル、ドキュメント等を参考に運用スタイルに合わせて設定を行ってください。

また、ここでは分かりやすいように和訳コメントを付加しています。
和訳された設定ファイルは Postfixのページ:http://www.postfix-jp.info/ を参考にさせていただいています。

# vi /etc/postfix/main.cf

特に設定・修正が必要な箇所を抜粋

# インターネットのホストとドメイン名
# 
# myhostname パラメータにはこのメールシステムのインターネット上の
# ホスト名を指定します。デフォルトは gethostname() から得られた
# FQDN(fully-qualified domain name, ホスト名+ドメイン名)です。
# $myhostname は他の多くの設定パラメータでデフォルト値として使われます。
myhostname = mail.XXXXXX.XXX


# mydomain パラメータにはローカルなインターネットドメイン名を指定
# します。デフォルトは $myhostname からはじめの部分を引いたものです。
# $mydomain は他の多くの設定パラメータでデフォルト値として使われます。
mydomain = XXXXXX.XXX


# メールの送信
# 
# myorigin パラメータにはローカルで送信されたメールがどのドメインから
# 来るように見えるかを指定します。デフォルトは $myhostname で、これは
# 小さなサイト向きです。もし複数のマシンがあるドメインで走らせるので
# あれば、(1)これを $mydomain に変えて、(2) それぞれのユーザに対する
# エイリアスを user@that.users.mailhost の形でドメイン全体に渡って
# 作るべきです。
#
# 送信者と受信者のアドレス間の一貫性を保つため、myorigin は
# @domain 部分がない受信者アドレスに付け加えられるデフォルトの
# ドメインも指定します。
#
myorigin = $mydomain


# メールの受信

# inet_interfaces パラメータには配送されたメールをメールシステムが
# 受け取る際のネットワークインターフェースのアドレスを指定します。
# デフォルトではソフトウェアはマシン上のすべてのアクティブなインター
# フェースを要求します。このパラメータは user@[ip.address] へのメールも
# 制御します。
#
# プロキシもしくはネットワークアドレス変換ソフトを通して自身に
# 転送されるネットワークアドレスについては、proxy_interfaces
# パラメータも参照してください。
#
# 注意: このパラメータを変更したら、Postfixを stop/start する
# 必要があります。
inet_interfaces = all


# mydestination パラメータには、このマシンが自分自身が最終目的地だと
# みなすドメインのリストを指定します。
#
# これらのドメインは local_transport パラメータで設定された配送
# エージェントに回されます。それはデフォルトでは /etc/passwd や
# /etc/aliases、およびそれと同等のものに書かれた全ての受信者を
# 検索する UNIX 互換の配送エージェントです。
#
# デフォルトは $myhostname + localhost.$mydomain です。メールドメイン
# ゲートウェイでは、$mydomain も含めるべきです。
#
# バーチャルドメインの名前を指定してはいけません - それらのドメインは
# 別の場所で指定します (VIRTUAL_README 参照)。
#
# このマシンが、あるドメインのバックアップMXホストであれば、
# そのドメインは指定してはいけません。これらの名前は SMTP サーバに
# 対して relay_domains を指定するか、あなたが怠惰であれば
# permit_mx_backup を使います(STANDARD_CONFIGURATION_README 参照)。
#
# ローカルマシンは常に user@[the.net.work.address] (the.net.work.address
# はメールシステムが受け取るメールが入ってくるインターフェースのもの)
# 宛のメールの最終到達地です。
#
# ホストやドメイン、/file/name もしくは type:table 形式でリストを指定し、
# カンマか空白文字で区切ります。/file/name 部分はその中身で置き換えられ
# ます。type:table は名前が検索キーにマッチしたときにマッチします
# (右側の部分は無視されます)。長い行は次の行を空白で始めることで、
# 継続行として扱われます。
#
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain


# 「信頼とリレー制御」

# mynetworks パラメータには "外部(クライアント)" よりも多くの権限を
# 持つ "信頼された" SMTP クライアントのリストを指定します。
#
# 特に "信頼された" SMTP クライアントはPostfixを通してメールを
# リレーすることが許されます。postconf(5) の
# smtpd_recipient_restrictions パラメータを参照してください。
#
# "信頼された" ネットワークアドレスのリストを手で指定することも
# できますし、Postfixに任せることもできます(こちらがデフォルト)。
#
# デフォルトでは (mynetworks_style = subnet)、Postfixは同じ IP
# サブネットワークにある SMTP クライアントをローカルマシンとして
# "信頼" します。
# Linux では、これは "ifconfig" コマンドで指定されたインターフェース
# の場合にのみ正確です。
#
# Postfixが同じ IP クラス A/B/C ネットワーク内の SMTP クライアントを
# ローカルマシンとして "信頼" すべき時は "mynetworks_style = class"
# を指定してください。
# ダイアルアップサイトではこれを指定しないでください - Postfixが
# プロバイダのネットワーク全体を "信頼" してしまいます。かわりに
# 下に示すように mynetworks リストを手で指定してください。
#
# Postfixがローカルマシンのみを "信頼" すべき場合は
# "mynetworks_style = host" を指定してください。
# 
mynetworks_style = subnet


# 代わりに、mynetworks リストを手で指定することもできます。この場合は
# Postfixは mynetworks_style の設定を無視します。
#
# network/netmask パターンのリストを明示的に指定してください。ここで
# mask にはホストアドレスのネットワーク部分をビット数で指定します。
#
# ここでパターンのリストを指定する代わりにパターンファイルの絶対パスを
# 指定することもできます。テーブルベースの検索には type:table を
# 指定してください (テーブルの右側の値は使われません)。
#
mynetworks = 192.168.0.0/24, 127.0.0.0/8


# relay_domains パラメータはこのメールシステムがどの目的地にメールを
# リレーするかを制限します。詳細な情報は postconf(5) の
# smtpd_recipient_restrictions の記述を参照してください。
#
# デフォルトでは、Postfixは
# - ($mynetworks にマッチする IP アドレスを持つ)「信頼された」
#   クライアントから全ての目的地へ
# - 「信頼されていない」クライアントから、$relay_domains または
#   そのサブドメインにマッチする目的地へ、送信者が指定した
#   ルーティングのアドレスを除いて
# リレーをします。デフォルトでは、relay_domains は $mydestination です。
# 
# 上に加えて、Postfix SMTP サーバはデフォルトで最終目的地が
# - 目的地が $inet_interfaces または $proxy_interfaces にマッチするもの
# - 目的地が $mydestination にマッチするもの
# - 目的地が $virtual_alias_domains にマッチするもの
# - 目的地が $virtual_mailbox_domains にマッチするもの
# のメールを受け取ります。これらの目的地は $relay_domains に挙げられて
# いる必要はありません。
# 
# ホストやドメイン、/file/name パターンや type:name 検索テーブルの
# リストを、カンマか空白文字で区切って指定します。
# 長い行は次の行を空白で始めることで、継続行として扱われます。
# ファイル名はその中身で置き換えられます。type:table は(親)ドメインがが
# 検索キーとして現れた時にマッチします。
#
# 注意: Postfixは自動的にはこのシステムをプライマリもしくはバックアップ
# MX ホストに挙げているドメインに対してメールを転送しません。
# postconf(5) の permit_mx_backup 制限の記述を参照してください。
#
relay_domains = $mydestination


# エイリアスデータベース
#
# alias_maps パラメータにはローカル配送エージェントが利用するエイリアス
# データベースのリストを指定します。デフォルトのリストはシステムに依存
# します。
#
# NIS を利用したシステムでは、デフォルトはローカルのエイリアス
# データベースを検索し、次に NIS のエイリアスデータベースを検索します。
# 文法の詳細は aliases(5) を参照してください。
# 
# エイリアスデータベースを変更したら、"postalias /etc/aliases"(もしくは
# あなたのシステムがメールエイリアスファイルを格納している場所)を
# 実行するか、単に "newaliases" を実行して、必要な DBM または DB
# ファイルを構築します。
#
# 変更が反映されるまで少し時間がかかります。"postfix reload" を
# 実行すると、その遅延がなくなります。
#
alias_maps = hash:/etc/aliases

# alias_database パラメータには "newaliases" または "sendmail -bi"
# で構築されたエイリアスデータベースを指定します。alias_maps (上述)は
# Postfixがすべてコントロールする必要がないテーブルを指定するかも
# しれないため、これは別の設定パラメータになっています。
#
alias_database = hash:/etc/aliases


# メールボックスへの配送
#
# home_mailbox パラメータには、オプションでメールボックスファイルのパス
# 名を、ユーザのホームディレクトリからの相対パスで指定します。
# デフォルトのメールボックスファイルは /var/spool/mail/user か
# /var/mail/user です。qmail形式の配送は "Maildir/" (/ が必要) を
# 指定します。
home_mailbox = Maildir/


# 「インストール時設定情報」
#
# 次のパラメータは新しいPostfixバージョンのインストール時に使われます。
#
# sendmail_path: Postfix sendmail コマンドのフルパス名。
# これは Sendmail 互換のメール投函インターフェースです。
#
sendmail_path = /usr/sbin/sendmail

サーバ情報の非表示設定

サーバー情報をそのまま出力してしまうと、悪意のある第三者に悪用される可能性を高めてしまいます。
そこでサーバー情報を出力しない設定を行います。

# 「ソフトウェアのバージョンを示すか否か」
#
# smtpd_banner パラメータには、SMTP サーバの greeting バナーで 220
# コードに続くテキストを指定します。メールのバージョンが示されるのを
# 好む人もいます。デフォルトでは、Postfixはバージョンを示しません。
#
# $myhostname をテキストのはじめに指定「しなければいけません」。
# これは RFC が要求しています。Postfix自身は構いません。
#
#smtpd_banner = $myhostname ESMTP $mail_name
#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)

この箇所に追記します。

smtpd_banner = $myhostname ESMTP

SMTP-AUTH(sasl2)を用いた設定

SMTP-AUTH(sasl2)を利用する場合、下記の内容を main.cf へ追記します。

# AMTP-AUTH(sasl2)関係の設定追加分です
#
# SMTPサーバ設定(SASLによるSMTP認証)
smtpd_sasl_auth_enable = yes

# 使用可能な認証設定
# noanonymous : 匿名接続を拒否
# noplaintext : PLAIN認証拒否(Outlook ExpressはPLAIN認証のみ対応)
#smtpd_sasl_security_options = noanonymous, noplaintext

# ローカル認証の名前設定
smtpd_sasl_local_domain = $mydomain

# リレーを許可の設定
# -permit_mynetworks : mynetworksで指定されたネットワークからリレーを許可
# -permit_sasl_authenticated : SMTP認証を通過したものは許可
# -reject_unauth_destination : 目的地が $inet_interfaces、$mydestination $virtual_alias_domains
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

# AUTHコマンドが未サポートのクライアント対応
# Outlook Express4 / Exchange5 etcはAUTHコマンドのサポートを認識できないため使用時は下記の設定を追加
broken_sasl_auth_clients=yes

smtpd_client_restrictions = permit_mynetworks, reject_unknown_client, permit

smtpd_client_restrictions については

  • permit_mynetworks:クライアントが $mynetworks に属しているIPの場合は要求を許可(permit)する
  • reject_unknown_client:クライアントがDNSにPTRレコードを持たないIPの場合に要求を拒否(reject)する というないようです。
    運用スタイルに合わせて設定を追加してください。

メールに記載されるメールアドレスを user_account@mail.XXXXXX.XXX といった @mail.~ の前述した myhostname にする場合は下記のように変更してください。

  • smtpd_sasl_local_domain = $myhostname

携帯メール対策

携帯電話各社にメールを送る場合いろいろ制限がかかっていて、、自宅サーバ(動的IP)の postfix からメールが届かないことがあります。
これら宛のメールはプロバイダのメールサーバにリレーして送信するように main.cf へ設定をします。

transport_maps = hash:/etc/postfix/transport

smtp_sasl_password_maps = hash:/etc/postfix/provider_mail

次に /etc/postfix/provider_mail を新規に作成して プロバイダ のメール設定を記述します。

# vi /etc/postfix/provider_mail


smtp.provider.ne.jp   mail_id:password

最後に携帯メールのリレー用に /etc/postfix/transport に、下記内容を追加します。
[  ] 内には契約しているプロバイダのSMTPサーバを記述する。

docomo.ne.jp          :[smtp.provider.ne.jp]
.docomo.ne.jp         :[smtp.provider.ne.jp]
ezweb.ne.jp           :[smtp.provider.ne.jp]
.ezweb.ne.jp          :[smtp.provider.ne.jp]
vodafone.ne.jp        :[smtp.provider.ne.jp]
.vodafone.ne.jp       :[smtp.provider.ne.jp]

ここでOutbound Port 25 Blocking対策で別のポート番号を指定されている場合は、SMTPサーバー名の後ろにポート番号を記述してください。

例 docomo.ne.jp          :[smtp.provider.ne.jp]:587

postmap で作成したリレーデータを反映させてtransport.dbを作成する。

# postmap /etc/postfix/transport

OP25B(Outbound Port25 Blocking)対策

前述の「携帯メール対策」と同様に、今まで送信できていたが急に送れなくなってしまう場合あります。
そんな場合は以下の設定を試して下さい。
submission port に port 25 の換わりに port 587 を使用して配送する設定になります。

postfix設定ファイル /etc/postfix/master.cf の修正

# vi /etc/postfix/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").
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
# ==========================================================================
smtp      inet  n       -       n       -       -       smtpd
#submission inet n       -       n       -       -       smtpd
#  -o smtpd_enforce_tls=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

  ↓  ↓

smtp      inet  n       -       n       -       -       smtpd
submission inet n       -       n       -       -       smtpd
  -o smtpd_enforce_tls=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

header_checksの修正

メールのヘッダー部(Received行)ローカルIPアドレスが表示されないように設定を変更します。
※[192\.168.*\]の箇所は各自のローカルネットワークの環境に合わせて変更してください。

# vi /etc/postfix/header_checks


/^Received:\sfrom .*\[127\.0\.0\.1\]|^Received:\sfrom .*\[192\.168.*\]/ IGNORE

変更を反映させます。

# postalias /etc/postfix/header_checks

aliasesの修正

RPM(パッケージ)でインストールするとroot宛てのメールはpostfix宛てに配送されます。
一般ユーザ宛に転送するには /etc/aliases に対して下記を追記します。

# vi /etc/aliases


root: UserName

最後に newaliases を実行し反映させます。

# newaliases

sasl2の設定

SMTP-AUTHの方法はいくつかありますが、ここではsasl2を利用した認証方式を使用します。
この方法は UNIXのshadowパスワードとは別にパスワードを使用することができるで、セキュリテイ的にも向上します。

  • /usr/lib/sasl2/smtpd.conf を sasldb2 で行うように変更します。
    pwcheck_method: auxprop
  • パスワードデータベースを作成。
    パスワード作成は、以下のように行います。
    HostNmaeには main.cf で設定した $myorigin と同一のドメイン(ホスト)名を指定すること。
    一致しないと認証に失敗します。
    # saslpasswd2 -c -u HostName UserName
    パスワードを削除する場合
    # saslpasswd2 -d -u HostName UserName
    パスワードの確認する場合
    # sasldblistusers2
    UserName@mail.mydomain.com: userpassword
  • Postfixでsasldbを利用できるようにグループを変更し、パーミッションを変更します。
    # chgrp postfix /etc/sasldb2
    # chmod 640 /etc/sasldb2

Postfixの起動設定

RPM(パッケージ)でインストールすると、/etc/rc.d/init.d配下に自動実行スクリプトが組み込まれます。
あとはランレベル設定を行います。

# chmod 755 /etc/rc.d/init.d/postfix
# chkconfig --add postfix
# chkconfig --list postfix
postfix      0:off  1:off   2:on   3:on   4:on   5:on   6:off

Postfixを起動させます。

# /etc/rc.d/init.d/postfix start

起動後の動作ポート確認

nmapを使って現在動作しているポートを表示します。
いくつか表示されると思います。

# nmap localhost

下記はMTAに関するポートだけを抜粋して記載しています。

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2007-05-14 15:03 JST
Interesting ports on localhost.localdomain (127.0.0.1):
Not shown: 1661 closed ports
PORT     STATE SERVICE

25/tcp   open  smtp

110/tcp  open  pop3

143/tcp  open  imap

587/tcp  open  submission

993/tcp  open  imaps
995/tcp  open  pop3s


Nmap finished: 1 IP address (1 host up) scanned in 0.218 seconds

送信テスト

ここまで設定が完了し、正常にpostfixが起動できたら、実際に送信してみます。
はじめは、わざとSMTP-AUTHの設定を メールクライアントソフト(Outlook Express、Outlook、Thunderbird etc) に行わないノーマル設定で送信してみてください。
送信不可となるはずです。
もしここで送信できてしまう場合はSMTP-AUTHが機能していないことになります。

次に SMTP(送信時)の認証の設定を行ってメールを送信してみます。
適切に設定ができていればメールは送信できます。
もしなんらかの設定に不備があれば送信不可となるでしょう。

ログを見て確認することも忘れないように。

# cat /var/log/maillog

下記のようなログが残っていればOKです。
(注:このログは外部からメール送信を行った場合です。)

(略): connect from XXXXXXXX.ne.jp[XXX.XXX.XXX.XXX]
(略): 826B7A083D3: client=XXXXXX.ne.jp[XXX.XXX.XXX.XXX], sasl_method=CRAM-MD5, sasl_username=XXXXX@DOMAIN-NAME
(略): 826B7A083D3: message-id=<4647BBF9.6010601@DOMAIN-NAME>
(略): 826B7A083D3: from=<XXXXXX@DOMAIN-NAME>, size=744, nrcpt=1 (queue active)
(略): 826B7A083D3: to=<XXXXXX@docomo.ne.jp>, relay=XXX.XXXXX.net[XXX.XXX.XXX.XXX]:587, delay=0.47, delays=0.14/0.01/0.04/0.29, dsn=2.0.0, status=sent (250 Ok: queued as E951FD9066)
(略): 826B7A083D3: removed

DOMAIN-NAME は main.cf で smtpd_sasl_local_domain = $mydomain で設定されたドメイン名が入ります。
注目するところは2行目の

sasl_method=CRAM-MD5, sasl_username=XXXXX@DOMAIN-NAME

です。
メール送信を行った際に、このような記述にならない場合は設定不備が考えられます。

適切な認証(sasl2db関係)設定がされていない場合や外部からの不正利用の場合、認証が行われないため下記のようなログが残ります。

(略) warning: XXXXXXXXXXX.net[XXX.XXX.XXX.XXX]: SASL LOGIN authentication failed: authentication failure

不正中継確認

下記のサイトで不正中継のチェックなどを行っています。
よく利用方法・注意書きを読んで利用してください。
すべてのチェックをクリアできるようにしましょう。
SPAMメールの中継として悪用されたりしますので、しっかり確認・チェックを行ってください。

NETWORK ABUSE CLEARINGHOUSE[Mail relay testing] http://www.abuse.net/relay.html
RBL.JP http://www.rbl.jp/



Last-modified: 2015-04-23 (木) 15:24:25 (946d)