SMTPサーバ(Postfix)

■ FC2~FC6 / Fedora7 / Fedora8 / Fedora9
メールサーバーを構築するためには、まずメール配送を行うためのSMTPサーバーが必要となります。 SMTPサーバーとして動作するソフトウェアの代表的なものにはPostfix、sendmail、qmailがあります。 Postfixはsendmailやqmailより後に開発されたため、それぞれの良い部分を反映して開発されており、簡単に設定することが可能ですので、ここではsendmailとの互換性が優れているPostfixを使用します。
■sendmailを停止する
デフォルトでインストールされているsendmailをPostfixをインストールする前に停止しておきます。

[root@linux ~]# /etc/rc.d/init.d/sendmail stop
sendmail を停止中:                                         [  OK  ]
sm-client を停止中:                                        [  OK  ]

■Postfixのインストール

[root@linux ~]# yum -y install postfix

■sendmail環境からPostfix環境へ移行する
Fedora coreでは、利用するMTAプログラムの選択にalternativesという仕組みを利用しており、このalternativesコマンドを実行することにより、簡単にsendmail環境からPostfix環境へ移行することが出来ます。

[root@linux ~]# alternatives --config mta
2 プログラムがあり 'mta' を提供します。
選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
2           /usr/sbin/sendmail.postfix
Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:2
postfixを使うので選択番号[2]を入力します

■Postfixの設定
Postfixの基本的な設定は、/etc/postfix/main.cfで行います。

[root@linux ~]# vi /etc/postfix/main.cf ← viエディタでmain.cfを開きます
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
#myhostname = host.domain.tld
↓
myhostname = linux.yokensaka.com ← #を外して、サーバーのホスト名を設定します
#myhostname = virtual.domain.tld
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component.
# $mydomain is used as a default value for many other configuration
# parameters.
#
#mydomain = domain.tld
↓
mydomain = yokensaka.com ← #を外して、ドメイン名を設定します
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
#myorigin = $myhostname
#myorigin = $mydomain
↓
myorigin = $mydomain ← #を外して、設定を有効にします
      (メールアドレスの「@」以下に付加する文字列を指定します)
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
メールの受信を許可するネットワークインターフェースを設定します
#inet_interfaces = all
↓
inet_interfaces = all ← #を外して、設定を有効にします
#inet_interfaces = $myhostname
#inet_interfaces = $myhostname, localhost
inet_interfaces = localhost
↓
#inet_interfaces = localhost ← 行頭に#を追加します
# Specify a list of host or domain names, /file/name or type:table
# patterns, separated by commas and/or whitespace. A /file/name
# pattern is replaced by its contents; a type:table is matched when
# a name matches a lookup key (the right-hand side is ignored).
# Continue long lines by starting the next line with whitespace.
#
# See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".
#
受信したメールを拒否するかどうかを設定します
mydestination = $myhostname, localhost.$mydomain, localhost
↓
#mydestination = $myhostname, localhost.$mydomain, localhost ← 行頭に#を追加します
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
↓
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain ← #を外します
#mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,
#       mail.$mydomain, www.$mydomain, ftp.$mydomain
# Specify "mynetworks_style = host" when Postfix should "trust"
# only the local machine.
#
#mynetworks_style = class
#mynetworks_style = subnet
↓
mynetworks_style = subnet ← #を外します
#mynetworks_style = host
# You can also specify the absolute pathname of a pattern file instead
# of listing the patterns here. Specify type:table for table-based lookups
# (the value on the table right-hand side is not used).
#
内部ネットワークアドレスとローカルホストアドレスを指定します
#mynetworks = 168.100.189.0/28, 127.0.0.0/8
↓
mynetworks = 192.168.1.0/24, 127.0.0.0/8 ← #を外して書き換えます
#mynetworks = $config_directory/mynetworks
#mynetworks = hash:/etc/postfix/network_table
# NOTE: Postfix will not automatically forward mail for domains that
# list this system as their primary or backup MX host. See the
# permit_mx_backup restriction description in postconf(5).
#
#relay_domains = $mydestination
↓
relay_domains = $mydestination ← #を外す
# DELIVERY TO MAILBOX
#
# The home_mailbox parameter specifies the optional pathname of a
# mailbox file relative to a user's home directory. The default
# mailbox file is /var/spool/mail/user or /var/mail/user.  Specify
# "Maildir/" for qmail-style delivery (the / is required).
#
#home_mailbox = Mailbox
#home_mailbox = Maildir/
↓
home_mailbox = Maildir/ ← #を外してメールボックス格納形式をMaildir形式にします
SMTP Authを有効にします。設定ファイルの最終行まで移動して、以下のように設定を追記します。
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
メール不正中継ホストからの接続を拒否する場合以下を最終行へ追加します。
smtpd_client_restrictions = reject_rbl_client relays.ordb.org
送信するメール1通当たりのサイズはデフォルトで10MByte、
受信するメール合計の総容量はデフォルトで50MByteに設定されています。
それぞれ100MByteと500MByteに変更するには以下を最終行へ追加します。
message_size_limit = 102400000
mailbox_size_limit = 512000000
変更を有効にする為、postfixを再起動します。
[root@server ~]# /etc/rc.d/init.d/postfix reload
postfix を再読み込み中:                                    [  OK  ]

