超シンプル!centos7、ローカル環境でsendmail、DNSサーバ構築


はじめに

Linuxでメールサーバ、DNSサーバの勉強を始めましたが、
情報サイトはいろいろあるものの、私には難易度高過ぎ!
なので、自分で試行錯誤して作ってみました。

セキュリティを度外視した、閉じたLAN内限定で、
限界まで設定を削ぎ落とした超シンプル構成です。

構成

用途 ユーザ名 IPアドレス メールアドレス
メール送信サーバ c10 192.168.65.10/24 -
DNSサーバ c53 192.168.65.53/24 -
メール受信サーバ c20 192.168.65.20/24 [email protected]


PC1台(Windows2012ServerR2)、VMware Workstation 15 Player、centos7.7を使用しました。
PC3台にcentosを導入した構成でもOKです。

VMware新規仮想マシンのインストール、設定[c10、c20、c53]

以降、アドレス、ユーザ名はそれぞれのサーバにあわせて、読み替えてください。

・新規仮想マシンの作成
 インストール先:ローカルの標準ディスク
 日本語選択

・rootパスワード:c10
 確認:c10

・ユーザの作成
 フルネーム:c10
 ユーザ名:c10
 パスワード:c10
 パスワードの確認:c10
 このユーザを管理者にする:チェック

・ネットワークアダプタ
 NAT:ホストのIPを共有して使用

VMwareでネットワーク設定[c10、c20、c53]

[root@localhost c10/c53/c20]# nmcli connection modify ens33 ipv4.addresses 192.168.65.10/24 ### IPアドレス設定
[root@localhost c10/c53/c20]# nmcli connection modify ens33 ipv4.method manual         ### IP固定割り当てに設定
[root@localhost c10/c53/c20]# nmcli connection modify ens33 connection.autoconnect yes    ### 自動起動
[root@localhost c10/c53/c20]# nmcli connection down ens33                    ### インターフェース再起動                                                 
[root@localhost c10/c53/c20]# nmcli connection up ens33                     ### インターフェース再起動                     
[root@localhost c10/c53/c20]# nmcli connection modify ens33 ipv4.dns 8.8.8.8
[root@localhost c10/c53/c20]# nmcli connection modify ens33 ipv4.gateway 192.168.65.2
[root@localhost c10/c53/c20]# systemctl restart network                     ### ネットワーク再起動
[root@localhost c10]# ip add show
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:84:a7:43 brd ff:ff:ff:ff:ff:ff
    inet 192.168.65.10/24 brd 192.168.65.255 scope global noprefixroute ens33

→以降の作業は、teratermなどターミナルソフトにて、それぞれのマシンにssh接続します。

Firewall無効化[c10、c20、c53]

[root@localhost c10/c53/c20]# systemctl stop firewalld      ### サービス停止
[root@localhost c10/c53/c20]# systemctl status firewalld    ### サービス状態確認
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since 日 2020-01-05 15:34:19 JST; 979ms ago
     Docs: man:firewalld(1)

→inactiveであることを確認します。

SELinux無効化[c10、c20、c53]

[root@localhost c10/c53/c20]# vi /etc/selinux/config
# 30行目:enforcingから修正
SELINUX=disabled

→SELinuxは、
「Linuxのカーネルに強制アクセス制御機能を付加するモジュール」とのことですが、
 今回は不要なので、停止します。

各種ソフト導入[c10、c20、c53]

[root@localhost c53]# yum install bind              ### DNSサーバ
[root@localhost c10/c53/c20]# yum install telnet
[root@localhost c10/c53/c20]# yum install bind-utils        ### digコマンド
[root@localhost c10/c53/c20]# yum install tcpdump
[root@localhost c10/c20]# yum install sendmail sendmail-cf  ### メールサーバ
[root@localhost c10/c20]# yum install mailx           ### メール送受信に使用

各種ソフトを導入し終えたら、DNS設定を内向き、新DNSサーバ向けにします。
インターネット側のポートを抜線、遮断するなど、LAN内(192.168.65.x/24)に通信を閉じます。

[root@localhost c10/c53/c20]# nmcli connection modify ens33 ipv4.dns 192.168.65.53
[root@localhost c10/c53/c20]# systemctl restart network

メールサーバソフト確認[C10、c20]

メールサーバソフトとしてsendmailを使用しているか、確認します。

[root@localhost c20]# alternatives --config mta
2 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
   1           /usr/sbin/sendmail.postfix
*+ 2           /usr/sbin/sendmail.sendmail

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

→sendmailを選択します。

[root@localhost c10/c20]# systemctl stop postfix

→postfixがインストールされている場合は停止します。

メール送信サーバ設定[c10]

