你必須懂的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"

老派的outlook 使用習慣

我個人很喜歡老派這個字, 英文叫做 old school


周遭的人有好多好多老派的人, 他們不喜歡網頁版郵件, 只習慣使用單機版的outlook收發信件, 作業系統更是windows不做他想.
因為公司多了一個越南廠, 考量初期VPN自架, 不作為主力, 該廠的通訊錄就無法透過vpn, 以LDAP方式分享 .

可是outlook通訊錄就只有兩種 : MAPI, LDAP
MAPI可以是離線版, LDAP必須連線才能使用

偏偏老派的做風就是: 離線也要能寫寫郵件, 看看郵件(pop3完全下載), 與存取完整的通訊錄

這下好了, 我得準備離線版的通訊錄, 爬文好幾天, 終於找到一個方式跟大家分享:

  1. 網域伺服器新增排程, 可下指令自動產生csv版本的通訊錄
  2. 自己開發一個app , 方便老派的人使用, 將csv檔案自動匯入到outlook通訊錄

網域伺服器上, 可透過powershell執行指令,匯出csv通訊錄

Get-ADUser -Filter 'mail -like "*<domain>"' -SearchBase "<search base>" -Properties * | Select -Property DisplayName,GivenName,Surname,mail,Title,Department,Office | Export-CSV "<csv file location>" -NoTypeInformation -Encoding UTF8

以test.com為例子

Get-ADUser -Filter 'mail -like "*test.com"' -SearchBase "OU=taipei,DC=test,DC=com" -Properties * | Select -Property DisplayName,GivenName,Surname,mail,Title,Department,Office | Export-CSV "c:\aaa.csv" -NoTypeInformation -Encoding UTF8

我開發的windows app, 使用visual studio 2019 community version , 語言使用vb

https://github.com/WilliamFromTW/ImportFromCsvToOutlook
https://github.com/WilliamFromTW/ImportFromCsvToOutlook/releases

因為時間不多, 未來也不打算花太多時間在通訊錄上面, 爬文的過程只能找到零星vba for outlook版本或是程式片段, 四處碰壁, 無人可以解答, 頂多就是要你教老派的人, 使用outlook匯出匯入功能, 一堆步驟, 將csv檔案匯入到outlook, 這簡直是天方夜譚.
因此就自行開發,並且開源, 這樣直接編譯成可安裝執行的APP, 讓他們透過定期提供的csv檔案, 就能很方便匯入通訊錄了.

roundcubemail 加上Active Directory 通訊錄範例

修改config/config.inc.php
網域伺服器 192.168.1.1
網域: test.com

$config['address_book_type'] = 'ldap';

$config['ldap_public']['Global'] = array(
'name' => '台灣總公司',
'hosts' => array('192.168.1.1'),
'port' => 3268,
'user_specific' => false,
'base_dn' => 'dc=test,dc=com',
'bind_dn' => 'cn=administrator,cn=users,dc=test,dc=com',
'bind_pass' => 'password',
'ldap_version' => 3,
'search_fields' => array (
'mail','cn',),
'name_field' => 'cn',
'email_field' => 'mail',
'writable' => 'false',
'scope' => 'sub',
'sizelimit' => 6000,
'sort' => 'cn',
'filter' => '(&(mail=)(|(&(objectClass=user)(!(objectClass=computer)))))',
'fuzzy_search' => true,
'global_search' => true
);

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/

快速新增網域ldap通訊錄(outlook 2016)

以前要新增ldap通訊錄,非常麻煩, 一堆設定, 昨天找了一些資源, 包括想要從registry方面下手都失敗, 好險有人寫了一個超方便的程式, 可以快速新增ldap 通訊錄, 感謝啊!

https://github.com/andreighita/MAPIToolkit

官網很詳細寫了說明, 我也整理了一下給大家下載

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

1 2