fetchmail



私の学科のメールサーバーは外部からのpop要求を受け付けないようになっている. セキュリティ上,仕方がないのであるが, 休日などに家から自分宛のメールを読むことができず,少々不便である. 私宛のメールだけを外部からpop可能なメールサーバーに転送してもらうように管理者に頼んでもいいのだが, せっかく,Linuxで運用しているfukunm12があるのだから, これを利用しない手はない. つまり,
  1. fetchmailを使ってメールサーバーからメールをfukunm12にダウンロードする.
  2. popサーバーをfukunm12で動かしておき,外部からのpop要求に応えられるようにする.

fetchmailの設定
procmailの設定
メールのダウンロードと配送のテスト
crontab
qpopperのインストール


fetchmailの設定

fetchmailの最新バージョンは5.5.6であり,ここから ダウンロードできる. RedHat 6.2Jに同梱されているfetchmailは5.3.1である. 今回はこちらを使ったが,特に問題はなかった. fetchmailは,インストール時に「Mail/WWW/News Tools」グループを選択するとインストールされる(らしい).

まずpop要求専用の"pop"というアカウントを作成しておく. popでログインし,ホームディレクトリに次のような内容のファイルを作成する.

server mailserver
proto pop3
user akasaka
pass *******
keep
mda /usr/bin/procmail
serverはメールサーバーのホスト名またはIPアドレスである. protoはpop3で問題ないだろう. userpassにはメールサーバーにログインするときのアカウントとパスワードを書く. keepダウンロードしたメールをサーバーから削除しない意味になる. 削除する場合はflushとする. mdaはダウンロードしたメールを配送するメール配送エージェントを指定する. 今回は以下で説明するprocmailを使った.

このファイルを.fetchmailrcとして保存する(必ずpopのホームディレクトリに保存すること). .fetchmailrcには,このような設定を複数書くことができる. すなわち,複数のメールサーバーのメールを一度にダウンロードすることができるのである.

パスワードが直接書かれているので,他の人から見られないようにパーミッションを変更しておく.

% chmod g-r .fetchmailrc
% chmod o-r .fetchmailrc
% ls -a -l .fetchmailrc
-rw-------    1 pop      pop           101 Nov 16 16:01 .fetchmailrc


procmailの設定

procmailも「Mail/WWW/News Tools」グループを選択するとインストールされる(らしい). RedHat 6.2Jに同梱されているバージョンは3.14である. .fetchmailrcのときと同じく,popのホームディレクトリに次のような内容の.procmailrcを作成する.

:0
* ^To:.*akasaka
! akasaka

:0
* ^To:.*pop
! pop

:0
! akasaka
なにやら呪文のようであるが,:0から次の:0の前までが一つの項目を表している. 最初の
:0
* ^To:.*akasaka
! akasaka
は「メールヘッダのToに"akasaka"という文字が含まれていたらakasakaというローカルアカウントに配送せよ」 という意味になる. したがって,次は「同じく"pop"という文字が含まれていたらpopに配送せよ」という意味である. 最後の
:0
! akasaka
は,「上記のいずれにも該当しない場合はakasakaに配送せよ」という意味になる. わざわざpopアカウント用の設定を加えているのは,fetchmailを定期的に実行するcrontabが, ジョブを実行する毎にpopに送ってくるメッセージを除外するためである.


メールのダウンロードと配送のテスト

ここまで設定したら,fetchmailを実行してメールが正しく配送されるかを確かめる. popでログインしたままで/usr/bin/fetchmailを実行し,次のように表示されればOKである.

% /usr/bin/fetchmail
9 messages (8 seen) for akasaka at quantum.nucl.kyushu-u.ac.jp (24194 octets).
skipping message 1 not flushed
skipping message 2 not flushed
skipping message 3 not flushed
skipping message 4 not flushed
skipping message 5 not flushed
skipping message 6 not flushed
skipping message 7 not flushed
skipping message 8 not flushed
reading message 9 of 9 (3604 octets) ... not flushed
この場合は,メールサーバーに9通のメールがあり,うち1通が未読である. 既読の8通はダウンロード済みであり,未読の1通をダウンロードしたが,サーバーにメールを残したままである. ダウンロードしたメールは/var/spool/mailにアカウント名と同じファイル名でスプールされる.
% pwd
/var/spool/mail
% ls -l akasaka
-rw-rw----    1 akasaka  mail        16754 Nov 17 09:44 akasaka
fetchmailの起動オプションについては,ここに 詳しい説明がある. fetchmailにしてもprocmailにしても,実行したアカウントのホームディレクトリにある .fetchmailrcおよび.procmailrcを参照する. 今回の場合はpopアカウントで実行するから,これらの設定ファイルが popのホームディレクトリになければならないのである.


