自製 docker mail server 支援AD ,使用Rspamd過濾廣告

最近對 Rspamd 非常有興趣, 因為該套件提供管理介面 , 所以我立馬捨去amavisd-new老牌套件, 改用Rspamd.

目前只知道啟用clamav防毒, 與預設的廣告防禦功能, 也不知道效果如何, 以後會慢慢研究的.

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

免費 g suite lagacy , 2022年7月要停用, 該自架郵件伺服器了

我傾向於自架, 一樣規劃兩個方向

第一個方向, 中小企業使用 postfix + amavisd + active directory , 或是 postfix + rspamd + active directory

第二個方向, 個人網域專用 , 大概就是docker上面找一找, 不需要跟AD扯上關係.

我2/5回台灣, 需要隔離11天, 因此花了兩天時間, 於docker中找了一款 mailu 很棒的mail server.

試用了一下, 很好用, 可以支援多網域, 使用最新的rspamd取代老牌amavisd-new .

mailu 安裝簡單, 若是使用docker架設, 官方網站提供設定檔案製作工具 https://setup.mailu.io , 回答完問題, 自動產生docker-compose檔案,與環境設定檔案.

而mailu 使用 rspamd 套件管理防毒, 廣告信,, 灰名單, rate limit, 等等功能, 讓我非常驚艷 , 更棒是該套件有網頁管理功能, 我以後要把amavisd-new換掉, 都改成rspamd

以下是docker安裝時, 遇到letsencrypt的問題的解法,mailu 內建letsencrypt, 但我一律改成使用自己的reverse proxy

1. 修改mailu.ini , 把REAL_IP_FROM 改成reverse proxy ip
REAL_IP_HEADER=X-Real-IP
REAL_IP_FROM=x.x.x.x,y.y.y.y.y
2. 利用scripts 把 reverse proxy 中的letsencryp 的認證檔案放到 docker-compose目錄下的 certs 裡面 , 檔名為
cert.pem ,  key.pem

mailu使用network bridge 的方式, 所以maillog看不到外界真實存取的ip , 若需要fail2ban 將無法正常使用, 官網說可以用rate limit方式取代, 但我覺得這不是重點, 重點在於maillog無法反映真實ip紀錄, 這企業很難認同.

postfix 關於rate limit設定

一些基本限制相關連線的基本設定

##
## 效能調教, 視情況修改
##
#default_process_limit = 150
#qmgr_message_active_limit = 40000
#qmgr_message_recipient_limit = 40000
#default_destination_concurrency_limit=100
#default_destination_recipient_limit=100
#default_process_limit=200
#smtp_mx_session_limit=100
#smtp_destination_concurrency_limit=100
#maximal_backoff_time = 1000s
#minimal_backoff_time = 300s

##
## 阻擋惡意連線
## 
smtpd_error_sleep_time = 1s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20

##
## 用戶端每60秒,最多連線20次, 且同時只能10個連線
##
anvil_rate_time_unit=60s
smtpd_client_connection_rate_limit=20
smtpd_client_connection_count_limit=10

,

postfix ldap測試/查詢帳號是否存在

postfix 很常見搭配微軟的AD , AD的設定檔長這樣, 檔案名稱為 xxx.cf

server_host = <AD server IP>
search_base = ou=xx,dc=yyy,dc=com
version = 3
query_filter = (&(objectclass=*)(mail=%s))
result_attribute = samaccountname  #Account from DC
result_format = %s/Maildir/
bind = yes
bind_dn = cn=zzz,cn=Users,dc=yyy,dc=com
bind_pw = password

配合以下指令,可以用來查詢email對應的帳號是否正確

postmap -q  abc@yyy.com ldap:/directory/xxx.cf

這樣就可以測試帳號是否存在了

centos 7 裝了docker , 限制內網透過nat上網會失效

一般公司省錢的作法, 就是一台linux主機 , 充當上網(nat) 分享器,
但後來該主機又搞了docker .
可是docker 預設網路(iptables) 都開放, 很麻煩, 造成原本firewall-cmd出問題, 無法限制內部ip上網, 所有ip都能上網, 超麻煩的,

後來發現iptables也能運作, 於是就搭配 iptables 限制內部ip上網

iptables -I FORWARD 1 -s 192.10.20.0/24 -j DROP # 限制全部內網ip透過nat上網
iptables -I FORWARD 1 -s 192.10.20.101/32 -j ACCEPT # 讓101能上網

VirtualBox裝Rocky Linux後,再裝guest additions

  • Insert Guest Additions CD image

此時系統會嘗試安裝, 結果當然失敗

  • 安裝 kernel-devel kernel-headers

yum install kernel-devel-xxxx kernel-headers-xxxx

  • 安裝gcc make perl

yum install gcc make perl

  • 安裝libelf

yum list |grep libelf #找出套件

yum install elfutils-libelf* #後面接星號, 全部安裝

  • 執行 ./VBoxLinuxAdditions.run

當然會失敗

  • 執行 rcvboxadd

/sbin/rcvboxadd quicksetup all

  • 接下來就是再安裝看看 , 有可能會移除, 然後再重安裝一次, 然後重開機
    ./VBoxLinuxAdditions.run

Linux 將命令模式下執行程式,所輸出的紀錄引導到檔案

以java為例,

System.out.println(“log …”)

可以在console下看到結果, 但我們若需要未來分析使用, 就必須導到檔案.

執行時可以增加以下參數

java  -jar xxx.jar   > a.out  2>&1

以前常常搞不清楚, 現在也還是一樣不太懂, 沒差拉, 這樣就可以用了, 然後 tail -f a.out 就可以在螢幕看到即時訊息, 事後也能將a.out保存起來呢.

1 ... 5 6 7 8 9 ... 14