Ubuntu Server 24.04で15分くらいでガチ普段使い用のメールサーバーを構築した話

HowTo

どうもおはこんばんにちは、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レコード

種別名前
Amail[グローバルIP]
MX@mail.[example.com]
(優先度 10)
TXT@“v=spf1 mx ~all”
TXTmail._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-SignatureAuthentication-Results を確認
  • テストは https://www.mail-tester.com が便利

参考

コメント

タイトルとURLをコピーしました