このページではLinux構築した自宅サーバーで、メールサーバーPop-before-smtpPOP before SMTPとして運用する方法について解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
メールサーバーの構築

メールサーバーについて

電子メールシステムについて

メールアカウントの作成

POP/IMAPサーバーの設定

Sendmailの設定

Postfixの設定

ユーザー認証によるメール送信

SMTP AUTHの設定

POP/IMAP before SMTP

dracによるPBS構築
(WBEL3,CentOS3(i386))

Pop-before-smtpの設定
(WBEL3,4_CentOS3,4+UW IMAP)

Pop-before-smtpの設定
(WBEL4_CentOS4,5+Dovecot)

SquirrelMailの設定

サブミッションポートの設定

メールの転送設定のコツ

メールサーバーのコントロール

メールサーバーの動作チェック

ポートフォワーディングの設定


王道を行くなら"Pop-before-smtp+Dovecot"でPBS

少し思想的な話になりますが、 メールサーバー のようにいくつもの サーバー アプリケーション を組み合わせてひとつのシステムを作り上げるような場合、動作実績を重視して、古くても完成度の高いアプリケーションを組み合わせる方法と、多少は構築に手間を要してもできるだけ現行のアプリケーションを利用して将来に備える、という二つの選択肢があります。

POP/IMAP before SMTP を構築する方法として、 dracを使ってPOP/IMAP before SMTPを構築しましょう で説明した drac UW IMAP の組み合わせや、 Pop-befor-smtpを使ってUW IMAPで簡単にPOP/IMAP before SMTPを構築しましょう で説明した Pop-before-smtp と旧 ディストリビューション 用のUW IMAPの組み合わせは、明らかに前者の方法です。

これらは POP/IMAP before SMTP を構成するうえでは比較的簡単なのですが、もう長くバージョンアップされていないDRACや、新しいディストリビューションでは採用が見送られることの多くなったUW IMAPを利用しているため、将来性を考えればあまりお勧めできない手段といえるでしょう。

このページでは構築に多少の手間はかかりますが、 WBEL4 CentOS4 及びCentOS5についてその将来性を重視して、可能な限り現行のサーバーアプリケーションを用いたPop-before-smtpの構築方法について説明します。

ポイントは Dovecot MRA として用いることです。

RHEL およびその クローン OS であるWBELやCentOSでは、標準で添付されるMRAとしては、OSのバージョン番号 "4" からはDovecotが採択されています。

つまりDovecotは現在のところRHEL系ディストリビューションの標準MRAとしての地位を得ているといえます。

一方、 RHL の時代から RHEL、WBEL、CentOSのOSのバージョン番号 "3" までは、構成がシンプルで扱いが簡単なUW IMAPが標準でした。

しかし企業の基幹サーバーにも使用されるRHELでは近年、より高度な機能が求められるようになった結果、RHEL4からは標準MRAの座をDovecotに明け渡すことになったというわけです。

つまりDovecotを利用して POP/IMAP before SMTP を構築するということは、現時点では将来的に有利な選択と考えられるわけです。

Dovecotを用いてPOP/IMAP before SMTPを実装するには、 Pop-befor-smtpを使ってUW IMAPで簡単にPOP/IMAP before SMTPを構築しましょう でも説明した Pop-before-smtp を利用します。

Pop-before-smtpは Perl で記述された スクリプト ですから、動作については ディストリビューション アーキテクチャ に依存しません。

Pop-before-smtpは MRA がメールの受信要求の際に記録する ログ ファイルの情報を読み取り、パスワード認証によってメールの受信に成功したログデータを探し出してその要求元の IPアドレス データベース に一定時間登録します。

メール受信の要求元が メールサーバー とは別の サブネット の場合、Pop-before-smtpはそのサブネットの外側(通常は WAN 側)の ゲートウェイアドレス を要求元のIPアドレスとして登録します。

つまり、 NAT + IPマスカレード 環境下にある外部のサブネットからでも、結果として同じように動作するようになります。

通常、 MUA から SMTP によるメールの送信要求を受けた MTA は、 Sendmail の場合は "/etc/mail/access.db" sendmailの/etc/mail/accessの設定 のみを、 Postfix の場合は "/etc/postfix/main.cf" "mynetworks_style" (または"mynetworks") ディレクティブ のパラメータ postfixのmynetworks_styleディレクティブの設定 のみを参照して、転送を伴うメールの送信要求を受け付けます。

Pop-before-smtpを用いる場合は、これに加えてSendmailやPostfixに対して、

「ついでにPop-before-smtpの作成したデータベースを参照して、そこに登録されているIPアドレスからの送信も転送許可で受け付けなさい。」

という設定を行っておきます。

これで「任意の ノード (つまり外出先)からの自由なメールの送信。」が可能になる、というわけです。

さて、公式の ディストリビューター から RPM の形で供給される Pop-before-smtpは、UW IMAPでの利用が デフォルト になっていますから、インストール後に色々な設定を施す必要がありますが、 ソース からインストールする場合と比べればそれでも間違いが少なく、うまくいかなかったときの収拾が容易ですので、ここではRPM形式のPop-before-smtpを利用してのPOP/IMAP before SMTPの構築を解説します。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

Pop-before-smtpについて〜入手方法など

Pop-before-smtpは、 ソース プログラムを、

から ダウンロード し、手動で インストール することもできますが、先に説明したとおりここでは RPM として作成済みの

pop-before-smtp-1.33-1.noarch.rpm

を使用します。

上の公式ページからは比較的新しいバージョンのpop-before-smtpのソースプログラムしかダウンロードできなくなってますから、インターネット上を検索して適当なダウンロードサイトサイトを見つけてダウンロードします。

例えば、 国立大学法人 北陸先端科学技術大学院大学 アノニマスFTP サーバーの

