いますぐ実践! Linuxシステム管理

いますぐ実践! Linux システム管理 / Vol.214 / 読者数:2025名

こんばんは、うすだです。

申し訳ございません、1週間すっぽかしてしまいました。

先週は、とある原稿を猛烈に書いておりまして、思った以上に項目が大量にあり、 朝までかかってしまい、着手すらできませんでした。

その原稿とやらは、本来なら昨年末までに仕上げる予定だったのですが、 いろいろ(いろいろ?)重なってしまい、間延びしてしまったのでした。

ま、すべては、無計画に過ごしてきたおのれの責任です。

ただ、会社でも、いろいろ(いろいろ?)ご指摘を受けて、 振り返る必要に迫られているのですが、未だに考えられていないということは、 自分でも苦手な領域なんだろうな、ということは薄々気づいています。

そろそろ逃げずに立ち向かわねばと思いつつも、当メルマガは1週間遅れで発行しないと、 なんて思ってやっぱり逃げている自分に再度気づいて、 いつもの自己嫌悪に陥りそうな状況です。

とりあえず書いてから考えるってことで、今回もはりきってまいります。
(…って、解決していないぞ…。)

今回のお題 - procmail をもう少し使いこなしてみる

前回、procmail というものがどういうもので、どう使うものなのかを、 ざっくりとご紹介しました。

Vol.213 - procmail でメールを振り分ける
http://www.usupi.org/sysad/213.html

今回はその続きで、procmail について、もうちょっと踏み込んでみたいと思います。

前回の補足を少しだけ

まず、設定ファイルですが、「$HOME/.procmailrc」の設定ファイルだけでなく、 すべての人に共通の「/etc/procmailrc」も解釈されます。

また、アクションですが、「ディレクトリ名/」のように、最後に「/」をつけると、 Maildir形式で記録します。
ですので、Maildir形式で運用されているところは、 /etc/procmailrc を以下のようにしておくとよいのではないかと思います。
(環境変数DEFAULTについては、後述します。)

DEFAULT=$HOME/Maildir/

環境変数で動作が変わります

procmail は、 「$HOME/.procmailrc」という設定ファイルにレシピという設定をずらずらと書いていきます。

ですが、レシピだけでなく、環境変数を書くことができます。
それらは、procmail の処理内容の各所に影響を及ぼします。
代表的なものを、以下に示します。

環境変数概要
PATH 言わずもがなのコマンドの検索パスです。 標準でないところにあるコマンドを、コマンド名だけで使用したい場合は、 そのパスを追加して指定します。
MAILDIR procmailが実行されるディレクトリです。 相対パスで指定をするときの起点になります。デフォルトは「$HOME」です。
DEFAULT どのレシピにも引っかからなかったときの配送先です。 デフォルトは「/var/mail/$LOGNAME」です。
ORGMAIL 何か問題が発生して配送できなかったときの配送先です。 これもダメだったときは、送信元に送り返されます。 デフォルトは「/var/mail/$LOGNAME」です。
LOGFILE procmailが処理した結果やエラーなどのログを出力する先のファイルです。
VERBOSE 冗長なメッセージが必要なとき、「on」と指定します。
UMASK 生成するファイルのパーミッションを決めます。デフォルトは「077」です。

procmail は、MAILDIRで指定したディレクトリで動作します。そのため、 相対パスで指定したファイルなどは、 MAILDIRからたどれるようになっている必要があります。

どのレシピにも該当しない場合は、DEFAULT で指定した配送先に送信されます。
ちなみに、以下のように設定すると、指定したメールアドレスに転送され…なくて、 「$MAILDIR/! usu@usupi.org」というファイル名で保存されるだけでした。

DEFAULT="! usu@usupi.org"

書き込めないなどの理由で配送できなかった際は、 ORGMAIL で指定されたところに配送します。これも ! などは解釈されませんでした。

procmailの設定をあれこれ試行錯誤して路頭に迷ったときは、 LOGFILE を指定してみましょう。指定したファイルにログが出力されるため、 どんなふうに処理されたのかがわかります。

LOGFILE=maillog

例を以下に示します。

$ cat ~/maillog
...前略...
From usu@usupi.org  Sun Jan 29 17:37:28 2012
 Subject: test
  Folder: /var/mail/tetsuzo                               12345

といっても、ログの出力は、そのままではそっけないので、 以下のようにVERBOSEを有効にしましょう。詳細の情報が吐かれるようになります。

VERBOSE=on

たとえばこんな感じに吐かれます。

procmail: [4649] Sun Jan 29 18:19:02 2012
procmail: Assigning "UMASK=027"
procmail: Bypassed locking "/var/mail/oei.lock"
procmail: Assigning "LASTFOLDER=/var/mail/oei"
procmail: Opening "/var/mail/oei"
procmail: Acquiring kernel-lock
procmail: Notified comsat: "oei@11817:/var/mail/oei"
From usu@usupi.org  Sun Jan 29 18:19:02 2012
 Subject: test
  Folder: /var/mail/oei                                   12345

あと、UMASKで、記録するファイル等のパーミッションを変更できます。
通常は自分だけがアクセスできるデフォルトの設定でよいと思います。
ですが、たとえば同じグループのひとにも見せたいという場合には、 以下のように指定すればいいと思います。

UMASK=027

また、これら以外にも、自分で勝手に決めた環境変数を設定して使うことができます。

SPAMDIR=$HOME/spam/
...中略...
$SPAMDIR

SpamAssassin を噛ませてみる

