FreeBSDをメールサーバーに設定 最終更新日:平成14年10月20日
これを実施するにあたりネット上にある諸先輩方の記事を参考にさせていただきました。ありがとうございました。
あまりに多くのサイトを参考にさせていただいたため、参考としたサイトの紹介は割愛させていただきます。
参考書籍:「ADSLによるLinuxインターネットサーバー構築ガイド(宮原 徹)」技術評論社 戻る
[設定の背景]
これは前にネットや書籍から調べてほんの少し挑戦しましたが、とりまく設定項目が多く面倒くさそうだったので一時中断していたものです。
そして、自宅設置のメールサーバーは簡単に設置できるNeon Mail Server(Free)をWindows NT Server 4.0のサービスとして設置し順調に
稼動していました。
それなのに「なぜ、今FreeBSD上でメールサーバーを稼動させるのか?」・・・・というと。
1.Microsoft Windows系は外部からの攻撃にさらされやすい。
※メールサーバーの前にOSが攻撃されてはどうしようもない。
※頻繁にセキュリティ・パッチやupdateが要る。 (システム管理者の宿命といえばそれまでですが・・・)
※でもWebMailについては、UNIX版で「ヒツジのWebMail」の機能に匹敵(好みの問題もありますけど)するようなものを今は見出せないの
で、Windows NT Server 4.0は当面使っていきます。
2.Neon Mail Serverのセキュリティは、甘いような気がする。(すいませんtakaqが知らないだけかも?)
※設定としてあるのはAPOP対応と「Pop Before
Smtp」くらい?
※他にもフリーでセキュリティも強固なのがありますが・・・・
3.Microsoft Windowsをサーバーにして外部公開するのは、私のポリシーに反する?
※私的にはWindowsはGUI感覚で色んなことができるので嫌いではありません。
しかしながら、近年システムのファイル容量や占有メモリが過大になり、相当ハイスペックなマシンでないと満足に動かないという状況に
なってきております。
※古くなったPCを見ていると現役として復活させてあげたい衝動にかられるし、動いた時の満足感がたまらなくいい!
(一種病気のようなものですね。バカです、はい)
FreeBSDだと、そのような古いPCもそれなりに軽快に稼動します。
[実験・検証]
◎実験マシン
NEC PC-9801NS/A CPU:66MHz(i486[ODPで33MHz ->
66MHz]) MEM:14MByte
DISK:350Mbyte
FDD:3.5FDD × 1 CD-ROM:無し
OS:FreeBSD
4.5 RELEASE
※実はこのマシンはtakaqが前の会社にいた頃MS-DOS
-> Windows3.1->Windows95で4年間くらい使っていたものです。
ひじょうに愛着があります。
◎MTA (Message Transfer Agent)
有名どころで sendmail, Postfix, qmailなどがありますが、FreeBSDセットアップ時に選択したsendmail です。(/stand/sysinstall)
したがって、sendmailのインストール方法は省略します。
※設定の面倒くささ、特にsendmail.cfの難解さは既知のとおりですが、あえて挑戦しました。
※PC-9801NS/AにはCD-ROMドライブが無いので、FreeBSDインストールにあたっては、クライアントPC(Windows98)をFTPサーバーに
して、FTPによるセットアップを実施しました。
★ここでちょっとだけ学習
MTAとは・・・・・・
メールサーバーへのメールの送信や、メールサーバーの間でのメールの配送を受け持つのがSMTP(Simple Mail
Transfer Protocol)です。そのためメールサーバーのことを「SMTPサーバー」と呼ぶこともあります。また、メールク
ライアントでも送信サーバーとしてSMTPサーバーを設定する項目があります。
メールサーバー上でSMTPによるメールの送受信を受け持つのがMTA(Message Transfer Agent)です。
UNIXで使われているMTAにはさまざまなOSで標準的に使われているsendmailのほか、高速でセキュリテイの高
いqmail,sendmail互換を重視したpostfixなどがあります。
MTAに対して、メールクライアントのようなユーザーインターフェースを受け持つのがMUA(Message User Agent)です。
MUAには「Outlook Express」や「Eudora」、「Becky!」などがあります。
※takaqはMTAは送信だけを管理しているという誤解をしてました。
◎POPサーバー
これもFreeBSD 4.5 CD-ROMにあった popperを使用しました。
★ここでちょっとだけ学習
POPサーバーとは・・・・・・
MTAが担当するのはメールボックスへの配信までで、ユーザーはこのメールを受信しなければ読むことができません。
このメールを受信するプロトコルがPOP(Post Office Protocol)やIMAP(Internet Messge Access Protocol)です。
POPは非常に多くのメールクライアントで利用可能なメール受信プロトコルです。
現在ではPOP3(バージョン3)が利用されています。しかし、メールを必ずクライアント側にダウンロードしてくるため、別
々のクライアントから1つのメールボックスを共有することができません。この点を改良したのがIMAPです。
IMAPはメールボックスにメールを残したままメールを読むことができ、クライアントからサーバーへのメール送信もSMT
Pに代わって行います。送信したメールもメールボックスの中に送信済みメールとして残すことができます。
POPを使うかIMAPを使うかは、そのメリット、デメリットを考えて選択する必要があります。
POP メリット 多くのメールクライアントでサポートされている。
メールをダウンロードするのでサーバーに接続していなくても読むことができる。
デメリット ダウンロードしたメールは自分でバックアップしないといけない。
複数のクライアントでメールボックスを共有できない。
IMAP メリット サーバーにメールを残しておけるので、バックアップはサーバー側で行える。
複数のクライアントでメールボックスを共有できる。
デメリット メールクライアントによってはサポートされていない。
サーバーに接続しないとメールを読めない。
事前説明はこれくらいにして、ここから実験内容を順番に記載します。
●平成14年10月17日(木)
本当は、週途中でやると「ハマッた」時に区切りがつかず、時間のたつのも忘れ翌日に影響するので嫌なのですが・・・・翌日にしとけばよか
った!ハマッたのです!!
1.sendmailが機能しているかどうかを確認
LAN内のクライアントPCからtelnetでログインしてmailコマンド発行しました。
以下は自分で自分にメール送信し、取り出すものです。(各行の末尾は"Enter"キー押下します)
自分あてにメールを送る。
EOTの前の '.' は本文入力の終わりを意味します。
自分のメールを取り出す。
'd' はメールの削除です。
以上ができたら、他のユーザアカウントへも送信してみました。
※この時点ではtakaqのほかにrootしかなかったので、rootに向けて上記と同じことをしてみました。
結果良好でした。
ふと思い立ち、上記のあて先を"「ぷらら」に登録のマイアカウント"と"takaqの自宅メールサーバーに登録のアカウント"にして送信しまし
た。 そして、クライアントPCのメーラー(Outloook
Express:マルチユーザで登録)を起動したら「なんと」両方とも受信することができまし
た。つまり、インターネットを介して相手のメールサーバーに届いたわけです。
※ここまでの段階では、設定的には何もいじっておりません。
2.popperのインストールと確認
まずはLAN内でクライアントPCからメール交換ができるようにPOPサーバーであるpopperをインストールしました。
portsからコンパイルではなく、packagesにあるqpopper-2.53_4.tgzファイルを使うこととしました。
手順は次のとおりです。
クライアントPCのCD-ROMからエクスプローラにてFreeBSD上に設定したSamba共有フォルダに同ファイルをコピーしました。
(普通はFTPでバイナリ転送ですが、Samba共有は便利なので・・・)
次にクライアントPCからFreeBSDにtelnetにてログインしました。
そして、su -l によりスーパーユーザに移行しました。
カレントディレクトリを /usr/local にうつしました。
tar -xzvf qpopper-2.53_4.tgzによりファイルを解凍すると/usr/local/libexecにpopperが設定されているし、他のファイルも所定のディレ
クトリに解凍されました。
次にパスワードファイルを確認しました。(popperのユーザアカウントが要るため)
viエディタで直接開いてもよいのですが、調べた内容では
"vipw" を使うとのことでしたのでそのとおりにすると、「おお」なんと・・・直接
/etc/passwd ファイルを開いているではないか!
これは知らなかった。また一つ勉強になった。
さらに、popper のユーザアカウント記述がもう追加されているではないか、これはファイルの解凍で設定されたな・・・・と思いました。
もし、設定されていなければ次の行を追加しないといけません。
pop:*:68:6:Post Office Owner:/nonexistent:/sbin/nologin
"vipw" は何もせずにそのまま
quit しました。
ここまできたら、次はpopperのデーモンを起動します。
それには、/etc/inetd.conf に次の行を記述し inetd を再起動する必要があります。
pop3 stream tcp nowait root /usr/local/libexec/popper popper
viエディタで /etc/inetd.conf を開きました。
すでに上記の記述があり、行の先頭に '#'
でリマークされていたので、同リマークをはずして書き込み
quit しました。
その後、次を実行しました。
9801nsa# ps aux | grep inetd ※inetdのプロセスIDを取得します。
9801nsa# kill -HUP ppid ※ppidは取得したプロセスIDです。
9801nsa# ps aux | grep inetd
※これで、新しいプロセスIDのinetdが確認されるはずでしたが、少し待っても変わりません、そこで究極の
kill -9 ppid を実行した
らinetdのプロセスは消えましたが、inetdが再起動してきません。(単にサーバーが遅いせい?)
やむなくサーバーをリブートしました。(shutdown -r now)
3.クライアントPCのメーラーによる確認
(1)クライアントPCのメーラーによるメールの取り出し確認
・クライアントPCのメーラーは送信と受信が別々に指定できるものを使いました。
・設定は次のとおりです。
送信メールサーバー : 192.168.2.3
受信メールサーバー : 192.168.2.3 形式 : POP3
アカウント名 : [email protected]
ユーザID : takaq
パスワード : ******
表示 : sjis
サーバーにメツセージを : 残さない
・クライアントPCのメーラーより「受信」を実行するに「メールはありません」とのメッセ−ジを確認、popper が正常に機能した旨を確認しまし
た。
・クライアントPCからtelnetにてサーバーにログイン、su
-l でスーパーユーザに移行し、mailコマンドにて
takaq にメール送信しました。
・クライアントPCのメーラーより「受信」を実行するに、前記で送信したメールを無事受信しました。
※これで、メールサーバーからクライアントPCへの受信はOKです。
(2)クライアントPCのメーラーからメールサーバーへの送信確認
先にサーバーにログインしてのメール送信(ローカル、インターネット)の正常性は確認済なので、今度はクライアントPCからのメール送
信テストです。
・クライアントPCにてメーラーを起動し、サーバー内の
root に対してメール送信したところ「エラー メッセージを送信できませんでした。
設定が違っている可能性があります」というメッセージを確認した。(「え〜そんなバカなぁ〜」)
・設定を確認後、再度同じことを実行してもやっぱり「エラー」です。
・書籍、ネットで調べたところ「LAN内のクライアントからの送信・配送管理」をしているデ−タベースファイル (/etc/mail/access.db)があり
そこで許可するクライアントのipアドレス設定があるとのこと。
・早速クライアントPCよりtelnetにてサーバーにログイン、スーパーユーザーで/etc/mailを見たらaccess.db はなく、access.sample という
テキストファイルがありました。
内容を確認してaccess.sampleをaccessにコピー(cp access.sample access)、accessを次のように修正し書き込んで quit した。
# $FreeBSD: src/etc/mail/access.sample,v 1.1.2.2 2000/11/03 07:23:50 dirk Exp $
#
# Mail relay access control list. Default is to reject mail unless the
# destination is local, or listed in /etc/mail/local-host-names
#
cyberspammer.com 550 We don't accept mail from spammers
FREE.STEALTH.MAILER@ 550 We don't accept mail from spammers
another.source.of.spam REJECT
okay.cyberspammer.com OK
192.168 RELAY # この行です
・access.db を作成するために make を実行した。(make access.dbでよかったみたい)
・メッセージを確認したら・・・・・・
access.db, 9801nsa.takaq.jp.cf を作成したみたいなメッセージがあったので
ll コマンドで
確認したら・・・・
drwxr-xr-x 2 root wheel - 512 10/17 23:41 ./
drwxr-xr-x 15 root wheel - 2048 10/18 22:54 ../
-rw-r--r-- 1 root wheel - 46592 10/17 22:49 9801nsa.takaq.jp.cf
-rw-r--r-- 1 root wheel - 4267 10/17 22:48 9801nsa.takaq.jp.mc
-rw-r--r-- 1 root wheel - 4599 1/28 2002 Makefile
-rw-r--r-- 1 root wheel - 840 1/28 2002 README
-rw-r--r-- 1 root wheel - 412 10/17 22:48 access
-rw-r--r-- 1 root wheel - 32768 10/17 22:49 access.db
-rw-r--r-- 1 root wheel - 411 1/28 2002 access.sample
-rw-r--r-- 1 root wheel - 1454 1/28 2002 aliases
-rw-r--r-- 1 root wheel - 32768 5/19 05:58 aliases.db
-rw-r--r-- 1 root wheel - 46636 1/28 2002 freebsd.cf
-rw-r--r-- 1 root wheel - 4267 1/28 2002 freebsd.mc
-r--r--r-- 1 root wheel - 5573 1/28 2002 helpfile
-rw-r--r-- 1 root wheel - 316 1/28 2002 mailer.conf
-rw-r--r-- 1 root wheel - 245 1/28 2002 mailertable.sample
-rw-r--r-- 1 root wheel - 46592 5/19 2002 sendmail.cf
-rw-r--r-- 1 root wheel - 573 1/28 2002 virtusertable.sample
access.db は存在を確認
sendmailのcfとmcに関するファイルは次のようにあった!
9801nsa.takaq.jp.mc
9801nsa.takaq.jp.cf ※ここまでは、先のmakeで作成されたようだ!
freebsd.mc
freebsd.cf
sendmail.cf ※これらのファイルはFreeBSDをインストールした時に作成されたもののようだ。
・この後、クライアントPCのメーラーからサーバー内の
root にメールを送信したところ「送信されました」とのメッセージ!
見た目はOKのようだ。
・クライアントPCからtelnetでサーバーにログイン、スーパーユーザーになったところ
"You have new mail" とのメッセージ表示、mailにて
取り出すに「やりました、OK」です。
・ついでに、「ぷらら」のマイアカウントにメーラーからメールを送信し、「ぷらら」マイアカウントからメーラー(こっちはOutlook
Express)で取り
出すに正常に取り出しOKでした。
※ここまでは、内部のアカントから内部アカウントおよびインターネットにあるアカウントへのメール送信に関する確認です。
(3)インターネット(外部)からのメール受信
※このテストに先立ち、ルーターの「静的NAT」情報に登録の25番ポートのホストを192.168.2.3になるように(一時的に)設定を変更しまし
た。
・クライアントPCのメーラー(Outlook
Express)から「ぷらら」マイアカウント指定で、自宅メールサーバーのアカウント([email protected])
にメールを送信しました。
送信時点のメーラーの動作は正常に送られたように見えました。
・クライアントPCのメーラーで自宅メールサーバーのアカウントで取り出したところ「メールはありません」とのこと・・・・・あれ〜
・クライアントPCのメーラー(Outlook
Express)から「ぷらら」マイアカウントに対し「送受信」を実行したところ「ぷらら」のメールサーバーから
「メールを届けられなかった、相手が見つからない」みたいなリターンメールがありました。
※なぜでしょう、まだ何かあるのかなぁ〜!
この時点で夜中の12時まわるところでした。ここでやめとけばいいのに、ついのめりこんでしまったのです。
・またまた調べました、色々調べているうちにあとはsendmail.cfの内容しかない、ついにきたか〜という感じです。
調べた内容はこの際ですので別に記録しておきます。
設定項目は色々ありますが、調べた範囲ではほとんどがディフォルトでよいようです。
その中で/etc/mail/local-host-names(メールサーバーのホスト名を記述:sendmailfはこれを読んで処理する)に関しての記事があり
早速viエディタにて/etc/mail/local-host-namesを以下のように作成し新規書き込みしました。
takaq1.plala.jp
・再度クライアントPCのメーラー(Outlook
Express)から「ぷらら」マイアカウント指定で、自宅メールサーバーのアカウントにメールを送信しま
したがやっぱりだめです。
・特に理由もないままsendmail.cfを最新のものにしてみようと思い以下を実施しました。
takaq@9801nsa$ cp sendmail.cf sendmail.cf.bak # 念のためコピー保存
takaq@9801nsa$ cp 9801nsa.takaq.jp.cf sendmail.cf # 最新をコピー
・再々度クライアントPCのメーラー(Outlook
Express)から「ぷらら」マイアカウント指定で、自宅メールサーバーのアカウントにメールを送信
しましたがやっぱりだめです。
※もう時間も時間なのでこの日はここまでにしてルーターの「静的NAT」情報に登録の25番ポートのホストを元に戻し、PC-9801NS/Aを
shutdownして寝ました。
(賢明な皆さんはもうお気づきですね!そうです、sendmailをリスタートすればよかったのです)
●平成14年10月18日(金)
この日は会社でもこれといった仕事がなかったので、ネットでsendmail.cfの資料を探しまくりました。
でも、前日の「外部からのメール受信」に関する問題に思い当たるような設定項目は見出せませんでした。
とりあえずこれといった情報を保存し持ちかえりました。
夜は、最初に持ちかえったsenmail.cfの設定に関する資料と自宅メールサーバーに設置のmcを見比べました。
いくら見比べても問題点の個所と思われるところはありません。
そこで・・・・・・・・・もう一度外部からのメール受信を試みました。
※ルーターの「静的NAT」情報に登録の25番ポートのホストを192.168.2.3になるように設定を変更しました。
・クライアントPCのメーラー(Outlook
Express)から「ぷらら」マイアカウント指定で、自宅メールサーバーのアカウント([email protected])
にメールを送信しました。
少し待ってクライアントPCのメーラー(Outlook
Express)から「ぷらら」マイアカウントに対し「送受信」を実行したところ「ぷらら」のメールサーバ
ーから「エラー」は帰ってきません。
「これは、ひょっとして!」と思い試験的に設定したメーラーで自宅メールサーバーのアカウント([email protected])から受信を実行したら。
「きました、見事にインターネットからのメールを受信し、クライアントで取り出すことに成功しました。やったぁ〜」
思うに、前日に実施した/etc/mail/local-host-namesへの設定が効いたのだと思いました。
・クライアントPCのメーラー(Outlook
Express)に設定の自宅メールサーバーのアカウント([email protected])設定項目のうち「送信メールサ
−バー」と「受信メールサーバー」のアドレスを192.168.2.3に設定し、再度(何回目?)LAN内部、インターネットとのメール送受信試験を実施
しOKを確認しました。
・次はNeon Mailに設定してあるアカウントをFreeBSDのメールサーバーに設定するため、メールサーバーにtelnetでログインしユーザアカウント
を登録しました。
・最初に妻が使っているクライアントPCのメーラーを設定し、LAN内部とインターネットとの送受信試験を実施しOKを確認しました。
・次は会社で使っている自宅サーバーアカウント([email protected])を「ヒツジのWebMail」経由で試験することです。
まず、「ヒツジのWebMail」経由でインターネット(「ぷらら」マイアカウント)へのメール送信を実施しました。
見た目正常に処理されました。
クライアントPCのメーラー(Outlook
Express)で「ぷらら」マイアカウントに「送受信」を実行するにOKを確認しました。
・今度は「ぷらら」マイアカウントから会社で使っている自宅サーバーアカウント([email protected])にメールを送信し「ヒツジのWebMail」経
由で取りだしました。(もちろんその前に「ヒツジのWebMail」の「送信及び受信メールサーバー」のアドレスは変更済みです)
そしたら、なんと「新着メッセージはありません」とのメッセージ!!!またまた「うっそ〜なんで〜」です!
「ヒツジのWebMail」は見た目正常に機能しているように見えます。(エラーメッセージがないのです)
※この時「ヒツジのWebMail」にある「サーバー設定項目」のうちPOPサーバーの設定で「POPサーバー(APOP対応)」が妙に気になりまし
た。
★ここでちょっとだけ学習
APOP(RFC1939)を使用することで得られるメリットは、パスワードを送信する際に平文でパスワードが流れてしまうことを避けることができることと、通常のアカウントのパスワードと別のパスワードで行うことができるようになっている点です。
・以下によりAPOPの対応を実施しました。
# まず、利用者がない、初めての段階では DBファイルを初期化することから始めることになります。
9801nsa # popauth -init
# バージョンによっては
popauth: unable to create POP authorization DB: No such file or directory
# というエラーが出てくるかも知れませんが、(出てきました)
9801nsa # mkdir /usr/local/etc/popper
# としてディレクトリを作っておくと解決するはずです。(解決しました)
9801nsa # popauth -init # 再度実行でOKです!
# 利用者を追加する場合の方法は、以下の通りになります。
9801nsa # popauth -user takaq1 # takaq1は利用者のアカウントです。
New password:********
Retype new password:********
# これだけの作業です。
# この設定をした以降、この利用者は pop3 での通常の接続ではエラーとして表示がされるようになります。サーバ側としては
# /var/log/messages にエラーは表示されるようになります。(「ヒツジのWebMailはAPOP完全対応のようです)
# telnet や ftp のパスワードまでこれになるということではありませんので、誤解の無いように伝えるようにします。
ちなみにAPOPの解除は popauth -delete user です。(userは解除するユーザ名)
・以上を実施ののち「ヒツジのWebMail」経由で会社で使っている自宅サーバーアカウント([email protected])のメールを取り出したところ
OKを確認しました。
FreeBSDにメールサーバーを設定する前に送信した「現在の会社の上司に出したメールのレス」までも正常に取り出すことができました。
めでたしめでたしです。
なお、takaqはOutlook ExpressはAPOPに対応していないことも改めて認識しました。
ふうーーーーーーーーーーーーー!
※最後に、Windows NT Server4.0に設定してあるNeon
Mailはサービスを停止し「手動」起動としました。
FreeBSDのメールサーバーバックアップ機です。