ここでは、Postfixを使ったメールサーバーの構築について解説していきます。従来よりUNIXにおけるメールサーバーの標準として、sendmail
が使われてきましたが、sendmail は設定が複雑で、セキュリティ上難がある、メールの配送速度が遅い、などの理由によりあまり推奨できません(そういう自分はsendmail
を使ったことがなかったりして…(゚ー゚;A 。まぁ何にせよ、設定が簡単なことに越したことはありません。
|
|
■Postfixがインストールされているかどうか確認する
Postfix がインストールされていないことを確認します。
$ rpm -q postfix
パッケージ postfixはインストールされていません |
|
■Postfixのインストール
Postfix はインストール時にcyrus-sasl パッケージを必要とするのであらかじめ先にインストールしておきます。rootでログインしてから、RPMパッケージをインストールします。
$ su -
Password:
# rpm -ivh cyrus-sasl-2.1.10-4.i386.rpm
# rpm -ivh postfix-1.1.11-11.i386.rpm |
|
■自動起動の設定
ランレベル3と5でPostfixが自動起動するように設定します。
# chkconfig --level
35 postfix on
# chkconfig --list postfix
postfix 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ |
|
■root のエイリアスを設定する
/etc/aliases を開いて最後の行に以下のように追記します。
# Person who should
get root's mail
root: kororo |
|
編集し終えたら、newaliasesコマンドを実行して、エイリアスデータベースの作成を行います。
■デフォルトで使用するメールサーバーを指定する
RedHatLinuxでは、デフォルトのMTAがsendmail に設定されています。sendmail
が動作しているとPostfixの設定をいくら変更しても反映されなくなってしまうので使用するMTAをPostfixに設定してあげる必要があります。もし、使わないのであれば「rpm
-e sendmail 」としてsendmail をアンインストールしてしまっても構いません。以下のコマンドを実行した時に、"+"マークが表示されている方がデフォルトで有効になっているメールサーバーです。2番のPostfixを有効にさせるため、selection
numberで2をタイプして確定してください。
# /usr/sbin/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 ] |
|
■/etc/postfix/main.cf の編集
Posftixの設定は /etc/postfix/main.cf を編集していきます。ここではとりあえず、
Postfixが最低限動作するように設定し、尚且つ、第三者中継(オープンリレー)を許可しないことを前提として説明していきます。もし、これからPostfix
を設定していくのであれば、以降の説明を必ず読んでください。
それでは、実際に編集を行っていきます。最低限の動作をさせるのであれば設定する箇所はそんなに多くはありません。まずは、「myhostname
」に自分のホスト名をFQDNで正しく記述します。
myhostname = mx.kororo.jp |
|
「myhostname 」の少し下の行にある「mydomain」で自分のドメイン名を記述します。
「myorigin」は、ローカルで配送されたメールが、どのメールサーバーを経由して送られてきたものなのかを特定するときに役立ちます。デフォルトでは$myhostnameに指定されていますが、ここではメールサーバーが一台しかない事を想定して解説しているため、myorigin
= $ mydomain とします。もしも、複数のメールサーバーが存在する場合には、$myhostname
と指定してください。
inet_interfacesでは、ローカルでメールサーバーを運用するなら、「inet_interfaces
= localhost」、外部に向けて運用するのであれば、「inet_interfaces = all
」としてください。ようするに、ここで all を指定していなければいくら頑張っても外部とのやり取りはできない(
=25番ポートが開かない!)ので注意してください。25番が開かないからといって決してルータにやつあたりはしないように…σ(^_^;)
mydestination では、自ホストが最終的な宛先となるドメインを指定します。わかりやすく簡単にいうと、@より後ろの記述方法をここで指定しています。$myhostnameは「foo@mx.kororo.jp」、localhost.$mydomainは、「foo@localhost.kororo.jp」、$mydomainは、「foo@kororo.jp」というような意味になります。
mydestination = $myhostname,
localhost.$mydomain, $mydomain |
|
mynetworks では信頼できるネットワークを指定します。LAN内の自分のネットワークを指定してください。ここで自分のネットワークを指定することで外部からのアクセスを制限しています。注意したいのは、
mynetworksの指定を一歩間違えると、第三者中継を許してしまいます。特に理由がない限りは、外部からのリレーは許可しないようにしてください。
mynetworks = 172.16.50.0/27,
172.16.51.0/28, 127.0.0.0/8 |
|
エイリアスデータベースの場所を指定します。
#alias_maps = dbm:/etc/aliases
#alias_maps = hash:/etc/postfix/aliases
alias_maps = hash:/etc/aliases
#alias_maps = netinfo:/aliases
#alias_database = dbm:/etc/aliases
#alias_database = dbm:/etc/mail/aliases
alias_database = hash:/etc/aliases
#alias_database = hash:/etc/aliases, hash:/opt/majordomo/aliases
|
|
POPサーバーにqpopperを使うことを前提として、メールボックスの形式をメールスプール(Mailbox)形式にします。Mailbox形式とは、UNIXの世界で古くから使われている方式で、ユーザーごとに1つのファイルの中に複数のメールを格納します。
mail_spool_directory
= /var/spool/mail |
|
■postconf による設定の確認
Postfix にはpostconfというコマンドが用意されており、main.cf用のユーティリティで、非常に便利なので是非、活用しましょう。-n
オプションをつけるとデフォルトの値と異なるものだけを表示するようになるので自分がどこをどのように変更したかがすぐにわかるようになっています。
また、main.cfのデフォルト値がわからなくなったら、-d オプションを使用します。
デフォルトの設定を全て確認したい場合は、-v オプションをつけます。以下にpostconf のオプションを表にしてみたので参考にしてください。
◎postconf のオプション
|
-n |
デフォルト値と異なるものだけが表示される |
|
-d |
デフォルトの値が表示される |
|
ーh |
"項目名=値"という形式ではなく値のみを表示する |
|
-v |
詳細なログを出力する |
|
-e |
main.conf を開かずにコマンドで設定を変更できます。書式は、
# postconf -e myhostname =mx.kororo.jp
のように指定する
|
|
-l |
Postfixがサポートするファイルロックの形式を表示する |
|
-m |
Postfixがサポートするテーブルファイルのタイプを表示する |
|
以上の確認を終えたらPostfix を起動します。
# /etc/init.d/postfix
start |
|
既に起動している場合は、
# /etc/init.d/postfix
reload |
|
起動させたら、ログを確認してエラーが発生していないかどうか確認してください。
■Postfix の動作確認
次にtelnetを使って動作の確認をします。正常に動作しているならば、SMTPはコマンド入力待ちの状態になります。待ち受け状態に入ることを確認したら、quit
コマンドでtelnet を抜けます。
# telnet localhost
25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.kororo.jp ESMTP Postfix
quit
221 Bye
Connection closed by foreign host. |
|
それでは、今度は実際にコマンドラインからメールを送信してみましょう。試しに自分が取得しているプロバイダなどのアカウントへメールを送信してみます。携帯メールに送信しても構いません。ここでは、Linux上のユーザー、kororoがメールアカウント「kororo@kororo.jp」を使って、プロバイダで取得しているメールアカウント「kororo@plala.to」にメールを送信します。以下、黒太文字で記述してあるのが、自分が実際に入力するコマンドです。詳細については後述します。
◎メール送信例①
$ telnet localhost
25 //telnet
でローカルホスト25番にログインします
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.kororo.jp ESMTP Postfix //220はサーバーの準備ができたことを表します
ehlo mx.kororo.jp //SMTPセッション開始の合図です。自ホスト名を入力します
250-mx.kororo.jp
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-XVERP
250 8BITMIME
mail from: <kororo@kororo.jp> //メールの差出人を指定します
250 Ok
rcpt to: <kororo@plala.to> //メールの宛先を指定します
250 Ok
data //メール本文のはじまりであることを知らせます
354 End data with <CR><LF>.<CR><LF>
subject: MAIL TEST //メールの題名(subject)を記述します
This is test message of smtp. //メールの本文です
. //メッセージの終了を知らせるにはドット".
"で表現します
250 Ok: queued as F0B001941CD
quit //セッションを切断します
221 Bye
Connection closed by foreign host. |
|
以上が終えたら、実際にクライアントマシン、もしくは携帯電話でメールを受信してみましょう。きちんと受信できましたか?もうひとつ例をだしてみましょう。今度は、Linux上のユーザーからLinux上の他のユーザーへメールを送信します。さきほどと要領は同じです。
|
PIPELINING |
サーバーの応答を待たずに次のコマンドを発行することができることを示している |
|
SIZE |
メールの最大サイズ(単位:バイト) |
|
VRFY |
VRFYコマンド(ユーザーが存在するかどうか)に対応しているかどうかを意味する |
|
ETRN |
ETRNコマンドに対応しているかどうかを意味する |
|
XVERP |
XVERPコマンドに対応しているかどうかを意味する |
|
8BITMIME |
8bitを使ったMIMEメッセージが受信可能であることを意味する |
|
◎メール送信例②
$ telnet localhost
25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mx.kororo.jp ESMTP Postfix
mail from:<kororo@kororo.jp>
250 Ok
rcpt to:aya //Linux上のアカウント、aya
にメールを送信します
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
I love you mail.
.
250 Ok: queued as 1FACB1941CD
quit
221 Bye
Connection closed by foreign host. |
|
メールを送信し終えたら、ログアウトして、aya としてログインしてください。そうすると、「
You
have new mail in /var/spool/mail/aya」といったメッセージが表示されるはずです。実際に中身を表示してみると、さきほど送信したメールであることが確認できます。
$ cat /var/spool/mail/aya
From kororo@kororo.jp Mon Dec 22 10:51:59
2003
Return-Path: <kororo@kororo.jp>
Delivered-To: aya@kororo.jp
Received: from localhost.kororo.jp (localhost.kororo.jp
[127.0.0.1])
by mx.kororo.jp (Postfix) with SMTP id 1FACB1941CD
for <aya>; Mon, 22 Dec 2003 10:51:28
+0900 (JST)
Message-Id: <20031222015128.1FACB1941CD@mx.kororo.jp>
Date: Mon, 22 Dec 2003 10:51:28 +0900 (JST)
From: kororo@kororo.jp
To: undisclosed-recipients:;
I love you mail.
|
|
■第三者中継を許可しない!
今までの説明でとりあえずPostfix を最低限、動作させるところまで解説しました。けれども、メールサーバーの管理者である以上、やっておかなければならないことがあります。それは言うまでもなく、不正中継のチェックです。1日何万、何万通ものメールを送りつけられる迷惑極まりないspamメールは、大抵は第三者中継を許可しているメールサーバーから発信されるのが常です。自分がspamメールの被害者となるならまだしも、メールサーバーをたちあげることで今度は自分が加害者となる可能性だってあるのです。また、第三者中継を許可することで、自分のサーバーがブラックリストにも掲載されることもあります(最も有名なのが
ORDB(Open
Relay DataBase)です)。ブラックリストに掲載されてしまったら、ブラックリストに掲載されているホストからのメールの送信は拒否されてしまいます。せっかく立ち上げたメールサーバーをブラックリストに載ってしまったら元も子もありません。そうならないためにも、不正中継のチェックは是非やっておきましょう。
有名どころとしていくつかありますので列挙いたします。
|
ORDB |
不正中継検査の申し込みを行い、ORDB.orgからメールが返信されてきます。そのメールに返信すると検査待ちのリストに加えられ順次、検査が行われます。ORDB.orgは独自に開発したソフトを使用しているため、下記に記したようなオンラインでの不正中継チェックよりも、より正確にチェックを行うことができます。メールサーバーの設定をほぼ終えたら、確認の意味もこめて試してみるとよいでしょう。
|
|
abuse.net |
「Address to test:」の欄にメールサーバーのIPアドレスを入力し、「Test
for Relay」をクリックすればテストを開始します。全17項目のチェックを行ってくれます。
筆者がチェックしたときの結果はこちらを参照してください。
|
|
RBL.JP |
ホスト名を入力するだけで、全20項目の不正中継テストを行ってくれます。「全てのテストが行われました,
no relays accepted.」と表示されればOKです。
筆者がチェックしたときの結果はこちらを参照してください。
|
|
それでは、メールが送信できるようになったので今度はPOP3サーバーをインストールしてメールが受信できるようにしていきましょう。qpopperは、POP3サーバーとしては高機能な方で、設定が簡単なので導入しやすいと思います。また、APOPやSSL/TLSにも対応しています。
|
|
■qpopperのダウンロード
まず、qpopperを
QUALCOMMのFTPサイトからダウンロードしてきてください。執筆時点での最新バージョンは、qpopper4.0.5です。ここでは、qpopper4.0.5.tar.gzをダウンロードしてインストールしていくことにします。POP3対応のみでインストールします。
$ cd /usr/local/src
$ tar xzvf qpopper4.0.5.tar.gz
$ cd qpopper4.0.5
$ ./configure
$ make |
|
/qpopper4.0.5/popper下にバイナリファイルであるpopperが生成されるのでこれを、適当なディレクトリにコピーします。ここでは、/usr/local/sbinにコピーします。
$ cd popper
$ su
# cp popper /usr/local/sbin |
|
■スーパーサーバーとして起動させる
qpopperは、デーモンとして常に動かしておくほどレスポンスを重視しないため、一般的にはinetd、もしくはxinetd経由で起動するように設定することで、接続要求がある度に対応するようにします。これによってたましか実行されないサービスによって無駄な資源を有効に確保することができます。RedHatLinuxでは、xinetdをデフォルトで採用しているので、xinetd経由でqpopperを起動させるようにします。まず、/etc/xinetd.d
以下にpopperというファイルを作成し、編集を行っていきます。
# vi /etc/xinetd.d/popper |
|
/etc/xinetd.d/popperを以下のように編集します。赤字で記した箇所のみ、各自、制限を許可するネットワークを記述してください。-R
はDNSの逆引きを行わないオプションです。-s は詳細なログを記録します。
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/popper
server_args = -s -R
only_from = 172.16.50.0/27
172.16.51.0/28 127.0.0.1
} |
|
編集し終えたら、xinetdを再起動します。以上で設定は完了です。次項では実際にPOP3サーバーの動作確認を行ってみます。
# /etc/init.d/xinetd
restart
xinetdを停止中: [ OK ]
xinetdを起動中: [ OK ] |
|
■qpopperの動作確認
qpopperが正常に稼動しているかどうか110番にtelnet して確認してみます。以下のような待ち受け状態になれば、qpopperは正常に稼動しています。試しに既存のユーザーでログインしてメールが見えるかどうか確認する。動作確認したら、quitでtelnetから抜けます。
# telnet localhost
110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Qpopper (version 4.0.5) at mx.kororo.jp
starting.
user kororo
+OK Password required for kororo.
pass hogehoge
+OK kororo has 0 visible messages (0 hidden)
in 0 octets.
quit
+OK Pop server at mx.kororo.jp signing
off.
Connection closed by foreign host. |
|
■メール開通試験
それでは、POP3対応のメーラを使用して、実際に受信を行ってみます。ここでは、Microsoft Outlookを使用してメールを受信することにします。メールアカウントの設定は下記図のようにしてください。確認しておきたいのは、Postfixでメールを送信してWindows上で受信できるのかということと、外部ネットワークから受信できるのか(携帯メールで送信するのがわかりやすいかも)ということです。
■メールの格納先
本ページに沿って設定を行ってきた方は、/var/spool/mail/ユーザー名、もしくは、/var/mail/ユーザー名に一旦メールが格納されます。送信したメールが指定されたパスにきちんと届いているかどうか確認してください。なお、クライアント上で受信を行った時点で、/var/spool/mail/ユーザー名、もしくは、/var/mail/ユーザー名からメールは自動的に削除されるようになっています。