SMTPサーバ(Postfix)

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

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

■Postfixの設定
Postfixの基本的な設定は、/etc/postfix/main.cfで行う

[root@server1 ~]# 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 = server1.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
送信するメール1通当たりのサイズはデフォルトで10MByte、
受信するメール合計の総容量はデフォルトで50MByteに設定されている。
それぞれ5倍の50MByteと250MByteに変更するには以下を最終行へ追加。
message_size_limit = 52428800 ← 1024*1024*50=52428800
mailbox_size_limit = 262144000 ← 1024*1024*250=262144000
変更を有効にする為、postfixを再起動。
[root@server ~]# /etc/rc.d/init.d/postfix reload
postfix を再読み込み中:                                    [  OK  ]

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

[root@server1 ~]# vi /etc/sasl2/smtpd.conf ← smtpd.confを開く
設定ファイルの最後に追記
mech_list: plain login cram-md5 digest-md5
saslauthdの起動
[root@server1 ~]# /etc/init.d/saslauthd start
saslauthd を起動中:                                        [  OK  ]
saslauthdの自動起動設定
[root@server1 ~]# chkconfig saslauthd on
saslauthdの自動起動設定確認
[root@server1 ~]# 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@server1 ~]# sed -i 's/^webmaster/#webmaster/g' /etc/aliases
管理者ユーザ宛メールのroot宛転送設定解除を確認
[root@server1 ~]# grep ^webmaster /etc/aliases ← 結果がなにも表示されないことを確認
root宛メールを管理者ユーザ(webmaster)へ転送するように設定
[root@server1 ~]# sed -i 's/^root/#root/g' /etc/aliases
root宛メールを管理者ユーザ(webmaster)へ転送するように設定
[root@server1 ~]# echo "root: webmaster" >> /etc/aliases
root宛メールが管理者ユーザ(webmaster)宛へ転送されるかの確認
[root@server1 ~]# grep ^root /etc/aliases
root: webmaster ← root宛メールが管理者ユーザ(webmaster)へ転送されるように設定されている
転送先を反映させる
[root@server1 ~]# postalias /etc/aliases

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

一般ユーザ(webmaster)を追加。
[root@server1 ~]# useradd webmaster
一般ユーザーでログインするためにはパスワードを設定する必要がある
[root@server1 ~]# passwd webmaster
パスワードの入力(入力したパスワードは表示されない)
[root@server1 ~]# passwd webmaster
ユーザー webmaster のパスワードを変更。
新しいパスワード: ← パスワード
再入力を促されるので、もう一度入力。(上記のパスワードと同じ物を入れる)
新しいパスワードを再入力してください: ← パスワード
passwd: 全ての認証トークンが正しく更新できました。

■Postfixの起動

Postfixの起動
[root@server1 ~]# /etc/rc.d/init.d/postfix restart
postfix を停止中:                                          [  OK  ]
postfix を起動中:                                          [  OK  ]

■Postfixの自動起動設定

Postfixの自動起動設定
[root@server1 ~]# chkconfig postfix on
Postfixの自動起動設定確認
[root@server1 ~]# 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@server1 ~]# su - higo
[higo@server1 ~]$ which sendmail ← sendmailパスの確認
/usr/bin/which: no sendmail in (/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/higo/bin)
sendmailパスが見つからないときは
以下のようにすれば一般ユーザーでもsendmailパスがみえるようになる。
[higo@server1 ~]$ su - ← ルートになる
パスワード(P): ← ルートのパスワードを入力
[root@server1 ~]# ln -s /usr/sbin/sendmail /usr/bin/sendmail
[root@server1 ~]# su - higo ← 一般ユーザーになる
[higo@server1 ~]$ 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に変更

root宛のメールを一般ユーザーへ転送してない場合、rootのメールが肥大化していくので注意が必要。そんな時は手動でroot宛のメールを削除する。
メール容量を確認

[root@server1 ~]# ls -la /var/spool/mail/
合計 16
drwxrwxr-x.  2 root   mail 4096  1月 17 18:41 2013 .
drwxr-xr-x. 14 root   root 4096  9月 23 20:47 2011 ..
-rw-rw----   1 clamav mail    0  9月 30 22:44 2011 clamav
-rw-rw----.  1 higo   mail    0  9月 30 20:10 2011 higo
-rw-------   1 root   mail 11710847  1月 17 18:14 2013 root
-rw-rw----.  1 rpc    mail    0  9月 30 19:53 2011 rpc
root宛のメールを削除
[root@server1 ~]# cat /dev/null > /var/mail/root
再度メール容量を確認
[root@server1 ~]# ls -la /var/spool/mail/
合計 8
drwxrwxr-x.  2 root   mail 4096  1月 17 18:41 2013 .
drwxr-xr-x. 14 root   root 4096  9月 23 20:47 2011 ..
-rw-rw----   1 clamav mail    0  9月 30 22:44 2011 clamav
-rw-rw----.  1 higo   mail    0  9月 30 20:10 2011 higo
-rw-------   1 root   mail    0  1月 17 19:45 2013 root
-rw-rw----.  1 rpc    mail    0  9月 30 19:53 2011 rpc

サーバー管理のレポート送信先を変更
ファイルの末尾の記述を以下のように修正

[root@server1 ~]# vi /etc/aliases
# Person who should get root's mail
#root:     marc
 ↓
root:           ****@******.co.jp ← #を外して送信先メールアドレスを記述
転送先を反映させる
[root@server1 ~]# postalias /etc/aliases

※SMTPサーバーを使うには、ルーターの設定が必要なので25番のポートを開ける。
■ ポートチェック【ポート開放確認】
「管理しているサーバーが外部から接続アクセスできるか?」「ポートは開放されているか?」「portは閉じているか?」「ルータのポートは開放されているか」等の
ポートチェック・ポートの疎通確認テストはこちらで
Postfixをインストールしただけでは、メールの読み出しは出来ない。 Postfixはメールを配信するためのSMTPサーバーとしての機能しか持たないので、dovecotをインストールすることにより、POP3/IMAP4どちらでもメールを読み出せるようにする。