からダウンロードすることができますから、 クライアント機 上から、

をクリックしてダウンロードし、 FTPクライアント を使って 構築中のLinuxサーバー アップロード すればOKです。

または、 SSHクライアント 構築中のLinuxサーバー にログインし、 wget コマンド で直接 構築中のLinuxサーバー にダウンロードする方法もあります。

[tanaka@web1 ~]$ wgetftp://ftp.jaist.ac.jp/pub/sourceforge/p/project/po/popbsmtp/OldFiles/
popbsmtp/pop-before-smtp-1.33-1.noarch.rpm
Enter
--00:38:13-- ftp://ftp.jaist.ac.jp/pub/sourceforge/p/project/po/popbsmtp/OldFiles/pop-before-smtp-1.33-1.noarch.rpm
      => `pop-before-smtp-1.33-1.noarch.rpm'
ftp.jaist.ac.jp をDNSに問いあわせています... 150.65.7.130
ftp.jaist.ac.jp|150.65.7.130|:21 に接続しています... 接続しました。
anonymous としてログインしています... ログインしました!
==> SYST ... 完了しました。  ==> PWD ... 完了しました。
==> TYPE I ... 完了しました。 ==> CWD /pub/sourceforgeproject/po/pop ... 完了しました。
==> PASV ... 完了しました。  ==> RETR pop-before-smtp-1.33-1.noarch.rpm ... 完了しました。
長さ: 35,997 (35K) (確証はありません)

100%[====================================>] 35,997    --.--K/s  ETA 00:00

00:38:14 (259.54 KB/s) - `pop-before-smtp-1.33-1.noarch.rpm' を保存しました [35997]

[tanaka@web1 ~]$

現在のところ(2008年5月)、WBELやCentOSにはPop-befor-smtpは標準添付されていませんので、 yum でシステム全体を アップデート しても yumによるシステムのアップデート(WBEL4) yumによるシステムのアップデート(CentOS4) yumによるシステムのアップデート(CentOS5) 、一緒に再アップデートされることはありません。

ただ、後々標準添付される可能性がないともいえませんから、自動アップデートの対象からはずしておくと良いでしょう。

nanoエディタ "/etc/yum.conf" を開き nanoエディタでファイルを開く [main]セクション以下に "exclude=pop-before-smtp*" と記述してください。

右の例では割愛していますが、既に他のrpmについて同じようにあなた自身が記述しているかもしれません。
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=whitebox-release

   中略

exclude=pop-before-smtp*

   後略

これで、yumによるpop-before-smtpのアップデートが行われる可能性はなくなりました。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

Pop-before-smtpのセットアップ

以下、 Pop-before-smtp インストール と設定、動作確認について説明します。

Pop-before-smtpのインストール

基本的なインストール作業は、 UW IMAP とPop-before-smtpを利用した POP/IMAP before SMTP の構築で説明したものと同じですから、 Pop-befor-smtpを使ってUW IMAPで簡単にPOP/IMAP before SMTPを構築しましょう の手順に従ってPop-before-smtpのインストールと、Pop-before-smtpの実行に必要な Perl のモジュール、 File/Tail.pm Net/Netmask.pm Date/Parse.pm Time/HiRes.pm のインストールを行います。

MTA Postfix を利用する場合は、更にPostfixが自分自身の動作に利用する データベース BerkeleyDB のためのモジュールもインストールしておきます。

cpan> install BerkeleyDBEnter

Pop-before-smtpと、その実行に必要なPerlのモジュールをインストールしたら、pop-before-smtpデーモンを起動してみます。

[root@web1 ~]# /etc/init.d/pop-before-smtp startEnter
Starting pop-before-smtp:                 [ OK ]
[root@web1 ~]#

これでPop-before-smtpのインストールは終わりです。

Pop-before-smtpを構成するファイル

"pop-before-smtp-1.33-1.noarch.rpm" から Pop-before-smtp インストール すると、以下のように必要なファイルが配置されます。

Pop-before-smtpを構成するファイル一覧
"Pop-before-smtp"を構成するファイル一覧

Pop-before-smtpの本体プログラムは"/usr/sbin/pop-before-smtp"ですが、通常はこれを直接呼び出すことはないでしょう。

実際にはこの"/usr/sbin/pop-before-smtp"を用いて、起動や終了を容易にコントロールできるように記述された スクリプト である "/etc/rc.d/init.d/pop-before-smtp" を用います。

また"/etc/rc.d/init.d/"の シンボリックリンク が"/etc/init.d/"になっていますので、スクリプトは "/etc/init.d/pop-before-smtp" でも呼び出すことができます。

例えば、

"/etc/rc.d/init.d/" には パス が通っていません パスが通っていないディレクトリにあるファイルの実行 から、パスを省略して実行することはできません。

"/etc/init.d/pop-before-smtp start" →pop-before-smtpの起動

"/etc/init.d/pop-before-smtp stop" →pop-before-smtpの停止

という使い方になります。

Pop-before-smtpの デフォルト の動作は、本体である Perl スクリプト "/usr/sbin/pop-before-smtp" に記述されていますが、通常はこれを編集することはありません。

設定作業は設定の変更を行うために予め準備されている "/etc/pop-before-smtp-conf.pl" に対して行います。

"/etc/postfix/pop-before-smtp.db" 及び "/etc/mail/popauth.db" が、 MRA 、すなわち Dovecot への受信要求の成立によって自動で作成される IPアドレス データベース です。

このデータベースはMTAとして Postfix を利用する場合は "/etc/postfix/pop-before-smtp.db" Sendmail を利用する場合は "/etc/mail/popauth.db" を使用することになります。

ちなみにこのデータベースの位置や名称は "/etc/pop-before-smtp-conf.pl" を書き換えることで任意に変更可能ですし、もちろんPostfixとSendmailで共用することも可能です。ただしここではPop-before-smtpの作法に従って別々のデータベースを利用するケースで説明していきます。

