2014年1月26日日曜日

Postfix Tips: 外部へのメール送信に配送制限をかけるには

今回は、お行儀の悪いユーザがいるメールサーバの管理者に向けてのTipsです。

具体的には、
  1. 特定ドメインに対して(短時間に)大量のメールを送信する(怒)
  2. その結果、特定ドメインにペナルティを科せられてメールを受け取ってもらえなくなる
  3. いつまでも配送できないキューが溜まりまくる
といった状況な時に使います。
※もしくはそういう状況に陥らない為に使います

つまり、特定ドメインに対して短時間に大量のメールを送ろうとしても、ゆっくりと配送するように制限をかけてしまいます。



以下、gmailへの送信を例に実際の設定例です。

1./etc/postfix/master.cfに新しいtransportを作成(定義)
 →ここで作成したtransportの名前がmain.cfで指定するパラメータ名の一部になります

slow      unix  -       -       n       -       -       smtp
     -o syslog_name=postfix-slow


2./etc/postfix/main.cfを編集
 →master.cfに指定したtransport名を使って設定します

# 配送制限をかけるドメインをtransportに指定
transport_maps = hash:/etc/postfix/transport

# 1コネクションでのメール制限
slow_initial_destination_concurrency = 2
slow_destination_concurrency_limit = 10


# 配送制限(ここでは10秒で指定)
slow_destination_rate_delay = 10s


3./etc/postfix/transportの編集
 →編集後、postmap /etc/postfix/transport を実行する必要があります

gmail.com  slow:

4.postfix reloadを実行



これでどんなに大量にメールを送信しようとしても10秒ごとにしかメールが配送できなくなります。
※下記は、ローカルからgmail宛てに1秒間に10通のメールを送信した際のログです
  →ぴったり10秒にはなりませんでしが、delay=19 → delay=30 → delay=41 と一気に送信したのにもかかわらずゆっくりと配送されているのがわかると思います

Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 6BB6540275: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1416]: 6BB6540275: message-id=<0582.0003.0009@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 6BB6540275: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 70AB840C80: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1416]: 70AB840C80: message-id=<0582.0003.0008@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 70AB840C80: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 74B9040C81: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1418]: 74B9040C81: message-id=<0582.0003.0007@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 74B9040C81: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 792E840C84: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1416]: 792E840C84: message-id=<0582.0003.0006@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 792E840C84: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 79E6940C85: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1418]: 79E6940C85: message-id=<0582.0003.0005@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 79E6940C85: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 7CD8641272: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1416]: 7CD8641272: message-id=<0582.0003.0004@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 7CD8641272: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 7F67F41273: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1418]: 7F67F41273: message-id=<0582.0003.0003@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 7F67F41273: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 8302441274: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1416]: 8302441274: message-id=<0582.0003.0002@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 8302441274: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 8884141275: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1418]: 8884141275: message-id=<0582.0003.0001@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 8884141275: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: connect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: 8C31D41276: client=localhost.localdomain[127.0.0.1]
Jan 26 00:20:34 mailsv postfix/cleanup[1416]: 8C31D41276: message-id=<0582.0003.0000@mailsv.example.com>
Jan 26 00:20:34 mailsv postfix/qmgr[1398]: 8C31D41276: from=<foo@mailsv.example.com>, size=867, nrcpt=1 (queue active)
Jan 26 00:20:34 mailsv postfix/smtpd[1413]: disconnect from localhost.localdomain[127.0.0.1]
Jan 26 00:20:53 mailsv postfix-slow/smtp[1417]: 6BB6540275: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.25.26]:25, delay=19, delays=0.02/0.01/0.36/18, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663253 yh9si5084332pab.5 - gsmtp)
Jan 26 00:20:53 mailsv postfix/qmgr[1398]: 6BB6540275: removed
Jan 26 00:21:04 mailsv postfix-slow/smtp[1417]: 70AB840C80: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.25.26]:25, delay=30, delays=0.02/29/0.45/0.95, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663264 s7si5004113pae.243 - gsmtp)
Jan 26 00:21:04 mailsv postfix/qmgr[1398]: 70AB840C80: removed
Jan 26 00:21:15 mailsv postfix-slow/smtp[1417]: 74B9040C81: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.25.27]:25, delay=41, delays=0.02/40/0.37/0.89, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663275 if4si5018201pbc.256 - gsmtp)
Jan 26 00:21:15 mailsv postfix/qmgr[1398]: 74B9040C81: removed
Jan 26 00:21:27 mailsv postfix-slow/smtp[1417]: 792E840C84: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[173.194.79.26]:25, delay=53, delays=0/51/0.36/1.2, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663287 ef2si5024111pbb.251 - gsmtp)
Jan 26 00:21:27 mailsv postfix/qmgr[1398]: 792E840C84: removed
Jan 26 00:21:38 mailsv postfix-slow/smtp[1417]: 79E6940C85: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[173.194.79.26]:25, delay=64, delays=0.01/63/0.36/0.82, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663298 vb2si2342207pbc.157 - gsmtp)
Jan 26 00:21:38 mailsv postfix/qmgr[1398]: 79E6940C85: removed
Jan 26 00:21:49 mailsv postfix-slow/smtp[1417]: 7CD8641272: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.129.27]:25, delay=75, delays=0.01/74/0.34/0.69, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663309 ye6si5033450pbc.200 - gsmtp)
Jan 26 00:21:49 mailsv postfix/qmgr[1398]: 7CD8641272: removed
Jan 26 00:22:00 mailsv postfix-slow/smtp[1417]: 7F67F41273: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.129.27]:25, delay=86, delays=0.01/85/0.35/0.71, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663320 xu6si5070591pab.80 - gsmtp)
Jan 26 00:22:00 mailsv postfix/qmgr[1398]: 7F67F41273: removed
Jan 26 00:22:11 mailsv postfix-slow/smtp[1417]: 8302441274: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.25.26]:25, delay=97, delays=0.02/96/0.38/0.71, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663331 r7si5013931pbk.267 - gsmtp)
Jan 26 00:22:11 mailsv postfix/qmgr[1398]: 8302441274: removed
Jan 26 00:22:22 mailsv postfix-slow/smtp[1417]: 8884141275: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.25.27]:25, delay=108, delays=0.01/107/0.36/0.71, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663342 s4si5028494pbg.213 - gsmtp)
Jan 26 00:22:22 mailsv postfix/qmgr[1398]: 8884141275: removed
Jan 26 00:22:34 mailsv postfix-slow/smtp[1417]: 8C31D41276: to=<fuga@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.25.27]:25, delay=119, delays=0.03/118/0.36/0.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1390663354 sj5si5023288pab.197 - gsmtp)
Jan 26 00:22:34 mailsv postfix/qmgr[1398]: 8C31D41276: removed

