Postfixのインストールと設定

 Postfixのインストールはapt-getで簡単に行うことができます。しかし、私自身もしばらく混乱していたのですが、Ubuntu/DebianではPostfixがapt-getでインストールされるとそのシステムのMTAが自動的にSendmailからPostfixに変更されるという噂がありますが(以前は本当にそうだっったのかもしれませんけど)現在のところそれは嘘でSendmailを手動で停止しなければPostfixが起動しないのでご注意。

Postfixのインストール

apt-get install postfix
だけで終了します。がUbuntuでは、GUIとCUIの中間みたいな奇妙な設定項目が存在します。インストール後に設定を変更できますがインストール時の設定では、
  • インターネットを選択
  • ドメイン名の記述
をやっておくとよいと思います。ドメイン名はPostfixがインストールされるマシンのドメインを記入します。環境によってはもう少し細かい設定を聞かれることとと思います。(Procmailを使うとか使わないとか...)詳細な説明とともにその選択ができるので特に解説は必要ないと思いますのでご自身の環境に合わせてインストールしてください。
 いずれにしろ、このインストール時の設定は、
# dpkg-reconfigure --priority=low postfix
で再度設定できるのでそれほど神経質になることもないです。
 インストールの終了後は自動的にPostfixが起動している筈なのですが、前述のようにSendmailが起動したままでPostfixの邪魔をしている場合があります。以下のようにしてSendmailの起動と邪魔しているファイルを確かめます。

Sendmailのプロセスを確認する

 psコマンドでプロセスの確認をします。
# ps aux | grep sendmail
root    3367  0.0  0.0   2800   792 pts/0    R+   15:24   0:00 grep sendmail
この場合はsendmailが停止している状態です。数行に渡る複数のプロセスがある場合は起動している状態です。

邪魔しているSendmailのファイルを探す

#ls /etc/rc*| grep mail
K19sendmail
K19sendmail
S21sendmail
S21sendmail
S21sendmail
S21sendmail
K19sendmail
以上のファイルが存在したままになっているので削除します。
# update-rc.d -f sendmail remove
最後にsendmailそれ自体を停止させます。
# /etc/init.d/sendmail stop
この時点でpsコマンドでプロセスを確認すると停止しているのが確認できると思います。

postfixを再構成する

 sendmailを停止させてからpostfixをもう一度reconfigureします。
# dpkg-reconfigure postfix
いくつかの設定を再度やり直すことになります。設定が終わったらreconfigureが終わります。

postfixをリロードする

# postfix reload
postfix/postfix-script: refreshing the Postfix mail system
postfixをリロードします。上記のような結果になったらpostfixがMTAとして起動していることになります。これでpostfixのインストールは終了です。またインストール時の基本的な設定項目が妥当であれば送信メールサーバーとしてもこの時点ですでに機能する筈です。もし設定を変更したい場合は続けて/etc/postfix/main.cfを設定します。

設定ファイルの編集

 postfixの基本的な設定ファイルは/etc/postfix/main.cfになります。vimやgeditなどの適当なエディタで開きます。
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) #*1
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

#myhostname = myhost_name
myhostname = example.com #*2

#(追加)
mydomain = example.com #*3

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases

#myorigin = /etc/mailname(変更)
myorigin = $mydonain

mydestination = example.com, myhostname, localhost.localdomain, localhost #*4
relayhost =

#mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128(変更)
# LAN内のネットワークを追加する
mynetwork = 127.0.0.0/8, 192.168.11.0/24 #*5

mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

#追加
home_mailbox = Maildir/ #*6

mynetworks = 127.0.0.0/8 192.168.11.0/24
inet_protocols = ipv4

解説

*1. バナーの表示

 バナー表示はデフォルトのままで大丈夫です。デフォルトでは設定したホスト名を表示しバージョン名を表示しないようになっています。セキュリティー上バージョン名は隠した方がよいとされていますが、以下のように設定しても特に問題はありません。
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

