Inbucket - Self Hosted Disposable Email Server
Posted on
Latar Belakang
Jadi gini, aku pengen punya satu email server dengan kriteria:
- Inbound only, email server cuma bisa nerima tanpa bisa ngirim. Demi mencegah terjadinya open relay dan nyebarin spam.
- Catch all, email server akan menerima semua email dengan alamat apapun yang ditujukan kepadanya tanpa harus aku bikin akun emailnya.
- Web UI, email server didukung oleh web ui untuk melihat email-email yang masuk .
- REST API, kalau bisa ada ini untuk integrasi ke mainan lain.
- Instalasi sederhana, aku tidak mau overkill untuk hal semacam ini. Maunya yg sederhana, run single binary dan beres.
Pernah dengar temp-mail? atau Mailinator? atau mailsac? nah kurang lebih fungsinya sama seperti itu. Nama hits-nya adalah "Disposable email", ada beberapa manfaat:
- Mendaftar layanan dengan email sembarangan, jadinya gk ngotorin inbox email pribadi/utama.
- Melakukan testing aplikasi tanpa harus kirim email ke dunia luar, tetap private.
Setelah menyelam, aku dapat dua kandidat:
- MailHog, Web and API based SMTP testing.
- Inbucket, Disposable webmail server with built in SMTP, POP3, RESTful servers; no DB required.
Setelah lihat-lihat, pilihan jatuh ke Inbucket dengan alasan development masih aktif.
Setup Inbucket Disposable email server di Debian 10
Pertama, aku generate config untuk inbucket dengan configurator yang mereka sediakan, silakan buka Inbucket Configurator
Hasil akhirnya adalah sebagai berikut, aku ambil yg versi systemd:
Environment=INBUCKET_LOGLEVEL=error
Environment=INBUCKET_MAILBOXNAMING=full
Environment=INBUCKET_SMTP_ADDR=0.0.0.0:25
Environment=INBUCKET_SMTP_DOMAIN=emx.sumarsono.com
Environment=INBUCKET_SMTP_MAXRECIPIENTS=100
Environment=INBUCKET_SMTP_MAXMESSAGEBYTES=10240000
Environment=INBUCKET_SMTP_DEFAULTACCEPT=false
Environment=INBUCKET_SMTP_ACCEPTDOMAINS=sumarsono.com,nalakawula.com
Environment=INBUCKET_SMTP_DEFAULTSTORE=false
Environment=INBUCKET_SMTP_STOREDOMAINS=sumarsono.com,nalakawula.com
Environment=INBUCKET_SMTP_TIMEOUT=300s
Environment=INBUCKET_POP3_ADDR=127.0.0.1:1100
Environment=INBUCKET_POP3_DOMAIN=sumarsono.com
Environment=INBUCKET_POP3_TIMEOUT=600s
Environment=INBUCKET_WEB_ADDR=127.0.0.1:9000
Environment=INBUCKET_WEB_UIDIR=/usr/local/share/inbucket/ui
Environment=INBUCKET_WEB_GREETINGFILE=/etc/inbucket/greeting.html
Environment=INBUCKET_WEB_TEMPLATECACHE=true
Environment=[email protected]
Environment=INBUCKET_WEB_COOKIEAUTHKEY=tKa8mGD7tqwCuYezdbE4chkQRxSotpCfs4ucB
Environment=INBUCKET_WEB_MONITORVISIBLE=true
Environment=INBUCKET_WEB_MONITORHISTORY=30
Environment=INBUCKET_STORAGE_TYPE=file
Environment=INBUCKET_STORAGE_PARAMS=path:/var/local/inbucket
Environment=INBUCKET_STORAGE_RETENTIONPERIOD=720h
Environment=INBUCKET_STORAGE_RETENTIONSLEEP=86400s
Environment=INBUCKET_STORAGE_MAILBOXMSGCAP=100
Catatan:
- Aku gak butuh POP3, makanya bind ke 127.0.0.1
- Email server akan menerima alamat [email protected] dan [email protected]
- Email yang masuk akan aku keep 30 hari
- Alamat web aku bind ke 127.0.0.1:9000 karena aku mau pakai reverse proxy untuk terminate SSL dan BasicAuth
Kedua, aku unduh paket inbucket dari halaman rilis inbucket
root@emx:~# wget https://github.com/inbucket/inbucket/releases/download/v3.0.0-rc1/inbucket_3.0.0-rc1_linux_amd64.deb
Ketiga, tentu saja aku install
root@emx:~# dpkg -i inbucket_3.0.0-rc1_linux_amd64.deb
Keempat, aku edit inbucket.service
root@emx:~# nano /lib/systemd/system/inbucket.service
# isinya sesuaikan dengan hasil generate di tahap 1
[Unit]
Description=Inbucket Disposable Email Service
After=network.target
[Service]
Type=simple
User=daemon
Group=daemon
PermissionsStartOnly=true
# default conf
#Environment=INBUCKET_LOGLEVEL=warn
#Environment=INBUCKET_SMTP_ADDR=0.0.0.0:2500
#Environment=INBUCKET_POP3_ADDR=0.0.0.0:1100
#Environment=INBUCKET_WEB_ADDR=0.0.0.0:9000
#Environment=INBUCKET_WEB_UIDIR=/usr/local/share/inbucket/ui
#Environment=INBUCKET_WEB_GREETINGFILE=/etc/inbucket/greeting.html
#Environment=INBUCKET_STORAGE_TYPE=file
#Environment=INBUCKET_STORAGE_PARAMS=path:/var/local/inbucket
# Hasil generate tahap 1
Environment=INBUCKET_LOGLEVEL=error
Environment=INBUCKET_MAILBOXNAMING=full
Environment=INBUCKET_SMTP_ADDR=0.0.0.0:25
Environment=INBUCKET_SMTP_DOMAIN=sumarsono.com
Environment=INBUCKET_SMTP_MAXRECIPIENTS=100
Environment=INBUCKET_SMTP_MAXMESSAGEBYTES=10240000
Environment=INBUCKET_SMTP_DEFAULTACCEPT=false
Environment=INBUCKET_SMTP_ACCEPTDOMAINS=sumarsono.com,nalakawula.com
Environment=INBUCKET_SMTP_DEFAULTSTORE=false
Environment=INBUCKET_SMTP_STOREDOMAINS=sumarsono.com,nalakawula.com
Environment=INBUCKET_SMTP_TIMEOUT=300s
Environment=INBUCKET_POP3_ADDR=127.0.0.1:1100
Environment=INBUCKET_POP3_DOMAIN=sumarsono.com
Environment=INBUCKET_POP3_TIMEOUT=600s
Environment=INBUCKET_WEB_ADDR=0.0.0.0:9000
Environment=INBUCKET_WEB_UIDIR=/usr/local/share/inbucket/ui
Environment=INBUCKET_WEB_GREETINGFILE=/etc/inbucket/greeting.html
Environment=INBUCKET_WEB_TEMPLATECACHE=true
Environment=[email protected]
Environment=INBUCKET_WEB_COOKIEAUTHKEY=tKa8mGD7tqwCuYezdbE4chkQRxSotpCfs4ucB
Environment=INBUCKET_WEB_MONITORVISIBLE=true
Environment=INBUCKET_WEB_MONITORHISTORY=30
Environment=INBUCKET_STORAGE_TYPE=file
Environment=INBUCKET_STORAGE_PARAMS=path:/var/local/inbucket
Environment=INBUCKET_STORAGE_RETENTIONPERIOD=720h
Environment=INBUCKET_STORAGE_RETENTIONSLEEP=86400s
Environment=INBUCKET_STORAGE_MAILBOXMSGCAP=100
# Uncomment line below to use low numbered ports
ExecStartPre=/sbin/setcap 'cap_net_bind_service=+ep' /usr/local/bin/inbucket
ExecStartPre=/bin/mkdir -p /var/local/inbucket
ExecStartPre=/bin/chown daemon:daemon /var/local/inbucket
ExecStart=/usr/local/bin/inbucket
# Give SMTP connections time to drain
TimeoutStopSec=20
KillMode=mixed
[Install]
WantedBy=multi-user.target
Kelima, enable dan start inbucket.service
root@emx:~# systemctl daemon-reload
root@emx:~# systemctl enable --now inbucket.service
# verifikasi port-nya
root@emx:~# ss -tulpn | grep inbucket
tcp LISTEN 0 128 127.0.0.1:1100 0.0.0.0:* users:(("inbucket",pid=13101,fd=8))
tcp LISTEN 0 128 0.0.0.0:25 0.0.0.0:* users:(("inbucket",pid=13101,fd=6))
tcp LISTEN 0 128 127.0.0.1:9000 0.0.0.0:* users:(("inbucket",pid=13101,fd=7))
Keenam, bikin dns record, aku cuma butuh value ini
# a record emx.sumarsono.com
emx.sumarsono.com. 20 IN A 1xx.2xx.1xx.xx
# webui inbucket
anuan.sumarsono.com. 300 IN CNAME emx.sumarsono.com.
# mx record sumarsono.com
sumarsono.com. 300 IN MX 10 emx.sumarsono.com.
# mx record nalakawula.com
nalakawula.com. 300 IN MX 10 emx.sumarsono.com.
Ketujuh, bikin vhost (kebetulan pakai apache httpd) untuk reverse proxy webui inbucket dan websocketnya:
VirtualHost *:80>
ServerName anuan.sumarsono.com
<Proxy *>
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd-inbucket
Require valid-user
</Proxy>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
RewriteEngine on
RewriteCond %{REQUEST_URI} ^/api/v1/monitor/messages [NC]
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:9000/$1 [P,L]
RequestHeader unset Origin
</VirtualHost>
Kedelapan, test kirim email ke [email protected] dan [email protected], dalam hal ini aku coba ngirim dari gmail, emailnya masuk ke inbucket.
dan jika aku klik salah satu email tersebut maka akan tampil:
Selesai.
Cool~