3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

はじめに

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

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

構成

用途 ユーザ名 IPアドレス メールアドレス
メール送信サーバ c10 192.168.65.10/24 -
DNSサーバ c53 192.168.65.53/24 -
メール受信サーバ c20 192.168.65.20/24 c20@test.test
構成.png
環境.png

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 c20@test.test

→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: c20@test.test
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 <c20@test.test>; Sun, 5 Jan 2020 20:10:14 +0900
Date: Sun, 05 Jan 2020 20:10:14 +0900
From: HOGE@HOGE
To: c20@test.test
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=<c20@test.test>, 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

おわりに

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

3
8
0

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
3
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?