smtpd_banner = $myhostname ESMTP $mail_name ($mail_version) バージョン名を表示

*2. ホスト名の設定

 ホスト名の設定はプロトコルの規定上必ず設定しなくてはなりません。ここではそのマシンのドメイン名を設定しています。通常のホスト名でも勿論かまいません。
myhostname = myhost_name

myhostname = example.com

*3. ドメイン名

 ドメイン名を指定します。ドメイン名はネットワークの行き先や起点などの様々なデフォルト値として使われます。ここではホスト名と同様の内容になっていますがこれで構いません。
mydomain = example.com

*4. ディスティネイションを指定

 送信メールサーバーの行き先を指定します。ここでは複数の行き先を指定します。下記のように記述しておけばOKです。example.comとmyhosutnameは便宜自分の環境に合わせて変更してください。
mydestination = example.com, myhostname, localhost.localdomain, localhost
指定した変数の設定を用いても設定可能です。
mydestination = $mydomain, $myhostname, localhost.localdomain, localhost

*5. ネットワークの設定

 メールが送信されるネットワークを設定します。ここではローカルとLAN内のネットワークのみを指定しています。SMTPサーバーは外部に無碍に開放すると踏み台にされる危険性があるのでこの設定にしておきましょう。(場合によってはローカルのみ)
mynetwork = 127.0.0.0/8, 192.168.11.0/24
ローカルのみの場合は、
mynetwork = 127.0.0.0/8
 私もそうですが、127.0.0.1というループバックのIPアドレスとループバックのネットワークを表す127.0.0.0/8を混同して、127.0.0.1/8と書くと全くpostfixが動いてくれないので注意してください。/var/log/mail.warnを見ると、Sep 19 08:12:25 hostname postfix/smtpd[7437]: fatal: non-null host address bits in "127.0.0.1/8", perhaps you should use "127.0.0.0/8" insteadというかなり親切なログが出ますので、ここをきちんと見るように!

*6. メールボックスの設定

 ここではMaildir形式のメールボックスを設定します。これは各ユーザーのホームディレクトリ内にメールボックス(/home/user/Maildir/)をメールの貯蔵庫にする方法です。Maildirというディレクトリを各ユーザーのディレクトリ内にあらかじめ作成しておく必要があります。この方法では一つのメールが一つのファイルとして保存されます。
home_mailbox = Maildir/
 その他にMailbox形式というものがありますが、この方法は、/var/spool/mail/userというディレクトリにメールが保存される形式ですが、複数のメールが一つのファイルに保存されます。ユーザーが直接ファイルを見たり消したりできないのでユーザーの利便性が失われる可能性もありますが、管理者以外は開くことができないのでファイルの保持には適しています。ここでは、Maildir形式でメールボックスを設定することにしています。
 新規でユーザーを作成する際にどっちにしろメールボックスが必要だと思うので、/etc/skelにMailディレクトリを作成しておきます。/etc/skelには新規でユーザーを設定した際に/home/userディレクトリ以下に自動的にここで設定したディレクトリやファイルをコピーしておいてくれます。
mkdir -m 700 /etc/skel/Maildir
パーミッションは700でいいみたいです。また、cur、new、tmpファイルは、MTAが起動しはじめたら自動的に作成されていたようですが(あまり自信がないのですが...)、心配だったら同様に作成しておいた方がいいかもです。同じくパーミッションは700でいいようです。
mkdir -m 700 /etc/skel/Maildir/cur
mkdir -m 700 /etc/skel/Maildir/new
mkdir -m 700 /etc/skel/Maildir/tmp
これで基本的なPostfixの設定は終わりです。最後にリロードしましょう。
/etc/init.d/postfix restart
 ここまで自身とそのLANネットワーク内でのメール送信が可能になっています。PHPのmb_sendmailとか端末のmailコマンドなんかで送信してみてください。









プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer