FreeBSD 7.1へようこそ

第2回 FreeBSDで安心・快適通信【I】ホームサーバでエコメール

この記事を読むのに必要な時間:およそ 6 分

いまこそFreeBSDでホームサーバ~プロバイダのメールを読むにはどうするか

このように便利な「ローカルにメールダウンロード」メソッドだが,お気付きのようにログインできるサーバでなければ使えないことが欠点である。大学のサーバならともかく,一般のプロバイダのサーバにはログインできないのが普通なので,さて困ったということになる。こんなときこそFreeBSDで,常時接続の我が家に24時間稼働のFreeBSDサーバを置いて,そこに定期的にプロバイダのメールをダウンロードすればよい

筆者もかれこれ8年ほど,わが家でFAXサーバ兼WebサーバのFreeBSDマシンを動かしている。先週の記事で7.1-RELEASEにアップデートしたマシンのことだが,このマシンにプロバイダのメールをダウンロードすることにした。使うソフトウェアは「fetchmail」「maildrop」である。

[手順1]外部のネットワークからsshログインできる環境を作る

24時間動いているFreeBSDサーバがすでに家にあることが前提なので,初心者には若干ハードルが高いかもしれない。といっても作業自体は簡単で,FreeBSDをインストールしたマシンに適当にIPアドレスを振って(たとえば192.168.1.1⁠⁠,/etc/rc.confに,

sshd_enable="YES"

と書いて再起動すれば,我が家のローカルネットワークに接続した他のマシンから,Secure SHellで外部からログインできるようになる。

> ssh 192.168.1.1 

などと入力して,ログインできるようになればまずは正解。

次に,ネットワークの外部から特定のポート(SSHのデフォルトだと22番)に接続したときに,⁠192.168.1.1」に接続するようにルータの設定をする。最近のブロードバンド回線では,専用のルータが使われることがほとんどなので,ルータの取扱説明書のとおりに設定する。

筆者の家ではさらに,Dynamic DNSサービスに加入しており,特定のホスト名で外部からSSH接続できるようにしてある。

[手順2]fetchmailとmaildropのインストール

定期的にサーバからメールを取ってくる(fetchする)ソフトで有名なものは,⁠fetchmail」というものがある。fetchmailだけだと外部のサーバからメールを取得した後,システムのメール転送ソフトに転送してしまうので,ローカルにメールを落とすために何か他のソフトウェアと組合せて使う。

/etc/rc.confに

sendmail_enable="YES"

と記入してsendmailを起動してもよいし,sendmailは何となく恐くてイヤダ(?)という読者にはメール保存専用のソフトをインストールすればよい。今回は「maildrop」というソフトウェアを使ってみる。それぞれ7.1-RELEASEに附属のバージョンはfetchmail-6.3.8_7とmaildrop-2.0.4だが,今回もまた,rootになってportsからインストールしてみよう。

# cd /usr/ports/mail/maildrop
# make install clean
# cd /usr/ports/mail/fetchmail
# make install clean

これだけで終了である。特別なファイルも必要ない。

[手順3]~/.fetchmailrcの整備

我が家のFreeBSDマシンのユーザ「mita」がメールを定期的に取ってくるという設定を書いてみよう。マシンにユーザ名「mita」でログインして,~/.fetchmailrcファイルを作る。~/.fetchmailrcにはパスワードが「生で」入るので(何と危険な!)他人が読めないように制限をかける。

> touch ~/.fetchmailrc
> ls -l .fetchmailrc
-rw-r--r--  1 mita  mita  0  3  4 07:57 .fetchmailrc
> chmod 600 ~/.fetchmailrc 
> ls -l .fetchmailrc
-rw-------  1 mita  mita  0  3  4 07:57 .fetchmailrc
> vi .fetchmailrc

.fetchmailrcの中身はリスト1のとおり。

リスト1 ~/.fetchmailrc

set postmaster mita
set nobouncemail
defaults
protocol APOP
flush
poll 〈プロバイダのサーバ名〉 user 〈プロバイダのユーザ名〉 password 〈パスワード〉 is mita here
mda "/usr/local/bin/maildrop -d mita"

「flush」という1行を入れることで,⁠メールをダウンロードしたらサーバ上のメールを消す」という設定になる。うまくいくまでは「flush」のかわりに「keep」として保持しておいた方がよいだろう。

最も大切なのは「poll」の1行で,〈サーバ〉の〈ユーザ〉で〈パスワード〉の者はここではmitaです,といった設定を必要に応じて変更する。fetchmailで取ってきたメールは「mda」で指定されたエージェントの手によって/var/mail/mitaに落とされる。/var/mail/mitaファイルが無い場合は,これまた先ほど紹介した手順で作っておくとよいだろう。

設定に間違いが無いことを確認して,おもむろに「fetchmailと入力すると,メール取得が始まる。

> fetchmail
1 通のメッセージが アカウント (ユーザ名) , サーバ (名前) 宛に届いています (1018 バイト)
(ユーザ名)@(サーバ) 宛に届いた 1 番目のメッセージ(全部で 1 通)を読み込んでいます (1018 バイト) サーバからメッセージを削除しませんでした。
>

「ls -l」で本当にメールが入ったか確認しよう。

> ll /var/mail/mita 
-rw-------  1 mita  mita  1018  3 4 10:00 /var/mail/mita

うまくいったら,~/.fetchmailrcに「set daemon 600」という指定を追加して,fetchmailをデーモンモード動かすことにしよう。600秒(=10分)おきに起き出して,メールを取りにくるという寸法だ。同時に,⁠keep」「flush」に戻すとよいだろう。

リスト2  ~/.fetchmailrcに追加

set daemon 600

間違いがないことを確認して,

> fetchmail

とすれば,設定した秒数ごとにfetchmailがメールを取りこんで蓄えてくれる。あとは前節の方法を使って適当なタイミングでダウンロードすればよいというわけだ。簡単。

おわりに

同じことをWindowsマシンでやろうとすると,メールサーバを作ったりするのは簡単ではないことに気づく。海外出張のたびにFreeBSD(Macintoshでも可)を使っいてよかったと悦にひたっている筆者である※4⁠。

※4)
海外でメールを読めるようになるというのは逆に自分の首をしめてないかというツッコミはこの際気にしない。

本稿で紹介したメソッドは,通信業者には申し訳ないが(刺されるかも?⁠⁠,日本にいるときでも,ディジタル携帯電話など「時間制の接続サービス」を使うときにはとても便利な手法である。通信のバンド幅を最大限有効利用するこの「エコ接続メソッド⁠⁠,さっそく試してみてはいかがだろうか。

著者プロフィール

三田吉郎(みたよしお)

東京大学 大学院工学系研究科 電気系工学専攻准教授。講義「電気磁気学」「わかる電子回路」やマイクロマシン研究の傍ら,FreeBSDの普及,開発に尽力する。FreeBSD ports committer。国際派を自任し,2007~8年9月までフランス国立情報学研究所(INRIA)招聘教授。共著書に「FreeBSD徹底入門」(翔泳社),「FreeBSD Expert」など。