2014年1月21日火曜日

rsyslog DirCreateMode・FileCreateModeが意図したとりに動作しない

今回は、$DirCreateMode/$FileCreateModeディレクティブについてです。


このディレクティブはrsyslogでログを出力する際に、ディレクトリとファイルに任意のパーミッションを設定するものです。
このディレクティブでlog-userでもログを参照させる為、下記のように設定をしてみましたが、
$DirCreateMode 0750
$DirGroup log-user
$FileCreateMode 0640
$FileGroup log-user


mail.*                                   /var/log/postfix/maillog

実際に設定されたパーミッションを確認すると、それぞれのディレクティブのデフォルト値が設定されてしまいます。
[root@rsyslog ~]# find /var/log/postfix/ -ls
522578  4 drwx------   2 root   log-user  4096 Jan 15 23:34 /var/log/postfix/
522597  4 -rw-------   1 root   log-user   883 Jan 20 23:44 /var/log/postfix/maillog
[root@rsyslog ~]#


これを解決するには、下記のように$umaskディレクティブを追加する必要があります。
$umask 0000
$DirCreateMode 0750
$DirGroup log-user
$FileCreateMode 0640
$FileGroup log-user


mail.*                                   /var/log/postfix/maillog

これで意図したとおりのパーミッションになります。
[root@rsyslog ~]# find /var/log/postfix/  -ls
522578  4 drwxr-x---  2 root   log-user   4096 Jan 21 00:03 /var/log/postfix/
522597  4 -rw-r-----  1 root   log-user    186 Jan 21 00:03 /var/log/postfix/maillog
[root@rsyslog ~]#


2014年1月13日月曜日

rsyslog ログを転送するとTAGがかけてしまう

