Linux Lovers
    Fedora Coreで始めるサーバ構築

Home > Mailサーバ > Postfixの設定

Postfixを使用する

MTAにはsendmailでは無く、設定が容易でセキュリティにも配慮され、sendmailと互換性のあるPostfix
使用したいと思います。MTAとは、メールを送信したり受け取ったりするプログラムになります。

また、ここではセキュリティ強化の為、SMTP Authを使用する設定を行っていきます。本来、メールを
送信する際は、認証という機能がありませんでした。なので、設定によってはいくらでもそのメールサーバを
使用してメールを送信できてしまいます。スパムメールを送る際の踏み台にされてしまうということです。
このようにならない為にも、送信する時にも認証を施し、第三者中継を拒否し、正当なユーザだけが
メールの送信をできるように設定します。

このページで紹介していく事は、Postfixの設定方法、SMTP Authの設定方法、Postfixを稼動させるに
あたっての注意点などを取り上げていきたいと思います。


Postfixの設定

Fedora Coreの場合、デフォルトではsendmailが使用されるようになっていて、動いてる状態になっています。
またインストールの仕方によっては、Postfixが入ってないこともあるので、先ずはPostfixの導入と
sendmailの停止をしたいと思います。

# rpm -q postfix       ←Postfixがインストールされてるかの確認
# yum -y install postfix       ←上記でインストールされていない場合
# service sendmail stop       ←sendmailの停止
# chkconfig sendmail off       ←自動起動しないように設定


次に通常使用するMTAをPostfixに変更します。

# alternatives --config mta
There are 2 programs which provide 'mta'.

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

Enter to keep the current selection[+], or type selection number: 1     ←1を入力してEnter


# chkconfig --level 345 postfix on       ←自動起動の設定
# service postfix start

最初のalternativesコマンドで通常使用するMTAの設定を行います。ここで1の欄にpostfixが有り、
初期状態では、sendmailを使用するようになっていますので、1を入力してEnterを押し、Postfixに
変更しました。変更すると「+」がPostfixに付くようになります。続いて、Postfixが自動起動するように
設定をし、サービスをとりあえず開始しました。またsendmailを使用する予定が無いのなら
アンインストールしてしまってもいいです。

# yum -y remove sendmail


次にPostfixの設定をしていきたいと思います。設定ファイルは、/etc/postfix/main.cfになります。

# vi /etc/postfix/main.cf

#myhostname = virtual.domain.tld       ←68行目

myhostname = linux.chibi.name       ←FQDNで指定、コメント解除

#mydomain = domain.tld        ←75行目

mydomain = chibi.name       ←ドメイン名を指定、コメント解除

#myorigin = $mydomain        ←91行目

myorigin = $mydomain        ←コメント解除

#inet_interfaces = all        ←105行目

inet_interfaces = all        ←コメント解除

inet_interfaces = localhost        ←108行目

#inet_interfaces = localhost        ←コメントアウト

mydestination = $myhostname, localhost.$mydomain
#mydestination = $myhostname, localhost.$mydomain $mydomain       ←156、157行目

#mydestination = $myhostname, localhost.$mydomain
mydestination = $myhostname, localhost.$mydomain $mydomain       ←コメントアウトを逆に

#mynetworks_style = subnet       ←243行目

mynetworks_style = subnet        ←コメント解除

#mynetworks = 168.100.189.0/28, 127.0.0.0/8        ←257行目

mynetworks = 192.168.1.0/24, 127.0.0.0/8       ←ネットワークアドレスの指定、コメント解除

#relay_domains = $mydestination        ←289行目

relay_domains = $mydestination        ←コメント解除

(行数については、場合によって異なるので、あくまでも目安です)

先ずは基本的な設定をしました。少し説明を入れると、myhostnameFQDNの指定です。
これは、「ホスト名.ドメイン名」という形で指定します。ホスト名は、hostnameコマンドで確認できます。
myoriginは、メールアドレスの「@以降」に付加する値の設定です。
inet_interfaces = all
は、リモートからのメールの配送を受け付けるようにする設定です。
mydestinationは、届けられたメールが自分あてかどうかを判断するためのものです。
mynetworksでは、ネットワークアドレスとローカルアドレスの指定を行います。ネットワークアドレスは
自分の環境に合わせてください。なお、mynetworks_stylemynetworksrelay_domainsは第三者中継を
防ぐ為の大事な設定です。

