.forward

読み:ドットフォワード
外語:.forward 英語
品詞:名詞

MTAとしてsendmailを使っている時のローカル配送ルールの設定ファイルの一つ。

目次

用途

対象ユーザーのホームディレクトリ上にこのファイルがある時に、その内容に従い適宜処理を行なう。

転送、コピー配送、任意のコマンドを起動してパイプで渡す、といった用途に使用される。ユーザーが自分で設定可能である。なお、管理者が設定する場合は普通、/etc/mail/aliasesを用いる。

簡単な用法

viなどでホームディレクトリに.forwardを作り、転送したいメールアドレスを書くだけである。もちろん、echoをファイルにリダイレクトしても、用意したファイルをftp等でアップロードしても良い。

複数の宛先に転送したい場合は、改行して複数のメールアドレスを記述する。ftp等でアップロードする場合は改行コードに注意すること。

なお、メール転送が行なわれた場合、元のメールボックスにメールは残らない。

転送

メールを受信したアドレスをwdic@example.comとする。

もしwdic@example.comに届いたメールをすべてwdic@example.orgに転送したいなら、ホームディレクトリの.forwardに以下のように記述する。

wdic@example.org

複数のアドレスに転送することも可能。

wdic@example.org

wdic@example.net

wdic@example.jp

さらに多くのアドレスに転送したい場合、

":include:/home/wdic/myaddresses"

と記述しておけば、/home/wdic/myaddresses に書かれたすべてのアドレスに転送される。

コピー配送

転送の場合、このメールアドレスのメールボックスにはメールが残らない。

もしメールボックスにメールを残しつつ転送したいなら、"\"に続けて自分のメールアドレスを記述する。

\wdic@example.com

wdic@example.org

この例では、届いたメールをメールボックスに残しつつ、wdic@example.orgにも転送する。

パイプで渡し

例えば、メールのfrom:やsubject:ごとに異なる処理をする(例えば、Aさんからのメールは転送、Bさんからのメールはそのままごみ箱へ)ためには、パイプラインを利用することもできる。

"| /home/wdic/bin/mail.sh || exit 75"

上のように記述すると、メールが届くと/home/wdic/bin/mail.sh を起動し、メール全体(ヘッダも含めて)がこのプログラムの標準入力に渡される。

"|| exit 75" は一時的なエラー(もう一度行なったらエラーにならない可能性がある)の意味で、こうしておくと、このプログラムの起動でエラーが発生したらsendmailは再配送のキューにこのメッセージを格納する。

なお、この目的では自分でプログラムを書かず、procmailというコマンドを使うことが多い。

メールのループ

例えば、以下のような設定をしたとする。

wdic@example.orgの.forward
wdic@example.com
wdic@example.comの.forward
wdic@example.org

こうすると、wdic@example.orgにメールが届くとexample.orgはこのメールをwdic@example.comに転送し、example.comは転送されてきたメールをwdic@example.orgに転送し、example.orgはその転送されてきたメールを再びwdic@example.comに転送し…と無限ループになるので、このような設定は避けなければならない。

2台だと分かり易いが、マシンがより多くなるとついうっかりこのような設定をしてしまうこともあり得る。

セキュリティ

.forwardを使ってプログラムを起動するとき、現在のsendmailでは、適切に設定されていればその実行uidは.forwardの持ち主のものとなる。よって、プログラムの内容によっては、自分の重要なファイルを消してしまったり、他人に公開してしまったりする恐れがある。

(もう存在しないと信じたいが)古いsendmailを使っていたり、サーバーの設定が不適切だったりすると、その実行uidが0、つまりroot権限で実行する。よって、例えば先のmail.sh にこのように記述すると、セキュリティ上の問題がある。

#!/bin/sh

/bin/rm -rf /

昔話

かつてメールアドレスが自由に得られず、shellが自由に使え、MTAといえばsendmailしか見なかった時代には、.forwardを駆使して自分のメールアドレスを使ってメーリングリストを立ち上げた人もいたらしい。

つまり、.forwardに

/wdic@example.org

"| /home/wdic/bin/mlserver.pl || exit 75"

などとしておき、mlserver.pl内でメールに特定のキーワードがあればML宛と見做してメンバーに配送、そうでなければ個人宛とみなし配送しない、という処理を行なう。

もちろん、現在はこのようなことをしなくともMLは簡単に作れるし、ループの可能性もあるのでやるべきではない。

関連する用語
sendmail
/etc/mail/aliases

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club