前回の記事で予告した通り、今回はSMTPブラックホールサーバをDockerで作る方法を紹介します。
*Docker自体はインストールされている状態からスタートです。
Docker build用のディレクトリ準備
# mkdir testdir
このtestdirの下に、以下のファイルを準備していきます。
Dockerfile
main.cf
master.cf
run.sh
Dockerfileの準備
FROM alpine:latest
RUN apk --update add postfix
&& rm -rf /var/cache/apk/*
ADD main.cf /etc/postfix/main.cf
ADD master.cf /etc/postfix/master.cf
ADD run.sh /run.sh
ENTRYPOINT ["/run.sh"]
main.cfの準備
前回のmain.cfファイルをコピーして使います。defaultから変わった項目は以下のとおり。
compatibility_level=2 (前回と違い、この項目を入れます)
myhostname = example.com
mynetworks = 0.0.0.0 (今回は制限なしにしますが、注意してください)
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
local_recipient_maps =
master.cfの準備
前回のmaster.cfをコピーして使います。defaultから変わった項目は以下のとおり。
smtp inet n - n - - smtpd
-o content_filter=discard:
-o smtpd_client_restrictions=permit
-o smtpd_recipient_restrictions=permit,reject
run.shの準備
以下のようなスクリプトrun.shを書きます。
# !/bin/sh
postfix start
run.shに実行権限を与えます。Dockerfileの中に書いてもOKです。
# chmod 777 run.sh
Docker build
必要なファイルの準備が終わりましたので、Dockerをbuildします。タグはtestとします。
# docker build -t test .
Docker run
Dockerを立ち上げます。
# docker run --rm -i -t -p 25:25 test
確認
docker psコマンドでこのDockerが上がったことが確認できます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d6d66d24db2 test "/run.sh" 7 seconds ago Up 7 seconds 0.0.0.0:25->25/tcp vibrant_mccarthy
netstat -nlpコマンドでこのDockerが25番Portを上げていることが確認できます。
tcp6 0 0 :::25 :::* LISTEN 31919/docker-proxy-
telnetコマンドで接続するとpostfixがバナーを返してくれます。
# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 example.com ESMTP Postfix
これでDockerを使ってローカル環境にメールサーバを立ち上げることに成功しました。Dockerなので色んな環境で使えて便利です。
追記: Dockerhubに公開しました (2019.8.6)
このDocker imageをDockerhubに公開しました。
docker pullして使ってください。
docker pull qualitiaco/smtpblackhole
*関連記事
受けたメールをすべて捨てるSMTPブラックホールサーバの作り方①
[受けたメールをすべて捨てるSMTPブラックホールサーバの作り方②]
(https://qiita.com/qualitia_cdev/items/85aaffcd5fddae5afb4c)
[受けたメールをすべて捨てるSMTPブラックホールサーバの作り方③ - Dockerを使う]
(https://qiita.com/qualitia_cdev/items/7f165e5f7e62e46ebe2b)