飛行機壊れちゃった


今日は年末年始の帰省のため羽田空港に来ています。
19:20発の飛行機で帰省する予定でした。
しかし!出発前に機体の故障が発覚し、整備のためしばらく機内で待っていたけど、結局直らず別の飛行機に乗り換えることになっちゃいました。
流石に飛行機を乗り換えることになるってのは初めての経験。

って事で今は再び出発ロビーで準備が終わるのを待ってます...

ハイブリッドalias_maps


さて、そろそろとPostfixネタもストックが底をつきはじめたのでペースダウン。 (^_^;

以前書いたPostgreSQLを使ったalias_mapsの管理でhashのマップとPostgreSQLのマップを併用するパターンを、後日実験すると書いてしまったので実験してみよう。

まずはどのように併用するか検討する。

Sendmailで使っていた /etc/mail/aliases (伝統的には /etc/aliases だが現実としてはシンボリックリンクになっているだけなので実態ファイルを扱うことにする)は、テキストエディターで編集して newaliases コマンドでhash化するなど取り扱いが不便だ。
一方、PostgreSQLでマップを作り、Wedベースのツールを作ってしまえば簡単に入れ替えたり出来るのでDB管理するのは非常に便利である。
あえて併用する必要性は低い気もするが、一つ考えられる使い分けパターンとしてはシステムアカウント(daemonとかoperatorとかsystemなど)は通常rootに転送しているだけでほぼ半永久的に書き換えることはなさそうなので、このようなシステムアカウントはaliasesファイルに書いておき、rootの転送先やML用の記述等ある程度書き換えが発生しそうなものをDBで管理すると、DBで扱うエイリアスの数も絞られていいかもしれない。

という事で、まずは /etc/mail/aliases を整理してシステムアカウントだけにする。
出来上がったら# newaliasesをしておく。

そして、DBにたくさん登録したAlias情報の中から、aliasesファイルに記述した分を削除する。

次に /etc/postfix/main.cf を書き換える。
#alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf
alias_maps = hash:/etc/mail/aliases, pgsql:/etc/postfix/pgsql-aliases.cf
変更内容は単純で、前回 alias_maps の指定をPostgreSQLだけにしたが、aliasesファイルと両方を指定するだけ、二つの設定をカンマで区切って書いてやればいい。

あとはPostfixに設定を再読込させる。
# /usr/sbin/postfix reload
実際に各Aliasに対してメールを送ってみて正しくメールが配送されれば設定完了。

クリスマス休暇?


昨日・今日となぜかスパムメールが少ない。
普段は200~300通、多い日だと1000通近いスパムメールがくるのに、ここ2日間は50通くらいしか来ない。
スパマー達もクリスマス休暇なのか??

派遣切り、本当に悪いのは誰?


久々に読んでいて読み応えのあるコラムを見つけた。
NBonlineに掲載されている小田嶋 隆氏の「ハケン切り」の品格だ。

毎日のように急激な景気悪化が伝えられ、派遣社員等の解雇や新卒者の内定取り消し等々雇用の悪化がニュースとなっている。
そんな中、派遣社員の契約打ち切り、いわゆる派遣切りの報道に私自身大いに疑問を抱いていた。

以前働いていた会社では多くの派遣社員が働いていた。
なぜ派遣社員を雇っていたかというと2つの面があった。
一つは専門技術を持っている人材の確保である。専門技術を持っている人材はなかなか見つけにくいが、派遣会社によっては得意分野を持っている会社もあっていい人材を確保しやすかったという面がある。

もう一つは雇用調整のし易さという面である。
季節によって忙しい時期と暇な時期というのがある。忙しい時期は多くの人手が欲しいし暇な時期はコストを抑えるためにも人員は抑えたい。
営業事務やロジスティックなど人手に頼る仕事では、暇な時期は殆どが正社員だけで仕事をし、繁忙期には派遣社員を入れて乗り切るという使い方だ。
まさに雇用調整のために派遣社員を使っていた。

また、企業にとって派遣社員は決して安い人員ではない。
どちらかというと正社員を雇うより高コストな人員のはずだ。
なんせ人材派遣会社に支払う費用は、働いている本人の給与の他に、派遣会社の営業マンや総務・経理等々の間接業務に携わる人達の給与・ボーナス、そして派遣会社の利益までと多くのコストが含まれている。
単純に考えれば、長期的に雇用するなら正社員にする方が安上がりなのだ。
それでも派遣社員として受け入れるのは、必要な時に必要なだけ人手が欲しいからであり、人手がいらなくなれば契約を更新をしなければいいという雇用調整のし易さからだ。
だから、企業にとって派遣切りは不景気になって人手が余ってきたから契約を更新しないという至極当然の判断であり、非難されるべきは受け入れ企業の判断というより営業努力が足りない派遣会社の方ではないだろうか。

しかし、どういう訳か派遣会社を悪者扱いする論調が皆無だ。
派遣会社は登録されている人材を企業に売り込み仕事を取ってくるのが仕事。
契約を切られないようにしたり、次の仕事を見つけてくるなど派遣会社がすべき努力は沢山あるのに、誰もこの点について突っ込んでいない。
不思議でしょうがない。
どちらかというと栄華を極め沢山の広告を出す派遣会社に嫌われるのが嫌で、メディアは触れていないだけなんじゃないかと邪推してしまう。

また、派遣社員という不安定な雇用形態を拡大させていたのは小泉政権下で行われていった規制緩和で、かつては一部の職種でしか認められていなかった派遣労働をあらゆる分野で可能にし、派遣社員という雇用形態を拡大させていったのだ。
その小泉政権を高い支持率で支えていたのは我々であったはずだ。(私は嫌いだったが)

今、企業に対して雇用促進を求めていっても無駄であろう。
物が売れなくなり仕事が無くなっている会社が余剰人員を抱えたままでいれば、いずれ会社は倒産してしまう。今、一部人員を減らすことで残りの人達の雇用が確保し続けられるのなら、全員が職を失うより遙かにいい判断だろう。

突然襲ってきた大不況の波を乗り切り、好景気に沸くことになるのはいつの日なのだろうか...

Submission Portを使えるようにする


さて、POP3とIMAP4でメールを受信することまでは出来た。
次は何をしようかと思いを巡らせていたが、よくよく考えるとまだ自分からメールを送ることが出来ない状況だ。
と言うことで、送信のための環境整備を行うことにしよう。

通常メールの送信にはSMTPを使う。
SMTPはTCPの25番ポートでサーバとクライアントの間で通信を行うが、数年前から多くのISPがスパムメール対策の一環としてOutbound Port25 Blocking(OP25B)という施策をとっている。
これは25番ポートで外部のSMTPサーバと通信させないというモノ。
スパムメールの多くは送信者が自ら相手先のSMTPサーバと通信してメールを送るか、設定の甘いどこかのSMTPサーバを踏み台にして、そこから大量のメールを送信していたり、ウイルス感染したPCを踏み台にし、そこからメールをばらまいている。
いずれの場合も25番ポートを使ってISPのネットワーク外にあるSMTPサーバと通信を行うのが特徴なので25番ポートで外部と通信することを遮断してしまえばいい。

一般的なユーザーであれば回線接続先のISPのメールを使っているのが普通なので、ISPが用意したSMTPサーバへ接続してメールを送信し、あとはISPのサーバに任せてしまえばメールが送られるので全く問題ない。

しかし、社用のメールなので会社のメールサーバから送信したいとか、レンタルサーバを使っていて借りているサーバを送信サーバに設定したい場合などは困ってしまう。
多くの場合、回線接続先のSMTPサーバを送信サーバの設定してメールを送信すれば問題なくメールは送れるが、ノートPCを使って出先からメールを送信したい場合は一々接続先ISPのメールサーバに設定変更しなければいけなくなったりして不便だ。

その不便さに対応するためのモノがSubmission Portと呼ばれるモノだ。
これはTCPの587番ポートを使ってSMTP通信を行う。
但しSubmission Portを使って送信する場合は送信者の認証を必要とし、これをSMTP AUTH(SMTP認証)と呼んでいる。
すなわち、IDとパスワードで認証された人しか使えないSMTP用ポートなのだ。
従来の25番ポートではクライアントから送信のために接続されるだけでなく、不特定多数の外部サーバから自サイト宛のメールが届けられるので認証機能を付けてしまうと、他から届くはずのメールも受け取れなくなるので、クライアントからの送信専用ポートを用意して認証機能を設けたという次第である。

で、PostfixをSubmission Portに対応させてやるのだが、PostfixでSMTP認証を行うためにはSASLという認証機構を使って実現することになる。
PostfixでSASLを使うためには外部ライブラリーが必要で、Postfixが対応しているのはCyrusのSASL機能かDovecotのSASL機能らしい。
Dovecotは既にインストールしているの、こいつのSASL機能を使ってSMTP認証を行うのが手っ取り早いので、Postfix+DovecotでSMTP認証を実現することにする。

まずはPostfixをDovecotのSASLに対応させなければいけない。
makeのやり直しだ・・・
# make tidy
 
# make -f Makefile.init makefiles 'CCARGS=-DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\" -DHAS_PGSQL -I/usr/local/pgsql/include' 'AUXLIBS=-L/usr/local/pgsql/lib -lpq'
 
# make
 
# make upgrade

Makefileの初期化を行う際にSASLを有効にし、SASLのタイプとしてDovecotを指定している。
最後はmake installではなくmake upgradeにする事で設定情報などは上書きされることなく、今回のmakeで更新されたファイルだけがインストールされるという優れ物機能。
Postfix本体のバージョンアップの際にも使用する。
バージョンアップの際は設定情報に追加された値などがある場合は、それらもマージしてくれるのでバージョンアップが簡単にできるらしい。

続いてPostfixの設定変更。
まずは /etc/postfix/main.cf の変更
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

SASL機能を使うための設定と、SMTP接続してきたクライアントの許容条件に permit_sasl_authenticated を追加し、SASLで認証が通った接続を許容することにしてやる。

続いて /etc/postfix/master.cf を書き換えて Submission Port を有効にする。
submission inet n - n - - smtpd
# -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING

もともと設定情報は書かれているのでコメントアウトされているのを解除してやるだけ。
今回は3カ所のコメントアウトを解除している。
併せて /etc/services に
submission 587/tcp
submission 587/udp

が書かれていることを確認する。
無い場合は /etc/services に追加するか、 /etc/postfix/master.cf の submission と書かれている部分を 587 に書き換えてやる。

続いてDovecotの設定を書き換える。
/usr/local/etc/dovecot.conf の認証に関する設定を
auth default {
 mechanisms = plain login
 socket listen {
  client {
   path = /var/spool/postfix/private/auth
   mode = 0660
   user = postfix
   group = postfix
  }
 }
}
と言った感じにしてやる。(コメント等は端折ってます)
あとはPostfixとDovecotを再起動してやるだけ。

再起動が終わったらSubmission PortでSMTP認証が有効になっているかをテストする。
まずはtelnetを使って確認。
% telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 *****.*****.*** ESMTP Postfix
EHLO localhost
250-*****.*****.***
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
 
% telnet localhost 587
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 *****.*****.*** ESMTP Postfix
EHLO localhost
250-*****.*****.***
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.

ちゃんと587番ポートでつないだ時に 250-AUTH PLAIN LOGIN と出てSMTP認証が有効になっている。

続いてPCの方から送信テストを行う。
SMTPを25番ポートのままにして外部のメールアドレス宛に送信をすると送信を拒否される。
25番ポートのままSMTP認証を有効にするが結果は同じ。
次にSMTPを587番ポートにして外部のメールアドレス宛に送信をすると、またまた送信を拒否される。
587番ポートでSMTP認証を有効にすると、ようやく送信できた。
これでメール送信のための環境も設定完了!

次のページ →