ラズパイでメールサーバーを構築するよ1/2(Postfix+Dovecot)
スポンサーリンク
困惑君
ラズパイでメールサーバー立てようとしたのにどうしてもうまくいかない。。。
悩める人
なんとなくメールサーバー興味あるなぁ。。。

こんな疑問・興味にお答えします。

こんにちは。ゆうです。

自分独自のメールサーバーってロマンですよね笑

でも、なぜかうまくいかないんですよね。わかります。

私もメールソフトにログインするまで一日、外部にメールを送れるようになるまでさらに一日かかりました笑。

ということで、今回はラズパイでメールサーバーを構築したいと思います。

というのも、こんなメールをいただきました。(一部加工しています。使用許可済み) 小学生の方からのメールです。メールをいただけたのは素直にうれしかったです。

これを期に以前から気になっていたメールサーバー構築を本気でやってみました。

この記事を読めばDNS設定・Postfix/Dovecot設定・gmailリレーからメールソフトでのログインまで全て網羅できます!

ではいきましょう!

なお、この記事は二部構成です。というのも、目次が多すぎてPCの画面に収まらなくなってしまったのが原因です。。。将来的に三部構成になるかもしれません。。。

なぜこんなに章が多いのか

他のサイトを見る限り、Postfix・Dovecotの説明はあっても、DNS設定やポートマップ設定についてはかなりあっさりしていて、初心者の方には難しいものになっています。

また、うまくできない原因がPostfix・Dovecotでなく、むしろDNS設定やポートマップ設定だったりすることが多々あります。私もポートマップ設定を忘れて悩みました。

この記事を読まれる読者が変なところで躓かないためにも、なるべく多くの情報を載せました。

スポンサーリンク

設定のロードマップ

ここでは、簡単に設定のロードマップを記しました。

第一部では、STEP3まで行います。

ドメイン設定

ドメインの購入、DNSの設定をします。

ポートマップ・ファイアウォール設定

この設定をすることで、外部からメールサーバーと通信できるようになります。

SSL/TLS証明書取得(Let's Encrypt)

通信を暗号化するために導入します。

Postfix・Dovecot・gmail relay設定

ある意味メインです。メールサーバーですね。

メール用ユーザーの追加

メールアドレスを使用するユーザーを作成します。

Thunderbirdからメール送受信

無料のメールソフトであるThunderbirdからメールを送ります。

スポンサーリンク

環境

サーバーRaspberry Pi 3 Model B+
Raspberry Pi 4 Model B/4GB
(どちらもRaspbian GNU/Linux 10)
操作PCmacOS Catalina v10.15.5

スポンサーリンク

ドメイン設定

ドメイン購入

まずはドメインを購入しましょう。

ドメイン購入は、お名前.comムームードメインがお勧めです。

わかる人は。。。

ムームードメインだと、購入する時に、ネームサーバーを設定できるはずです。ムームーDNS以外を使う人はそこで設定すると楽です。

ドメインの購入が済んだら、DNS設定を行います。

DNS設定

ここにアクセスして自宅のグローバルIPアドレスを特定してください。必ず設定するサーバーと同じネットワークで調べてくださいね。

そして、以下のようにDNSを設定してください。

ドメインは取得したドメインに、IPアドレスは調べたグローバルIPアドレスに入れ替えてください。

A mail.example.com 192.0.2.0

MX exaple.com mail.example.com

よくわからんよって人はcloudflareを使った設定を紹介しています。写真を使っているので、わかりやすいと思います。一緒に設定していきましょう。

お名前.com・ムームードメインのDNSの場合

お名前.comならここ・ムームードメインならここを参考に設定してください。

Cloudflareの場合

ここでアカウントを作成します。完全無料でしかもログインしないといけないってのがないのでMyDNSとかより便利ですよ。強くお勧めします。

アカウントを作成したらこのような画面が出てくると思います。取得したドメインを入力してください。

ex) example.com

(画面右上から言語を変更できます。)

Freeプランを選択します。

画像を参考にして設定します。青枠に二つの設定を入れてください。

ドメインは取得したドメインに、IPアドレスは調べたグローバルIPアドレスに入れ替えてください。

ネームサーバーを変更します。お名前.comならここ、ムームードメインならここを参考に、cloudflareのDNS(...ns.cloudflare.com)のに設定しなおしてください。

クイックスタートなる画面が出たら、あとで設定を選択してください。ちっちゃい文字であります。

以上で設定が終わりました。

確認

ここにアクセスして、ドメインが先ほど設定したグローバルIPアドレス(ここ)と一致しているかを確認します。

ex) mail.example.com

また、DNSの記述が正しいかはここから確認できます。

なお、少し時間が経たないと、IPアドレスが変わらないことがあります。その場合は時間を置いて試してみてください。これ以降の「確認」でも同じくです。

ポートマッピング・ファイアウォール設定

ポートマッピング

ここを参考にすると、ポートマッピングとはこういうものです。

この設定をしないと、ルーターは、外部からの通信がローカルにある機器のどれに送ればいいのかわからなくなってしまいます。

要するにこの設定をしないとラズパイは外部からの通信を受け取れないってことです。

ポートマッピングとは、ブロードバンドルータなどが持つ機能の一つで、グローバルIPアドレスの特定のポートを、特定のプライベートIPアドレスの特定のポートに固定的に対応付けて転送するもの。 内部ネットワークの機器に外部から着信することができる。