Pop-before-smtpの設定について

Pop-before-smtp の設定は、 "/etc/pop-before-smtp-conf.pl" に対して行います。

ただし、 "pop-before-smtp-1.33-1.noarch.rpm" からPop-before-smtpを インストール すると、 デフォルト の"/etc/pop-before-smtp-conf.pl"は UW IMAP での利用を前提にした簡単な内容になっていますから、これを様々な形式の MRA MTA への設定例が記述されたテンプレート "/usr/share/doc/pop-before-smtp-1.33/pop-before-smtp-conf.pl" と入れ替えます。

root アカウント ログイン した状態で、 cp コマンドでバックアップを作成した後、 cat コマンドと 出力のリダイレクト 出力のリダイレクトについて を使って"/etc/pop-before-smtp-conf.pl"の内容を"/usr/share/doc/pop-before-smtp-1.33/pop-before-smtp-conf.pl"の内容で置換し、 nanoエディタ から"/etc/pop-before-smtp-conf.pl"を開いてください nanoエディタでファイルを開く

[root@web1 ~]# cp /etc/pop-before-smtp-conf.pl /etc/pop-before-smtp-conf.pl.orgEnter
[root@web1 etc]# cat /usr/share/doc/pop-before-smtp-1.33/pop-before-smtp-conf.pl > /etc/pop-before-smtp-conf.plEnter
[root@web1 ~]# nano /etc/pop-before-smtp-conf.plEnter


nanoで/etc/pop-before-smtp-conf.plを開く
nanoで"/etc/pop-before-smtp-conf.pl"を開く

設定内容は、使用する MTA Sendmail Postfix かで一部異なります。

SendmailとPostfixに共通するPop-before-smtpの設定

1.Pop-befor-smtp専用の ログ の出力先の設定(29行目)

Pop-before-smtpの動作のログは、 デフォルト では通常の メールサーバー のログファイル "/var/log/maillog" に一緒に記録されるようになっています。

ただ、メールサーバーの利用頻度が増えてくると、大量のメールログの中にPop-before-smtpの動作ログが埋もれてしまい、動作の不具合が起こったときにチェックし難くなります。

そこでデフォルトの記述である、

#$logto = '/var/log/pop-before-smtp';

のコメント記号 "#" をはずし、

$logto = '/var/log/pop-before-smtp';

とすると、Pop-before-smtpの動作に関するログが、専用のログファイル "/var/log/pop-before-smtp" に記録されるようになります。

もちろんこの場合でも "/var/log/maillog" にも同じ動作ログが記録されます。

2.データベースファイルの指定(32行目)

Pop-before-smtpが出力する IPアドレス データベース ファイルの指定です。

デフォルトでは先に説明したとおり、 "/etc/postfix/pop-before-smtp.db" となります。

設定ファイル中では、

データベースファイルの末尾の ".db" は自動的に付加されますので記述する必要はありません。
#$dbfile = '/etc/postfix/pop-before-smtp';

となっており、デフォルトのパラメータがそのままコメント化されているだけですから、 MTA として Postfix を利用する場合でも明示的に有効化する必要はなく、コメント化されたままでOKです。

ただしこのデータベースの出力先やファイル名を任意に変更したい場合は、先頭のコメント記号 "#" をはずして、 絶対パス で記述することになります。

例えば、 MTA として Sendmail を使用する場合のデフォルトのデータベースは "/etc/mail/popauth.db" となりますから、

$dbfile = '/etc/mail/popauth';

と記述すれば良いことになるのですが、実際にはSendmailを利用する場合でも設定はデフォルトのままで構いません。

何故かというと、実は現在編集中の "/etc/pop-before-smtp-conf.pl" には、後半にPostfixとSendmailのそれぞれに最適化された設定がまとめて記述してあり、Sendmailに関する記述の中には上の "$dbfile = '/etc/mail/popauth';" が含まれているため、ここで強いて設定を有効化しておく必要はない、というわけです。

3.IPアドレスのデータベース上の保持時間(38行目)

データーベースへの保持時間が短すぎると、受信操作から直ぐに送信作業を行わなければならなくなりますので、 MUA の使い勝手は悪くなります。ただ、あまり長くしすぎると逆にセキュリティ上の問題が出てきます。

従って、短くて 5分 、長くても 30分 程度が妥当なところでしょう。

$grace の単位は秒ですので、敢えて 30*60 と記述して、値の変更を「分」単位で行えるように配慮しているわけですね。

デフォルトでは30分に設定されていて、設定ファイル中の記述も、

#$grace = 30*60;

と、デフォルト値でコメント化されています。

この値を変更したい場合は、先頭のコメント記号 "#" をはずし、 "30" の部分を指定したい「分」の値に書き換えてください。

例えば10分に指定したいときは、

$grace = 10*60;

と記述します。

4.Dovecotのログデータの参照先の指定(41行目)

データベースは、Postfixでは "/etc/postfix/pop-before-smtp.db" 、Sendmailでは "/etc/mail/popauth.db" となります。

Pop-before-smtpはシステム上のメールのログデータの中から MRA の動作に関する部分を監視して、受信要求が成功したIPアドレスをデータベースに追加し、先に説明した "$grace" の時間が経過するとそのIPアドレスをデータベースから削除します。

ここではその参照先のログデータを格納しているファイルを指定します。

設定ファイルの中では、

#$file_tail{'name'} = '/var/log/maillog';

とデフォルト値でコメントアウトされていますから、Pop-before-smtpは WBEL CentOS のデフォルトのメールログファイル "/var/log/maillog" を参照して動作するようになっています。

デフォルト値ですからそのままにしておいても構いませんが、ここは明示的に、