今回は、rsyslogでログを転送した際に、TAG部分で32文字以降が欠けてしまう件についてです。
#検証を行った環境は、転送元・転送先ともにOSがCentOS6.5でrsyslogはver7.4.8です


ログの転送先(ログサーバ側)で、転送されてきたCRON系のログを確認していたところ、本来

Jan 13 16:01:01 host run-parts(/etc/cron.hourly)[1197]: starting 0anacron

と記録されているものが、

Jan 13 16:01:01 host run-parts(/etc/cron.hourly)[1197 starting 0anacron

と、32文字以降の2文字(”]”と”:”) が省略されていることに気がつきました。


調べてみるとまんまずばりの情報が下記にありました。

http://www.rsyslog.com/sende-messages-with-tags-larger-than-32-characters/


RFC的には、ログのTAG部分は32文字を最大とするのが正解で、rsyslogでは転送用templateで32文字の制限が行われています。

なので、ログの転送元で新しく”32文字の制限を行わない”templateを定義すれば、TAG部分が欠けてしまう現象は回避できます。
具体的には、下記のようにします。

# 以下は改行されていますが、1行で記述する必要があります
template(name="ForwardFullTag" type="string" string="<%PRI%>%TIMESTAMP:::date-rfc3339%
 %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg%")


#  以下は無理に一行にまとめる必要はありません
# (転送先のTargetは環境に合わせて変更してください)
*.* action(type="omfwd"
 Target="192.168.233.14"
 Port="514"
 Protocol="tcp"
 Template="ForwardFullTag"
)

2013年8月25日日曜日

dovecot dbox形式 ”Alternate Storage”について

前回の続きです。
Dovecotのdbox形式のメールBOXフォーマットには、Alternate Storage機能があります。


具体的には、通常のメールBOXを配置しているディスク(またはパーティションやディレクトリ)とは別に、もう一つ代替となるディスク(またはパーティションやディレクトリ)を用意しておけば、その領域もメールBOXとして利用できるようになる機能です。
この機能を使えば、メールBOXのディスクが圧迫してきたので、古いメールを後から追加したディスクに退避させようといった事も可能になります。

この機能は、mail_locationに以下のように(青字の部分を追加で)指定するだけで利用できます。
※評価は、CentOS6.4(x86_64) + dovecot2.2.5 + システムアカウントで、/dev/sdb1を/archiveとしてマウントした状態で行っています

mail_location = sdbox:~/dbox:ALT=/archive/%n


以下、実際の操作例です。
 → 既読メールの移動を実施してみます

サンプルとしてuser01ユーザのメールBOXにメールが10通あり、全て既読の状態です。
# find /home/user01/dbox/
/home/user01/dbox/
/home/user01/dbox/dovecot-uidvalidity
/home/user01/dbox/mailboxes
/home/user01/dbox/mailboxes/INBOX
/home/user01/dbox/mailboxes/INBOX/dbox-Mails
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.log
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.10
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.cache
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.7
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.2
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.6
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.8
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.4
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.5
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.1
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.3
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.9
/home/user01/dbox/dovecot-uidvalidity.52127e52
/home/user01/dbox/dbox-alt-root
#

この状態から既読メールをAlternate Storageに移動させるには以下のように実行します。
# doveadm altmove -u user01 seen

結果、user01ユーザのメールBOXは以下のような状態になります。
 →既読メールの10通は/archive/user01ディレクトリ以下に移動しています
# find /home/user01/dbox/ /archive/user01
/home/user01/dbox/
/home/user01/dbox/dovecot-uidvalidity
/home/user01/dbox/mailboxes
/home/user01/dbox/mailboxes/INBOX
/home/user01/dbox/mailboxes/INBOX/dbox-Mails
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.log
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.cache
/home/user01/dbox/dovecot-uidvalidity.52127e52
/home/user01/dbox/dbox-alt-root
/archive/user01
/archive/user01/mailboxes
/archive/user01/mailboxes/INBOX
/archive/user01/mailboxes/INBOX/dbox-Mails
/archive/user01/mailboxes/INBOX/dbox-Mails/u.8
/archive/user01/mailboxes/INBOX/dbox-Mails/u.1
/archive/user01/mailboxes/INBOX/dbox-Mails/u.9
/archive/user01/mailboxes/INBOX/dbox-Mails/u.6
/archive/user01/mailboxes/INBOX/dbox-Mails/u.4
/archive/user01/mailboxes/INBOX/dbox-Mails/u.10
/archive/user01/mailboxes/INBOX/dbox-Mails/u.3
/archive/user01/mailboxes/INBOX/dbox-Mails/u.2
/archive/user01/mailboxes/INBOX/dbox-Mails/u.7
/archive/user01/mailboxes/INBOX/dbox-Mails/u.5

#

※この機能は、dbox-alt-rootファイルが、シンボリックリンクになることで実現しています。
# ls -l /home/user01/dbox/dbox-alt-root
lrwxrwxrwx 1 user01 user01 15 Aug 25 23:02 /home/user01/dbox/dbox-alt-root -> /archive/user01/
#

なお、移動したAtteanate Storageのメールを元に戻すには以下のように実行します。
# doveadm altmove -r -u user01 all


以上、今回は手動で既読メールを移動させる操作例をあげましたが、バッチ処理でより複雑な条件での操作も可能なので、詳しくは下記を参照してください。

http://wiki2.dovecot.org/Tools/Doveadm/Altmove
http://wiki2.dovecot.org/Tools/Doveadm/SearchQuery

2013年8月20日火曜日

dovecot dbox形式

Dovecotには、独自のメールBOXフォーマットが存在します。
※Maildir形式のように1通のメッセージを1つのファイルとして保存するsdbox形式、mbox形式のように複数のメッセージを1つのファイルとして保存するmdbox形式(ただし、ある程度のサイズで複数のファイルに分割されます)の2種類です。


設定は特に難しいところはなく、sdbox形式の場合を例にするとmail_locationに以下のよう指定するだけで利用できます。
※評価はCentOS6.4(x86_64) + dovecot2.2.4 + システムアカウントで行っています

mail_location = sdbox:~/dbox


実際にメールを格納するとMaildir形式とは異なりメールそのものは、u.1やu.2のような名前で保存され、メールが未読でも既読でもSeenフラグなどが付くことがありません。

# find ~user01/dbox/
/home/user01/dbox/
/home/user01/dbox/mailboxes
/home/user01/dbox/mailboxes/INBOX
/home/user01/dbox/mailboxes/INBOX/dbox-Mails
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.3
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.1
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.log
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/dovecot.index.cache
/home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.2
/home/user01/dbox/dovecot-uidvalidity
/home/user01/dbox/dovecot-uidvalidity.51ac2f97
#

1通のメールは以下のようになります。
Maildir形式と比較するとメッセージの前後に追加の情報が付くようです。

# cat /home/user01/dbox/mailboxes/INBOX/dbox-Mails/u.5
2 M1e C51ac33f6
N          0000000000000277

Return-Path: <user101@mail.example.com>
X-Original-To: user01@mail3.example.com
Delivered-To: user01@mail3.example.com
Received: from mail.example.com (R-538.mshome.net [192.168.137.1])
        by mail3.example.com (Postfix) with SMTP id 8AD6E3FF6B
        for <user01@mail3.example.com>; Mon,  3 Jun 2013 15:13:08 +0900 (JST)
From: user101 <user101@mail.example.com>
To: user01@mail3.example.com
Subject: test
Date: Mon, 03 Jun 2013 15:13:08 +0900
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <E1CE60216AB962user101@mail.example.com>
test

R51ac33f6
V288
G87ca8705f633ac51190a000048c9b678

#


今回の最終的なdovecotの設定は以下になります。
# doveconf -n
# 2.2.4: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-358.14.1.el6.x86_64 x86_64 CentOS release 6.4 (Final)
disable_plaintext_auth = no
listen = *
mail_debug = yes
mail_location = sdbox:~/dbox
passdb {
  driver = pam
}
protocols = pop3
ssl = no
userdb {
  driver = passwd
}
#


またMTAにpostfixを利用する場合は、そのままだとメールBOXに配送ができないので、DovecotのLDAかLMTPなどを利用して配送を実施する必要があります。
※LDAとLMTPについては、今後書きたいと思います

一例を挙げておきます。
システムアカウントを利用してDovecotのLDAで配送をするなら、以下のように設定します。

mailbox_command = /usr/libexec/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT"


2013年8月5日月曜日

dovecot passwd-fileについて

今回は、Dovecotの認証データベースの1つであるpasswd-fileについてです。


特徴は、以下のようになります。

  • /etc/passwdと(ほぼ)同じ書式で記述ができる(⇒ extra_fieldが追加できる)
  • 認証で必要な箇所だけ記述すれば利用できる(下記の設定例を参照ください)
  • システムアカウントにもバーチャルアカウントにも利用できる


以下、設定例です。
※評価はCentOS6.4(x86_64) + dovecot 2.2.4で行っています。


システムアカウントで利用する場合

※SSHのパスワードなどと、メールのパスワードを別にしたい場合に有用です

1./etc/dovecot/usersを以下のように作成します。
user01:{PLAIN}password
user02:{PLAIN}password

2.passwd-fileを利用する為の設定

/etc/dovecot/conf.d/10-auth.conf:
※以下の行を有効にします
!include auth-system.conf.ext
!include auth-passwdfile.conf.ext

/etc/dovecot/conf.d/auth-system.conf.ext:
※以下の行だけ有効にします
userdb {
  driver = passwd
}

/etc/dovecot/conf.d/auth-passwdfile.conf.ext:
※以下の行だけ有効にします
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

最終的な全体設定は以下のようになります。
# doveconf -n
# 2.2.4: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-358.14.1.el6.x86_64 x86_64 CentOS release 6.4 (Final)
disable_plaintext_auth = no
listen = *
mail_debug = yes
mail_location = maildir:~/Maildir
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
protocols = pop3
ssl = no
userdb {
  driver = passwd
}


バーチャルアカウントでの利用する場合

下記ではメールBOXなどの情報をstaticに持たせています


1./etc/dovecot/usersを以下のように作成します。
user01@example.com:{PLAIN}password
user02@example.jp:{PLAIN}password

2. passwd-fileを利用する為の設定

/etc/dovecot/conf.d/10-auth.conf:
※以下の行を有効にします
!include auth-passwdfile.conf.ext
!include auth-static.conf.ext

/etc/dovecot/conf.d/auth-passwdfile.conf.ext:
※以下の行だけ有効にします
passdb {
  driver = passwd-file
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
}

/etc/dovecot/conf.d/auth-static.conf.ext:
※以下の行だけ有効にします
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/home/vmail/%d/%u
}
※vmailユーザはあらかじめ以下のように作成しておく必要があります
# groupadd -g 5000 vmail
# useradd -g 5000 -u 5000 -s /sbin/nologin vmail

