サーバー構築回

VPS活用法

メールサーバ

メールサーバって、ご存知でしょうか。gmailとかありますよね。それを自分で立てることができるという。いつもsserverwordを見て建てているのですがwebサーバって、Wordpressくらいしかやることないじゃないですか、それが終わると何をしようかと思っていたら、メールサーバというのがありまして建ててみた。SSLだけではgmailに届かない。DKIMなど導入しないといけないんです。意外と大変でした。ただ、パスワードがMD5なのでちょっとセキュリティには。。。ログみると、すごい攻撃というか総当たりが来るので、Fail2banとか必要ですね。

以下AIが書きました

自宅でメールサーバーを建てました

― Postfix・Dovecot・DKIMまで構築してみた

以前からWebサーバーやVPN、監視サーバーなどを自分で構築して遊んでいましたが、今回は少しハードルを上げて、メールサーバーを自分で建ててみました。

メールといえばGmailやOutlookなどを使えば簡単ですし、レンタルサーバーにもメール機能は付いています。

では、なぜわざわざ自分でメールサーバーを建てるのか。

答えは単純で、

「一度、自分で全部動かしてみたかったから」

です。

メールサーバーはWebサーバー以上にDNSや証明書、迷惑メール対策などが絡んでくるので、実際に構築してみるとかなり勉強になりました。

今回の構成

OSはUbuntuを使用。

メール関連は主に、

  • Postfix
  • Dovecot
  • OpenDKIM
  • Fail2ban
  • Roundcube

という構成にしました。

Postfixがメールの送受信を担当し、DovecotがIMAPなどを担当します。

Roundcubeを入れているので、ブラウザからWebメールとして確認することもできます。

そして現在のメールサーバーでは重要なのが、SPF・DKIM・DMARCです。

メールサーバーを立てて送信できたとしても、これらの設定が不十分だとGmailなどから迷惑メール扱いされる可能性があります。

単純に「Postfixをインストールしたら完成!」とはならないところが、メールサーバーの面白いところでもあり、大変なところでもあります。

DKIMも設定

今回特に勉強になったのがDKIMでした。

OpenDKIMを使ってメールに電子署名を付け、DNS側に公開鍵を登録します。

これによって受信側は、

「このメールは確かにこのドメインのメールサーバーから送信されたものなのか?」

を確認できます。

最初は、

「DNSにTXTレコードを追加するだけでしょ」

くらいに思っていましたが、実際にはOpenDKIMのsocketの場所や権限、Postfixとの連携など、いくつかハマるポイントがありました。

設定が通って、メールヘッダーに

dkim=pass

と表示されたときは結構うれしいものです。

SPF、DKIM、DMARCが正常にPASSしているのを確認すると、

「ちゃんとしたメールサーバーになったな」

という感じがします。

SSL証明書の管理も重要

メールサーバーでもTLS証明書を使います。

SMTP SubmissionやIMAPを暗号化し、安全にメールソフトから接続できるようにしています。

ここで一度やらかしたのが、サーバー移行後の証明書更新忘れ。

メールサーバーを引っ越したあと、旧環境では自動更新されていた証明書が、新しい環境ではうまく更新されていませんでした。

気付いたときには証明書の期限切れ。

慌てて更新しました。

Webサイトならブラウザに大きな警告が出るので気付きやすいですが、メールサーバーの場合はメールソフト側のエラーとして出てくるため、意外と見落としやすいです。

これをきっかけに、証明書の有効期限も監視対象に入れたほうがよさそうだと感じました。

セキュリティ対策

メールサーバーはインターネットに直接公開するサービスなので、セキュリティ対策も必要です。

今回の環境ではFail2banを使用して、不審なログイン試行を繰り返すIPアドレスを自動的にブロックするようにしています。

メールサーバーを公開すると、本当に驚くほど早く世界中からアクセスが飛んできます。

ログを見ると、

「もう来たの?」

というくらい認証を試されています。

そのため、メールサーバーを公開するなら、ログ監視やFail2banなどの防御はほぼ必須だと思います。

また、通常のメール送信についても、認証なしで誰でもメールを送れるオープンリレーになっていないことを確認しました。

もしオープンリレーになってしまうと、迷惑メール送信用サーバーとして悪用されてしまいます。

これは絶対に避けたいところです。

自分で建てて分かったこと

実際にメールサーバーを建ててみて一番感じたのは、

「メールって思っていた以上にたくさんの技術で成り立っている」

ということでした。

普段はメールアドレスとパスワードを入力するだけですが、その裏では、

SMTP、IMAP、TLS、DNS、MX、SPF、DKIM、DMARC……

と、いろいろな仕組みが連携しています。

特に「メールを送信できる」と「相手に正常なメールとして受信してもらえる」は全く別問題です。

Postfixからメールが送れた瞬間よりも、Gmailなどで受信して、SPF・DKIM・DMARCがすべてPASSしているのを確認できた瞬間のほうが達成感がありました。

今後やりたいこと

ひとまずメールの送受信は安定して動くようになりましたが、メールサーバーは「構築して終わり」ではありません。

今後は、

  • 証明書期限の監視
  • Postfix/Dovecotの死活監視
  • Fail2banのブロック状況の可視化
  • メールキューの監視
  • ディスク容量の監視
  • バックアップ
  • 不正ログインの通知

あたりも整えていきたいと思います。

すでにZabbixやPrometheus、Grafanaなども使っているので、そのあたりと組み合わせるのも面白そうです。

まとめ

メールだけが目的なら、Gmailやレンタルサーバーを使ったほうが圧倒的に簡単です。