$file_tail{'name'} = '/var/log/maillog';

とコメント記号 "#" をはずして有効化しておくことをお勧めします。

メールサーバー 関係の動作ログは、通常 MTA MRA などをひっくるめて "/var/log/maillog" に記録されるようになっていますが、そのログデータを利用して動作するPop-before-smtpでは先に説明した "$logto" のように "/var/log/maillog" とは別に記録しておくのが望ましいものがあります。

従ってPop-before-smtpの構築では、特にログに関する設定は「何を何処に記録するように設定したか」ということだけは明確にしていたほうが混乱が少なくなる、というのがその理由です。

5.解析するログデータパターンの設定(追加記述)

メールの受信要求が行われたときに サーバー 上でMRAが出力するログデータのパターンはMRAの種類ごとに異なります。

Pop-before-smtpはMRAが出力するログデータを解析して動作する アプリケーション ですから、その使用にあたっては、解析すべきログデータのパターンを予めPop-before-smtpに教えておかなければなりません。

設定は、 "$pat" に対して 正規表現 で指定します。

設定ファイルの中には、様々なMRAのログパターンに合わせた設定例が 97行目〜181行目 にかけて すべてコメントアウトされた形で 記述されています。

つまり明示的な "$pat" の設定が存在しないわけですが、その場合は最初の設定例である、

# For UW ipop3d/imapd and their secure versions. This is the DEFAULT.
#$pat = '^(... .. ..:..:..) \S+ (?:ipop3s?d|imaps?d)\[\d+\]: ' .
#  '(?:Login|Authenticated|Auth) user=\S+ ' .
#  'host=(?:\S+ )?\[(\d+\.\d+\.\d+\.\d+)\]';

すなわちMRAとして UW IMAP を用いる場合のログパターンがデフォルトになります。

ところで残念なことに、この中にはMRAとしてDovecotを使う場合の記述例がありませんから、改めて記述しなければなりません。

WBEL4 CentOS4 のDovecotをMRAとして利用する場合の "$pat" の記述は以下のようになります。

赤字の部分はただの覚書ですからなくても構いません。
# For Dovecot / WBEL4 or CentOS4.
$pat = '^(... .. ..:..:..) \S+ (?:pop3|imap)-login: ' .
'Login: .+ \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';

CentOS5のDovecotをMRAとして利用する場合の "$pat" の記述は以下のようになります。

# For Dovecot / CentOS5.
$pat = '^(... .. ..:..:..) \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';

記述位置はどこでも構いませんが、できれば 97行目〜181行目 の記述例の最初か最後あたりが間違えにくくて良いでしょう。

ログデータは "/var/log/maillog" に記録されます。

ちなみに、後ほど説明する内容で設定を行ったDovecotに対して、 POP3 で受信作業に成功したときにDovecotが出力するログデータは、WBEL4やCentOS4では、

Jun 12 22:54:39 web1 pop3-login: Login: tanaka [::ffff:211.183.111.34]

CentOS5では、

Jun 12 22:54:39 web1 dovecot: pop3-login: Login: user=<tanaka>, method=PLAIN, rip=::ffff:211.183.111.34, lip=::ffff:192.168.100.11

IMAP4 の場合WBEL4やCentOS4では、

Jun 12 22:54:39 web1 imap-login: Login: suzuki [::ffff:211.183.111.34]

CentOS5では、

Jun 12 22:54:39 web1 dovecot: imap-login: Login: user=<suzuki>, method=PLAIN, rip=::ffff:211.183.111.34, lip=::ffff:192.168.100.11

のようになりますが、これが上の "$pat" の正規表現でマッチすることは正規表現の書式がわからなくても「なんとなく」理解できると思います。

Sendmailを使用するときのPop-before-smtpの設定

MTA として Sendmail を利用する場合の設定は、 "/etc/pop-before-smtp-conf.pl" 中の 352行目〜419行目


=cut #-------------------------- Sendmail SMTP -----------------------START-
.
.
.
=cut #-------------------------- Sendmail SMTP -------------------------END-

に記述があります。

ただしこの範囲は先頭の "=cut " で無効化されてますから、開始行と終了行の "=cut " をそれぞれ削除して、Sendmailに関する設定を有効にします。


#-------------------------- Sendmail SMTP -----------------------START-
.
.
.
#-------------------------- Sendmail SMTP -------------------------END-

もちろん、 Postfix を使用する場合はここの部分の設定を有効化してはいけません。

また、このSendmailに関する設定の中の 378〜382行目 あたりに以下の記述があります。


sub mynet_sendmail
{
  # You'll want to edit this value.
  '127.0.0.0/8 192.168.1.1/24';
}

ここにデフォルトで記述されている "127.0.0.8/8" "192.168.1.1/24" の二つのネットワークからの受信要求については、Pop-before-smtpはリレー許可 データベース である "/etc/mail/popauth.db" にその IPアドレス を登録しないようになっています。

Sendmailの受信と転送に関する設定 Sendmailの受信と転送に関する設定 で説明しているとおり、メールサーバーの運用では メールサーバー 自身やそのサーバーが入っている LAN 内については無条件にメールの転送許可を設定するのが普通です Sendmailの受信と転送に関する設定例

つまり自 ホスト を示す ループバックアドレス と、それが接続している サブネット については、わざわざPop-before-smtpによって制御する必要はありませんから、Pop-before-smtpの動作負荷を減らすためにこのような設定が存在するわけです。

従って本来この部分の設定は現在構築中のLANの プライベートIPアドレス に合わせて、


sub mynet_sendmail
{
  # You'll want to edit this value.
  '127.0.0.0/8 192.168.100.1/24';
}

と設定を変更しておくべきです。