続きの設定に入ります。またセキュリティ強化の為、SMTP Authを利用するのでそれに伴い記述を
追加します。

#home_mailbox = Maildir/        ←414行目

home_mailbox = Maildir/        ←コメント解除

// 以下を追加で記述
smtpd_sasl_auth_enable = yes       ←SMTP Authの有効

smtpd_sasl_local_domain = $myhostname 

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, \
reject_unauth_destination


broken_sasl_auth_clients = yes

message_size_limit = 2048000        ←メッセージのサイズの上限を設定

smtpd_banner = $myhostname ESMTP      ←バナーをESMTPで返す

smtpd_helo_required = yes        ←HELOを必要とする

disable_vrfy_command = yes        ←VRFYコマンドの拒否

allow_percent_hack = yes
swap_bangpath = yes           ※この2つはデフォルトでyesなので記述の必要無し(6/12修正)

mailboxはMaildir形式にしました。他にもmbox形式がありますが、こちらの場合はメールスプール
ディレクトリに複数のメッセージがひとまとめにされ、ユーザ単位で保存される形になります。
最悪の場合、/var/spool/mailディレクトリを含むパーティションに空き容量が無くなってしまうと
全ユーザへのメール配送がストップしてしまう可能性があります。これに対し、Maildir形式では
メールは各ユーザのホームディレクトリ内にあるMairdirディレクトリに、1メッセージ=1ファイル
形式で保存されます。mboxのような心配はありませんので、Mairdir形式を利用することを
お勧めします。もしmbox形式で行く場合には、mailbox_size_limitmessage_size_limit
制限をかけたほうがいいと思います。前者はメールボックスの最大容量で、後者はメールサイズの
最大サイズになります。

メールは受信する時は認証があるのに、送信をする時には認証というものがありません。
これは設定によっては、誰でもこのSMTPサーバを利用してメールが送信できてしまうことになります。
先の設定で不正中継対策はしていますが、ここでもSMTP Authを利用して、更に不正中継の可能性を
排除します。また、SMTP Authはメールクライアントソフトが対応している必要があります。
最近ではかなり対応してきているので問題は無いと思います。
broken_sasl_auth_clients = yesという記述は、Outlookなどでログイン認証をする場合に必要な
記述になります。

その他の部分では、disable_vrfy_command = yesVRFYコマンドを禁止にしています。
またsmtpd_bannerで、メールサーバの情報を与えないようにしてあります。smtpd_helo_required = yes
HELOが必要なようにしています。第三者中継する為に使用するソフトでは、HELOコマンドを送信しないものが
多いので、このHELOを必須にしておけば、それだけ第三者中継の可能性を排除することができます。

allow_percent_hackは中継を指定してのメッセージ送信を許可するかどうか。
ただし、送信者が中継を指定してメッセージを送信できるかどうかは、smtpd_client_restrictions
で中継できる送信者の記述をする必要が有り、デフォルトの設定では中継はできないので、
yesのままで実害は無しです。

最後に、main.cfを変更してますので、Postfixを再起動しておきます。

# service postfix restart


>>このページのTOPへ

Cyrus SASL (SMTP Auth)の設定

それでは、具体的なSMTP Authの設定をしていきたいと思います。
なお、ユーザについてはシステムアカウントのユーザをそのまま使用します。

# vi /usr/lib/sasl2/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login 

↑のような記述をしてください。この場合は、Linuxのシステムアカウントに基づいて認証を行う設定に
なります。この場合、/etc/passwd/etc/shadowを基に認証が行われますので、特別な設定は必要無く、
ユーザを作成すればいいだけです。

次にCyrus SASLの起動です。

# service saslauthd start
# chkconfig --level 345 saslauthd on



>>このページのTOPへ

注意事項+補足
# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT

// 編集後
# service iptables restart


>>このページのTOPへ

最終更新 : 06/12/2005


Fedoraの設定    SSH    Web    Mail    FTP    DNS    ファイルサーバ    運用管理    システム管理    ネットワーク    セキュリティ対策
Copyright (C) 2004-2007 chibi ,All Rights Reserved