この記事は富士通クラウドテクノロジーズ Advent Calendar 2021の7日目の記事です。
Advent Calender 6日目は @ntoofu さんの「社内CTFを開催しました」でした。
参加はできなかったのですが、後日の解説を聞きCTFの面白さを知ることが出来ました。
記事のきっかけの部分に、
弊社のサービスの開発用の環境で、実際に攻撃を試してみることにしました。
そして、DEF CON内の発表で初めて知ったある典型的な脆弱性について探してみたところ、その途中にそれとは異なる脆弱性を見つけてしまいました。
とあり、スキルアップはもちろん実際の業務にも活かされるというのが面白いなと思いました。
次は参加したいなと思っています。
はじめに
FJCT新人の @HanchA です。
10月に配属され、それから運用に携わっています。
今回はサーバーの運用や監視を行っていく上で学習した内容について書いていこうと思います。
目的
- Zabbixによってサーバーを監視し、障害通知を受けとる
概要
- Postfix, Dovecotによるメールサーバーの構築
- Zabbixの構築
- Zabbixによる障害メールの送信・受信
今回使用する環境について
- AWS無料枠のAmazon EC2
- Amazon Linux 2 AMI (HVM) - Kernel 5.10, SSD Volume Type
- Postfix, Dovecot, Zabbix-server, Zabbix-agentを全て1サーバー上に構築
メールの仕組みについて
- メールサーバーとは、メールの送信・受信を行うためのサーバーである
- メールの送信・転送にはSMTP(Simple Mail Trancefar Protocol)というプロトコルが用いられる
- Thunderbirdなどのメールソフトからメールを受け取り、送信先(相手)のSMTPサーバーに届ける役割を持つ
- メールの受信にはPOP3(Post Office Protocol), IMAP(Internet Message Access Protocol)というプロトコルが用いられる
- SMTPサーバーから送られてきたメールを受け取り、Thunderbirdなどのメールソフトへメールを取り出す役割を持つ
参考
https://blastmail.jp/blog/mail-delivery/mail-server
PostfixによるSMTPサーバー構築
- まずはPostfixによるSMTPサーバーの構築から行う
1. Postfixのインストール
-
yum -y install postfix
- 本環境であるAmazon Linux 2には初期からpostfix-2.10.1-6.amzn2.0.3.x86_64 がインストール済のため省略
2. 設定ファイルの編集
- /etc/postfix 以下のファイル内容を変更する
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = mail.example.com
mydomain = example.com
myorigin = $myhostname
inet_interfaces = localhost
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps =
unknown_local_recipient_reject_code = 550
mynetworks = 127.0.0.0/8
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
home_mailbox = Maildir/
luser_relay = unknown_user@localhost
smtpd_banner = $myhostname ESMTP unknown
debug_peer_level = 2
debugger_command =
PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
message_size_limit = 1048576
3. メールボックスの作成
$ mkdir -p /etc/skel/Maildir/{new,cur,tmp}
$ chmod -R 700 /etc/skel/Maildir/
$ echo unknown_user: /dev/null >> /etc/aliases
$ newaliases
4. Postfixの起動
systemctl restart postfix
systemctl enable postfix
5. Postfixの動作確認
$ yum -y install telnet
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 xxxxxx ESMTP unknown
MAIL FROM: test@localhost
250 2.1.0 Ok
RCPT TO: ec2-user@localhost
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
FROM: test@localhost
Subject: test
test1413
.
250 2.0.0 Ok: queued as 72BC27A1B0
quit
221 2.0.0 Bye
Connection closed by foreign host.
-
↑によってホームディレクトリにMaildirが作成される
/home/ec2-user/Maildir/new
/home/ec2-user/Maildir/cur
-
/home/ec2-user/Maildir/tmp
Zabbixによる監視
1. Zabbix-server, Zabbix-agentの構築
- 以下の記事を参考に、Zabbix5.0のインストール・各種設定を行う(本記事では手順は省きます)
2. Zabbix-serverの動作確認
- EC2 コントロールパネルの「ネットワーク&セキュリティ」->「セキュリティグループ」からインバウンドルールを追加
- タイプ「
HTTP
」, ソース「マイ IP
」
- タイプ「
- ブラウザから「http://<IPアドレス>/zabbix」にアクセスし、設定を進める
3. ホストの追加
- 左にある項目「Configuration」->「Hosts」->「Create host」からZabbix-agentを追加する
4. テンプレートの追加
- 今回はアイテム、トリガーの作成を省き、テンプレートでの基本的な項目のみ追加する
- 「Hosts」->「zabbix agent」を選択し、「
Template Module Zabbix agent
」を追加する
5. 監視項目の確認
- 「Monitoring」->「Latest data」から取得したデータが確認できる
- 「Last value」に取得したデータが表示される
- 「Configuration」->「Hosts」->「Items」からアイテムを選択し、「Execute now」を押すことで監視間隔を無視してデータを取得することができる
- アイテムをテストする際に便利
- 「Configuration」->「Hosts」->「Items」からアイテムを選択し、「Execute now」を押すことで監視間隔を無視してデータを取得することができる
Zabbixからの障害メール送信
1. ユーザーのメディアの追加
- 今回、ユーザーは「Admin」を選択する
- 「Administration」->「Users」->「Admin」->「Media」->「Add」を選択する
2. メディアタイプの追加
- 「Administration」->「Media types」->「Email」を選択する
3. メール送信のテスト
-
↑で設定した項目でzabbixからメールが送信されるか確認を行う
- 「Administration」->「Media types」右の「Test」をクリック
DovecotによるPOP3サーバー構築
- ここまでで、SMTPサーバーとZabbixを構築し、監視対象サーバーとの疎通が取れなくなったりした際に障害メールを送ることができるようになった
- ここからはDovecotによりPOP3サーバーを構築し、障害メールを受け取れるようにする
1. Dovecotのインストール
yum -y install dovecot
2. 設定ファイルの編集
- /etc/dovecot 以下のファイル内容を編集していく
mail_location = maildir:~/Maildir
disable_plaintext_auth = no
ssl = no
3. Dovecotの起動
systemctl start dovecot
systemctl enable dovecot
4. Dovecotの動作確認
# telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
USER ec2-user
+OK
PASS <password>
+OK Logged in.
stat
+OK 9 8059
retr 4
+OK 993 octets
Return-Path: <zabbix@mail.example.com>
X-Original-To: ec2-user@mail.example.com
Delivered-To: ec2-user@mail.example.com
Received: from 127.0.01 (localhost [127.0.0.1])
by mail.example.com (Postfix) with SMTP id C103F3B5BF
for <ec2-user@mail.example.com>; Sun, 28 Nov 2021 15:15:40 +0900 (JST)
From: <zabbix@mail.example.com>
To: <ec2-user@mail.example.com>
In-Reply-To: 66.26a02de4aa51cfcd7284bd48afe4addc.1.972ff13a7a8531a0e2bf65aa705a95e0@zabbix.com
Date: Sun, 28 Nov 2021 15:15:40 +0900
Subject: Problem: Zabbix agent is not available (for 3m)
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: base64
Message-Id: <20211128061540.C103F3B5BF@mail.example.com>
UHJvYmxlbSBzdGFydGVkIGF0IDE1OjE1OjM3IG9uIDIwMjEuMTEuMjgNClByb2JsZW0gbmFtZTog
WmFiYml4IGFnZW50IGlzIG5vdCBhdmFpbGFibGUgKGZvciAzbSkNCkhvc3Q6IFphYmJpeCBzZXJ2
ZXINClNldmVyaXR5OiBBdmVyYWdlDQpPcGVyYXRpb25hbCBkYXRhOiBub3QgYXZhaWxhYmxlICgw
KQ0KT3JpZ2luYWwgcHJvYmxlbSBJRDogNjYNCg==
.
quit
+OK Logging out.
Connection closed by foreign host.
(おまけ)Thunderbirdによるメールの受信
- ここまでだとサーバーに入らないとメールを確認できないため、クライアントPCにThunderbirdを入れてサーバーの障害を受け取れるようにする
1. メールユーザーの作成
$ useradd -s /sbin/nologin mail-user
$ passwd mail-user
Changing password for user mail-user.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
2. Zabbixの設定変更
- 「Administration」->「Users」->「Admin」->「Media」を選択
- Send to「
mail-user@mail.example.com
」
- Send to「
3. ポートの解放
- EC2 コントロールパネルの「ネットワーク&セキュリティ」->「セキュリティグループ」からインバウンドルールを追加
- タイプ「
POP3
」, ソース「マイ IP
」
- タイプ「
4. Thunderbirdの設定
- クライアントPCにThunderbirdをインストール
- Thunderbirdを起動し、詳細設定
- POPメールサーバーを設定
5. 障害メールの受信確認
-
systemctl stop zabbix-agent
でzabbix-agentを落とし、障害メールが送信・受信されることを確認する- Thunderbirdの通知によって、以下のようなメールが確認できた
- サーバーに障害が起きた際に通知を得ることができるようになった(自宅でのみ)
注意
- 通常のメールサーバーとして使用したい場合、設定を適切に行わないとスパムメールの踏み台などにされてしまうので注意してください
- セキュリティグループ(ファイアウォール)によるアクセス制御
- Postfixの設定
- SMTP AUTH(メール送信時のユーザー認証)
- /etc/postfix/main.cf の mynetworks(信頼するネットワークの制限)など
最後に
- Postfix, Dovecotによるメールサーバーの構築、Zabbixによるサーバーの監視を行った
- また、それらを組み合わせることで障害の通知が受けられるようになった
- 明日の記事は同期の @SogoK 君の「Kubernetes クラスターを自力で組んでトラブルシューティングしてみる【The Hard Way】【ニフクラ】」です。お楽しみに。