2011/01/28 CentOS5.5





インターネットへ向けて送信しない閉じたメールサーバ

他のパターンはPostfixでメールサーバを構築する(解説)も参照してください。

LAN内でシステムのSMTP/POPの動作試験を行うときに使います。
手順としては、けっこう大がかりになってしまいます。

条件
 自身が持つメールドメイン宛のメールを受け付けます。
 POP3によりメール取得を受け付けます。
 外部へは転送しません。
 


Postfixをインストールする
Postfixを設定する
送信宛のメールアカウントを作成する
TelnetでSMTPの動作を確かめる

Qpopperを構築する前に
Qpopperをインストールする
Qpopperを設定する
POPアカウントを設定する

Postfixをインストールする
postfixがインストールされているか確かめ、見つからなければPostfixをインストールします。

#rpm -q postfix
(Postfixとバージョン番号が表示されるか?)

表示されなければ
#yum install postfix
としてインストールします。リポジトリへ接続できることが条件です。

インストールしても、Postfixは起動しません。一見起動したように見えますが、statusを見ると起動してません。
これはデフォルトでSendmailが起動しているので、すでに25番ポートが使用されているからです。

sendmailを止めてPostfixを起動させます。

#service sendmail stop  (Sendmailを止めます)
#chkconfig sendmain off (自動起動を止めます)
#service postfix start   (Postfixを起動させます)
#chkconfig postfix on   (自動起動を有効にします)
#service postfix status  (動作を確認します)

「telnet localhost 25」などとして25番ポートのPostfixへアクセスできるか確認します。
ファイアウォールも確認しておきましょう。


Postfixを設定する
次にPostfixの設定ファイルを編集します。
/etc/postfix/main.cfを次のように編集します。
設定するのはとりあえず3つ。

mydestination
特に重要なパラメータです。ここで指定したドメインと同じドメインのメールが到着すると自分宛のメールと認識され、ローカルディスクへ保存されます。
mydestination = $myhostname, localhost.$mydomain, example.local(追加)

inet_interface
どのIPアドレスへサービスをバインドするかです。
デフォルトはlocalhostへバインドされていますので、メールサーバ自身しかPostfixへアクセスできません。
とりあえず全てのIPアドレスへサービスを提供しましょう。
inet_interface = all

mynetworks
これは設定しなくても動作します。
ただしこの状態では全てのLAN内のクライアントから、全てのメールアドレスへ中継する状態となっています。
今回の仕組みでは中継しないので、中継メールの送信元を制限します。
mynetworks = localhost

localhostを許可することで、localhost以外からのメールを他へ中継しないようにします。
ちなみに中継元をlocalhostに制限しても、example.local宛のメールは全てのアドレスから受信します。

ここまで設定したら、Postfixにコンフィグを読み込ませます。

#service postfix restart


送信宛のメールアカウントを作成する
メールサーバでメールを受け付けるためには、宛先となるメールアカウントが必要です。
メールアカウントとは、CentOS上のユーザアカウントが必要です。
しかしメールを受信するためだけでログイン権限を与えるのは危険なので、ログインできない制限アカウントを作ります。

#useradd user1 -s /sbin/nologin

ここまでで大体オーケーです。パスワードは後で設定します。
外部からexample.local宛のメールを受け付け、ローカルディスクへ保存されることを確認しましょう。

この状態で挙動を確かめてみたいのですが、多くのメールソフトはPOPの設定がされていないと動作しません。
なのでスキルがある人はtelnetで直接SMTPコマンドを叩いてみましょう。
そうでない人は、POP3サーバの構築に進みます。


TelnetでSMTPの動作を確かめる
telnetでSMTPの挙動を確認するのは、メールサーバで不具合に対処するための大事なスキルです。
身に着けておきましょう。

メールサーバ上でデフォルトのメールボックスを監視します。
#tail -f /var/mail/user1

別のクライアントから、「telnet SMTPサーバアドレス 25」として直接SMTPサービスにログインし、SMTPコマンドを実行します。

太字部分が入力内容です。

220 localhost.localdomain ESMTP Postfix
helo localhost
250 localhost.localdomain
mail from: user1@example.local
250 2.1.0 Ok
rcpt to: user1@example.local
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
helo postfix
.
250 2.0.0 Ok: queued as 0625633CC90
quit
221 2.0.0 Bye

tailで監視している/var/mail/user1ファイルの内容が更新されれば、成功してます。
※/var/mailは/var/spool/mailのシンボリックリンクなので、どちらも同じ内容です。

SMTPを構築しただけでは、ローカルホストではメールが見られますが、他の端末からは読めないので、着信しているメールを取り出せるように別途POPサービスを導入します。


Qpopperを構築する前に
QpopperはMailBox形式のメールを取り出すPOPサーバです。
CentOSのPostfixはデフォルトではMailBox形式で動作します。

一部のディストリビューションでパッケージされるPostfixはデフォルトで、qmailなどと同じMailDir形式で設定されているものがあるらしいです。
この場合、Qpopperとは相性が悪いので調整が必要です。

