1
1

More than 1 year has passed since last update.

VirtualBoxを使用してメールサーバー、DNSサーバーの構築

Last updated at Posted at 2023-07-01

やりたいこと

  • メールサーバーの構築
  • DNSサーバーの構築
  • クライアント1からクライアント2にメールを送信
    構成図.jpg

環境

バーチャルボックス: 7.0.0
ゲストOS:Alma Linux

メールサーバー:192.168.56.106 mailserver.linux.com

DNSサーバー:192.168.56.104 DNS-server.linux.com

クライアント1:192.168.56.109 client1.linux.com

クライアント2: 192.168.56.108 client2.linux.com

メールサーバー

postfixをインストール
yum install -y postfix

再起動しても自動で起動するように設定する。
systemctl enable postfix

現在の状態を確認
systemctl status postfix

Activeと表示されていればOK
main.cfを編集
vi /etc/postfix/main.cf
下記の項目を編集

  • myhostname = [ホスト名] mailserver.linux.com
  • mydomain = [ドメイン名] linux.com
  • myorigin = $mydomain
  • inet-interfaces = all 全てのインターフェイスで受け付ける
  • mydestination = \$myhostname, localhost.\$mydomain, localhost, $mydomain
  • mynetworks = 所属するNW 192.168.56.0/24
  • home_mailbox = Maildir/

postfixを再起動する。
systemctl restart postfix

次にdovecotのインストールする
yum install -y dovecot

設定ファイルの編集をする。

vi /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
にする。

vi /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
にする

vi /etc/dovecot/conf.d/10-master.conf
service auth {
unix_listener auth-userdb {
mode = 0600
user = vmail ★ここで指定するユーザーが存在しないと※1のエラーが発生する。
# Assuming the default Postfix user and group
group = postfix
}

# Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}
}
にする。

dovecotを再起動する。
systemctl restart dovecot

※1
dovecot[2606]: Fatal: service(auth) User doesn't exist: vmail (See service auth { unix_listener /run/dovecot/auth-userdb { user } } setting)
dovecot[2606]: master: Fatal: service(auth) User doesn't exist: vmail (See service auth { unix_listener /run/dovecot/auth-userdb { user } } setting)

クライアント1、クライアント2の設定

vi /etc/resolv.conf
search linux.com next.linux.com
nemaeserver dnsサーバーのIPアドレス(192.168.56.104)

nameserverがないとDNSに問い合わせができない。
ない場合は/etc/hostsを参照する。

この設定で、システムがserver1というホスト名を解決しようとすると、まずはserver1.linux.comとして解決を試みます。もしserver1.linux.comが見つからない場合、次にserver1.next.linux.comとして解決を試みます。

searchオプションを使用することで、ユーザーは部分的なホスト名をタイプするだけで、フルのドメイン名をタイプする手間を省くことができます。

つまりsearchに指定している検索したいもの+searchのドメインとなる

DNSサーバー

bindをインストール
yum install -y bind bind-utils

/etc/named.confでゾーン情報について定義をする。
vi /etc/named.conf

options {
    ~~省略~~
    listen-on port 53 { any; };
    ~~省略~~
}

zone "linux.com" IN {
        type master;
        file "forward.linux.com";
};

nemed.confの構文をチェックする
named-checkconf
何も結果がかえって来なければOK

名前解決を行うためにレコードを追加する。
vi /var/named/forward.linux.com

