|
||
|
インターネットへ向けて送信しない閉じたメールサーバLAN内でシステムのSMTP/POPの動作試験を行うときに使います。もちろん、インターネットへ向けて送信できるようにすればメールサーバの出来上がりです。 監視サーバの通報やメールフィルタリングのようにLAN内でメールシステムの検証をするとき、テスト用サーバとして重宝します。 このページではPostfix + Dovecot の組み合わせで構築します。 条件 メールドメインをexample.localとします。 自身が持つメールドメイン宛のメールを受け付けます。 POP3によりメール取得を受け付けます。 外部へは転送しません。 (外部へ転送したい場合はPostfixの設定が変わるだけです。Postfixでメールサーバを構築する(解説)) postfixで受信したメールは /var/mail/アカウント名 で保存される。 保存形式はmaidir形式(1メール1ファイル)か、MailBox形式(全メール1ファイル)で保存する。 保存用のメールディレクトリが無い場合は、自動作成されるようにしておく。 ・Postfixをインストールする ・Postfixを設定する ・送信宛のメールアカウントを作成する ・メールディレクトリを自動作成できるようにする ・TelnetでSMTPの動作を確かめる ・Dovecotを設定する ・POPアカウントを試験する Postfixをインストールするpostfixがインストールされているか確かめ、見つからなければPostfixをインストールします。#rpm -q postfix (Postfixとバージョン番号が表示されるか?) 表示されなければコマンドでインストールします。 #yum install postfix インストールしても、Postfixは起動しません。一見起動したように見えますが、statusを見ると起動してません。 これはデフォルトでSendmailが起動しているので、すでに25番ポートが使用されているからです。 sendmailを止めてPostfixを起動させます。 #service sendmail stop (Sendmailを止めます) #chkconfig sendmail off (自動起動を止めます) #service postfix start (Postfixを起動させます) #chkconfig postfix on (自動起動を有効にします) #service postfix status (動作を確認します) 「telnet localhost 25」などとして25番ポートのPostfixへアクセスできるか確認します。 ファイアウォールが開いているか確認しておきましょう。 Postfixを設定する次にPostfixの設定ファイルを編集します。/etc/postfix/main.cfを次のように編集します。 /etc/postfix/main.cf mydestination = $myhostname, localhost.$mydomain, example.local (追加) 特に重要なパラメータ。 ここで指定したドメインと同じドメインのメールが到着すると自分宛のメールと認識され、ローカルディスクへ保存されます。 inet_interface = all どのIPアドレスへサービスをバインドするかです。 デフォルトはlocalhostへバインドされていますので、メールサーバ自身しかPostfixへアクセスできません。 とりあえず全てのIPアドレスでサービスを提供しましょう。 inet_protocols = ipv4 バインドするIPアドレスをIPv4に限定させます。 IPv6が無い場合の、とりあえず起動エラーを避けるためです。 mynetworks = localhost 無条件に外部ドメインへメールをリレーするクライアントを指定します。 localhostが指定されているので、localhostからはどこへでも送信できますが、それ以外のパソコンからはメールを中継することはできません。 なお、localhostだけに制限されていても自分宛て(example.local宛)のメールは全てのアドレスから受信可能ですので問題ありません。 次にメールボックスの形式を以下2種類から選択します。 CentOSのPostfixはデフォルトはメールスプールへMailBox形式で保存します。 MailBox形式は、全てのファイルを1ファイルへ保存します。 MailDir形式は1メールを1ファイルで保存します。 ●MailBox形式の場合(全メール1ファイル・Postfixのデフォルト) /var/mailに、ユーザー別のファイル名でmbox形式で保存 #home_mailbox = Mailbox コメントアウト mail_spool_directory = /var/mail home_mailbox をコメントアウトし、mail_spool_directory でディレクトリを指定。 home_mailboxが指定されていないので、mboxはユーザー名で保存されます。 mail_spool_directoryで指定したディレクトリにファイルが保存されます。 mail_spool_directoryをコメントアウトすると、デフォルトの/var/mailが指定されたものとみなされます。 なお「home_mailbox=Mailbox」を有効にすると、ユーザーのホームディレクトリにMailboxというファイル名で mboxが保存されます。 mail_spool_directoryの設定は無視されます。 ●MailDir形式の場合(1メール1ファイル) /var/mailへ、ユーザー別のディレクトリ名で保存 #home_mailbox = Maildir/ コメントアウト mail_spool_directory = /var/mail/ (末尾へスラッシュを加える) home_mailboxをコメントアウトし、mail_spool_directory でディレクトリを指定。 末尾にスラッシュを付けると、mail_spool_directory以下に、ユーザ名でMailDirを保存します。 mail_spool_directoryを変更した場合は、変更後のディレクトリにpostfixのアクセス権があるか注意しましょう。 アクセス権の変更は「MailDirの場合、メールディレクトリを自動作成できるようにする」で後述します。 なお「home_mailbox=Maildir/」を有効にすると、ユーザーのホームディレクトリにMaildirというディレクトリ名で MailDir形式で保存されます。こちらも、末尾にスラッシュを加えます。 mail_spool_directoryの設定は無視されます。 一応追加のパラメータ mydomain = example.local myoriginal = $mydomain 検証レベルの動作には影響しません。 $mydomainとして変数として参照されたり、他のパラメータのデフォルト値として採用されることがあります。 ここまで設定したら、Postfixにコンフィグを読み込ませます。 #service postfis restart メールアカウントを作成するメールサーバでメールを受け付けるためには、宛先となるメールアカウントが必要です。メールアカウントとは、CentOS上のユーザアカウントです。 #useradd user1 -s /sbin/nologin #passwd user1 メールを受信するためだけでログイン権限を与えるのは危険なので、ログインできない制限アカウントを作ります。 パスワードも設定します。これがメール受信時のパスワードになります。 外部からexample.local宛のメールを受け付け、/var/mailに保存されることを確認しましょう。 MailDirの場合、メールディレクトリを自動作成できるようにするメールアカウントはあり、保存すべきディレクトリが未作成の場合、自動作成してくれると管理が楽です。ただしデフォルトではメールディレクトリを作成してくれません。 Postfixに、というよりメールアカウント(一般ユーザ)に/var/mailディレクトリへの書き込み権が ないからです。 (※MailBox形式の場合、/var/spool/mailの設定を変更しなくてもメールファイルを保存可能です) 通常、mailディレクトリは、所有者がroot、グループがmailとなっています。 /var/mail ディレクトリの実体は /var/spool/mail にあります。 したがって、以下のコマンドで所有者とアクセス権を確認します。 #ll /var/spool/mail と入力すると。デフォルトのアクセス権は「drwxrwxr-x root mail」となっていると思われます。 メール user1@example.localが着信すると、user1の権限でディレクトリを作成しようとします。 rootユーザとmailグループ以外のユーザには書き込み権(w)がないので、失敗します。 以下のコマンドで、一般ユーザにもディレクトリ作成権利を与えます。 #chmod o+w /var/spool/mail もしくは #chmod 777 /var/spool/mail これで、メールが着信すると、自動でメールディレクトリが作成されます。 ただしすでにMailbox形式のファイルが作成されていると、重複によりメールディレクトリの作成に失敗します。先に削除しておきましょう。 ※ディレクトリの権限を777にすることで、注意すべきがあります、 /var/spool./mailディレクトリが777となっているため、このディレクトリ配下にあるファイルは一般ユーザでも 削除可能です。ただし以下2点により現実には問題になりません。 ・ファイルを削除できても、メールディレクトリは閲覧・削除できないので問題にはなりません。 ・純粋なメールサーバなら、管理者かそれに準ずるユーザしかログインできません。 この「/var/mail以下に全メールディレクトリを集める」運用方式の唯一の欠点は、メールアカウントを削除してもメールディレクトリが残ってしまう点です。 メールユーザを削除したら、メールディレクトリも忘れず削除します。 /home/user/maildir で管理するシステムの場合、ユーザを削除するとホームディレクトリも一緒に削除してくれるので、ゴミが残るということはありません。 TelnetでSMTPの動作を確かめるtelnetでSMTPのメールを送信するのは面倒ですが、テストのためにはよく使います。telnetのメール送信はSMTPの動作不良を確認するのに大事なスキルです。 身に着けておきましょう。 「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 メールサーバのuser1ディレクトリにファイルが増えていることを確認します。 #ls /var/mail/user1 SMTPの仕事は、受信したメールをディレクトリにファイルとして保存するだけです。 パソコンがサーバからメールを取り出すには、POPサービスを使用します。 Dovecotを設定するDovecotがインストールされているか確かめます。#rpm -q dovecot 表示されなければコマンドでインストールします。 #yum install dovecot インストールが正常終了しても、起動エラーすることが多いです。 デフォルトのコンフィグが環境に合わないことがあるからです。 /etc/dovecot/dovecot.conf listen = * #IPv6へのバインドを止め、IPv4へのみバインドする IPv6環境が構成されていない場合、ここで起動エラーを出力します。 /etc/dovecot/conf.d/10-mail.conf メールスプールの形式(MailDirからMBoxか)に合わせて設定します。 Postfixがメールを保存している形式に合わせます。 ●MailDir形式の場合(1メール1ファイル) mail_location = maildir:/var/mail/%u /var/mail/ユーザ名で保存されているメールディレクトリ式のメールを取り出す設定です。 各ユーザーのホームディレクトリにメールディレクトリが保存されている場合は、 mail_location = maildir:~/Maildir と設定します。 ●MailBox形式の場合(全メール1ファイル・Postfixのデフォルト) mail_location = mbox:/var/empty:INBOX=/var/mail/%u:INDEX=MEMORY なおIMAPを用いる場合はメールボックス以外に各ユーザーごとにディレクトリが必要です。 通常は以下のようにホームディレクトリへまとめて保存させます。 mail_location = mbox:~/mail:INBOX=/var/mail/%u 設定の意味は「基本ディレクトリはユーザーのホームフォルダへmailとして保存し、メール本文(INBOX)は/var/mailに保存します」です。 /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = no #yesからnoへ変更 POP3通信時の平文の認証を許可します。 デフォルトでは暗号化されたパスワードしか受け付けないので、POP3が動作しません。 /etc/dovecot/conf.d/10-ssl.conf #ssl = required #コメントアウト いつの頃からか、プレーンテキストでPOP3通信しようとすると、TLSやSSLなどの暗号化が強要されます。 ここでSSL通信強制を無効化しておきます。 POPアカウントを試験するメールクライアントから、メールの送受信試験をします。SMTP/POPサーバ CentOSのアドレス メール送信者 user1@example.local 宛先 user1@example.local 本文やタイトルは適当 user1@example.localへ向かって正常にメールが送信でき、そして受信出来たでしょうか。 LAN内の検証用のメールサーバとしては、これで十分でしょう。 実際に運用する場合は、さらにPostfixの補強が必要です。 |
|