結構、Postfix + Dovecotで仮想ホストを作るのは簡単なためか、あまり問題になりませんが、sendmailでの仮想メールホストを
作るのは比較的敷居が高い気がします。
日本国内のサイトで検索しましたが、いまいちというか、不完全な解説(受信しか、考えていないだろう!!)が多いと思いました。
受信はきちんと該当ドメインに届くのですが、送信すると気づくはずです。いつのまにかデフォルトのドメインのFromアドレスに
書き変わっていることに!!
そして、さらにドメインは違うけど@の左辺が同じIDの場合、送信は問題ないけど、pop/imapで
メールを取り出す際に、問題がでてきてしまう。要するにsendmailは基本はドメインなしのspoolingだから同じIDだとDovecot君が
わからなくなっちゃうわけだ。
だってsendmailはアカウント名のフォルダ、もしくはファイルで保存されるわけだから同一IDをわける
管理がない。本当はsendmail君がvirtualtableに書いたメルアド体系でフォルダが生成されてれば、すごく簡単だったのに。。。。
ということで、ちょっと攻略してみようかな。
smtpは内部&外部からの受信と内部&外部への送信を担います。そしてspoolされてアカウント毎のファイルに格納されます。
しかし、OutLookやthunderbird等のメールソフトでpop/imapしてメールをspoolから取り出すためには、一般的にはprocmailやシェル、pop/imapサーバ自身が行うという仕組みになります。
Dovecotはspoolからメールを取り出してくれるタイプのサーバですから、仮想サーバのメール格納体系にあった設定をしてあげないと取り出したり、格納したりすることができません。
sendmailのお決まりのメールボックスは/var/mail or /var/spool/mailの配下ですが、仮想ドメインを作るということは、ユーザ情報にドメインが付加された形で何らかのひも付けがされていないといけない。
最初にsendmailから編集を始めてみましょう。
sendmail.mcを仮想ホスト用に作成。
既存で動作しているsendmail.mcの数カ所をいじります。ポイントだけ説明。
$ cd /etc/mail
$ vi sendmail.mc
——————————————主要設定箇所だけの抜粋です—————————————-
FEATURE(`mailertable’, `hash o /etc/mail/mailertable.db’)dnl <—これは説明不要だね。
FEATURE(`virtusertable’, `hash o /etc/mail/virtusertable.db’)dnl <—これは説明不要だね。
dnl MASQUERADE_AS(`$m’)dnl <——-これコメントアウトにする。該当ドメインでfromで正しく出ます。
VIRTUSER_DOMAIN_FILE(`-o /etc/mail/virtuser-domains’)dnl <—-これは説明不要だね。
☆MASQUERADE_AS(`$m’)dnlの箇所をコメントにするときちんと該当ドメインでfromで正しく出ます。
$ make
$ make stop
$ make start
以上で仮想ドメイン用のsendmailが生成され起動します。
まだまだ続きがありますが、今後に期待してください。
Postfixの簡易的な添付ファイルブロック処理
PostfixにはMime headerをチェックする機能が備わっています。これを使ってウィルス混入のメールをある程度ブロック可能です。
まず、編集のため設定ファイル「main.cf」をオープンします。
$ vi /etc/postfix/main.cf
次の一行を追加します。
mime_header_checks = regexp:/etc/postfix/mime_header_checks
記述したらセーブして閉じてください。
次の作業は実際にブロックする添付ファイルの拡張子を設定します。(新規オープンだね)
$ vi /etc/postfix/mime_header_checks
次の一行を追加してください。
/name=[^>]*\.(bat|com|exe|dll|vbs)$/ REJECT
これでセーブしてPostfixを再起動すると反映されます。
Postfixの1コネクション確立で送る通数の制御
通常sendmail等は、1コネクション1通送って切断ですが、postfix は1コネクションで指定した通数のメールが送れる。この単位が1デリバリー。だから切断が少ない分速く送れる。
しかし1コネクションで沢山送れる設定をやりすぎるとメモリがパンクしてしまう。
だから要注意。
メールはTo,Cc,Bccに複数の送り先を指定できることをお忘れなく!!
結局これも1コネクションで何通送れるかに依存してきます。
下記のパラメータは1デリバリーあたり最大送ることができる通数パラメータ。
The smtpd_recipient_limit parameter (default: 1000)
高負荷のマシンでは大きめにとるといい場合もあるかもしれませんね。
Sendmailはデフォルトでは一つのメールキューを使用しています。
小中規模サイトのメールではそれほど気にすることではないのですが、アクセスの多いメールサーバともなるとそうもいきません。
そこでご紹介するのがマルチキューによる高速処理です。キューはメールを吐き出す際に、受信する側の処理を待つために存在するわけですが、これを複数もつ事により負荷分散になる可能性があります。
キューイングで糞づまりはメールの世界ではよくあることです。だからこそ役立つ可能性は高いでしょう。
ここからキューを複数作る手法をご紹介します。例として8つのキューを作る事を考えてみましょう。
それでは、最初にキューを作成します。
$ mkdir /var/spool/mqueue/q{1,2,3,4,5,6,7,8}
作成したキューのディレクトリの権限のパーミッションを設定します。
$ chown -R root:root /var/spool/mqueue/q*
次に実際にsendmailの設定ファイルである“sendmail.mc“ファイルを編集します。
$ vi /etc/mail/sendmail.mc
define(`QUEUE_DIR’, `/var/spool/mqueue/q*’)dnl
再度sendmail.cfを作成するためm4でコンパイルします。
$ m4 sendmail.mc > /etc/mail/sendmail.cf
sendmailを再起動してください。
$ service sendmail restart
キューの状態を確認します。
$ mailq
/var/spool/mqueue/q6 is empty
/var/spool/mqueue/q4 is empty
/var/spool/mqueue/q3 is empty
/var/spool/mqueue/q2 is empty
/var/spool/mqueue/q5 is empty
/var/spool/mqueue/q1 is empty
/var/spool/mqueue/q7 is empty
/var/spool/mqueue/q8 is empty
Total requests: 0
これでマルチキューで動作するようになりました。
もし、既存のメールがまだキューに残っていた場合に作成するなら、新しく作った空っぽのキューへ既存のキューをコピーすると良いでしょう。
※ キューは異なる物理ディスク上に作成し、リンクを張って同一スプール配下に置くのがベストだと思います。