$TTL 1D
@       IN SOA  DNS-server.linux.com. root.linux.com. (
                                        2023061101      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       IN      NS      DNS-server.linux.com.
DNS-server.linux.com.   IN      A       192.168.56.104
@       IN      MX      10      mailserver
mailserver      IN      A       192.168.56.106
client1         IN      A       192.168.56.109
client2         IN      A       192.168.56.108

@はオリジンに置き換わります。
どういうことかというと/etc/named.confで設定したzone "linux.com"に置き換わります。
つまり@ IN SOAは linux.com. IN SOAと同じ意味になる。

ゾーンファイルの構文をチェックする。
named-checkzone linux.com /var/named/forward.linux.com
引数の1つ目はドメイン、2つ目の引数はゾーンファイルの場所
今回はOKと表示されればOK

namedのリロード
systemctl reload named

実際に名前解決ができるかDNSサーバーでdigコマンドで確認する。
dig @localhost mailserver.linux.com

~~省略~~
;; ANSWER SECTION:
mailserver.linux.com.   86400   IN      A       192.168.56.106
~~省略~~

と返ってくれば名前解決はできている。
今回は自分自身(@localhost)にあるドメインで名前解決できる確認する。

クライアント1からメールサーバーの名前解決ができるか確認をする。
dig mailserver.linux.com

~~省略~~
;; ANSWER SECTION:
mailserver.linux.com.   86400   IN      A       192.168.56.106
~~省略~~

と返ってくれば名前解決ができている。

メールを送ってみる

クライアント1→クライアント2に送ってみる
中継でメールサーバーを経由する設定になっているので、クライアント1→メールサーバー→クライアント2という経路でメールが送られる。

[root@client1 ~]# sendmail client2@linux.com
From:root@client1.linux.com
To:client2@linux.com
Subject:test
this is test mail
.

ログを見てみる

[root@client1 ~]# cat /var/log/maillog
Jun 28 18:35:01 client1 postfix/pickup[2217]: 6A9C9319FEB4: uid=0 from=<root>
Jun 28 18:35:01 client1 postfix/cleanup[2312]: 6A9C9319FEB4: message-id=<20230628093501.6A9C9319FEB4@client1.linux.com>
Jun 28 18:35:01 client1 postfix/qmgr[1108]: 6A9C9319FEB4: from=<root@client1.linux.com>, size=307, nrcpt=1 (queue active)
Jun 28 18:35:01 client1 postfix/smtp[2314]: 6A9C9319FEB4: to=<user1@client2.linux.com>, relay=mailserver.linux.com[192.168.56.106]:25, delay=35, delays=35/0.07/0.06/0.03, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 480843103628)
Jun 28 18:35:01 client1 postfix/qmgr[1108]: 6A9C9319FEB4: removed

480843103628のキュー番号でメールサーバーに送っているのが分かる。
relay=mailserver.linux.com

次にメールサーバーにもメールが届いているか確認する。

[root@mailserver ~]# cat /var/log/maillog | grep 480843103628
Jun 26 03:52:42 mailserver postfix/smtpd[3094]: 480843103628: client=unknown[192.168.56.109]
Jun 26 03:52:42 mailserver postfix/cleanup[3098]: 480843103628: message-id=<20230628093501.6A9C9319FEB4@client1.linux.com>
Jun 26 03:52:42 mailserver postfix/qmgr[2597]: 480843103628: from=<root@client1.linux.com>, size=503, nrcpt=1 (queue active)
Jun 26 03:52:42 mailserver postfix/smtp[3099]: 480843103628: to=<user1@client2.linux.com>, relay=client2.linux.com[192.168.56.108]:25, delay=0.26, delays=0.03/0.08/0.1/0.05, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as C7BE12205436)
Jun 26 03:52:42 mailserver postfix/qmgr[2597]: 480843103628: removed

C7BE12205436というキュー番号でuser1@client2.linux.comにメールを送信していることがわかる。

クライアント2にメールが届いているか確認する。

[root@client1 ~]# cat /var/log/maillog | grep C7BE12205436
Jun 28 18:35:01 client1 postfix/smtpd[2034]: C7BE12205436: client=unknown[192.16                                                                                                                                                             8.56.106]
Jun 28 18:35:01 client1 postfix/cleanup[2039]: C7BE12205436: message-id=<20230628093501.6A9C9319FEB4@client1.linux.com>
Jun 28 18:35:01 client1 postfix/qmgr[988]: C7BE12205436: from=<root@client1.linux.com>, size=699, nrcpt=1 (queue active)
Jun 28 18:35:01 client1 postfix/smtpd[2034]: disconnect from unknown[192.168.56.106] ehlo=2 starttls=1 mail=1 rcpt=1 data=1 quit=1 commands=7
Jun 28 18:35:01 client1 postfix/local[2040]: C7BE12205436: to=<user1@client2.linux.com>, relay=local, delay=0.06, delays=0.03/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Jun 28 18:35:01 client1 postfix/qmgr[988]: C7BE12205436: removed