最終的な全体設定は以下のようになります。
# doveconf -n
# 2.2.4: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-358.14.1.el6.x86_64 x86_64 CentOS release 6.4 (Final)
disable_plaintext_auth = no
listen = *
mail_debug = yes
mail_location = maildir:~/Maildir
passdb {
  args = scheme=CRYPT username_format=%u /etc/dovecot/users
  driver = passwd-file
}
protocols = pop3
ssl = no
userdb {
  args = uid=vmail gid=vmail home=/home/vmail/%d/%u
  driver = static
}


以上で、/etc/dovecot/usersに記述した2ユーザーでアクセスするとメールBOXは
以下のようになります。

# pwd
/home/vmail
# ls -l
total 8
drwx------ 3 vmail vmail 4096 Aug  5 00:06 example.com/
drwx------ 3 vmail vmail 4096 Aug  5 00:05 example.jp/
# find .
.
./example.jp
./example.jp/user02@example.jp
./example.jp/user02@example.jp/Maildir
./example.jp/user02@example.jp/Maildir/dovecot-uidvalidity.51fe6dce
./example.jp/user02@example.jp/Maildir/maildirfolder
./example.jp/user02@example.jp/Maildir/dovecot.index.log
./example.jp/user02@example.jp/Maildir/dovecot-uidlist
./example.jp/user02@example.jp/Maildir/dovecot-uidvalidity
./example.jp/user02@example.jp/Maildir/tmp
./example.jp/user02@example.jp/Maildir/cur
./example.jp/user02@example.jp/Maildir/new
./.bash_logout
./example.com
./example.com/user01@example.com
./example.com/user01@example.com/Maildir
./example.com/user01@example.com/Maildir/maildirfolder
./example.com/user01@example.com/Maildir/dovecot.index.log
./example.com/user01@example.com/Maildir/dovecot-uidlist
./example.com/user01@example.com/Maildir/dovecot-uidvalidity
./example.com/user01@example.com/Maildir/tmp
./example.com/user01@example.com/Maildir/cur
./example.com/user01@example.com/Maildir/new
./example.com/user01@example.com/Maildir/dovecot-uidvalidity.51fe6de3
./.bash_profile
./.bashrc
#


