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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Postfix

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

Q&A

解決済

1回答

6388閲覧

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

yahoo

総合スコア9

Postfix

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

0グッド

0クリップ

投稿2018/07/27 01:04

現在いろいろなサイトを調べながら
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/

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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/07/27 02:47

CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yahoo

2018/08/01 00:52

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

2018/08/02 04: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/ に記載がありましたので、参考にしてください。
yahoo

2018/08/04 05: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 で容量チェック、スパムチェックすれば実現できそうに思います。 ご教示いただき誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問