質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.53%

  • Postfix

    266questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。

postfixでメールの容量制限及びスパムチェック

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 220

yahoo

score 1

現在いろいろなサイトを調べながら
centos7にてpostfixでバーチャルドメインの設定をしました。
これにスパム対策としてspamassassinをインストールしました。
今まではメールの容量制限ができていたのですが、
spamassassinをインストールしてprocmailでメールの振り分け設定をしたら
容量制限ができなくなってしまいました。

spamassassin+procmailでの設定変更
■main.cf
mailbox_command = /usr/bin/procmail
virtual_transport = virtual (変更)→ procmail
procmail_destination_recipient_limit = 1
■master.cf
procmail unix - n n - - pipe
flags=R user=vmail argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc

virtual_transportをvirtualに戻せば容量制限できるのですが、メールの振り分けができません。
どのように設定すれば今までのような容量制限できて、なおかつメールの振り分けができるようになりますか。
以下現在の設定になります。よろしくお願い致します。

[main.cf]
mailbox_command = /usr/bin/procmail
#virtual_transport = virtual
virtual_transport = procmail
procmail_destination_recipient_limit = 1
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_base = /home/vmail
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_minimum_uid=100
virtual_uid_maps=static:5000
virtual_gid_maps=static:5000
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_limit = 0
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql-virtual_vquota.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
virtual_maildir_extended = yes


[master.cf]
procmail unix - n n - - pipe
  flags=R user=vmail argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc


[procmailrc]
SHELL=/bin/bash
PATH=/usr/bin:/bin
DROPPRIVS=yes
MAILDIR=/home/vmail/$DOMAIN/$USER/Maildir
DEFAULT=$MAILDIR/
LOGFILE=/home/vmail/$DOMAIN/$USER/.procmail.log
VERBOSE=ON

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

:0
*^X-Spam-Flag: YES
$MAILDIR/.Spam/
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

Maildir 形式を使われていますし、dovecot の Quota Plugin を設定して、Postfix の check_policy_service を利用して、smtpd_recipient_restrictions あたりでリジェクトするのが簡単でしょうか。

うまく設定すれば Quota 用のデータベースは、Postfix のバーチャルドメイン用の Quota データベースをそのまま利用できると思います。

設定方法もドキュメントにあるので... 詳しくはドキュメントをお読みください。
Dovecot Quota Plugin


また、SpamAssassin も共通の設定しかないみたいですので、spamd を使って、Postfix の content_filter 経由で実行する方が良いかもしれません。