実際にはPop-before-smtpは受信元のIPアドレスをすべからく検査し、この部分の設定と比較してデータベースに登録するかどうかを判定しているわけですから、データベースに登録されなくても きちんと動作はしています
ただ通常のログに動作履歴が残らないので、動作していないように 見える だけです。

ただしこのように正しく、というより作法どおりに設定してしまうと、LAN内の MUA からのメールの受信要求に対してはPop-before-smtpは見かけ上動作はしませんから、動作確認を行うには WAN 側、つまり外出先などからメールを受信してみなければならないことになります。

これではちょっと面倒ですので、以下に説明するPop-before-smtpの動作確認が取れるまでは元の設定のままにしておき、LANからの受信操作で動作を確認した後に設定を変更するようにしましょう。

ただしここの部分の設定はあくまで、「Sendmailの "/etc/mail/access.db" Sendmailの受信と転送に関する設定例 に転送許可設定されているIPアドレスを、 "/etc/mail/popauth.db" に動的に登録して転送許可を与えても意味がない。」ということを解消するためのものですから、実用上はどうでも構わないといえばそのとおりです。

あまり神経質になる必要はありません。

Postfixを使用するときのPop-before-smtpの設定

MTA として Postfix を利用する場合の設定は、 "/etc/pop-before-smtp-conf.pl" 中の 233行目〜258行目


=cut #======================== Postfix BerkeleyDB ====================START=
.
.
.
=cut #======================== Postfix BerkeleyDB ======================END=

に記述があります。

ただしこの範囲は先頭の "=cut " で無効化されてますから、開始行と終了行の "=cut " をそれぞれ削除して、Postfixに関する設定を有効にします。


#======================== Postfix BerkeleyDB ====================START=
.
.
.
#======================== Postfix BerkeleyDB ======================END=

もちろん、 Sendmail を使用する場合はここの部分の設定を有効化してはいけません。

さて、このPostfixに関する設定領域には、先に説明したSnedmailの 378〜382行目 に相当する設定部分がありません。

正確にいうとPop-before-smtpは、Postfixの設定値を出力する "postconf" コマンド postconfコマンドについて の実行結果から "mynetworks" の値を取得します。

なぜかというと、Pop-before-smtpはPostfixと連動して使用するときは "/etc/postfix/main.cf" の中の "mynetworks" のパラメータを参照し mynetworksディレクティブについて 、ここに設定されている サブネット はリレー許可 データベース "/etc/postfix/pop-before-smtp.db" には登録しないようになっているからです。

つまりこのページで説明する方法で、Pop-before−smtpを用いる場合、リレー許可ホストの設定を "mynetworks_style" で設定すると、この部分の連携がうまくいきません。
必ず "mynetworks" で設定するようにしてください。

従って "/etc/postfix/main.cf" 中の "mynetworks" が、

mynetworks = 192.168.100.0/24, 127.0.0.0/8

と設定されていれば、 構築中のLinuxサーバー 自身"127.0.0.0/8"と、それが接続している LAN "192.168.100.0/24"内の ホスト からのメールの受信については "/etc/postfix/pop-before-smtp.db" には登録されないということです。

実際の運用上はもちろんこの設定がベターです。

ただし最初からこのよう設定してしまうと、LAN内 MUA からのメールの受信要求に対してはPop-before-smtpは見かけ上動作はしませんから、動作確認を行うには WAN 側、つまり外出先などからメールを受信してみなければならないことになります。

これではちょっと面倒ですので、以下に説明するPop-before-smtpの動作確認が取れるまでは、

mynetworks = 127.0.0.0/8

のように設定しておき、LAN内からの受信操作について動作確認した後に設定を変更するようにします。

Pop-before-smtpの設定の有効化

設定ファイルの内容を変更したら"/etc/pop-before-smtp-conf.pl"を保存し、nanoエディタを閉じてください nanoエディタでファイルを閉じる

設定を変更した場合は、pop-before-smtpを再起動する必要があります。

まだpop-before-smtpを起動していないときは、

[root@web1 ~]# /etc/init.d/pop-before-smtp startEnter
Starting pop-before-smtp:                 [ OK ]
[root@web1 ~]#

でpop-before-smtpを起動してください。既に起動しているときは、

[root@web1 ~]# /etc/init.d/pop-before-smtp restartEnter
Stopping pop-before-smtp:                 [ OK ]
Starting pop-before-smtp:                 [ OK ]
[root@web1 ~]#

で再起動を行ってください。

Pop-before-smtpの起動、停止、再起動などの操作については、 pop-before-smtpのコントロールについて を参照してください。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

Pop-before-smtpと連携するときのDovecotの設定

Dovecot の一般的な説明については Dovecotについて を参考にしてください。

MRA として普通にDovecotを使用する場合と異なり、Dovecotを Pop-before-smtp と連携させて使用する場合には、 "/etc/dovecot.conf" に対していくつかの追加設定が必要になります。

またDovecotは日々改良が行われている アプリケーション ということもあって、 yum でシステム全体を アップデート しようとすると yumによるシステムのアップデート(WBEL4) yumによるシステムのアップデート(CentOS4) yumによるシステムのアップデート(CentOS5) 、一緒にアップデートされることがあります。

これによってログデータの形式などが変更になってしまうと、Pop-before-smtpとの連携がとれなくなってしまう可能性があります。

そこで nanoエディタ "/etc/yum.conf" を開き nanoエディタでファイルを開く [main]セクション以下に "exclude=dovecot*" と記述してください。

右の例では割愛していますが、既に他のrpmについて同じようにあなた自身が記述しているかもしれません。
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=whitebox-release

   中略

exclude=dovecot*

   後略

これで、yumによるdovecotのアップデートが行われる可能性はなくなりました。

"/etc/dovecot.conf"の設定(WBEL4,CentOS4)

1.利用可能にする受信プロトコルの設定

WBEL4 及び CentOS4 とも 14行目あたり に記述があります。 デフォルト は、

