ぽれいんのブログ

エンジニアになるために覚えたことを日記に付けます。

メールサーバ構築(SMTPサーバ)

はじめに

インフラエンジニア初学者のぽれいんと申します。

転職する前はプログラミングスクールにて主にHTML、CSSRubyMySQL等について学びました。

※このブログでは自分が後々、見返すことができるようにまとめることを目的としていますが、もし需要があるようでしたら是非ともご覧ください。

<前回の記事>

porain.hatenablog.com

↑↑まだ見ていない方はこちらから↑↑

 

 

 

 

本日のやりたいこと

今回は電子メールを利用するためのメールサーバの構築を行う。

使用する環境

メールサーバとは

メールサーバの種類

メールサーバには以下の2種類がある。

  • メールの配送・送信を受け持つSMTPサーバ
  • メールの受信を受け持つPOPサーバ or IMAPサーバ

これらのサーバを総合してメールサーバと呼ぶ。

メールの保存形式

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とも呼ばれる。インターネットを利用しメールにアクセスする通信規約のためメールサーバにあるメールを端末にダウンロードする必要がなくメールサーバ上で管理されているメールをメールソフトで閲覧するのが特徴。

 

メール配送の仕組み

 

 

  1. クライアントがメールを送信するとSMTPサーバがそれを受け取る。
  2. SMTPサーバはメールを受け取るとIPアドレスよりPOPサーバIMAPサーバ)にメールを転送する。
  3. 送信先クライアントはPOPサーバからメールをダウンロードする。(IMAPサーバにメールが保存される)

メールサーバの構築(SMTPサーバ)

rootユーザになる

sudo su -

postfixの起動確認(※postfixCentOSにデフォルトで入っています。)

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

メールが受信できているか確認

mail

 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サーバの構築は以下の記事を参照↓

porain.hatenablog.com

 

(任意の)正引きのゾーンデータベースファイルに以下を追記

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

 メールが受信できているか確認

 mail

 

以上!!!!