はじめに
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 |
![]() |
|||
![]() |
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
おわりに
最低限の設定で、メール送受信できました!
学習をすすめ、セキュリティ向上、逆引きなど、設定を追加していきます!
本投稿がどなたかのお役に立てれば幸いです!