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と比較すると非常に遅いです

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




2013年6月23日日曜日

yum インストールねた

yumのインストールで、自分が多用するものを2つピックアップしてみます。


パスでインストールするものを指定する


インストールしたいコマンド名、またはライブラリ名そのものは分かってはいるが、パッケージ名が分からないような場合に利用します。
以下は、partprobeコマンドをインストールする例です。
(partprobeコマンドはCentOS5では、partedパッケージに含まれます)

# yum install /sbin/partprobe
Loaded plugins: fastestmirror, protectbase
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package parted.i386 0:1.8.1-30.el5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================
 Package       Arch     Version           Repository     Size
===============================================================
Installing:
 parted       i386     1.8.1-30.el5       base           542 k
Transaction Summary
===============================================================
Install       1 Package(s)
Upgrade       0 Package(s)
Total download size: 542 k
Is this ok [y/N]:



ダウンロードしてきたRPMを依存関係を解消しつつインストールする


標準のリポジトリ以外のRPMパッケージなどをダウンロードし、rpmコマンドでインストールしようとしたら依存関係が原因でインストールに失敗するような場合に利用します。

以下は、AWS関連のRPMをダウンロードしてインストールする例です。
依存関係でrubyとruby-libsがインストールされます。


# yum localinstall ec2-ami-tools.noarch.rpm
Loaded plugins: fastestmirror, presto
Setting up Local Package Process
Examining ec2-ami-tools.noarch.rpm: ec2-ami-tools-1.4-0.9.noarch
Marking ec2-ami-tools.noarch.rpm to be installed
Loading mirror speeds from cached hostfile
 * base: ftp.riken.jp
 * epel: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
Resolving Dependencies
--> Running transaction check
---> Package ec2-ami-tools.noarch 0:1.4-0.9 will be installed
--> Processing Dependency: ruby for package: ec2-ami-tools-1.4-0.9.noarch
--> Running transaction check
---> Package ruby.x86_64 0:1.8.7.352-10.el6_4 will be installed
--> Processing Dependency: ruby-libs = 1.8.7.352-10.el6_4 for package: ruby-1.8.7.352-10.el6_4.x86_64
--> Processing Dependency: libruby.so.1.8()(64bit) for package: ruby-1.8.7.352-10.el6_4.x86_64
--> Running transaction check
---> Package ruby-libs.x86_64 0:1.8.7.352-10.el6_4 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=========================================================================
 Package                Arch          Version             Repository        Size
=========================================================================
Installing:
 ec2-ami-tools        noarch        1.4-0.9             /ec2-ami-tools.noarch   680 k
Installing for dependencies:
 ruby                    x86_64      1.8.7.352-10.el6_4   updates             533 k
 ruby-libs               x86_64      1.8.7.352-10.el6_4   updates             1.6 M
Transaction Summary
==========================================================================
Install       3 Package(s)
Total size: 2.8 M
Total download size: 2.2 M
Installed size: 8.1 M
Is this ok [y/N]:



2013年6月11日火曜日

CentOS6.4で最新DovecotをRPMで導入する

2018/01/08追記: 元記事のサイトは全く更新されておらず、最新のdovecotを導入する事はできないので、「Dovecot community repositoriesが公開されました」を参照してください


2016/05/04追記: 「CentOS6.x 最新のpostfixとdovecotをRPMで導入する」も参照ください


最近知ったのですが、http://repos.fedorapeople.org/なるサイトがあって、
ここにdovecotやpostfixの最新版のRPMが転がってます。

RPMそのものを落として利用しても良いでしょうし、リポジトリ用ファイルも
用意されているので、そちらを利用しても良いでしょう。

例えば、CentOS6.4の環境で、リポジトリ用ファイルを用意してインストールするには以下のようにします。
 ※既にdovocotがインストールされている環境では、yum updateするだけで最新になります
 ※別途、依存関係でepelリポジトリも必要になるので先にセットアップしておいてください
    # rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm


# cd /etc/yum.repos.d/
# wget http://repos.fedorapeople.org/repos/mstevens/dovecot/epel-dovecot.repo
# yum install dovecot

2013年6月9日日曜日

rsyslog $AllowedSenderについて

今回は、”$AllowedSender"ディレクティブについてです。

このディレクティブは、ログサーバとしてrsyslogを稼動させた場合に、シスログを受け取るべき
ホストやネットワークを制限する為に使います。
※なんでもかんでも送られてきたシスログを受け取ってはまずいので