2013年7月14日日曜日

Dovecot Enterprise Editionについて

2018/01/08追記:いつのまにかリポジトリにアクセスできなくなったので、問い合わせをしました。
         以下のような返信をもらいました。
         要するに一般ユーザーには、同エディションは提供されないようです。
We have done some maintenance for expired accountsbecause we no longer have webshop and we don't provide dovecot-eerepository access without valid support contract with us.

Next year we disable all accounts without active support contract withus but start providing Dovecot Communition Edition packages for free. Wesend information about this change later.


2016/01/14追記: Dovecot Enterpriseについて(2016年1月現在)という記事を追加しました。

2014/07/01追記: ライセンス更新のお知らせがこないのでサイトを覗きにいったら、今現在は$0で提供されているようです。



今回は商用版dovecotについてです。


結論から先に書いてしまうと、(あたりまえですが)サポートを必要としない限り
購入するメリットは一切ありません。

なのに何で購入したかというと、商用版にはAmazon S3やDropboxをメールボックスのストレージとして
利用するための”Dovecot Object Storage Plugin”なるものがありドキュメントだけでも
読んでみたいと思ったからです。
#実際には、1ヵ月のデモライセンスと簡素なドキュメントがおまけでついてきました


商用版dovecotの導入

以下のサイトからまずは、商用版dovecotのリポジトリへのアクセスキーを購入します。

