Edited at

受けたメールをすべて捨てるSMTPブラックホールサーバの作り方③ - Dockerを使う

前回の記事で予告した通り、今回は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 cdevqualitia/smtpblackhole

次は、AWS上でServerlessでこのメールサーバを立ち上げる方法を紹介します。

*関連記事

受けたメールをすべて捨てるSMTPブラックホールサーバの作り方①

受けたメールをすべて捨てるSMTPブラックホールサーバの作り方②