概要
たくさんのメールアドレスを作成して、特定のメールアドレスにメールを転送するために、AnonAddyをインストールして利用してみました。
やりたいこと
使い捨て用や、サービスごとにメールアドレスを使い分けたいと思います。このようにたくさんのメールアドレスを用意しておけば、もしもどこかのサービスが私のメールアドレスを漏らしたとしても、どこから漏れたのかわかりやすくなり、漏れたということが分かった際にそのメールアドレスを削除してスパムメールなどの対策ができます。
このようなことができるサービスには、AnonAddyやSimpleLoginがあります。どちらも一部の機能は無料で使うことができますが、メールアドレスの数に制限があったり、受信できるメールの容量に制限があったりします。
そこで、これらのサービスはオープンソースで開発が進められているため、自分でサーバーを用意してサービスを動かすことにしました。こうすることで、上記の制限が適用されません。
AnonAddyとSimpleLoginともにソースコードが公開されているのですが、インストールのやりやすさから今回はAnonAddyを利用することにしました。AnonAddyであれば、公式にDocker Composeでデータベースも含めて一括で実行できるスクリプトが用意されているためです。
インストール
AnonAddyのインストールに関する情報は、次のGitHubのプロジェクトにまとめられています。
https://github.com/anonaddy/docker
最初に、サーバー上にこのリポジトリをクローンします。
git clone https://github.com/anonaddy/docker.git docker-anonaddy
その後、ディレクトリを移動します。
cd docker-anonaddy/examples/compose
ここにある、docker-compose.ymlファイルを確認します。
version: "3.5"
services:
db:
image: mariadb:10.5
container_name: anonaddy_db
command:
- "mysqld"
- "--character-set-server=utf8mb4"
- "--collation-server=utf8mb4_unicode_ci"
volumes:
- "./db:/var/lib/mysql"
environment:
- "MYSQL_ALLOW_EMPTY_PASSWORD=no"
- "MYSQL_DATABASE=anonaddy"
- "MYSQL_USER=anonaddy"
- "MYSQL_PASSWORD=パスワード"
restart: always
redis:
image: redis:4.0-alpine
container_name: anonaddy_redis
restart: always
anonaddy:
image: anonaddy/anonaddy:latest
container_name: anonaddy
depends_on:
- db
- redis
ports:
- target: 25
published: 25
protocol: tcp
- target: 8000
published: 8000
protocol: tcp
volumes:
- "./data:/data"
env_file:
- "./anonaddy.env"
environment:
- "DB_HOST=db"
- "DB_DATABASE=anonaddy"
- "DB_USERNAME=anonaddy"
- "DB_PASSWORD=パスワード"
- "REDIS_HOST=redis"
restart: always
変更した部分は、データベースの設定に関する記述です。MySQLの環境変数に、AnonAddy用のデータベースの名前やユーザー名、パスワードを設定しています。また、そのMySQLに接続できるようにAnonAddyの環境変数にデータベースの設定をしています。
このほかに、AnonAddyの設定をする必要があります。設定には、anonaddy.envを編集します。この設定は、DKIMなどの諸々の設定が済んだものになっています。
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=https://anonaddy.example.com:
[email protected]
ANONADDY_ADMIN_USERNAME=anonaddy
ANONADDY_ENABLE_REGISTRATION=false
ANONADDY_DOMAIN=mail.example.com
ANONADDY_ALL_DOMAINS=mail.example.com
ANONADDY_HOSTNAME=mail.example.com
ANONADDY_DNS_RESOLVER=127.0.0.1
ANONADDY_SECRET=
ANONADDY_LIMIT=1000
ANONADDY_BANDWIDTH_LIMIT=10485760000
ANONADDY_NEW_ALIAS_LIMIT=1000
ANONADDY_ADDITIONAL_USERNAME_LIMIT=3
ANONADDY_DKIM_SIGNING_KEY=/data/dkim/mail.example.com.private
ANONADDY_DKIM_SELECTOR=default
MAIL_FROM_NAME=AnonAddy
[email protected]
MAIL_ENCRYPTION=tls
POSTFIX_DEBUG=false
POSTFIX_SMTPD_TLS=true
POSTFIX_SMTP_TLS=true
POSTFIX_SMTPD_TLS_CERT_FILE=/data/certs/fullchain.pem
POSTFIX_SMTPD_TLS_KEY_FILE=/data/certs/privkey.pem
SANCTUM_STATEFUL_DOMAINS=anonaddy.example.com
RSPAMD_ENABLE=true
ドメインなど、自分自身の環境に合わせて設定を修正してください。anonaddy.example.comは、AnonAddyにアクセスする際のドメインで置き換えてください。mail.example.comは、メールを送信するサーバーのドメインで置き換えてください。私の環境ではmail.example.comは、AnonAddyをインストールしたサーバーのIPアドレスとなっています。
そのほかにも、ANONADDY_SECRET=
に、サーバー上でecho "base64:$(openssl rand -base64 32)"
を実行した結果を設定します。ANONADDY_SECRET=
には、推測されない乱数等で作成した長い文字列を指定します。
さらに、DKIMで利用する証明書を作成します。この証明書はANONADDY_DKIM_SIGNING_KEY=/data/dkim/mail.example.com.private
で指定しているものになります。ちなみにファイル名は、ANONADDY_DOMAIN
の指定に応じて変わります。
docker compose run --entrypoint '' anonaddy gen-dkim
最後に、AnonAddyを経由したメールについて、デフォルトでは平文で送受信するため、暗号化の設定をします。暗号化に用いるSSL/TLS証明書は、オレオレ証明書でもよいかもしれませんが、Let’s Encryptなどで用意するほうがメールサーバーの信用が上がるためよいです。用意した証明書は、Docker Composeでマウントする関係で./data/certs/fullchain.pem
や./certs/certs/privkey.pem
などに配置しておくとよいです。
これで設定は終わりです。
実行
設定が終わったら、AnonAddyを起動します。
docker compose up -d
デフォルトでは、8000番ポートでサービスを公開しています。
私は、Nginxのリバースプロキシ機能を利用して、AnonAddyにアクセスするようにしています。
管理者ユーザーとしてanonaddyが作成されているので、anonaddyでログインします。パスワードはなんでもよいです。初回ログイン後、パスワードの設定画面が表示されます。
さいごに
設定する箇所が多かったり、設定が分かりにくかったりして、動かすまで苦労しました。メールの送受信に関する暗号化の設定が抜けていると、メールサービスによっては、迷惑メールと判定されることがありました。この設定は必須のように思います。
私はほかのユーザーと共有しないようにするために、独自ドメインをいくつか持っているので、そのうちのひとつを自分用のドメインとして、インストール後に設定しました。anonaddy.envで設定してしまうと、サービスの利用者全員に共有されてしまうためです。
このほかにも、実際に利用していると、メールがちゃんと届かなかったり、遅延が発生したりと問題がありました。そちらについては、後で記事にしたいと思います。
参考になればうれしいです。