2019年8月8日 星期四

建立 forward-only mail server


動機就不寫了,這裡只寫重點:

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 分行寫是為了方便維護。實際上它是用分號隔開即可。
搞定!

沒有留言:

張貼留言