#protocols = imap imaps

となっています。

例えば、POP3とIMAP4の利用を有効にするには次のように編集してください。

protocols = imap pop3

もしもどちらかのプロトコルしか使用しない場合は、 "pop3" "imap" のどちらか一方だけを記述しておけばOKです。

2.リッスンポートの設定

WBEL4 及び CentOS4 とも 22行目あたり に記述があります。 デフォルト は、

imap_listen = [::]
pop3_listen = [::]

となっています。

この "listen" は、受信要求を受け付ける IPアドレス ポート番号 を制御するパラメータです。

デフォルトは 「IPv4とIPv6のすべてのIPアドレスとすべてのポート番号で、POP3とIMAP4の受信要求に答える。」 という設定になっています。

しかし実際の運用で セキュリティ 上問題になる WAN 空間からの接続要求については ルーター によって適切に制御されますから、ここで強いて制限をかける必要はありません。デフォルトのままでOKです。

ちなみに、意図的にアクセス制限を加ようとしてこの設定を変更すると、ログデータの形式そのものが変わってしまうことがあり、せっかく設定した Pop-before-smtp のログデータの読み取りパターンと一致しなくなることがありますので注意してください。

3.ログデータの出力先の設定

WBEL4 及び CentOS4 とも 56行目あたり 、及び 59行目あたり に記述があります。 デフォルト は、それぞれ、

#log_path =

及び、

#info_log_path =

となっています。

ちなみに "log_path =" クライアント からの受信要求のログ、 "info_log_path =" Dovecot 自身の動作ログの出力先となります。

Dovecotのデフォルトのログデータの出力先は "/var/log/maillog" なので明示的に設定する必要はありませんが、備忘録として明示的に設定しておきたいところではあります。

しかしここでは 設定を行わないようにします

Dovecotはログデータの出力先を明示しない場合、 syslogd というシステム上のログデータを包括的に扱う デーモン の仕組みを利用してログデータを出力しますが、明示的に設定を行うとDovecotが単独でログデータを出力します。

従って、 "log_path = /var/log/maillog" と明示的に設定してしまうと、ログデータの出力先は変わりませんがログデータの出力パターンが変わってしまい、せっかく設定した Pop-before-smtp のログデータの読み取りパターンと一致しなくなってしまうからです。

"/etc/dovecot.conf"の設定(CentOS5)

1.利用可能にする受信プロトコルの設定

17行目あたり に記述があります。 デフォルト は、

#protocols = imap imaps pop3 pop3s

となっています。

例えば、POP3とIMAP4の利用を有効にするには次のように編集してください。

protocols = imap pop3

もしもどちらかのプロトコルしか使用しない場合は、 "pop3" "imap" のどちらか一方だけを記述しておけばOKです。

2.リッスンポートの設定

27行目あたり から記述があります。

この "listen" は、受信要求を受け付ける IPアドレス ポート番号 を制御するパラメータです。 デフォルト は、

#  protocol imap {
#   listen = *:10143
#   ssl_listen = *:10943
#   ..
#  }
#  protocol pop3 {
#   listen = *:10100
#   ..
#  }
#listen = [::]

とコメント化されていますが、デフォルトで 「IPv4とIPv6のすべてのIPアドレスとすべてのポート番号で、POP3とIMAP4の受信要求に答える。」 という設定になっています。

しかし実際の運用で セキュリティ 上問題になる WAN 空間からの接続要求については ルーター によって適切に制御されますから、ここで強いて制限をかける必要はありません。デフォルトのままでOKです。

ちなみに、意図的にアクセス制限を加ようとしてこの設定を変更すると、ログデータの形式そのものが変わってしまうことがあり、せっかく設定した Pop-before-smtp のログデータの読み取りパターンと一致しなくなることがありますので注意してください。

3.ログデータの出力先の設定

58行目あたり 、及び 61行目あたり に記述があります。 デフォルト は、それぞれ、

#log_path =

及び、

#info_log_path =

となっています。

ちなみに "log_path =" クライアント からの受信要求のログ、 "info_log_path =" Dovecot 自身の動作ログの出力先となります。

Dovecotのデフォルトのログデータの出力先は "/var/log/maillog" なので明示的に設定する必要はありませんが、備忘録として明示的に設定しておきたいところではあります。

しかしここでは 設定を行わないようにします

Dovecotはログデータの出力先を明示しない場合、 syslogd というシステム上のログデータを包括的に扱う デーモン の仕組みを利用してログデータを出力しますが、明示的に設定を行うとDovecotが単独でログデータを出力します。

従って、 "log_path = /var/log/maillog" と明示的に設定してしまうと、ログデータの出力先は変わりませんがログデータの出力パターンが変わってしまい、せっかく設定した Pop-before-smtp のログデータの読み取りパターンと一致しなくなってしまうからです。

Dovecotの再起動と起動設定

設定ファイルの内容を変更したら"/etc/dovecot.conf"を保存し、nanoエディタを閉じてください nanoエディタでファイルを閉じる

設定が終わったら プロンプト から、Dovecotの起動・停止 スクリプト を使ってDovecotを起動します。

[root@web1 ~]# /etc/init.d/dovecot startEnter
Dovecot Imap を起動中:                  [ OK ]
[root@web1 ~]#

"/etc/dovecot.conf" の内容を変更したときは、Dovecotを停止して起動しなおすか、再起動する必要があります。

Dovecotの停止、再起動は、以下のように行います。

[root@web1 ~]# /etc/init.d/dovecot stopEnter
Dovecot Imap を停止中:                  [ OK ]
[root@web1 ~]# /etc/init.d/dovecot startEnter
Dovecot Imap を起動中:                  [ OK ]
[root@web1 ~]# /etc/init.d/dovecot restartEnter
Dovecot Imap を停止中:                  [ OK ]
Dovecot Imap を起動中:                  [ OK ]
[root@web1 ~]#