まずは正しい記述からです。
TCPとUDPの両方に制限が必要な場合、以下のようにそれぞれを分けて記述する必要があります。

$ModLoad imudp
$UDPServerRun 514
$AllowedSender UDP, 127.0.0.1, *.example.jp, 192.168.0.0/24

$ModLoad imtcp
$InputTCPServerRun 514
$AllowedSender TCP, 127.0.0.1, *.example.jp, 192.168.0.0/24



次に、結構良く見かける間違った記述についてです。

※TCPとUDPを一行で設定できると考えたのだと思うのですが、以下のように
  記述してるケースです。
$AllowedSender TCP, UDP,127.0.0.1, *.example.jp, 192.168.0.0/24

この場合の”UDP”部分はホスト名として扱われてしまい、ログにもその旨が表示されます。

rsyslogd: DNS error: Can't resolve "UDP"
ryslogd: Hostname "UDP" WON'T be added to ACL.

で、厄介なことに$AllowedSenderのデフォルトは、"all allowed"なので、この場合は
UDPに全く制限がかかっていない事にご注意ください。。





2013年5月19日日曜日

Postfix Tips: all@なメールアドレスの利用を社内だけに限定して利用したい

全社員を含むエイリアスとして、all@example.comのようなメールアドレスを利用するケースもあると思います。

ただ、このメールアドレスに外部からスパムやウィルス付きメールが届くと、全社員にそれらが届くことになるので、利用できる(メールを送れる)範囲を社内だけに限定します。

以下、設定例です。


/etc/postfix/main.cf:
mtpd_recipient_restrictions = permit_sasl_authenticated,
                               permit_mynetworks,
                               reject_unauth_destination,
                               ・・・
                               check_recipient_access hash:/etc/postfix/all_access
    ・・・

/etc/postfix/all_access:
all@example.com     permit_sasl_authenticated,permit_mynetworks,reject

編集が完了したら、変更を適用します。
# postmap /etc/postfix/all_access
# postfix reload


このように設定することにより、

  • SMTP認証に成功したユーザからの接続
  • 社内のIPアドレスが登録されているであろうmynetworksからの接続

以外からは、all@example.comへはメールが送れなくなります。




2013年4月21日日曜日

Postfwdでmynetworksからの接続情報をログに出力

postfwdを使ってもう※ひとねた※書いてみます。

postfixの場合、mynetwoksからの接続は、基本的にpermit_mynetwoksで無条件にリレーを許可されます。
mynetwoksに記述されているネットワークあるいはIPアドレスが少ないなら、mynetwoksからの接続である事を判断出来ますが、その数が非常に多くなった時はログを見てもmynetworksからの接続だとすぐに判断がつかないケースが出てきます(扱うドメインが多ければさらに判断が難しくなります)。

前置きが長くなりなしたが、今回は通常ログに出力されないそれらの情報を一手間かけてログに出してみます。



postfwdのルールセット


itemのclient_addressに、postfixのmynetworksパラメータで指定している値を指定します。
※ネットワークアドレス、IPアドレスはご自身の環境で読みかえてください

ログに出力するだけなので、actionには全てdunnoを指定しています。



 例1:カンマ区切りで複数指定する場合
id=MYNETWORKS
  action=dunno permit_mynetworks was matched
  protocol_state==RCPT
  client_address=192.168.0.0/24, 192.168.1.0/.24, 10.0.x.x


例2: リストを含むテキストを指定する場合
id=MYNETWORKS
  action=dunno permit_mynetworks was matched
  protocol_state==RCPT
  client_address==file:/etc/postfix/mynetworks.txt
  client_address==file:/etc/postfix/mynetworks2.txt
  …
/etc/postfix/mynetworks.txt:
192.168.0.0/24
192.168.1.0/24
10.0.x.x

 例3: key=value形式のリストを含むテキストを指定する場合
      ※postfixで既に利用しているマップテーブルを再利用するような場合に便利です
id=MYNETWORKS
  action=dunno permit_mynetworks was matched
  protocol_state==RCPT
  client_address==table:/etc/postfix/mynetworks.txt
  client_address==table:/etc/postfix/mynetworks2.txt
  …
/etc/postfix/mynetworks.txt:
192.168.0.0/24    OK
192.168.1.0/24    OK
10.0.x.x           OK


postfix側での設定

smtpd_client_restrictionsでposfwdでの評価を行うように設定します。