Integrating SpamAssassin into Postfix using spamd あたりを参照してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/01 09:52

    ご回答ありがとうございます。
    ドキュメントの通りにDovecot Quotaを設定して動作を確認したところ、容量チェック、スパムチェック後のメール振り分けもできました。ただ個々のメールでの容量制限はできたのですが、ドメインごとの制限は可能なのでしょうか。
    また、[90-quota.conf] で「quota = maildir:User quota」を設定したからだと思うのですが、現在のメール容量をチェックするときはMaildirディレクトリ配下のmaildirsizeでチェックしているようです。
    「virtual_transport = procmail」と設定しているせいか、このmaildirsizeが、メールを受信しても更新されず、新規ユーザーを追加しても作成されませんでした。何か良い方法はないでしょうか。

    content_filterのほうでも試してみました。
    「virtual_transport = virtual」と設定して、content_filterでスパムフィルタを設定するということでよいでしょうか。
    ドキュメントを参考にしたのですが、スパム判定して特定のディレクトリに振り分けるスクリプトがわかりませんでした。他に参考になるスクリプトがあればご教示いただけないでしょうか。
    よろしくお願い致します。

    キャンセル

  • 2018/08/02 13:15

    確認に手間取っているので、返信が遅くなりました。

    ドメイン毎の Quota 制限をうちではおこなっていないのですが、調べてみたところ http://www.yalo.net/notabene/linux/dovecot/dovecot_quota.html に記載されている設定で一応できそうです。
    テスト環境で試行してみましたが、まだ完全に動作の確認できていません。

    ----

    content_filter を使った場合のフォルダ振り分けですが、うちの場合、virtual の代わりに dovecot で、バーチャルドメインのメール配信を処理しているので、メールの振り分けは、Dovecot の sieve プラグイン ( https://wiki.dovecot.org/Pigeonhole/Sieve ) で行なっています。

    設定例を探してみたところ、
    virtual の代わりに dovecot を使う方法は、
    http://akira-arets.blogspot.com/2016/05/postfix-dovecot-lda-instead-of-virtual.html に
    Dovecot の プラグイン sieve については https://jyn.jp/dovecot-sieve-spamassassin/ に記載がありましたので、参考にしてください。

    キャンセル

  • 2018/08/04 14:15

    すぐにご回答いただき、ありがとうございます。
    教えていただいたサイトを参考に設定したところ、想定した動作になりました。
    最終的に設定したのは
    ----
    ・Dovecot の mail_plugins で「quota」を設定
    ・[90-quota.conf]
    plugin {
    quota2 = dict:Domain quota:%d:proxy::quota2
    quota = dict:User quota::proxy::quota
    }
    plugin {
    quota_grace = 10%%
    # 10% is the default
    quota_status_success = DUNNO
    quota_status_nouser = DUNNO
    quota_status_overquota = "552 5.2.2 Mailbox is full"
    }
    ・[dovecot.conf]
    dict {
    quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
    quota2 = mysql:/etc/dovecot/dovecot-dict-sql2.conf.ext
    }
    service quota-status {
    executable = quota-status -p postfix
    inet_listener {
    port = 12340
    # You can choose any port you want
    }
    client_limit = 1
    }
    ・[10-master.conf]
    service dict {
    # If dict proxy is used, mail processes should have access to its socket.
    # For example: mode=0660, group=vmail and global mail_access_groups=vmail
    unix_listener dict {
    mode = 0600
    user = vmail
    group = vmail
    }
    }
    ・[postfix/main.cf]では smtpd_recipient_restrictions に 「check_policy_service inet:localhost:12340」 を設定。procmail でスパムチェックするので「virtual_transport = procmail」はそのまま。
    ・[dovecot-sql.conf.ext]で quota_rule、quota2_rule を設定
    user_query = SELECT CONCAT('/home/vmail/', Maildir) AS home, 5000 AS uid, 5000 AS gid, CONCAT('*:bytes=', mailbox.quota) as quota_rule, CONCAT('*:bytes=', mailbox2.quota) as quota2_rule FROM mailbox,mailbox2 WHERE mailbox.username = '%u' AND mailbox2.username = '%d'
    iterate_query = SELECT username FROM mailbox
    ・[/etc/dovecot/dovecot-dict-sql.conf.ext]は新しく作成
    connect = dbname=mail user=mail_admin host=localhost password=fa3z4x2T
    map {
    pattern = priv/quota/storage
    table = used_quota
    username_field = username
    value_field = bytes
    }
    map {
    pattern = priv/quota/messages
    table = used_quota
    username_field = username
    value_field = messages
    }
    ・[/etc/dovecot/dovecot-dict-sql2.conf.ext]も新しく作成、上記の table を used_quota2 にしただけ。
    ----
    上記のような設定になりました。mailbox、mailbox2とused_quota、used_quota2はドメインと個別アドレスを別々のDBにしましたが、もしかしたら一つにしても問題ないのかもしれません。
    当方のテスト環境では今のところ正常に動作しているように見受けられます。
    ただ設定上の問題か不明ですが、メールを受信したときの現容量の即時反映がうまくできませんでした。どのタイミングかは不明ですが、いつのまにか反映されています。doveadmコマンドで再計算できるようですが、今のところ、そこまで厳しくチェックするつもりはないので大丈夫だと思っています。

    sieve を使用するほうは動作確認していませんが、プロセスを dovecot にして、Dovecot で容量チェック、スパムチェックすれば実現できそうに思います。
    ご教示いただき誠にありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Postfix

    266questions

    Postfixは、電子メールサーバソフトウェアで、 メールを配送するシステムMTAの一種です。