メールサーバ構築(SMTPサーバ)
はじめに
インフラエンジニア初学者のぽれいんと申します。
転職する前はプログラミングスクールにて主にHTML、CSS、Ruby、MySQL等について学びました。
※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。
<前回の記事>
↑↑まだ見ていない方はこちらから↑↑
本日のやりたいこと
今回は電子メールを利用するためのメールサーバの構築を行う。
使用する環境
- サーバー
- Amazon EC2
- インスタンスタイプ: t2.micro (1台)
- オペレーティングシステム: Amazon Linux 2
- Amazon EC2
メールサーバとは
メールサーバの種類
メールサーバには以下の2種類がある。
これらのサーバを総合してメールサーバと呼ぶ。
メールの保存形式
SMTPサーバに送信されたメールの保存形式は以下の2種類がある。
- Mailbox形式
- Maildir形式
Mailbox形式は古くから使われている形式でユーザごとに受信したすべてのメールを平文で1つのファイルに連結して保存する。そのため、ファイルが壊れるとすべてのメールを失うことになってしまう。
Maildir形式は1通のメールを1つのファイルとして保管する。そのため、1つファイルが壊れても1通のメールを失うのみで留まる。
メールの読み出し(受信)
メールサーバに蓄積されたメールはPOPまたはIMAPというプロトコルを使って読み出すことができる。
- POP
POP(Post Office Protocol)は2021年現在バージョンが3になっているためPOP3とも呼ばれる。メールサーバにメールが届いた際にユーザがパソコンなどの端末にメールをダウンロードして、端末上で管理するのが特徴。
IMAP(International Message Access Protocol)は2021年現在バージョンが4になっているためIMAP4とも呼ばれる。インターネットを利用しメールにアクセスする通信規約のためメールサーバにあるメールを端末にダウンロードする必要がなくメールサーバ上で管理されているメールをメールソフトで閲覧するのが特徴。
メール配送の仕組み
- クライアントがメールを送信するとSMTPサーバがそれを受け取る。
- SMTPサーバはメールを受け取るとIPアドレスよりPOPサーバ(IMAPサーバ)にメールを転送する。
- 送信先クライアントはPOPサーバからメールをダウンロードする。(IMAPサーバにメールが保存される)
メールサーバの構築(SMTPサーバ)
rootユーザになる
sudo su -
postfixの起動確認(※postfixはCentOSにデフォルトで入っています。)
rpm -qa postfix
ステータス・自動起動を確認
systemctl status postfix
systemctl is-enabled postfix
postfixのプロセスが動いているか確認
ポート番号を確認
ps -efH | grep postfix
netstat -anp | grep master
メールを送信するためのコマンドmailをインストール
yum install -y mailx
自分宛にメールを送信できるか確認
mail -s 件名 root@localhost
メールログの確認
tail -f /var/log/maillog
メールが受信できているか確認
DNSサーバと連携
<SMTPサーバの設定>
設定ファイルのバックアップファイルを作成
cp /etc/postfix/main.cf /etc/postfix/main.cf_20210821
ls /etc/postfix/main.cf_20210821
コメントアウトの行を排除したファイルを作成し、設定ファイルに上書き
grep -v ^# /etc/postfix/main.cf | cat -s > /tmp/post.txt
cp /tmp/post.txt /etc/postfix/main.cf
y
postfixの設定ファイルを編集
vi /etc/postfix/main.cf
以下を変更
----------ここから---------------------
inet_interfaces = localhost
↓
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
↓
mydestination = $myhostname, $mydomain
----------ここまで---------------------
以下を先頭に追記
----------ここから---------------------
myhostname = mail.hogeohoge.com
mydomain = hogehoge.com
myorigin = $myhostname
mynetworks = 172.31.0.0/16, 127.0.0.1
----------ここまで---------------------
設定を変更したため再起動し、プロセスとポート番号を確認
systemctl restart postfix
ps -efH | grep postfix
netstat -anp | grep master
<DNSサーバの設定>
BINDのステータスを確認
systemctl status named
Unit named.service could not be found.と表示される場合はBINDのインストールがされていないためDNSサーバの構築が必要。
↓DNSサーバの構築は以下の記事を参照↓
(任意の)正引きのゾーンデータベースファイルに以下を追記
vi /var/named/hogehoge.com.zone
最終行に以下を追記
------------ここから-----------------------
mail IN A xxx.xxx.x.xx
------------ここまで-----------------------
※xxx.xxx.x.xxはSMTPサーバのIPアドレス
構文チェック
named-checkzone hogehoge.com /var/named/hogehoge.com.zone
以下のようにOKが表示されればOK
zone hogehoge.com/IN: loaded serial 2017080701
OK
/etc/resolv.conf を変更
vi /etc/resolv.conf
------------------------------------------
---以下をコメントアウト---
#nameserver 172.31.0.2
---以下を追記---
#ローカルループアップアドレス
nameserver 127.0.0.1
------------------------------------------
namedを起動し、プロセスとポート番号を確認
systemctl restart named
ps -efH | grep named
netstat -anp | grep 53
ドメインを使ってメールを送信
mail -s 件名 root@mail.hogehoge.com
メールログの確認
tail -f /var/log/maillog
メールが受信できているか確認
以上!!!!