http://shop.dovecot.fi/

するとユーザ名とパスワードがメールで送られてくるので、/etc/yum.repos.d/dovecot.repoとして保存します。
[dovecot]
name=RHEL $releasever - $basearch - Dovecot Solutions
baseurl=https://username:password@yum.dovecot.fi/default/stable-2.2/el$releasever-$basearch
gpgkey=https://yum.dovecot.fi/RPM-GPG-KEY.dovecot
gpgcheck=1

次に、以下のどちらかを選択して導入します。

・ 新規にdovecotを導入する場合
   
 # yum install dovecot-ee

・ dovecotが既に導入されていて、アップデートする場合

 # yum update 


後はいつもどおりにdovecotを設定すれば普通に使えます。


Object Storage Pluginについて

試しにDropboxにメールを保存してみましたので、手順を書いておきます。
ただし、ドキュメントがあまりにも貧弱で、自分もひとまず動作が確認できただけという
状態です。なので、この内容を試す場合はあくまでも自己責任でお願いします。


a) Object Storage Pluginに必要なパッケージの導入

# yum install dovecot-ee-obox dovecot-ee-license

b) デモライセンスの登録

ライセンスがメールで送られてくるので、/var/lib/dovecot/dovecot-license.txtと
して保存します。

c) dropboxのマイアプリへdovecotを登録

https://dropbox.dovecot.fi/

上記URLにアクセスし、dovecotがdropboxにアクセスできるように許可をします。
登録が完了すると設定ファイルとして追加すべき内容が表示されます。



d) /etc/dovecot/conf.d/11-object-storage.confの作成

 c)の手順で表示された内容をもとに作成します。

mail_prefetch_count = 10
mailbox_list_index = yes
mail_uid = vmail
mail_location = obox:%d/%u:INDEX=~/:CONTROL=~/
mail_plugins = $mail_plugins obox
metacache_upload_interval = 5 mins
metacache_close_delay = 0 min
ssl_client_ca_file = /etc/pki/tls/cert.pem
plugin {
  obox_fs = fscache 100G:/var/lib/dovecot/cache:dropbox:https://XXXXXX:XXXXXXX@dropbox/
}

pluginの設定としては以上で、後は、メールの配送用にLMTPなりをセットアップすれば完了です。
Dropboxには以下のように保存されます。









使ってみた感想としては。。

・LTMPでメールを配送するのも、POPやIMAPでメールを取得するにも非常に時間がかかるのが気になります。
 → 単に設定が悪いだけかもしれませんが、S3QLと比較すると非常に遅いです

・突然サーバが死んでもメール自体はなくならないので安心です。