你必須懂的postfix+amavisd擋廣告順序

就連我都會誤解!
以為只要在postfix的main.cf裡面設定各式各樣的擋廣告方式(包含參考黑名單網站),就可以高枕無憂了,
可是事情並不是我們憨人想得這麼簡單
擋廣告總有順序的.

  1. amavisd 優先
    這部分很重要,有時候很多廣告商,都利用gmail , amazons發送廣告信, amavisd 很容易直接pass, 要解決這問題, 就只能土法煉鋼, 將廣告的網域,email寫到amavisd的黑名單上.
  2. postfix 次要
    若amavisd認定pass , 這邊再怎麼設定都沒用, 因為根本不會跑到這裡來.
    若amavisd沒有認定pass, 也沒認定是廣告(分數不足), 就會跑到這裡來,

我的設定, 就是讓amavisd可以定義黑白名單, 接下來才是設定postfix本身的名單限制
推薦看一下我製作的docker mail server設定
https://github.com/WilliamFromTW/docker-Postfix-AD

啟用postgrey心得

因為postgrey的機制會造成收信延遲, 所以必須設定白名單,與自動白名單,讓常用的郵件不再受限制.
1.白名單可在/etc/postfix/postgrey_whitelist_clients.local 新增
2.自動白名單,以centos 7為例子, 可在 /etc/sysconfig/postgrey 新增, 意指35天內,只要成功三次,就會一直是白名單成員
POSTGREY_OPTS="--delay=60 --auto-whitelist-clients=5 --max-age=35"

dovecot如何承接Active Directory的額外變數

這種小細節原本不想寫出來,但是很容易忘,又特別重要,
我在 dovecot v2.2發現的, 舉dovecot-ldap.conf.ext 為例子, 如何將AD的mail屬性值承接起來

user_attrs = mail=sieve=/home/vmail/%$/sieve/dovecot.sieve, mail=sieve_dir=/home/vmail/%$/sieve
上面粗黑體的 mail 傳送給sieve與sieve_dir這兩個變數(沒錯,你沒看錯,一堆等號,超怪異的), 
而這兩個變數利用 %$ 這個來承接最左邊的mail的數值:
例如AD上某帳號的數值為:test@kafeou.pw 
我們就能輕易變更整個dovecot系統的變數值,而且彈性很大,結果如下:
  sieve = /home/vmail/test@kafeiou.pw/sieve/dovecot.sieve
  sieve_dir = /home/vmail/test@kafeiou.pw/sieve

另外要注意的地方是, 這些變數原本所在的位置, 千萬不要移除, 就算預設值不對也沒關係(會被蓋過去),

否則會被當作沒此變數

CEntOS 7.8 postfix 新增lda 與 managesieve功能

2017 年曾經在centos 7.3版本讓postfix擁有vacation功能, 當時 dovecot 是1.x版 , 後來不慎直接upgrade 到2.x, 結果整個都不能用, 很慘,
之前2014年也在CentOS 6.x 新增過vacation, 也是耗了極大精神才弄出來. 這就是opensource的最大問題, 他可以直接停止更新舊版本, 新版本又必須大改才能相容.

現在我在 CentOS 7.8 再次挑戰lda managesieve功能, 請到這觀看,

帳密都是guest/guest
https://how.itworks.ltd/iammis/技術文章/HowTo/10031_(CEntOS7.8)新增lda_managesieve功能.txt

cetnos 7 + postfix 新增dkim功能

  1. 安裝

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y opendkim

  1. 產生private key與dns的TXT Record

opendkim-genkey -d <domain name>
cp default.* /etc/opendkim/keys
chown -R opendkim:opendkim /etc/opendkim

  1. 修改/etc/opendkim.conf
    確認該設定檔案有以下的設定( KeyFile /etc/opendkim/keys/default.private 要mark起來 )

Mode sv
Socket inet:8891@127.0.0.1
Canonicalization relaxed/simple
Domain <domain name>
#KeyFile /etc/opendkim/keys/default.private
KayTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
InternalHosts refile:/etc/opendkim/TrustedHosts

  1. 修改 /etc/opendkim/KayTable

default._domainkey.<domain name> <domain name>:default:/etc/opendkim/keys/default.private

以 test.com 為例子

default._domainkey.test.com test.com:default:/etc/opendkim/keys/default.private

  1. 修改 /etc/opendkim/SigningTable

*@<domain name> default._domainkey.<domain name>

以test.com為例子

*@test.com default._domainkey.test.com

  1. 修改 /etc/opendkim/TrustedHosts

127.0.0.1
<mail host name>
<domain name>

以 test.com 為例子

127.0.0.1
mail.test.com
test.com

  1. 新增以下設定 /etc/postfix/main.cf

smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept

  1. 啟用service

systemctl start opendkim ; systemctl enable opendkim ; systemctl restart postfix

  1. 測試
    • opendkim-testkey -x /etc/opendkim.conf 若無錯誤訊息代表成功
    • 測試網站 https://www.appmaildev.com/

安裝roundcube心得