SpamAssassin というメールフィルタがあります。
ベイジアンフィルタなどを用いてスパムかどうか判定してくれる、便利なツールです。

SpamAssassin
http://spamassassin.apache.org/

標準入力からメールを受け取り、スパムかどうかを判定して、 その結果を「X-Spam-云々」というヘッダで付加し、 標準出力に吐くコマンドっぽいものです。

そのため、届いたメールを spamassassin に渡したり、 スパム判定されたメールを取り除いたりといった処理は、procmail に任されています。

ここでは、SpamAssassinのインストールや設定手順を割愛して、 procmailの設定だけを紹介させていただきます。

まず、spamassassinを通すだけであれば、以下のような設定になります。

:0fw
* ! ^X-Spam.*
| /usr/bin/spamassassin

ここで、前回説明していないフラグ「f」と「w」が出てきました。
「f」は、フィルタです。処理した結果を後続のレシピに渡します。
「w」は、戻り値が0以外のときに処理を中断するという指定です。
そして、ヘッダに「X-Spam」で始まるものがない場合、spamassassin を実行しています。

ただ、上記の場合、ヘッダがつくだけで、届くメールが減るわけではありません。 (「X-Spam-Status」フラグを見て、 スパム判定されたものに削除マークをつける設定をMUAにしているなどの場合は、 意味があります。)

そこで、スパム判定されたものは、別に追いやってしまいましょう。

:0fw
* ! ^X-Spam.*
| /usr/bin/spamassassin

:0:
* ^X-Spam-Status: Yes
spam/.

こうすると、まずspamassassinでスパム判定を行い、 スパムと判定されたメール…つまり「X-Spam-Status」ヘッダが「Yes」なメールを、 spam というディレクトリ以下に追いやります。
そうでないメールは、DEFAULTで指定したところに記録されます。

おわりに

以上、procmail について、ちょっとだけ余計にご紹介しました。

結局のところは、人によって設定したい内容が異なるため、 意図した通り動いてくれるかどうか、己れで試行錯誤をするしかありません。

一番いいのは、どうでもいいアカウントを作って試すことです。 もしそれが許されない環境の場合は、 .forward に自分と procmail の双方に配送されるようにしておき、 .procmailrc に LOGFILE と VERBOSE を設定して試行錯誤するしかないと思います。

なにはともあれ、いろいろ試してみてください。

宿題の答え

前回の宿題は、

  $HOME/.procmailrc がないときの procmail の動作を確認しましょう。

でした。

ただ単に、$HOME/.forward には procmail を呼ぶように設定しておいたままの状態で、 $HOME/.procmailrc をなくしてしまうだけです。

というわけで、やってみましょう。

$ cat ~/.forward
"| exec /usr/bin/procmail"
$ mv ~/.procmailrc ~/.procmailrc-

としてメールを出すと… /var/spool/mail/ユーザ名 に追記されました。

これは、postfix などの MTA で Maildir を使うよう設定してあっても、 問答無用でそのようになります。
従来のmboxで運用している場合は気にしなくてよさそうですが、 Maildirをお使いの貴兄は、ご注意くださいませ。

ちなみに、$HOME/.procmailrc をこうしておくと、 ちゃんとMaildir形式で保存されました。
(環境変数については本題で触れています。よろしければご覧ください。)

DEFAULT=$HOME/Maildir/

今回の宿題

今回の宿題は、

  自分宛のメールで、MIMEマルチパートじゃなく、本文が5kB未満のもの
  だけを携帯メールに転送する設定をしてください。

です。

いままでの寄せ集め…もとい、集大成です。
ひとつずつ条件を設定すればできるはずですので、やってみてください。

あとがき

先々週、TDD(テスト駆動開発)の勉強会に参加してきました。

セミナーや勉強会というやつに参加するのは、ものすごく久しぶりです。
また、会社からではなく個人的に申し込んだため、 知っているひとなんてどこにもいません。完全アウェイな状況でした。

それでも、みんなTDDを知りたい学びたいという共通意識があるためか、 同じテーブルのひとといろいろ話したり、 ペアプログラミングというものを体験したりと、充実した時を過ごすことができました。

ポストイットを模造紙に貼ったりしながら、 いまどきのアジャイルな開発もよいもんだなあ、なんて思ったりしました。
いまの会社でも、取り入れるべきところは、うまいこと取り入れていってみようかな、 と思っています。

また、実際にOSSを開発されているひとから、直接話を伺うことができたことも、 大きな収穫でした。なんらかの形で貢献していこうと決意して、 会場を後にしました。

…いまのところは、原稿に追われていてぜんぜんできていないのですが。
(おれ、この原稿を書き終えたらOSSに貢献してみるんだー…ドカーン!)

 

おっと、次回は、2週間後の 2/11 にお送りしたいと思います。
その次はおそらく3月になって、2月は1回のみの発行となってしまいますが、 ご了承いただけますと幸いです。
(年初の月2回を守ります、は早くも崩れ去っていますね…。)

 

今回も、ここまで読んでいただき、たいへんありがとうございました。
次回は、2月11日(日) の未明にお会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」- 年賀状を公開しております。地味…。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://usupi.org/k/ (モバイル栗日記)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 6をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューション(Fedora, Ubuntu)も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora9)
Fedora9のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日経Linux
今や数少なくなってしまったLinuxの雑誌。ニュースやガイドもあります。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
gihyo.jp…技術評論社
Linuxに限らず様々な技術情報が満載のサイト。 SoftwareDesign誌も、 ソフトウェア技術者は必見です。
SourceForge.JP Magazine
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本