どうもおはこんばんにちは、yotakun4132です。
先日、暇だったので自分のドメインを使ったメールサーバーの構築をしました。結構セキュリティも色々設定したので、今回は簡単に構築でき、それなりにセキュリティも強い設定方法を、将来の自分のためにも記録してまとめます。
始める前に
必要なもの
最低限です。
- 初期設定を済ませたUbuntu Server 24.04が入ったサーバー
- ドメイン
- メールソフト (今回はThunderbirdを使用)
- VPN (今回はCloudflare WARPを使用)
サーバー環境
ProxmoxのVM上に立てました。もちろん実機でもどっちでも良いです。
- OS : Ubuntu Server 24.04
- MTA : Postfix
- POP/IMAP : Dovecot
- DKIM : OpenDKIM
- SSL : Let’s Encrypt
- Firewall : UFW + Fail2ban
- Webメール : 使用しない
- メモリ : 4GB
- コア数 : 2コア
メールサーバー構築
パッケージインストール
PostfixとDovecotとOpenDKIMとCertbotとApacheとFail2banをインストールします。
sudo apt update
sudo apt install postfix dovecot-core dovecot-imapd opendkim opendkim-tools certbot python3-certbot-apache fail2ban -y
Postfixのインストール中に何か表示されます。「Internet Site」を選択し、メール名を入力します。(ドメインでいいと思う、hogehoge@example.comだったらexample.com)
Let’s Encrypt SSL証明書取得
SSL証明書を取得します。
[example.com]の部分は適宜変更してください。[example.com]の前の mail. は必ず入力してください。
sudo systemctl stop apache2
sudo certbot certonly --standalone -d mail.[example.com]
sudo systemctl start apache2
Postfixの設定
コンフィグファイルをいじります。基本コピペで大丈夫ですが、ドメインなどは適宜変更してください。
sudo nano /etc/postfix/main.cf
myhostname = mail.[example.com]
mydomain = [example.com]
myorigin = $mydomain
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_tls_cert_file=/etc/letsencrypt/live/mail.[example.com]/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mail.[example.com]/privkey.pem
smtpd_use_tls=yes
smtpd_tls_auth_only=yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
#↑ここ端末によっては文字数が長くて改行してるように表示されるかもしれないけど、=の後、改行しない!
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtp_tls_note_starttls_offer = yes
ctrl + x からの y で保存。
master.cfの設定をする。多分コメントアウトしてあるので、#を消して有効化しよう
sudo nano /etc/postfix/master.cf
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
Dovecotの設定
sudo nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
保存
sudo nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = yes
auth_mechanisms = plain login
保存
sudo nano /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener /var/spool/postfix/private/auth {
mode = 0660
user = postfix
group = postfix
}
}
保存
sudo nano /etc/dovecot/conf.d/10-ssl.conf
ssl = required
ssl_cert = </etc/letsencrypt/live/mail.[example.com]/fullchain.pem
ssl_key = </etc/letsencrypt/live/mail.[example.com]/privkey.pem
保存
UFW ポート開放
sudo ufw allow 22/tcp
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 993/tcp
sudo ufw enable
Fail2ban
sudo nano /etc/fail2ban/jail.local
[postfix]
enabled = true
port = smtp,ssmtp,submission
logpath = /var/log/mail.log
[dovecot]
enabled = true
port = pop3,pop3s,imap,imaps
logpath = /var/log/mail.log
保存
sudo systemctl restart fail2ban
ユーザー作成
[ユーザー名]にはhogehoge@example.comのhogehogeの部分を入力します。
新しくメールアドレスを作りたい場合は、この手順を行ってください。
sudo adduser [ユーザー名]
新しいユーザーのパスワードを作成したあと、色々Fullnameとか聞かれますが、全部空欄で大丈夫です。
sudo su - [ユーザー名]
maildirmake Maildir
exit
OpenDKIM
なぜか私の環境ではDKIMがうまく設定できなかったので省略
設定方法は他の人の記事やChatGPTに聞いてみてください。
DNSレコード
種別 | 名前 | 値 |
A | [グローバルIP] | |
MX | @ | mail.[example.com] (優先度 10) |
TXT | @ | “v=spf1 mx ~all” |
TXT | mail._domainkey | “v=DKIM1; k=rsa; p=…” |
TXT | _dmarc | “v=DMARC1; p=none; rua=mailto:[ユーザー名]@[ドメイン]” |
_dmarcレコードは、ドメイン全体に1つだけ設定すれば大丈夫です。ユーザーごとに作成する必要はありません。
メールソフトにメールアドレスを追加
Thunderbirdの場合、このように追加してください。
自分の名前、作成したメールアドレス、adduserで作成したユーザーのパスワードを入力して詳細設定をクリック
- 受信サーバー
- プロトコル : IMAP
- ホスト名 : mail.[ドメイン名]
- ポート : 993
- セキュリティ : SSL/TLS
- 認証方式 : 自動検出
- ユーザー名 : [ユーザー名]
- 送信サーバー
- ホスト名 : mail.[ドメイン名]
- ポート : 587
- セキュリティ : STARTTLS
- 認証方式 : 自動検出
- ユーザー名 : [ユーザー名]
[ドメイン名]は、hogehoge@gmail.comのgmail.comの部分です。mail.の部分はメールアドレスとしては表示されません。
[ユーザー名]は、adduserで追加したユーザー名です。
入力が完了したら「完了」を押してサーバーに接続できるか確認します。
成功すれば、自分のgmailなどのメールアドレス宛に送受信を試してみてください。
追加情報
- TLSで送信されているか確認するには Gmail で「メッセージのソースを表示」を開き、
DKIM-Signature
やAuthentication-Results
を確認 - テストは https://www.mail-tester.com が便利
参考
- OpenDKIM: http://www.opendkim.org/docs.html
- Postfix: http://www.postfix.org/
- Dovecot: https://doc.dovecot.org/
- Certbot: https://certbot.eff.org/
コメント