自分でメールサーバーを運用する場合は、DNS、SSL証明書、セキュリティ、迷惑メール対策、バックアップなど、考えることがかなり増えます。

それでも、自分でPostfixやDovecotを設定し、DNSにSPF・DKIM・DMARCを登録して、実際にインターネット経由でメールが届くところまで構築すると、メールの仕組みをかなり深く理解できます。

何より、

「このメール、自分のサーバーから送られてるんだよな……」

と思うと、ちょっと楽しいです。

実用性だけで考えればクラウドサービスのほうが便利。

でも、サーバーを触るのが好きなら、メールサーバー構築はかなり面白い題材でした。

次は監視やバックアップ周りをもう少し強化して、安心して長期間運用できるメールサーバーにしていこうと思います。

第二回 WEBサービス作り

第一回から離れすぎなのでは、とは思いますが本を管理する物を作成したいですよね。私本管理plusでもいいとは思いますが、Amazonにあるデータを取得して保存するという感じなのですが、Amazon倉庫にある新刊などはいいのですが、新刊ではない本はあまりデータが出てこない場合やタイトルが変なやつも多くあります。そこで、hontoからデータの取得していくというプラグインがあり、それをずっと利用して来たのですが、最近利用できず。。無料で使っているので気長に待つのみ。

何を作ろうかなと思っていまして、漫画が自宅に沢山ある状況で本の管理!

自分で作ってみるのもあり。と思いまして、Pythonで作ろうとなりました。

と言ってもPythonの学習度ほぼゼロ。

ということはAIに作って貰おうとなりました。

openaiを課金し、ChatGPTを使いました。さらにopenwebuiを導入しています。

openwebuiを使っているのは、Ollamaを使って遊んでいたのですが、Ollamaはメモリーも沢山必要だし、CPUも勿論。ハンバーグのつくり方を聞くぐらいが適している。

openaiもモデルを選び質問ができるようになっている。ふわっとした質問にもしっかり答えてくれます。

ここまで、たどり着きました。使用したのは、https://ndlsearch.ndl.go.jp/api/opensearchです。国立国会図書館サーチAPIを使用した。SRUでもsqlに保存できたのですが、タイトルでは区別がつかないため巻数が欲しかったのだが、SRUでは難しかった。SRUはXMLでお願いします!と伝えないとダメでした。プログラミングなんてしたことがなかったが、説明書見てたらかいてありました。(;’∀’)opensearchは意外と簡単だったので安心。

原因を突き詰めるのは楽しいですね。まあ、AIに聞いてますけど。。

登録システムは作れたので、次は検索機能を作りたいです。

本当はnode.jsなどを使って作りたいが、学習力が不足してます。AIの不足しているところを全く補えない。全く分からない。

第一回 サーバー構築

サーバー構築に興味ありますよね。サーバーといえば、マインクラフトサーバーとかウェブサーバーとかがよくありますけど。。なんかやりたいことと違うなと思っていました。ウロウロと検索をしていると色んなサーバーソフトがありまして、それらを少しずつ紹介したいなと思います。

 サーバーに興味あるなら、VPSを契約するべきです。いや、、家でやるのも楽しいです!!まずは、ヤフオクに言ってサーバーと検索すれば沢山でます。特に多いのは富士通のPRIMERGY TX1320 M3が多く出ている感じですね。安いものから高いものまでありますが、CPU・HDD・memoryがないものは安くても選ばない方がいいです。初期費用高くなる。まあ、普通のPCでも出来ますのでどれでもいいと思います。メモリーは16GB以上あるのがあとから仮想マシンとかね。できますよね。ラズパイでもいいのですが高性能になり高くなってますよね。。。

なんだかんだ

なんだかんだ言って、ubuntuserverが一番扱い安いと思います。centosとかRockyとかありますが

Pythonをインストールするか!

Python9がリストにあるんでインストールします。

うーーーーーん。Python10以上って書いてある。。。

ソースコードからのやつか。。。やるか。。

こんなことがよく起こります。するとやる気が無くなってくるので最初は、ubuntuがいいのではないでしょうか。

Uptime Kuma

最初に持ってくるのかな。と思いますが今やっているので。

こんな感じですね。今回はdockerを使用していませんが、docker使えば楽に構築できると思います。WEB公開はVPSを利用。

https://github.com/louislam/uptime-kuma

こちらに書いて在ります。Non-Dockerを参考にして構築しました。モニター見ているだけでも楽しいですね。サクラのレンタルサーバーでこちらを運営してますので、登録してみました。まあ、稼働率100%ですけど。。

caddy

caddyを使って、https対応をしました。traefikを使った時はチンプンカンプンでしたが、こちらはとっても分かりやすかったです。直ぐに実行できました。ドメインが必要ですので、買ってもいいですし、mydnsで無料ドメインでもいいと思います。mydnsはIPアドレスの通知が必要ですので、ご注意ください

私は、mydnsの更新方法

4 6 * * * wget -o – ‘https://<userid>:<password>@ipv4.mydns.jp/login.html’

でcrontabで登録してます~。

簡単に

ubuntuなら

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

私は、Rockyなのでcentosなど

dnf install 'dnf-command(copr)'
dnf copr enable @caddy/caddy
dnf install caddy

などなど、インストールできます。

リバースプロキシというものを使います。httpsにできるやつ~

Cabbyfileを作成して

{
email your_mail_address_<メールアドレス>
}
<サブドメイン> {
reverse_proxy 127.0.0.1:3001
}

を入力、保存。私は、vi使用。

caddy adaptをコマンド実行。sudo caddy runをコマンド実行!

でできました。

次回

構築したものを少しずつ紹介出来ればと思います。traefikを再取得したい。のとKubernetes

したい以上