■SMTP Auth設定
SMTP AuthではCyrus SASLと呼ばれる認証プログラムを利用しています。 PostfixでCyrus SASLを利用出来るように設定する必要があります。

[root@linux ~]# vi /usr/lib/sasl2/smtpd.conf ← smtpd.confを開きます
設定ファイルの最後に追記します。
mech_list: plain login cram-md5 digest-md5
saslauthdの起動
[root@linux ~]# /etc/init.d/saslauthd start
saslauthd を起動中:                                        [  OK  ]
saslauthdの自動起動設定
[root@linux ~]# chkconfig saslauthd on
saslauthdの自動起動設定確認
[root@linux ~]# chkconfig --list saslauthd
saslauthd       0:off   1:off   2:on    3:on    4:on    5:on    6:off
                (ランレベル2~5のonを確認)

■root宛メールを一般ユーザ(webmaster)へ転送
システムからroot宛に送られてくるメールを、一般ユーザ(webmaster)へ転送するようにします。

管理者ユーザ宛メールのroot宛転送設定を解除します
[root@linux ~]# sed -i 's/^webmaster/#webmaster/g' /etc/aliases
管理者ユーザ宛メールのroot宛転送設定解除を確認します
[root@linux ~]# grep ^webmaster /etc/aliases ← 結果がなにも表示されないことを確認します
root宛メールを管理者ユーザ(webmaster)へ転送するように設定します
[root@linux ~]# sed -i 's/^root/#root/g' /etc/aliases
root宛メールを管理者ユーザ(webmaster)へ転送するように設定します
[root@linux ~]# echo "root: webmaster" >> /etc/aliases
root宛メールが管理者ユーザ(webmaster)宛へ転送されるかの確認をします
[root@linux ~]# grep ^root /etc/aliases
root: webmaster ← root宛メールが管理者ユーザ(webmaster)へ転送されるように設定されている
転送先を反映させます
[root@linux ~]# postalias /etc/aliases

■一般ユーザー(webmaster)の作成
webmasterへメールが届くようにするためには一般ユーザー(webmaster)の作成が必要です。

一般ユーザ(webmaster)を追加します。
[root@linux ~]# useradd webmaster
一般ユーザーでログインするためにはパスワードを設定する必要があります
[root@linux ~]# passwd webmaster
パスワードの入力(入力したパスワードは表示されません)
Changing password for user webmaster.
New UNIX password:パスワード
再入力を促されるので、もう一度入力します。(上記のパスワードと同じ物を入れる)
Retype new UNIX password:パスワード
passwd: all authentication tokens updated successfully.

