outlook 使用ldap通訊錄出現亂碼

對舊時代麻瓜來說(舊麻瓜), 收發信軟體就只有 m$ 的outlook , 因公司ldap通訊錄橫跨三個不同語系,三個不同網域服務器, 導致outook 2013,2016,2019 , 使用ldap 通訊錄的時候, 台灣舊麻瓜查看簡體,越南文, 會出現亂碼, 當然中國舊麻瓜看繁體,越南文也一樣會出現亂碼

後來google一下, 發現windows 10, windows 11的語言與地區, 可以點選Beta,使用UTF8提供全球語言支援, 解決問題

解決方法如圖示

重開機之後, 就不會有亂碼了

rspamd設定灰名單(greylist)

原本我建議大家不要用灰名單, 原因是:
1. 等很久,
2. 系統自動發信,無法通過灰名單測試, 但是該信件又是極其重要
因此建議停用灰名單功能.

但近年來廣告信,釣魚信多到影響資通安全, 我們就必須要開啟灰名單功能, 策略如下:

1.若是重要信件,先加入灰名單裡面的白名單,
2.若通過灰名單測試後, 可以設定成長時間不用再通過灰名單測試

以下是rspamd開啟灰名單功能

  • 修改 local.d/greylist.conf
enabled = true;
expire = 365d; # 1 day by default
timeout = 5min; # 5 minutes by default
  • 修改 override.d/actions.conf
# 若郵件高於4分, 就觸發灰名單功能
greylist = 4;# Apply greylisting when reaching this score (will emit `soft reject action`)
  • 灰名單白名單功能,
    將不需要觸發灰名單的網域加入到 local.d/greylist-whitelist-domains.inc

android kotlin 呼叫(發起)email app

好多種版本, 終於找到可以用的

  • 第一種寫法(比較適合寫慣java的老師傅)
val email_intent =  Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:"));
    email_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    email_intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("your@email.com"))
    email_intent.putExtra(Intent.EXTRA_SUBJECT, "問題回報");
    email_intent.putExtra(Intent.EXTRA_TEXT,"");
    try {
      startActivity(Intent.createChooser(email_intent, "請選擇郵件軟體"))
    }catch (e:ActivityNotFoundException){
      Toast.makeText(myactivity, "請確認並設定好郵件收發軟體", Toast.LENGTH_LONG).show()
    }
  • 第二種寫法
val email_intent = Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:")).apply {
    addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    putExtra(Intent.EXTRA_EMAIL, arrayOf("your@email.com"))
    putExtra(Intent.EXTRA_SUBJECT, "問題回報")
    putExtra(Intent.EXTRA_TEXT, "")
  }
  try {
    startActivity(Intent.createChooser(email_intent, "請選擇郵件軟體"))
  } catch ( ex: ActivityNotFoundException) {
    Toast.makeText(myactivity, "請確認並設定好郵件收發軟體", Toast.LENGTH_LONG).show()
  }

postfix寄信認證改用dovecot

一直以來我都讓postfix使用 sasl 方式處裡寄信認證, 但是連結到多網域主控伺服器的時候, 就會出錯, 很麻煩.
經過測試 dovecot 可以使用多組 userdb , 與passdb , 達到一個mail server 支援多個ldap網域主控.

當然也能省下一個sasl的service

  • 修改dovecort的 conf.d/10-master.conf
service auth {
...
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    # Assuming the default Postfix user and group
    user = postfix
    group = postfix
  }
  ...
}

#以下設定為了相容outlook系統
auth_mechanisms = plain login
  • 修改postfix的main.cf
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

# On Debian Wheezy path must be relative and queue_directory defined
#queue_directory = /var/spool/postfix

# and the common settings to enable SASL:
smtpd_sasl_auth_enable = yes
  • 修改postfix的master.cf
submission inet n - n - - smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
  -o smtpd_sasl_security_options=noanonymous
  -o smtpd_sasl_local_domain=$myhostname
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o smtpd_sender_login_maps=hash:/etc/postfix/virtual
  -o smtpd_sender_restrictions=reject_sender_login_mismatch
 ...

參考:

https://doc.dovecot.org/configuration_manual/howto/postfix_and_dovecot_sasl/

CentOS安裝郵件紀錄分析軟體-SendmailAnalyzer

SendmailAnalyzer是老牌軟體了, 分析 maillog 製作成網站, 方便分析 , 軟體還在持續維護中呢

  • 安裝perl套件
yum install perl-CGI perl-CPAN perl-MIME-tools perl-GD*
  • github下載最新版後,安裝,設開機自動啟用
tar xzf sendmailanalyzer-x.x.tar.gz
cd sendmailanalyzer-x.x/
perl Makefile.PL LOGFILE=/var/log/maillog
make && make install
cp start_scripts/sendmailanalyzer.service /lib/systemd/system
  • 設定開機執行
