やりたいこと
環境
バーチャルボックス: 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)