送信サーバはsendmailインストールだけで、追加設定は不要です。

[root@localhost c10]# systemctl start sendmail    ### サービス起動
[root@localhost c10]# systemctl status sendmail   ### サービス状態確認
● sendmail.service - Sendmail Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/sendmail.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2020-01-05 19:33:58 JST; 7h ago

→active (running) を確認します。

メール受信サーバ設定[c20]

[root@localhost c20]# vi /etc/mail/local-host-names
test.test

→test.testドメインに送信されたメールを受信するように設定します。

[root@localhost c20]# vi /etc/mail/sendmail.mc
# 118行目:すべてのアドレスから受信に変更
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0,  Name=MTA')dnl 
# 157行目:ドメイン名変更
LOCAL_DOMAIN(`test.test')dnl
[root@localhost c20]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf ### 設定反映
[root@localhost c20]# systemctl restart sendmail  ### サービス再起動
[root@localhost c20]# systemctl status sendmail  ### サービス状態確認
● sendmail.service - Sendmail Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/sendmail.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2020-01-05 19:03:58 JST; 1s ago
  Process: 2252 ExecStart=/usr/sbin/sendmail -bd $SENDMAIL_OPTS $SENDMAIL_OPTARG (code=exited, status=0/SUCCESS)

→active (running) を確認します。

DNSサーバ設定[c53]

[root@localhost c53]# vi /etc/named.conf
options {
        listen-on port 53    { any; };
        listen-on-v6 port 53 { none; };
        directory            "/var/named";
        allow-query          { localhost; 192.168.65/24; };
        allow-transfer       { localhost; 192.168.65/24; };
        recursion no;
};
zone "test.test" IN {
       type master;
       file "test.test.lan";
};
[root@localhost c53]# vi /var/named/test.test.lan
$TTL 86400
test.test.     3600    IN SOA  NS.test.test. hoge.gmail.com.(
                       2003031401      ; Serial
                       3600            ; Refresh
                       1800            ; Retry
                       604800          ; Expire
                       86400 )         ; Minimum TTL

test.test.     3600    IN NS  NS.test.test.
NS.test.test.  3600    IN A   192.168.65.53

test.test.     3600    IN MX  10 c20.test.test.
c20.test.test. 3600    IN A   192.168.65.20
[root@localhost c53]# systemctl restart named  ### サービス起動
[root@localhost c53]# systemctl status named  ### サービス状態確認
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2020-01-05 19:18:10 JST; 9s ago
  Process: 2235 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)

→active (running) を確認します。

メール送信(C10)

[root@localhost c10]# echo "あなたへの8930万円の融資が決定致しました。" | mail -s "拘束銀行からのご連絡" -S smtp=smtp://192.168.65.20:25 -r HOGE@HOGE [email protected]

→c10にてhogeドメインのユーザhogeを送信元として、
 test.testドメインのユーザc20へメール送信します。

メール受信(C20)

メールを受信しているか確認します。

[root@localhost c20]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/c20": 1 messages 1 new
>N  1 HOGE@HOGE              Sun Jan  5 20:10  18/593   "拘束銀行からのご連絡"
& 1
Message  1:
From HOGE@HOGE  Sun Jan  5 20:10:14 2020
Return-Path: <HOGE@HOGE>
Date: Sun, 05 Jan 2020 20:10:14 +0900
From: HOGE@HOGE
To: [email protected]
Subject: 拘束銀行からのご連絡
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=utf-8
Status: R

あなたへの8930万円の融資が決定致しました。

&

[root@localhost c20]# less /var/spool/mail/c20

From HOGE@HOGE  Sun Jan  5 20:10:14 2020
Return-Path: <HOGE@HOGE>
Received: from localhost ([192.168.65.10])
        by localhost.localdomain (8.14.7/8.14.7) with SMTP id 005BAEtA010237
        for <[email protected]>; Sun, 5 Jan 2020 20:10:14 +0900
Date: Sun, 05 Jan 2020 20:10:14 +0900
From: HOGE@HOGE
To: [email protected]
Subject: =?utf-8?B?6YqA6KGM44GL44KJ44Gu44GU6YCj57Wh?=
Message-ID: <5e11c416.CV3MXjGt/CAjqiTp%HOGE@HOGE>
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Status: RO

あなたへの8930万円の融資が決定致しました。

(END)
[root@localhost c20]# less /var/log/maillog
Jan  5 20:10:14 localhost sendmail[10237]: 005BAEtA010237: from=<HOGE@HOGE>, size=349, class=0, nrcpts=1, msgid=<5e11c416.CV3MXjGt/CAjqiTp%HOGE@HOGE>, proto=SMTP, daemon=MTA, relay=[192.168.65.10]
Jan  5 20:10:14 localhost sendmail[10238]: 005BAEtA010237: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30522, dsn=2.0.0, stat=Sent

→届きました!

トラブルシューティング

[root@localhost c10]# ping 192.168.65.20
PING 192.168.65.20 (192.168.65.20) 56(84) bytes of data.
64 bytes from 192.168.65.20: icmp_seq=1 ttl=64 time=1.34 ms
64 bytes from 192.168.65.20: icmp_seq=2 ttl=64 time=0.214 ms

→成功例。

[root@localhost c10]# ping c20.test.test
PING c20.test.test (192.168.65.20) 56(84) bytes of data.
64 bytes from 192.168.65.20 (192.168.65.20): icmp_seq=1 ttl=64 time=1.21 ms
64 bytes from 192.168.65.20 (192.168.65.20): icmp_seq=2 ttl=64 time=0.895 ms

→成功例。

[root@localhost c10]# ping c20.test.test
ping: c20.test.test: 名前またはサービスが不明です

→失敗例。DNSでの名前解決がうまく出来ていません。

[root@localhost c10]# dig test.test any

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> test.test any
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32366
;; flags: qr aa rd; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.test.                     IN      ANY

;; ANSWER SECTION:
test.test.              3600    IN      SOA     NS.test.test. test.gmail.com. 2003031401 3600 1800 604800 86400
test.test.              3600    IN      NS      NS.test.test.
test.test.              3600    IN      MX      10 c20.test.test.

;; ADDITIONAL SECTION:
NS.test.test.           3600    IN      A       192.168.65.53
c20.test.test.          3600    IN      A       192.168.65.20

;; Query time: 0 msec
;; SERVER: 192.168.65.53#53(192.168.65.53)
;; WHEN: 日  1月 05 22:00:59 JST 2020
;; MSG SIZE  rcvd: 157

→成功例。

[root@localhost c10]# telnet 192.168.65.20 25
Trying 192.168.65.20...
Connected to 192.168.65.20.
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.14.7/8.14.7; Sun, 5 Jan 2020 22:02:10 +0900

→成功例。

[root@localhost c10]# telnet 192.168.65.20 25
Trying 192.168.65.20...
telnet: connect to address 192.168.65.20: No route to host
[root@localhost c10]#

→失敗例。何らかの問題で接続出来ていません。

[root@localhost c20]# tcpdump -p -i ens33 host 192.168.65.10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
22:13:23.245337 IP 192.168.65.10.40542 > localhost.localdomain.smtp: Flags [S], seq 4220477456, win 29200, options [mss 1460,sackOK,TS val 29769713 ecr 0,nop,wscale 7], length 0
22:13:23.245399 IP localhost.localdomain.smtp > 192.168.65.10.40542: Flags [S.], seq 932260319, ack 4220477457, win 28960, options [mss 1460,sackOK,TS val 14031906 ecr 29769713,nop,wscale 7], length 0
22:13:23.245599 IP 192.168.65.10.40542 > localhost.localdomain.smtp: Flags [.], ack 1, win 229, options [nop,nop,TS val 29769714 ecr 14031906], length 0
22:13:23.278032 IP localhost.localdomain.smtp > 192.168.65.10.40542: Flags [P.], seq 1:89, ack 1, win 227, options [nop,nop,TS val 14031939 ecr 29769714], length 88: SMTP: 220 localhost.localdomain ESMTP Sendmail 8.14.7/8.14.7; Sun, 5 Jan 2020 22:13:23 +0900
22:13:23.278447 IP 192.168.65.10.40542 > localhost.localdomain.smtp: Flags [.], ack 89, win 229, options [nop,nop,TS val 29769746 ecr 14031939], length 0
22:13:23.279887 IP 192.168.65.10.40542 > localhost.localdomain.smtp: Flags [P.], seq 1:17, ack 89, win 229, options [nop,nop,TS val 29769747 ecr 14031939], length 16: SMTP: HELO localhost

→成功例。

参考サイト

・sendmailの送受信設定、ローカルで送受信テスト(Sendmail, BJD)
https://qiita.com/takahashi-kazuki/items/7eb41bbc0edaa2b81caf

・【CentOS7】sendmail 基本設定 | server-memo.net
https://www.server-memo.net/server-setting/sendmail/sendmail-setting_centos7.html

・第64回DNS(3) リソースレコードタイプ
http://www5e.biglobe.ne.jp/aji/3min/64.html

おわりに

最低限の設定で、メール送受信できました!
学習をすすめ、セキュリティ向上、逆引きなど、設定を追加していきます!
本投稿がどなたかのお役に立てれば幸いです!