Dovecot LMTP

[華語, cmn-Hant-TW]

花了不少時間測試,終於讓 Dovecot LMTP 能正常運作了。會用 lmtp 的原因是 sieve 會用到,對於 sieve 來講 dovecot 有支援 lda 跟 lmtp 這兩種方式,評估了一下 lmtp 在非 virtual user 的環境比較簡單,所以就採用 lmtp 方案,用到的 ports 主要有:

  • mail/postfix
  • mail/dovecot2
  • mail/dovecot2-pigeonhole

在之前的嘗試中,不斷的遇到像是這樣的錯誤:

auth: passwd(whsyu@pighead.cc): unknown user
550 5.1.1  User doesn't exist: whsyu@pighead.cc (in reply to RCPT TO command))

這篇這篇有提到,問題是因為從 postfix 傳到 dovecot lmtp 的使用者名稱帶 domain,不過系統用的使用者名稱當然是沒有帶,所以要告訴 lmtp 使用者名稱的格式,不過照那兩篇的改法怎麼改都還是會吃到一樣的錯誤,不管是 pam 或是 ldap 認證結果都一樣。不過第二篇有提到 auth_username_format 這個參數,查了一下說明文件後發現 n 會把 domain 去掉,然後 L 會把大寫通通變成小寫,所以其實只要加 %Ln 就不會再吃那個錯誤,而整個設定就會變成這樣: (只列出和 lmtp/sieve 有關的部份)

/usr/local/etc/dovecot/dovecot.conf
auth_username_format = %Ln
protocols = lmtp sieve
service managesieve-login {
}
 
service managesieve {
}
 
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0660
    user = postfix
  }
  client_limit = 1
}
 
protocol lmtp {
  mail_plugins = sieve
}
 
plugin {
   # Used by both the Sieve plugin and the ManageSieve protocol
   sieve = ~/.dovecot.sieve
   sieve_dir = ~/sieve
}

關於 sieve 的部份,其實沒啥好設的,client_limit = 1 則是因為我們的系統還有 mbox (當初會用 dovecot 就是因為要讓 mbox 跟 maildir 和樂相處),而 dovecot 要求在有 mbox 的環境下一定要下這個參數,所以就把他加上去。

/usr/local/etc/postfix/main.cf
mailbox_transport = lmtp:unix:/var/spool/postfix/private/dovecot-lmtp

非 virtual user 的模式要加的是這個,如果是 virtual user 的話要用 virtual_transport,後面的檔案位置要跟 dovecot.conf 裡面的設定一樣才會動,設定完重開 dovecot 跟 postfix 之後應該就 ok 了。

Posted in FreeBSD. Tags: , , , , . No Comments »

postfix 純收不寄

[華語, cmn-Hant-TW]

之前因為某個需求,要暫時擋掉一台 postfix mail server 寄外部信的功能。找了一下發現其實並不會很困難。在這一篇有提到直接修改 master.cf 即可,把他改成這樣:

smtp      unix  -       -       -       -       -       local
relay     unix  -       -       -       -       -       local
local     unix  -       n       n       -       -       local

重點在改最後一行,smtp, relay 本來都是 smtp,通通改成 local 後就會寄不出去了,這樣的設定不會影響收信 (因為收信就是 local),local 寄 local 當然也沒問題,不過對外發信會用到的 smtp 或是要 relay 的話那就完全出不去了,完全符合只擋寄外部信的要求。

不過要注意的是雖然暫時是寄不出去沒錯,不過其實信也只是暫時擋到,等你重新開放後 postfix 就會一次一起寄出去,如果剛好有大量信件卡住的話要特別注意就是了。

Posted in FreeBSD. Tags: , . No Comments »

postfix 收不到 gmail 的信

[客家話, hak-Hant-TW]

有兩條連外的線行沒共條路出去,有一條是給 NAT 底肚的電腦連出去,有一條就是伺服器專用的,毋過有 NAT 那條較快,有一些服務咩是走那條,有一隻網址的信箱咩是用這條來收信。

毋過堵到一隻太問題,就是 gmail 寄來的信收毋到(很像 facebook 的咩收毋到),其他的又沒問題,是講寄行別條線那隻信箱咩是沒問題,看一下 /var/log/maillog 底肚看到按仔的東西:

Jul 28 02:12:25 mail postfix/smtpd[40005]: connect from mail-iw0-f173.google.com[209.85.214.173]
Jul 28 02:17:25 mail postfix/smtpd[40005]: timeout after EHLO from mail-iw0-f173.google.com[209.85.214.173]
Jul 28 02:17:25 mail postfix/smtpd[40005]: disconnect from mail-iw0-f173.google.com[209.85.214.173]

看起來是 gmail 連上來,postfix 等 5 分鐘等毋到 gmail 餵東西給他,他就切斷連線了,尋了一下看到這篇 postfix mailing-list 有寫到共樣的問題,他講問題是防火牆 (firewall) 擋掉,按仔聽起來當有道理,毋過這條線主要是 NAT 用的,改 firewall 規則較麻煩,解決方法就變作換一條線來用較快了,改一下 DNS 的 MX 就換好了,毋會影響太大。

改過以後 gmail 就收的到了,facebook 就不知了看有閒再來試看看。