まずはQpopper向けに、Postfixを設定します。
PostfixがMialDirとして動作していないことを確認しておきます。
MailDirの場合は、各ユーザのホームディレクトリの下にMaildirディレクトリが作成されます。
設定も「home_mailbox = MailDir/」となっています。コメントアウトするか「home_mailbox = MailBox」としましょう。

Postfixのメールボックス形式はいずれかを採用します。

1.メールボックスをメールスプールディレクトリへ配置する
 利点 一か所に集めるので容量の把握ができ、メンテが容易です。
 欠点 ユーザアカウントの削除のとき、ゴミが残っていく恐れがあります。

2.メールボックスを各ユーザ別のホームディレクトリへ配置する
 利点 ユーザアカウントの削除とともにプロファイルごとメールボックスが削除されます。メンテが簡単です。
 欠点 各ディレクトリにメールボックスが散っているので、全体把握は面倒です。


どちらも長所短所があります。
検証環境でならデフォルトの1が良いでしょう。


1.メールボックスをメールスプールディレクトリへ配置する

 mail_spool_directory = /var/spool/mail/
 と記述し(末尾にスラッシュをつけることで、ユーザごとのMailDir形式で保存されます)

 home_mailbox = Mailbox
 をコメントアウトします。

 メールが/var/spool/mailに溜まります。

2.メールボックスを各ユーザ別のホームディレクトリへ配置する

 home_mailbox = MailBox
 と記述し

 #mail_spool_directory = /var/spool/mail
 をコメントアウトします。

 メールが各ユーザのホームディレクトリに溜まります。


Qpopperをインストールする
Qpopperはyumでインストール出来ないので、ソースコードをダウンロードしてインストールします。

Eudora社のサイトへ行き、Qpopperをダウンロードします。
http://www.eudora.com/products/unsupported/qpopper/index.html

もしくはブラウザでFTPサイトを開いてみましょう。
ftp://ftp.qualcomm.com/eudora/servers/unix/popper/



ここでは4.0.18を採用します。
URLが分かればwgetででもダウンロードできます。

#cd ~
#wget ftp://ftp.qualcomm.com/eudora/servers/unix/popper/

ダウンロードしたソースファイルをコンパイルします。
しかしデフォルトのCentOSの環境では開発環境が含まれていないので、そのままではコンパイルできません。
GUIの「ソフトウェアの追加と削除」から開発ツールをインストールして、準備しておきます。



開発ツールインストール後、ソースファイルを展開してコンパイルします。
注意点はconfigureのオプションです。

configureの時点で「--enable-specialauth」を付けてください。




#tar xzvf qpopper4.0.18.tar.gz

#cd qpopper4.0.18
#./configure --enable-specialauth
#maike
#make install
と実行します。

Qpopperはデフォルトで認証にpasswdファイルを使用します。
が、いまどきpasswordファイルで認証してるLinuxもないでしょう。
なのでQpopperもシャドウパスワードを使用するように設定する必要があります。
詳しくは「configure --help」で確認してください。
Qpopperを設定する
インストールするとどこにpopperの実行ファイルが配置されるか、ということですがメッセージを読むと

Installed popper as /usr/local/sbin/popper

と表示されてますので、どうやらそこにコピーされた模様。
動作させるには、Qpopperは随所で「xinetd経由で動作させましょう」と紹介されています。
検証目的ならデーモン起動、あるいはQpopper自体を実行したままにしておいても問題ないのでしょうが、
ここでは主流の精神にのっとりxinetdに登録します。

/etc/xinetd.dディレクトリの下にpopperというファイルを作成し、以下のスクリプトを記述します。

service pop3
{
  disable = no
  socket_type =stream
  wait = no
  user = root
  server = /usr/local/sbin/popper
  server_args = -s
}

ポイントは二つ。
一つは「pop3」はservicesファイルに記述されているサービス名と一致させておく必要があります。
CentOS5.5ではpop3となっています。(pop-3も別名で登録されています)

もう一つは「=」の前にスペースが入れることです。
「disable=no」と続けて書くとサービスがうまく起動しません。

登録後、xinetdを再起動します。netstatで110(pop3)ポートが開いているかを確認します。

#service xinetd restart
#netstat -ant



POPアカウントを設定する

メールを取り出すPOPアカウントは、SMTP同様CentOSのローカルユーザアカウントになります。
なので先ほどPostfixで用意しておいたユーザアカウントへパスワードを設定します。

#passwd user1

パスワードを設定したら、さっそくTelnetもしくはメールクライアントで送受信を確認してみましょう。
メールクライアントに以下の設定を与えます。

SMTP/POPサーバ CentOSのアドレス
メール送信者 user1@example.local
宛先 user1@example.local
本文やタイトルは適当

user1@example.localへ向かって正常にメールが送信でき、そして受信出来たでしょうか。

もし何度やってもパスワードが認証されない場合は、少し戻って「./configure --enable-specialauth」でオプションを忘れているかもしれません。もう一度configureしてコンパイルしましょう。

インターネットで使う場合、実際の複雑なシステムで用いる場合はさらにPostfixを補強する設定がいります。
mydomainやmyhostnameなど、ネームサービスの影響などを踏まえて設定が必要になってきます。
しかしLAN内の検証用のメールサーバとしては、これで十分でしょう。






prev.gif