http://e-words.jp/w/%E3%83%9D%E3%83%BC%E3%83%88%E3%83%9E%E3%83%83%E3%83%94%E3%83%B3%E3%82%B0.html

これについては人によって使っているルーターが違うので一概に説明できません。。

今回はNECのAtermということで説明します。

他の機種の方は以下のサイトを参考にしてください。ただ、Atermでの設定も参考になるかもしれません。

IPアドレスはサーバーのローカルIPアドレス、ポートは25(SMTP)・465(SMTPS)は必須、993(IMAPS)・995(POP3S)はどちらか設定してください。

他の機器の方は、googleで「[機種名] ポート開放」で調べてください。

BUFFALOhttps://www.buffalo.jp/support/faq/detail/8346.html
coregahttp://corega.jp/faq/show/1905/
IOデータhttps://www.iodata.jp/lib/manual/wn-ac1600dgr/ouyou/port.htm

では設定していきます。画像は他のページで使用しているのを流用しています。

ブラウザ(safariやChrome)でAtremなら「192.168.0.1」または「192.168.10.1」と入力してください。

このような画面が出ると思います。(パスワードが設定されている場合)

ユーザー名は「admin」または「adm」

パスワードは任意で設定済みのものになります。

また、パスワードが設定されていない場合は設定画面が出てきます。設定してください。

ここを参考にしてリセットすれば、パスワードがリセットされます。ただ、家でネットを共有してる家族がいる場合は勝手にやってはダメですよ。

アクセスに成功するとこのような画面が出てきます。(機種によってはデザインが違うのかもしれません。ただ、設定する場所は同じだと思います。)

ここから、赤枠で囲ってある「ポートマッピング設定」を選んでください。

このような画面が出るので、赤枠の「追加」をクリックしてください。

以下のように設定してください。ポート番号は一つづつ設定してください。

25(SMTP)・465(SMTPS)は必須ですが、993(IMAPS)・995(POP3S)はどちらかで大丈夫です。

注意

複数のサーバーがある場合は、優先順位に気をつけた方がいいかもしれません。また、80, 443ポート以外は一つのポートに一つのサーバーって方がいいかもしれないです。

  • LAN側ホスト ラズパイの固定したIPアドレス(画像は例でのせたやつです)
  • プロトコル そのままでいいです
  • ポート番号 「any」のチェックを外して「左側」に(25|465|{993 or 995})を入力。
  • 優先度 1から順番でいいと思います。

こんな感じで設定できたらOKです。

ufw

25(SMTP)・465(SMTPS)・{993(IMAPS) or 995(POP3S)}を開けておきます。

sudo ufw allow 25
sudo ufw allow 465
sudo ufw allow 993
sudo ufw allow 995

確認

ここで、25(SMTP)・465(SMTPS)・{993(IMAPS) or 995(POP3S)}にアクセスできるか確認してください。

ex) mail.example.com

これができていれば、自宅のルーターまでアクセスできていることがわかります。

SSL/TLS証明書取得(Let's Encrypt)

ここでは、無料でSSL/TLS証明書をgetできるLet's Encryptを使って証明書を取得しましょう。

情報

ポートマッピングもufwも80, 443ポートの設定なしでできました。また、nginx, Apacheのサーバーを止めなくても設定できました。もし、うまくいかなかったら、ポートマッピングもufwも80, 443ポートを開けて、nginxとApacheを止めてみてください。

証明書取得

Let’s Encryptを導入します。

sudo apt install certbot

Apacheやnginxなどのサーバーを止めます。

sudo systemctl stop apache
sudo systemctl stop nginx

証明書を発行します。ドメイン部分を自分のに変えてください。

sudo certbot certonly --standalone -d mail.example.com

Enter email address (used for urgent renewal and security notices) (Enter 'c' to

Emailを入力

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory

規約に同意するか

A

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.

ニュースレターを受け取るか。

Y/N

確か、初めて登録するときは証明書は発行されなかった気がします。Congratulations!ってメッセージが出てなかったら、もう一度証明書を発行してみてください。

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

これが出てきたら1を選択します。

こんな表示が出れば成功です。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/mail.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/mail.example.com/privkey.pem
   Your cert will expire on 2020-09-16. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

こんなエラーなら以下の原因が考えられます。

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: mail.example.com
   Type:   connection
   Detail: Fetching
   http://mail.example.com/...:
   Timeout during connect (likely firewall problem)

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address. Additionally, please check that
   your computer has a publicly routable IP address and that no
   firewalls are preventing the server from communicating with the
   client. If you're using the webroot plugin, you should also verify
   that you are serving files from the webroot path you provided.
  • DNSの設定がうまくいっていない可能性
    DNSのAレコードを確認してみてください。
  • ルーターのポートマッピング設定がうまくいっていない
    80, 443を向ける必要があるかもしれません。
  • ufwがブロックしている
    80, 443ポートをブロック・許可していないかもしれません。

自動更新をするためにcronを利用します。

sudo crontab -e

最後に追記してください。このコードでは、毎月一日の午前五時に証明書を更新しています。

00 05 01 * * certbot renew --force-renewal && systemctl reload postfix && systemctl reload dovecot

確認

ここで、465(SMTPS)・{993(IMAPS) or 995(POP3S)}で証明書が出るか確認してください。

ex)mail.example.com

以上で第一章は終了です。続いて第二章ではPostfix・Dovecotの設定からメールサービスを使ってメールを送受信します。

スポンサーリンク
おすすめの記事