■Postfixの起動

Postfixの起動
[root@linux ~]# /etc/rc.d/init.d/postfix start
postfix を起動中:                                          [  OK  ]

■Postfixの自動起動設定

Postfixの自動起動設定
[root@linux ~]# chkconfig postfix on
Postfixの自動起動設定確認
[root@linux ~]# chkconfig --list postfix
postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off
                (ランレベル2~5のonを確認)

■sendmailパスの確認
掲示板などで投稿があったらメール通知する設定をしている時は CGIのsendmailパスの設定を変更しないと送信エラーになる場合があります。

一般ユーザーでsendmailパスの確認をします
[root@linex ~]# su - higo
[higo@linux ~]$ which sendmail ← sendmailパスの確認
/usr/bin/which: no sendmail in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/higo/bin)
sendmailパスが見つからないときは
以下のようにすれば一般ユーザーでもsendmailパスがみえるようになるはずです。
[higo@linux ~]$ su - ← ルートになる
パスワード(P): ← ルートのパスワードを入力
[root@linux ~]# ln -s /usr/sbin/sendmail /usr/bin/sendmail
[root@linux ~]# su - higo ← 一般ユーザーになる
[higo@linux ~]$ which sendmail ← sendmailパスの確認
/usr/bin/sendmail

当サイトのjoyful.cgiではsendmailパスがデフォルトで「/usr/lib/sendmail」になってますので、上記で確認したsendmailパス「/usr/bin/sendmail」に直さないと投稿時に送信エラーになります。

# sendmailパス(メール通知する時)
$sendmail = '/usr/lib/sendmail';
 ↓
# sendmailパス(メール通知する時)
$sendmail = '/usr/bin/sendmail'; ← libをbinに変更

SMTPサーバーを使うには、ルーターの設定が必要です。
ルータの設定で25番のポートを開けてください。
■エラー対策
メールの送信をした際に以下のようなエラーメッセージが表示される場合は、メール送信のセキュリティ制限にかかってしまっている可能性があります。
【OutlookExpressの場合】
受信者の 1 人がサーバーによって拒否されたため、メッセージを送信できませんでした。
拒否された電子メールアドレス: xxxx@xxxx.xxxxxx.xx.xx 件名 ‘送信テスト’, アカウント : ‘xxxx@xxxxxxx.xxx’, サーバー : ‘yokensaka.com’,プロトコル : SMTP, サーバーの応答 : ‘554 : Relay access denied’, ポート : 25, セキュリティ (SSL): なし, サーバー エラー : 554, エラー番号 : 0x800CCC79
メールソフトで「SMTP-AUTH」の設定をします。
——————————————————————————
[Windows Outlook 2000 ・ Outlook Express 5.0/6.0 のSMTP-AUTH設定方法]

  1. メニューバーの「ツール」→「アカウント」を選択して下さい。
  2. 「メール」タブをクリックして、エラーになったアカウントを選択、「プロパティ」をクリックして下さい。
  3. 「サーバー」タブをクリックして開いて下さい。
  4. 「送信メールサーバー」欄の「このサーバーは認証が必要」にチェックを付けて「設定」をクリックして下さい。
  5. 表示された画面で「受信メールサーバーと同じ設定を使用する」にチェックが付いている事を確認して、「OK」をクリックして下さい。
  6. 「OK」をクリックして設定画面を閉じて下さい。

※社内LANなどの場合 受信メール (POP3) が「localhost」になってる事がありますので正式な受信メールサーバーを設定してください。
Postfixをインストールしただけでは、メールの読み出しは出来ません。 Postfixはメールを配信するためのSMTPサーバーとしての機能しか持たないからです。 次はdovecotをインストールすることにより、POP3/IMAP4どちらでもメールを読み出せるようにします。