さまざまなサービスを「ちょっとお試し」と利用していくうちに、いつの間にか大量の宣伝メールが届くようになってしまった人は多いはず。かといってネット上の使い捨て用メールアドレス作成サービスを使用するとセキュリティの心配やサービスが突然停止してしまうリスクがあります。「AnonAddy」はそうした使い捨てできる転送用のメールアドレス作成サービスで、オープンソースのためセルフホストが可能とのこと。早速Dockerを利用してセルフホストを行ってみました。

anonaddy/docker: AnonAddy Docker image

https://github.com/anonaddy/docker

Free, Open-source Anonymous Email Forwarding - addy.io

https://addy.io/

AnonAddyを実行するにはTCPの25番ポート、8000番ポート、11334番ポートがインターネットからアクセス可能である必要があるため、事前にルーターのファイアウォール設定を変更しておきます。

Dockerを利用してAnonAddyを起動するため、下記のリンクから自分の環境に合った方法でDockerをインストールします。

Install Docker Engine | Docker Documentation

https://docs.docker.com/engine/install/

今回はDebianを利用するため、下記のコマンドを入力しました。

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Dockerがインストールできたら、AnonAddy用のファイルを公式リポジトリの例を参考に用意していきます。まずは「.env」という名前で下記の内容を保存します。

MYSQL_DATABASE=addy
MYSQL_USER=addy
MYSQL_PASSWORD=addy

続いて下記のコマンドでアプリで使用する鍵を作成。

echo "base64:$(openssl rand -base64 32)"

そして下記の内容を「addy.env」という名前で保存します。ここで設定できる環境変数については公式リポジトリの「environment-variables」で確認可能です。

TZ=Asia/Tokyo
PUID=1000
PGID=1000

MEMORY_LIMIT=256M
UPLOAD_MAX_SIZE=16M
OPCACHE_MEM_SIZE=128
REAL_IP_FROM=0.0.0.0/32
REAL_IP_HEADER=X-Forwarded-For
LOG_IP_VAR=remote_addr

APP_KEY=[ここに先ほど作成した鍵を入力]
APP_DEBUG=false
APP_URL=[外部からAnonAddyにアクセスする際のアドレス]

ANONADDY_RETURN_PATH=bounces@[メールで使用するドメイン]
ANONADDY_ADMIN_USERNAME=anonaddy
ANONADDY_ENABLE_REGISTRATION=true
ANONADDY_DOMAIN=[メールで使用するドメイン]
ANONADDY_ALL_DOMAINS=[メールで使用するドメイン]
ANONADDY_HOSTNAME=mail.[メールで使用するドメイン]
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=[適当に作成した乱数]
ANONADDY_LIMIT=200
ANONADDY_BANDWIDTH_LIMIT=104857600
ANONADDY_NEW_ALIAS_LIMIT=10
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3

MAIL_FROM_NAME=AnonAddy
MAIL_FROM_ADDRESS=anonaddy@[メールで使用するドメイン]

POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=false
POSTFIX_SMTP_TLS=false

最後に「compose.yml」という名前で公式のサンプルをコピーして保存します。

「.env」「addy.env」「compose.yml」という3つのファイルを用意できたら、下記のコマンドでAnonAddyを起動。

sudo docker compose up -d

自動で必要なファイルのダウンロードが開始されます。



ダウンロード完了後、自動でAnonAddyが起動するはずなのですが下記のエラーが出て止まってしまいました。どうやら25番ポートがすでに使用中とのこと。

Error response from daemon: driver failed programming external connectivity on endpoint anonaddy (66c991bfec98efd4c94a758af2ad24d90892a79a1fb451920cd874949a41fbae): Error starting userland proxy: listen tcp4 0.0.0.0:25: bind: address already in use

ということで、「lsof」をインストールして実行し、どのアプリがポートを使用しているのかを確認します。

apt install -y lsof
sudo lsof -i:25

下記の通り、Debianに標準でインストールされている「exim4」が25番ポートを使用していることが分かりました。



下記のコマンドでexim4をアンインストールします。

sudo apt-get remove exim4-base

再び下記のコマンドを実行し、AnonAddyを起動。

sudo docker compose up -d

今回は正常に起動しました。



実行ログを確認したい場合は下記のコマンドを入力すればOK。

docker compose logs -f

標準では8000番ポートでアプリが起動しているので、「設定したドメイン:8000」にブラウザでアクセスします。ところが、ブラウザでアクセスしてみても接続できません。ログを確認してみると「ERROR: Either ANONADDY_SECRET or ANONADDY_SECRET_FILE must be defined」と表示されています。



原因を調べてみた結果、「echo "base64:$(openssl rand -base64 32)"」のコマンドで鍵を生成してaddy.envに入力する際に「base64:」という部分を削除してしまっていたのが問題でした。あらためて鍵を入力して起動し直してみると今度は正常にアクセスできました。



ユーザー登録はブラウザを経由する方法のほか、コマンドラインから行うことも可能です。下記のコマンドでユーザーを作成してみます。

sudo docker compose exec anonaddy anonaddy anonaddy:create-user "[ユーザーネーム]" "[本当のメールアドレス]"

ユーザーの作成に成功すると下記の通り表示されます。「user_id」の部分が初期パスワードになっているとのこと。



登録したユーザーネームと初期パスワードを利用してログイン。



ログインすると、メールアドレスの認証を行うように要求されます。



メールボックスを見るとAnonAddyからのメールが届いているので「Verify Email Address」をクリック。



「Email Address Verified Successfully」と表示され、AnonAddyを使用できるようになりました。早速「Create New Alias」をクリックして捨てメアドを作成します。



捨てメアドのドメイン、捨てメアドのメールアドレス、説明、転送先を設定して「Create Alias」をクリックします。



メールアドレスが作成されました。アドレス部分をクリックするとコピーすることが可能。



早速メールを送信してみます。



しばらくすると、AnonAddyの「EMAILS FORWARDED(転送済みメール)」のカウントが増加しました。先ほど作成したメールアドレスの「Forwarded」のカウントも増加しています。



無事メールが転送されて送られてきました。差出人のメールアドレスはAnonAddyを経由するアドレスに差し替えられているため、このまま返信しても本当のメールアドレスがバレる心配は無いというわけです。