こんな疑問・興味にお答えします。
こんにちは。ゆうです。
自分独自のメールサーバーってロマンですよね笑
でも、なぜかうまくいかないんですよね。わかります。
私もメールソフトにログインするまで一日、外部にメールを送れるようになるまでさらに一日かかりました笑。
ということで、今回はラズパイでメールサーバーを構築したいと思います。
というのも、こんなメールをいただきました。(一部加工しています。使用許可済み) 小学生の方からのメールです。メールをいただけたのは素直にうれしかったです。
これを期に以前から気になっていたメールサーバー構築を本気でやってみました。
この記事を読めばDNS設定・Postfix/Dovecot設定・gmailリレーからメールソフトでのログインまで全て網羅できます!
ではいきましょう!
なお、この記事は二部構成です。というのも、目次が多すぎてPCの画面に収まらなくなってしまったのが原因です。。。将来的に三部構成になるかもしれません。。。
設定のロードマップ
ここでは、簡単に設定のロードマップを記しました。
第一部では、STEP3まで行います。
ドメインの購入、DNSの設定をします。
この設定をすることで、外部からメールサーバーと通信できるようになります。
通信を暗号化するために導入します。
ある意味メインです。メールサーバーですね。
メールアドレスを使用するユーザーを作成します。
無料のメールソフトであるThunderbirdからメールを送ります。
環境
サーバー | Raspberry Pi 3 Model B+ Raspberry Pi 4 Model B/4GB (どちらもRaspbian GNU/Linux 10) |
操作PC | macOS Catalina v10.15.5 |
ドメイン設定
ドメイン購入
まずはドメインを購入しましょう。
ドメイン購入は、お名前.comかムームードメインがお勧めです。
ドメインの購入が済んだら、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アドレスの特定のポートを、特定のプライベート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で「[機種名] ポート開放」で調べてください。
BUFFALO | https://www.buffalo.jp/support/faq/detail/8346.html |
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
※ufwについての詳しい設定はこちら。ここでは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の設定からメールサービスを使ってメールを送受信します。