systemctl enable sendmailanalyzer
systemctl start sendmailanalyzer
  • 網站設定
Alias /sareport /usr/local/sendmailanalyzer/www
<Directory /usr/local/sendmailanalyzer/www>
  Options ExecCGI
  AddHandler cgi-script .cgi
  DirectoryIndex sa_report.cgi
  #-- Apache 2.2
  #Order deny,allow
  #Deny from all
  #Allow from 192.168.1.0/24
  #-- Apache 2.4
  Require all denied
  Require ip 192.168.1.0/24
</Directory>
  • 設定cron 定期做快取 cache
    # SendmailAnalyzer log reporting daily cache
    0 1 * * * /usr/local/sendmailanalyzer/sa_cache > /dev/null 2>&1
    # On huge MTA you may want to have five minutes caching
    #*/5 * * * * /usr/local/sendmailanalyzer/sa_cache -a > /dev/null 2>&1
  • 因應logrotate會更換新的maillog, 加上更換maillog之後,重啟 SendmailAnalyzer
vi /etc/logrotate.d/syslog

################
systemctl restart sendmailanalyzer > /dev/null 2>&1 || true
################

這樣就可以透過瀏覽器查看狀態 http(s)://x.x.x.x/sareport/

不講武德的廣告信-email原始檔案header中關於寄件者email

通常我們透過廣告信給分機制, 可以另外給予"合法郵件服務器"發出來的信件給予高額的廣告判斷分數, 讓系統退件.

因為是合法的服務器, 很多很多都讓該服務器代管, 我們無法直接以 ip, 或是相關特徵, 阻擋服務器發信,
對於我們來說, 唯一的方式就是設定該廣告主email, 給予很高廣告分數, 就可以擋下來了.

煩的是有些郵件服務器使用amazon server當作mail server 發信, 原始檔案裏面的 Return-PathFrom 不一致 , 影響擋廣告機制判斷 , 造成這些人可以肆無忌憚, 不講武德一直發信, 而你怎麼設定該email或是網域, 都沒用, 根本擋不了.

Return-Path: <0101017f0f53948e-e5e68c2b-950e-4613-bd45-c0665e232ab5-000000@us-west-2.amazonses.com>
X-Original-To: xxx@xxx.com
Delivered-To: xxx@xxx.com
Received: from a27-63.smtp-out.us-west-2.amazonses.com (a27-63.smtp-out.us-west-2.amazonses.com [54.240.27.63])
From: =?UTF-8?Q?=E3=80=90iCheers_=E9=80=B1=E5=A0=B1=E3=80=91?= <newsletter@icheers.tw>

講武德的廣告信, Return-Path 與From 會一致

Return-Path: <solidwizard@s1.mailhunter.com.tw>
X-Original-To: xxx@xxx.com
Delivered-To: xxx@xxx.com
Received: from mx127.mailhunter.com.tw (mx127.mailhunter.com.tw [60.250.108.127])
From: =?utf-8?B?5a+m5aiB5ZyL6Zqb6IKh5Lu95pyJ6ZmQ5YWs5Y+4?= <solidwizard@s1.mailhunter.com.tw>

所以我們必須用另外一種作法, 掃描整個郵件headers, 只要符合該email 或 domain 就擋下來

以 Rspamd 的擋廣告機制來說,

修改 /etc/rspamd/local.d/regexp.conf

"RE_EMAIL_ICHEERS" = {
        re = '/@icheers.tw/i{body}';
        score = 15.0;
}
#只須改紅色部分

阻擋 icheers.tw 這個不講武德的廣告信 , 但是我還沒試出來完整email , 若寫完整email 還是會失敗, 有可能是bug.

g suite 替代方案-自架mail server , postfix+openldap

之前一直維護的是 postfix + M$ 的AD 認證 , 這也可以拿來取代google 代管的mail , 但是沒事還要生出windows server , 這錢花了就算了, 就怕一直要更新... 因此花了5天時間,認真研究 , 讓postfix + openldap 認證 , 做成docker images , 也提供範例架設docker openldap server .

值得注意的是 openldap 必須要吃進去 postfix 的 ldap schema 才能跟postfix整合(aliases) .

https://hub.docker.com/r/inmethod/docker-postfix-openldap

docker-如何複製未啟用container之image裏面資料

docker image還沒正式啟用變成container , 那裏面的資料如何抓出來呢? 答案應該也是暫時執行一下下, 趕緊複製後就刪掉該暫時container.

  • 只複製單一檔案
 docker run -v $PWD:/opt/mount --rm --entrypoint cat inmethod/docker-postfix-ad:1.2 /etc/postfix/main.cf > main.cf
  • 複製只個目錄(images需有sh)
#將images裏面的/etc/postfix 複製到目前目錄下
docker run -v $PWD:/opt/mount --rm -ti inmethod/docker-postfix-ad:1.2 bash -c "cp /etc/postfix/* /opt/mount/"
1 2 3 ... 5