MRAは必要に応じて起動すべきものではなく、 メールサーバー を利用するときは常に稼動させておく必要のあるアプリケーションです。

従ってDovecotは 構築中のLinuxサーバー の起動時に自動的に起動するように設定しておきましょう。

方法は ntsysv コマンド で設定画面を開き、 dovecot デーモン にチェックを入れておくだけです。

dovecotをntsysvで自動起動登録する
"dovecot"を"ntsysv"で自動起動登録する

以上でDovecotの基本的な動作設定は完了です。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

DovecotとPop-before-smtpの連携の確認

MTA Pop-before-smtp に対応させる前に、ひとまず Dovecot とPop-before-smtpの連携がうまくいくかどうかをチェックしてみましょう。

まずDovecotと、Pop-before-smtpが稼動していることを確認してください。もし稼動していなければ前のパートの説明、または Dovecotのコントロールについて 及び Pop-before-smtpのコントロールについて に従って起動してください。

[root@web1 ~]# /etc/init.d/dovecot statusEnter
dovecot (pid 28461) を実行中...
[root@web1 ~]# /etc/init.d/pop-before-smtp statusEnter
pop-before-smtp (pid 17284) を実行中...
[root@web1 ~]#

次にPop-before-smtpによって登録される、リレー許可対象の クライアント IPアドレス を調べてみましょう。

リレー許可対象のIPアドレスが動的に登録される データベース ファイルは バイナリ 形式ですので、 テキスト エディタなどで開くことはできません。

この コンテンツ に推奨の方法で インストール CentOS5 では、データベースユーティリティがインストールされていない可能性があり、その場合はユーティリティに含まれる db_dump が使用できません。
db_dump を使えるようにするには プロンプト から、
"yum install db4-utils" を実行してユーティリティをインストールしてください。

そこでバイナリのデータベースファイルの内容をテキストで表示する "db_dump" などの コマンド を使ってデータベースの内容を確認する必要があります。

このページ前半で説明したとおり、データベースは使用する MTA によって異なり、

Postfix  → "/etc/postfix/pop-before-smtp.db"

Sendmail  → "/etc/mail/popauth.db"

となります。

ただデータベースの内容には相違点はありませんから、ここではMTAとしてPostfixを使用しているものとし、データベースとして"/etc/postfix/pop-before-smtp.db"を使用しているケースで説明します。

ひとまず、以下のようにコマンドを実行してみてください。

[root@web1 ~]# db_dump -p /etc/postfix/pop-before-smtp.dbEnter
VERSION=3
format=print
type=hash
db_pagesize=4096
HEADER=END
DATA=END
[root@web1 ~]#

現在表示されているのは、データベースのパラメータのみで、IPアドレスの登録は何も行われていません。

実際にメールが ダウンロード されなくても構いません。認証されればそれでOKです。

では、 いきなりメールを受信してみる アカウント を設定した サブネット 内の ホスト機 MUA で、 構築中のLinuxサーバー からのメールの受信を行ってみてください。

そしてもう一度"/etc/postfix/pop-before-smtp.db"の中を確認すると、

[root@web1 ~]# db_dump -p /etc/postfix/pop-before-smtp.dbEnter
VERSION=3
format=print
type=btree
db_pagesize=512
HEADER=END
192.168.100.101
ok
DATA=END
[root@web1 ~]#

と、受信作業を行ったホスト機のIPアドレスが登録されているはずです。

この時間は結構アバウトです。
10分に設定していても、データベースからIPアドレスが消えるまで実際には15分〜25分くらいかかることもあります。

そして前のパートで設定した IPアドレスの保持時間 が経過するのを待って、もう一度"/etc/postfix/pop-before-smtp.db"の内容を確認してみてください。登録が消えて、空っぽの状態に戻っているはずです。

これが確認できれば、DovecotとPop-before-smtpの連携はOKということになります。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

SendmailとPop-before-smtpとの連携の設定

Sendmail "/etc/mail/popauth.db" を参照し、その中に保持されている IPアドレス ホスト からのメールの中継許可を行うには、 "/etc/mail/sendmail.mc" の末尾に以下の設定を追記し、改めて "/etc/mail/sendmail.cf" を作成する必要があります。

