動機就不寫了,這裡只寫重點:
https://github.com/huan/docker-simple-mail-forwarder
- 以 alpine 為基底
- 在跑 docker run 的時候要指定 SMF_CONFIG 跟 TZ 等環境變數,指定完之後跑起來就可以做 mail forward 了。真的很方便。
- docker 裡面實際上是跑 postfix,用 virtual user table 做轉寄。
- 自己跑 smf 的主要原因是我要知道轉寄信件的下落... 之前使用 forwardemail.net 在 DNS 裡直接加 TXT 也是很方便,但是有信寄丟時完全沒有線索可以找。所以 mail log 是修改重點
- 跑起來的時候可以看到 syslog-ng 的警告:設定檔版本太舊。可見裡面用的是 syslog-ng,目前的版本用的是 3.13 而設定檔裡的 version 是 3.9。實際上並不會造成什麼問題,不過想去掉警告訊息的話,就把 install/syslog-ng.conf 裡的 version 改掉
- syslog-ng 是把紀錄檔整合起來的工具,研究過幾個網頁後可以看到它的設定概念很簡單。指定來源 source { },過濾條件 filter { },還有目的 destination { }。
- 因為我的重點在 mail log,所以我把 source 調整成
source src {
system();
internal();
}
只收系統跟 syslog-ng 自己的訊息,然後在 filter 區塊指定 mail:
filter f_mail {
facility(mail);
}
再把它寫到目的檔去
destination d_mail {
file("/var/log/postfix-mail.log" persist-name("maillog"));
} - log 當然不會是寫在 docker container 裡面的 /var/log,所以在跑 docker run 時要透過 -v 參數掛載外部的目錄進去。
- 改好 install/syslog-ng.conf 後,重新 build docker image,用它給的 Dockerfile 即可
docker build -t smf:0807-1 . - 把 SMF_CONFIG 跟 TZ 等環境變數,還有執行 docker 的指令寫在一個 shell script 裡
# cat smf.env
#!/bin/bash
export SMF_CONFIG='franklin@sunjun.com.tw:fweng.ef@gmail.com;service@sunjun.com.tw:fweng.ef@gmail.com;'
export SMF_CONFIG="$SMF_CONFIG;franklin@sunjun.tw:fweng.ef@gmail.com"
export SMF_CONFIG="$SMF_CONFIG;service@sunjun.tw:fweng.ef@gmail.com|wally.lian@gmail.com"
export TZ='Asia/Taipei'
echo "Running simple mail forward on `date`..." >> /tmp/smf.log
docker run -t -d --restart=always -e SMF_CONFIG="$SMF_CONFIG" -e TZ="$TZ" -v /var/log/docker:/var/log -p 25:25 smf:0807-1 - 把每個 mail alias 分行寫是為了方便維護。實際上它是用分號隔開即可。
搞定!