smtpd_client_restrictions = check_policy_service inet:127.0.0.1:10045
smtpd_recipient_restrictions = permit_mynetworks
                               reject_unauth_destination
                          …

(注意)以下のように指定した場合、permit_mynetwoksでpostfixでの評価が完了してしまうので、その下のpostfwdによる評価は行われず、ログが出力されません。

smtpd_recipient_restrictions = permit_mynetworks
                               reject_unauth_destination
                               check_policy_service inet:127.0.0.1:10045




動作確認

これで以下のようにログが出力されるようになります。
※青字の部分が新たに出力されるようになった部分です


Apr 21 16:37:00 cent6 postfix/smtpd[2279]: connect from unknown[192.168.0.11]
Apr 21 16:37:00 cent6 postfwd2/policy[2148]: [RULES] rule=0, id=MYNETWORKS, client=unknown[192.168.0.11], sender=<user01@example.com>, recipient=<testuser@example.net>, helo=<mail.example.com>, proto=SMTP, state=RCPT, delay=0s, hits=MYNETWORKS, action=dunno permit_mynetworks was matched
Apr 21 16:37:00 cent6 postfix/smtpd[2279]: 8A5A321A6E: client=unknown[192.168.0.11]
Apr 21 16:37:01 cent6 postfix/cleanup[2285]: 8A5A321A6E: message-id=<F2CE3E63028A7Buser01@example.com>
Apr 21 16:37:01 cent6 postfix/qmgr[1801]: 8A5A321A6E: from=<user01@example.com>, size=487, nrcpt=1 (queue active)
Apr 21 16:37:01 cent6 postfix/smtpd[2279]: disconnect from unknown[192.168.0.11]
Apr 21 16:37:02 cent6 postfix/smtp[2287]: 8A5A321A6E: to=<testuser@example.net>, relay=mail.example.net[xx.xx.xx.xx]:25, delay=1.5, delays=1.4/0.02/0.04/0.12, dsn=2.0.0, status=sent (250 2.0.0 r3L7b27w006351 Message accepted for delivery)
Apr 21 16:37:02 cent6 postfix/qmgr[1801]: 8A5A321A6E: removed




2013年4月17日水曜日

Postfwd(postfix用ポリシーサーバ) その他メモ


前回までにまとめられなかった事を追記します。


ルールセットの記述の方法について(補足)

前回、ルールセットは下記のように";"(セミコロン)で区切って記述すると書きましたが、
id=SIZE001; protocol_state==END-OF-MESSAGE; action=DUNNO; size<=1000000
id=SIZE100; protocol_state==END-OF-MESSAGE; action=HOLD message too large

これを下記のように記述する事もできます。
id=SIZE001
action=DUNNO
protocol_state==END-OF-MESSAGE
size<=1000000
id=SIZE100
action=HOLD message too large
protocol_state==END-OF-MESSAGE 

好みの問題だとは思いますが、ぱっと見てわかりやすい記述をルールセット毎に採用すれば良いと思います。



postfwd2コマンドのオプションについて


良く利用するオプションをあげてみます。

●マニュアルを表示させる

# postfwd2 -m


※その際にpostfwd2コマンド内部で指定されているpagerを変更しておくと便利だと思います
 (マニュアルが長いので、lessの方が使い勝手が良いと思います)

(変更前)
our($cmd_pager)     = "more";

(変更後)
our($cmd_pager)  = "less";


●postfwd2デーモンの停止

# postfwd2 -k


●設定ファイルの読み直し

# postfwd2 --reload


●統計情報を見る

※ログにも同じ情報が定期的に出力されています

# postfwd2 --dumpstats

[STATS] postfwd2::cache 1.34: 8 queries since 0 days, 00:25:18 hours
[STATS] Requests: 0.0/min last, 0.3/min overall, 6.2/min top
[STATS] Hitrates: 40.0% requests, 0.0% dns, 0.0% rates
[STATS] Contents: request=2

[STATS] postfwd2::policy 1.34: 6 requests since 0 days, 00:25:18 hours
[STATS] Requests: 0.00/min last, 0.24/min overall, 6.15/min top
[STATS] Dnsstats: 0.00/min last, 0.00/min overall, 0.00/min top
[STATS] Hitrates: 50.0% ruleset, 33.3% parent, 16.7% child, 0.0% rates
[STATS] Timeouts: 0.0% (0 of 0 dns queries)
[STATS]   4 matches for id:  SIZE001
[STATS]   2 matches for id:  SIZE100