※先頭省略(グレーは既存の記述)
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
define(`confMAX_MESSAGE_SIZE',`10000000')dnl
define(`confMAX_RCPTS_PER_MESSAGE', `50')dnl


define(`POP_B4_SMTP_TAG', `')dnl
HACK(`popauth')dnl

この黒字の部分を追加すれば良いのですが、このまま "/etc/sendmail.cf" の作成を実行してもエラーになります。

[root@web1 ~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cfEnter
/etc/mail/sendmail.mc:170: m4: Cannot open /usr/share/sendmail-cf/hack/popauth.m4: そのようなファイルやディレクトリはありません
[root@web1 ~]#

エラーメッセージからもお分かりのとおり、この場合の "m4" の実行には、 "/usr/share/sendmail-cf/hack/popauth.m4" というファイルが必要となります。

このファイルはSendmailにPop-before-smtpが生成した データベース を参照させるための、 "/etc/mail/sendmail.cf" を作成するのに必要な "/etc/mail/sendmail.mc" のサブスクリプトファイルです。

これはPop-before-smtpの公式サイト、

の、

http://popbsmtp.sourceforge.net/popauth.m4 (スクリプトファイル)

から入手できます。

上のファイルを クライアント機 上に保存して、 FTPクライアント を使って 構築中のLinuxサーバー アップロード し、 mv コマンドを使って "/usr/share/sendmail-cf/hack/" 以下にファイルを移動すればOKです。

または、 wget コマンド で直接 構築中のLinuxサーバー にダウンロードする方法もあります。

[tanaka@web1 ~]$ su -Enter
Password: "root"のパスワードを入力します。 Enter
[root@web1 ~]# cd /usr/share/sendmail-cf/hack/ Enter cdコマンドについて
[root@web1 hack]# wget http://popbsmtp.sourceforge.net/popauth.m4Enter
--07:59:32-- http://popbsmtp.sourceforge.net/popauth.m4
      => `popauth.m4'
popbsmtp.sourceforge.net をDNSに問いあわせています... 66.35.250.209
popbsmtp.sourceforge.net|66.35.250.209|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 2,591 (2.5K) [text/plain]

100%[====================================>] 2,591    --.--K/s  ETA 00:00

07:59:33 (7.82 MB/s) - `popauth.m4' を保存しました [2591/2591]

[root@web1 hack]# lsEnter lsコマンドについて
cssubdomain.m4 popauth.m4
[root@web1 hack]# cd ~Enter
[root@web1 ~]#

準備ができたらもう一度 "/etc/sendmail.cf" の作成を実行してください。今度はきちんと実行できるはずです。

以上でSendmailの必要な設定は終わりました。

編集が終わったら、Sendmailの再起動 Sendmailのコントロールについて を忘れないようにしてください。

以下に "/etc/mail/sendmail.mc" に追加記述する部分だけのコピー&ペースト用の テキスト ファイルを掲載しますので、必要ならば利用してください。

"/etc/mail/sendmail.mc"の実際の編集の方法、"/etc/mail/sendmail.cf"の作成方法については、 sendmail.mcの設定について sendmail.cfの作成について を参考にしてください。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

PostfixとPop-before-smtpとの連携の設定

Postfix "/etc/postfix/pop-before-smtp.db" を参照し、その中に保持されている IPアドレス ホスト からのメールの中継許可を行うには、 "/etc/postfix/main.cf" に以下の設定を追記する必要があります。

smtpd_recipient_restrictions =
 permit_mynetworks,
 check_client_access hash:/etc/postfix/pop-before-smtp,
 reject_unauth_destination

この設定は本来一行に記述すべきものを、 ",(カンマ)" で区切ったものです。

従って、"/etc/postfix/main.cf"の記述ルールに従って、2行目以降の行の先頭には必ず スペース を入れなければならない点に注意してください。

以下にコピー&ペースト用の テキスト ファイルの掲載しますので、必要に応じて利用してください。

"smtpd_recipient_
restrictions"
ディレクティブの詳細についてはこちら smtpd_recipient_restrictionsディレクティブについて を参考にしてください。

実際の"/etc/postfix/main.cf"の編集方法については、 main.cfの設定について を参考にしてください。

編集が終わったら、Postfixの再起動 Postfixのコントロールについて を忘れないようにしてください。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このページの先頭へ↑

POP/IMAP befor SMTPの動作確認

POP/IMAP before SMTP を含めた メールサーバー の、理想的なメールリレー環境をまとめてみると、

A. 構築中のLinuxサーバー を含む "192.168.100.0/24" からの送信メールは、無条件で他の MTA への転送を受け付ける。

B. 構築中のLinuxサーバー 及び "192.168.100.0/24" 以外からの送信メールは、POP/IMAP before SMTPによって受信操作が成立した場合にのみ一定時間だけ他のMTAへの転送を受け付ける。

ということになります。

つまり、この状態でのPOP/IMAP before SMTPのテストは、B.の条件にある場所、例えば外出先から "xxxx@obenri.com"以外の メールアドレス宛てに、

1.送信しても拒否されることを確認する。

2.メールの受信作業を行う。

3.送信できることを確認する。

4.設定時間経過後に、再び送信しても拒否されることを確認する。

という手順で行えば良いことがわかります。

外出するのが億劫な方は、使用している MTA Sendmail の場合は "/etc/mail/access" の内容 /etc/mail/accessの設定 デフォルト

CentOS5 "/etc/mail/access" の記述には、先頭に "Connect:" が付いているはずです Sendmailの受信/転送に関する設定について 。もちろんそのままでOKです。
また "/etc/mail/access" を編集した後は必ず データベース 化処理 /etc/mail/access.dbの作成 を行ってください。
localhost.localdomain      RELAY
localhost            RELAY
127.0.0.1            RELAY

に、 Postfix の場合は "/etc/postfix/main.cf" "mynetworks" ディレクティブ mynetworksディレクティブの設定について を、

"/etc/postfix/main.cf" を修正した後は、必ずPostfixの再起動または設定の再読み込み Postfixのコントロール を行ってください。
mynetworks = 127.0.0.0/8

に変更してください。

すると、それぞれのMTAは ループバックアドレス から送信されるメールのみを他のMTAに転送するように設定が変更されます。

つまり動作としては、

A'. 構築中のLinuxサーバー 自身からの送信メールは、無条件で転送を受け付ける。

B'. 構築中のLinuxサーバー 以外からの送信メールは、POP/IMAP before SMTPによって受信操作が成立した場合にのみ一定時間だけ転送を受け付ける。

という状態になりますから、POP/IMAP before SMTPのテストは前に説明した1.〜4.を自宅の LAN 内の ホスト機 から行うことができます。

もちろんこの方法では間接的にしか動作確認はできていないように思えるかもしれませんが、POP/IMAP before SMTPが正常に動作することさえ確認できれば大丈夫です。

要はPOP/IMAP before SMTPの影響範囲がWAN空間かLAN空間かの違いに過ぎませんから、設定範囲を変更してもきちんと動作するのは間違いないからです。

動作確認のテストが終わったら忘れずに設定を元に戻しておきましょう。

関連セクションへ 関連セクション・ Sendmailの設定

関連セクションへ 関連セクション・ Postfixの設定

このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System