Ubuntuでのログ監視(logwatch) Postfix+SendGridでメールを送信する
はじめに
この記事は、以下の環境にてログ監視結果をメールで送信する設定についてまとめています。
環境
- Ubuntu20.04
-
logwatch
でサーバーのログ監視を行う -
postfix
で結果をメールで送る - メールはSMTP経由で転送する
SendGrid
を利用
※この環境に至るまでの、Ubuntuサーバーを立ててlogwatch
をインストールするまでの流れは以下記事にまとめています。
この記事の作業の流れ
-
logwatch
をインストール -
postfix
をインストール - SMTP経由でメールを転送する(
SendGrid
の無料プランを利用)
というわけでレッツトライ。
1)ログ監視ソフトlogwatchをインストール
まず、logwatchについて。
というわけで、logwatch
をインストール。
% sudo apt install logwatch
# 以下で動作確認できます
# outputに続くstdoutで、結果を画面表示
% sudo logwatch --output stdout
インストールされたら設定ファイルを編集します。
ここでややこしいのが「設定ファイルは複数あり、保存場所によって優先度が変わる」ということ。今回はログ結果を送信するだけの環境なので難しいことは考えず、以下を理解しておけば大丈夫。
- /usr/share/logwatch/default.conf ‥デフォルト設定
- /etc/logwatch/conf/logwatch.conf ‥上記ファイルをコピーして作成・編集する
というわけで、デフォルトの設定ファイルをコピーします。
% sudo cp -p /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
続いて、コピーした設定ファイルを編集。viエディタでオープン。
% sudo vi /etc/logwatch/conf/logwatch.conf
ファイルの中から以下項目を探して変更します。
変更後はファイルの保存も忘れずに。
# メールの送信先
# rootアカウントに送信するようになっているので送信したいアドレスに変更
#MailTo = root
MailTo = xxx@xxxxx.com
# ログ解析の詳細度
# Low/Med/Highの3種類あります
Detail = High
# ログの出力先
# stdout/mail/fileが選べます(stdoutは画面に表示)
Output = mail
# 出力フォーマット
# html/textが選べます(シンプルで良いのでtextに)
Format = text
# ログレポートの範囲
# All/Today/Yesterdayが選べます
Range = yesterday
設定できたら、以下の作業用ディレクトリを確認し、無ければ作っておきます。
# /etc/cache/logwatch がなければ以下で作成
% sudo mkdir /etc/cache/logwatch
# 作成したディレクトリの権限を変更
% sudo chmod 700 /etc/cache/logwatch
logwatch
の設定周りはこんな感じで終了。
2)メールソフトpostfixをインストール
続いて、メールソフトであるpostfix
をインストール。
postfix
は前述のlogwatch
と共にインストールされるはず。
一応以下で確認。
# 以下でpostfixのバージョンを確認できる
% postconf | grep mail_version
mail_version = 3.4.13
milter_macro_v = $mail_name $mail_version
上記でエラーが表示される場合は、以下でインストール。
# 関連パッケージ一覧を更新しておく
% sudo apt update
# postfixをインストール
% sudo apt install postfix
# あわせて、mailコマンドが使えるように以下もインストールしておく
% sudo apt install mailutils
インストールできたら設定ファイルを編集。
基本はデフォルト設定とし、以下項目を探して記述を変更、または追記する。
# メールを受け取ることができるアドレスを指定
# デフォルトでは all となっており「どこからでも受け取れる」設定のため、
# 自分自身だけ可能となるよう設定する(今回は送信専用にしたい)
#inet_interfaces = all
inet_interfaces = 127.0.0.1
# 上記と併せて、メールを受け取る際の通信プロトコル(ルール)を指定
# こちらも all となっているので、IPv4のみに設定
#inet_protocols = all
inet_protocols = ipv4
# ホスト名関連
# 私は一旦仮設定として以下を指定(今後利用する中で変更予定です)
myhostname = xxx-xxx-xxx-xxx ‥当方の環境ではIPアドレスだったのでそのまま利用
mydomain = xxxxx.com
myorigin = $mydomain
# メールをSMTP経由で送るための設定を追記
# SASL認証徹底有効化
smtp_sasl_auth_enable = yes
# 匿名ログインを許可しない
smtp_sasl_security_options = noanonymous
# セキュリティレベル
smtp_tls_security_level = may
# リレー先ホストを指定
# 今回、SendGridを使うので以下を指定(利用するサービスによって異なります)
relayhost = [smtp.sendgrid.net]:587
# リレー先へのSMTP認証情報
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
設定を変更できたら、以下コマンドで設定ファイルの内容チェックが可能です。
このコマンドでエラー等のメッセージが表示されなければOK。
# postfixの設定をチェック
% sudo postfix check
上記に関する参考記事はこちら。
エラーが出なければ以下でpostfix
を再起動します。
# postfixを再起動
% sudo systemctl restart postfix
# postfixの稼働状況を確認
% sudo systemctl status postfix
こんな感じで表示されれば正常に動作しています。
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/lib/systemd/system/postfix.service; enabled; vendor preset: enabled)
Active: active (exited) since Wed 2022-10-26 16:08:48 JST; 2 days ago
Main PID: 149317 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 1066)
Memory: 0B
CGroup: /system.slice/postfix.service
Oct 26 16:08:48 xxx-xxx-xxx-xxx systemd[1]: Starting Postfix Mail Transport Agent...
Oct 26 16:08:48 xxx-xxx-xxx-xxx systemd[1]: Finished Postfix Mail Transport Agent.
以上でpostfix
周りの設定はOKです。
ここまでで、一応logwatch
から監視結果をメール送信できるようになりますが、サーバーにログインしたときだけメールを確認できます。(つまりサーバーにログインしなければ、メールが見られない)
さすがにこれでは不便なので、サーバー外にもメールできるようにSMTP経由でメールを転送するという設定を行います。
SendGrid
の無料プランを利用
3)SMTP経由でメールを転送する 最後にSMTP経由でメールを転送する方法です。
私の環境では、SendGridを利用することにしました。
(参考) gmailは使えない?
「postfix SMTP経由」などで検索すると、GmailのSMTPサーバーを使う方法が紹介されているのですが、私の環境では同じようにできませんでした‥。
以下画像のとおり、どうやらGoogleの仕様が変わったので設定ができなくなったっぽい?印象です。(この辺、もし詳しい方いましたら、コメントにて教えていただければ嬉しいです。)
そんなわけで、SMTPとして利用できそうなSendGridに行きつきました。
①まずは、SendGridを無料枠で登録します。
これは公式サイトの「無料ではじめる」ボタンから普通に行けると思います。
②メールアドレス等を入力して個人情報の入力へ進みます。
ここで注意点が2つ。
③無事にアカウント発行がされたら、SendGrid公式サイトからログインして、SMTP転送の設定を行います。(SendGrid側ではアクセスキー(APIキー)を作成します)
④管理画面から、Email API > Integration Guide を選択して、Choose a setup method で「SMTP Relay」をクリック。
⑤続く画面で以下を設定します。
- Create an API key に作成するキーの名称を入力して[Create Key]をクリック。これで、キーが作成されます。
- キーを作成すると、Configure your application にパスワード等が出てくるので、設定をメモして画面下部のチェックボックスをオンにして、Nextボタンをクリック。
⑥最後に設定をチェックして終了です。
⑦SendGridで、APIキーを作成できたら、続いてサーバー側の設定です。
postfixの設定で行った編集内容を確認。
# メールをSMTP経由で送るための設定を追記
# SASL認証徹底有効化
smtp_sasl_auth_enable = yes
# 匿名ログインを許可しない
smtp_sasl_security_options = noanonymous
# セキュリティレベル
smtp_tls_security_level = may
# リレー先ホストを指定
# 今回、SendGridを使うので以下を指定(利用するサービスによって異なります)
relayhost = [smtp.sendgrid.net]:587
# リレー先へのSMTP認証情報
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
特に、relayhostの指定は、SendGridの内容になっているかを確認します。
⑧最後に、APIキーを利用したパスワードファイルを設定します。
# postfixのパスワードファイルを作成
% sudo vi /etc/postfix/sasl_passwd
パスワードファイルの中身は以下のように記述します。
[smtp.sendgrid.net]:587 username:password
usernameは、apikey
passwordに、SendGridで表示されたAPIキーを指定します。
保存できたら、作成したパスワードファイルを以下で暗号化します。
# パスワードファイルをハッシュ化(暗号化)
% sudo postmap hash:/etc/postfix/sasl_passwd
これで、SMTP経由でメールを送信する設定は終了です。
logwatch
をメールで出力できるか確認。
% sudo logwatch --output mail
これで、postfixに設定していたメールアドレスにメールが届いていればOKです。
もし、しばらく待っても届かない場合は設定ミスが起こっている可能性があります。
SendGridの管理画面でも、「Activity」から、メールを受け取れたかどうかの確認ができるので、このあたりも見ながら確認してみてください。
さいごに
私自身、一連の作業を始めてからPCのメールソフトで受信できるまでかなりの時間を要しました💦もっと簡単にできると思っていましたが、なかなか参考サイトどおりには進まず難航してしまったので、自分なりの作業メモをまとめてみました。
もし、私と似たような環境を実現しようとしてうまくいかない方がいれば、何かの参考になれば嬉しい限りです。
Discussion