crontab

定期的にfetchmailを実行するためには,自動実行デーモンcrondを用いる. crondがデーモンとして動いているかを確かめるには,

% ps aux | grep crond
root       450  0.0  0.5  1328  568 ?        S    Nov10   0:00 crond
pop      24451  0.0  0.5  1668  524 pts/0    S    11:50   0:00 grep crond
のようにすればよい. 動いていない場合は,ntsysvでcrondにチェックを入れ,Linuxを再起動する.

crontabはcronにジョブを設定したり,すでに設定されているジョブの内容を編集するための コマンドである. popアカウントでログインし,次のような内容のpopcron.txtというファイルを作成する(ファイル名は何でもよい).

0,20,40 * * * * /usr/bin/fetchmail
これは「毎時0分,20分,40分に/usr/bin/fetchmailを実行せよ」という意味になる. 書式は
min hour day month week command
となり,各項目に「*」を指定すると「毎*」の意味になる. weekは0が日曜日である. 次のように入力すれば,popcron.txtの内容がcrondに登録される.
% cat popcron | crontab -
登録されたことを確認するには,crontabに-l(小文字のL)オプションを付けて実行する.
% crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (- installed on Fri Nov 17 10:09:37 2000)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
0,20,40 * * * * /usr/bin/fetchmail
/var/log/cronにログが残されている. このファイルはroot以外見ることはできない. 以下はtailコマンドでファイルの末尾を見た例である.
% su
Password:
% tail cron
pop (11/17-11:20:00-24208) CMD (/usr/bin/fetchmail)
root (11/17-11:30:00-24313) CMD (   /sbin/rmmod -as)
root (11/17-11:40:00-24316) CMD (   /sbin/rmmod -as)
pop (11/17-11:40:01-24317) CMD (/usr/bin/fetchmail)
root (11/17-11:50:00-24448) CMD (   /sbin/rmmod -as)
pop (11/17-11:54:54-24455) LIST (pop)
root (11/17-12:00:00-24495) CMD (   /sbin/rmmod -as)
pop (11/17-12:00:00-24496) CMD (/usr/bin/fetchmail)
root (11/17-12:01:00-24599) CMD (run-parts /etc/cron.hourly)
root (11/17-12:10:01-24612) CMD (   /sbin/rmmod -as)
20分おきにfetchmailが実行されていることが確認できる.


qpopperのインストール

以上でメールのダウンロードおよび配送の設定が終了した. 次はクライアントからのpop要求に応えられるようにpopサーバーをインストールする.

qpopperは,WindowsやMacのメールクライアントであるEudoraで有名な QUALCOMM Incorporatedがリリースしているpop3サーバーである. ダウンロードサイトのリストはここにある. 最新バージョンは3.1のようであるが,安定バージョンである3.0.2をダウンロードした.

qpopperは暗号による認証(APOP認証)ができるようであるが,今回は使用しなかった. まず,アーカイブを適当なディレクトリで解凍する.

% tar xvzf qpopper3.0.2.tar.gz
qpopper3.0.2というディレクトリができるので,そちらに移動しmakeする.
% cd qpopper3.0.2
% ./configure --enable-specialauth  (シャドウパスワードのサポート)
% make
--enable-specialauthオプションを忘れないようにする. これを忘れるとAPOP(Authenticated Post Office Protocol)による認証が必要となるため, APOPに対応していないクライアントからはユーザー認証ができない. makeが無事終了すると,popperというディレクトリができており,その中にpopperという 実行ファイルができている. これを/usr/sbin/popperにコピーする.
% cp popper /usr/sbin

次に,inetd.confを次のように書き換える.

書き換え前  pop3 stream tcp nowait root /usr/sbin/tcpd in.pop3d
書き換え後  pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s
inetd.confを書き換えたので,inetdを再起動して変更を反映させる.
% ps ax | grep inetd
458 ? S    0:00 inetd
% kill -HUP 458

次にどのクライアントからのpop要求も受け付けるように,/etc/hosts.allowに以下の行を追加する.

popper: ALL

念のため,tcpdchk(/usr/sbin/tcpdchk)を実行してhosts.denyとhosts.allowの妥当性を確かめる. もし,popperのパスが間違っていたりするとエラーメッセージが表示される.

qpopperが正常に動いているかのテストは,クライアントから

% telnet servername 110
として,
+OK QPOP (version 3.0.2) at fukunm12.****.****.kyushu-u.ac.jp starting.
が返ってくればOK. クライアントのメーラーでpopサーバーにfukunm12を指定すれば,メールを読むことができる.


お問い合わせはメールにて: akasaka@klc.ac.jp

戻る
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送