postfix関係(smtp & submission)のaccess制限が出来上がったので、今度はdovecotを確認することに。
先ずerror.logのチェック。
中身を見て驚いた。異常なaccessが沢山発生している、それも内部から。
ログとしてはこんな感じ。
|
1 2 |
2026-07-02 05:39:15 imap(WordPress)<16673><bRNWr5JVj+bAqAAk>: Fatal: setregid(510(vmail),6(mail)) failed with euid=509(admin): Operation not permitted permitted |
これに対応するため、Geminiさんに相談する(いつもの流れだ)が解決しない。
Geminiさんの応答もおかしな方向へと進んでいく。
数時間が経過。進み具合は全くなし。
別タブでGoogle AIさんに聞いた。
Dovecot のデフォルト設定では、パフォーマンス向上のために「1つの IMAP プロセスを使い回して、複数のユーザー接続を処理する」挙動(service_count = 0)をとることがあります。
- 最初に admin ユーザーがログインし、IMAP プロセスが UID 509 (admin) に切り替わります。
- 次に WordPress ユーザーが同じ IMAP プロセスに接続しようとします。
- すでに admin 権限になってしまっているプロセスは、root 権限を持たないため、別の UID 510 (vmail) へ再切り替えすることができません。
その結果、この Fatal: setuid… failed エラーが発生します。
こんなこと知らなかったよ。(涙)
対応法の解説ですよ。
10-master.confを編集する。
|
1 |
sudo nano /opt/local/etc/dovecot/conf.d/10-master.conf |
私の場合viなので置き換えて、編集するけれどね。
どこを編集するのか。
ここ(service_count)です。
|
1 2 3 4 5 6 7 |
service imap { # 1接続ごとにプロセスを終了させ、使い回しを防ぐ(セキュリティと複数UID環境の互換性のため) service_count = 1 # 必要に応じて、同時に起動できるプロセス上限を増やしておきます process_limit = 1024 } |
つまり、元々service_countは256とかに設定されていました。それだけ使い回すということですね。
|
1 2 3 4 5 |
% ps ax |grep imap 37836 ?? S 0:00.00 dovecot/imap 37840 ?? S 0:00.00 dovecot/imap 39554 ?? S 0:00.01 dovecot/imap [WordPress 192.168.0.36] |
dovecot/imapがずらずら出てきますね。これです。
問題となったのはdovecot/imap [WordPress 192.168.0.36]を使い回せなかったこと。
こういったdovecot/imapの寿命を1にして、誰かが使ったら落とす。つまり使い捨てにするってことですね。
その分、沢山立ち上げておけば対応できるだろうからprocess_limit = 1024で最大数を増やしておこうってことですね。
判り易い説明ですね。うん、AIさん素晴らしい。
それに、これ実はエラーを起こした(別のユーザーが使った)途端、dovecot/imapは落ちるから実質同じことなんですよね。
Geminiさんは「普通やらない設定」だから考えもしなかったらしい。
これについては責められない、macOSの固有の条件下だもの。Linuxでは絶対に起こらないらしい。(私は知らんよ)
お蔭でログはスッキリしました。
良かった、良かった。
その後port scannerが見つかったのでPFにぶち込んでおきました。
その時のscript載せときましょうか。
|
1 |
grep "failed" /opt/local/var/log/dovecot/info.log | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b"| grep -v "192\.168\.[0-9]" | grep -v"49.96.23[2-9]" | sort -u | pfctl -t murus.blacklist -T add -f - |
解説いるかな?
1番目のgrepでfailedの行を拾って
2番目のgrepでip抽出して(ここはGeminiさんが頑張ったところですよ)
3番目のgrepでlocalを除いて
4番目のgrepでdocomo回線のip除いて(ここは自分の使っているip rangeに合わせてね)
sort -uで重複除いて、最後に出てきたipは全部纏めてpfctlに送り込む
以上です。
これを/usr/local/sbinにでもadd_pf_dovecot.shとか適当に名前つけて置いておけばsudo /user/local/sbin/add_pf_dovecot.shで叩いて来た奴を追い出せますよ。