前陣子弄了docker image postfixad , 可以快速與網域主控站整合
既然有了mail server 通常還要提供roundcube這類的webmail ,

但是問題來了

登入webmail的帳號與email不相同時, 就很麻煩, 例如:
登入的帳號是 001 , 可是emai卻l變成 001@kafeiou.pw
這困擾我很久, 甚至想要自己寫一個roundcube的plugin , 想要登入的時候, 改寫email,

後來發現roundcube有個plugin很好用, 就是 new_user_dialog , 啟用後,第一次登入,會強迫設定名字與email就好啦, 哈

以下列出docker 安裝roundcube方式

docker run -e ROUNDCUBEMAIL_DEFAULT_HOST=tls://<郵件主機> -e ROUNDCUBEMAIL_SMTP_SERVER=tls://<郵件主機> -p 8080:80 -d roundcube/roundcubemail


docker快速建立支援Active Directory的Mail Server

每次需要建立一套 Active Directory + Postfix Mail Server + amavisd , 都會讓我覺得困擾, 因為設定複雜, 枯燥也乏味

因此弄了一個docker 版 postfix mailserver 支援微軟網域伺服器, 這樣就方便多了
功能不多, 但基本防毒, 簡易擋廣告, 加密證書(Let's Encrypt), aliases, 信箱限制內部使用, open dkim等等都支援.

Dockerfile 源碼
----
https://github.com/WilliamFromTW/docker-Postfix-AD

docker image
----
https://hub.docker.com/r/inmethod/centos-7_postfix_amavisd_active-directory

簡易筆記-使用docker安裝iredmail

iredmail 是一個很強大的軟件,看文件開發者應該是大陸人,很牛!

我12年前就開始用這個軟件, 而且現在還在用!

雖說免費版不支持微軟的AD, 但很多小公司本來就沒有這些配置, 所以沒差.

目前這系統現在已經很穩定很成熟, 非常很適合小公司使用, 大推薦,

而且最近我才發現一位應該是俄羅斯人有持續提供docker安裝方式. https://hub.docker.com/r/lejmr/iredmail , 又更方便了.

以下是我安裝的心得, 有空會持續更新

1. 用volume的方式與docker建立對應, 方便以後備份升級
2. 與官網建議的不同,我移除灰名單模組,這東西又愛又恨,愛的是擋廣告很猛,恨的是要對方重發信,常常被使用者罵收信很慢.
3. 安裝後, 輸入 https://ip:8443/iredadmin  就可以用postmaster@<網域> 登入, 接下來就可以新增網域,或是使用者.
4. 輸入https://ip:8443/mail , 或是 https://ip:8443/sogo 
   使用者登入@<網域>  就可以收發信了
5. 使用管理者也可以收信, 最初系統自行發送的三封信很重要, 例如要dns設定DKIM之類的
6. 我有將/etc/letsencrypt 對應到iRedMal,打算用來取代自簽的證書
docker volume create iredmail_mysql
docker volume create iredmail_vmail
docker volume create iredmail_clamav
docker volume create iredmail_log
docker volume create iredmail_postfix_conf
docker volume create iredmail_amavisd_conf
docker run -p 8443:443 -p 110:110 -p 25:25 -p 587:587 -p 143:143 -p 993:993 -p 995:995 \
            -h <主機名稱(含網域),hostname.domain> \
            -d --restart always \
            -e "MYSQL_ROOT_PASSWORD=password" \
            -e "SOGO_WORKERS=1" \
            -e "TZ=Asia/Taipei" \
            -e "POSTMASTER_PASSWORD={PLAIN}password" \
            -e "IREDAPD_PLUGINS=['reject_null_sender', 'reject_sender_login_mismatch', 'throttle', 'amavisd_wblist', 'sql_alias_access_policy']" \
            -v iredmail_mysql:/var/lib/mysql \
            -v iredmail_vmail:/var/vmail \
            -v iredmail_clamav:/var/lib/clamav \
            -v iredmail_log:/var/log \
            -v iredmail_postfix_conf:/etc/postfix \
            -v iredmail_amavisd_conf:/etc/amavisd \
            -v /etc/letsencrypt:/etc/letsencrypt \
            -v /etc/letsencrypt/live/<主機網域>/privkey.pem:/etc/ssl/private/iRedMail.key \
            -v /etc/letsencrypt/live/<主機網域>/fullchain.pem:/etc/pki/tls/certs/iRedMail.crt \
            --name=iredmail lejmr/iredmail:mysql-latest

經過試用一個月, 有一個目前無法解決的問題,就是重開docker時,dovecot或mysql會殘留舊的pid,造成dovecot與mysql啟動失敗的狀況, 此時只能手動刪除 /var/run/dovecot/master.pd or /var/lib/mysql/mysql.sock 等檔案, 然後再切換目錄到/services 找出重啟的shell scripts ,才能解決問題

好消息是官方也著手進行iredmail docker官方版 https://hub.docker.com/r/iredmail/mariadb
目前還是beta狀態,不適合正式上戰場,但我很期待 - 2020/05/06
1 2 3