status=sent(delivered to mailbox)となっているのでメールボックスに届いていることが分かる。
メールボックスを確認する。

[root@client2 ~]# cat /var/spool/mail/user1
From root@client1.linux.com  Wed Jun 28 18:35:01 2023
Return-Path: <root@client1.linux.com>
X-Original-To: user1@client2.linux.com
Delivered-To: user1@client2.linux.com
Received: from mailserver.linux.com (unknown [192.168.56.106])
        by client2.linux.com (Postfix) with ESMTPS id C7BE12205436
        for <user1@client2.linux.com>; Wed, 28 Jun 2023 18:35:01 +0900 (JST)
Received: from client1.linux.com (unknown [192.168.56.109])
        by mailserver.linux.com (Postfix) with ESMTPS id 480843103628
        for <user1@client2.linux.com>; Mon, 26 Jun 2023 03:52:42 +0900 (JST)
Received: by client1.linux.com (Postfix, from userid 0)
        id 6A9C9319FEB4; Wed, 28 Jun 2023 18:35:01 +0900 (JST)
From:root@client1.linux.com
To:user1@client2.linux.com
Subject:test
Message-Id: <20230628093501.6A9C9319FEB4@client1.linux.com>
Date: Wed, 28 Jun 2023 18:34:26 +0900 (JST)

this is test

Received: from mailserver.linux.com (unknown [192.168.56.106])となっている
なぜ192.168.56.106はmailserver.linux.comと分かっているのにunknownなのか?

これは逆引きで名前解決しようとしたときに名前解決ができなかった事が原因
なので逆引きができるようにする。

namedの設定ファイルを編集する。
vi /etc/named.conf

zone "56.168.192.in-addr.arpa" IN {
type master;
file "reverse.linux.com";
};
を追記

zone名は192.168.56.0/24の逆引きの名前解決を行うファイルです。
IPアドレスを逆から書きます。ホスト部の部分はファイル名に含めません。

named-checkconfを実行して問題がないことを確認する。

56.168.192.in-addr-arpaを/var/namedに作成し、以下の内容を追記する。(通常のゾーンファイルと同じ場所)

$TTL 1D
@ IN SOA DNS-server.linux.com root.linux.com (
2023061101 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum

@ IN NS DNS-server.linux.com.
4 IN PTR DNS-server.linux.com.
6 IN PTR test.mailserver.linux.com.
9 IN PTR client1.linux.com.
8 IN PTR client2.linux.com.
を追記する。

逆引きができるか確認してみる。
client1で逆引きができるか確認してみる
dig -x 192.168.56.109
;; ANSWER SECTION:
109.56.168.192.in-addr.arpa. 86400 IN PTR client1.linux.com.

逆引きができたので、もう一度クライアント1→クライアント2にメールをしてみて先ほどのunknownがちゃんと対象のドメインで表示される確認する。

[user1@client1 ~]$ cd /var/spool/mail/user1
-bash: cd: /var/spool/mail/user1: ディレクトリではありません
[user1@client1 ~]$ cd /var/spool/mail
[user1@client1 mail]$ more user1 | tail -10
Received: by client1.linux.com (Postfix, from userid 0)
        id CED27319FEB4; Fri, 30 Jun 2023 00:12:39 +0900 (JST)
From:root@client1.linux.com
To:user1@client2.linux.com
Subject:test
Message-Id: <20230629151239.CED27319FEB4@client1.linux.com>
Date: Fri, 30 Jun 2023 00:11:52 +0900 (JST)
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1