zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

【GWS】SMTPサーバー:smtp.gmail.com を利用したメール送信

【概要】

1)自前で運用しているツール(BitwardenとかMattermostとか)のシステムメール送信を、サーバ腹持ちのSMTPサーバ(Postfixとか)ではなくsmtp.gmail.comを利用して送信したい。
2)送信時のfromアドレスがGWSのユーザ名になってしまうので、no-reply@からの送信としたい。

【やったこと】

1)アプリパスワードの作成

SMTPを利用するGoogleアカウント(hogehoge@example.com)にて
[Google アカウントを管理]-[セキュリティ]-[アプリパスワード]で
サービス名を入力して「生成」→16桁の文字列が得られます。
メール送信だけであれば、

で送信可能ですが、このまま使うとメール送信時にhogehoge@example.comからの送信となってしまう(※)ため、よくあるno-reply@example.comからの送信とするため以下の作業を追加で行いました。

※各アプリケーションのシステムメールの設定でReplyToAddressなどにno-reply@example.comを設定すると、メールヘッダのX-Google-Original-From にno-reply@example.comが入って届くようになりますが、この時点ではメールのFromはhogehoge@example.comのままです。

2)GWS管理アカウントでSMTP利用ユーザに対し「予備のメールアドレス」を追加

AdminユーザでGoogleWorkspaceを開き、「予備のメールアドレスを追加」
でユーザー(今回はhogehoge@example.com)を指定して続行

今回は予備のメールとして
no-reply@example.com
を登録。

3)SMTP利用ユーザ自身のアカウントに予備のメールアドレスを「他のメールアドレスを追加」として追加する

ユーザー(hogehoge@example.com)のGmailの設定ページに行き、
「アカウント」タブのところで[他のメールアドレスを追加]として上記で追加した
no-reply@example.com
を追加します(この時名前はブランクとしています。また「エイリアスとして扱います」はONのままとします)

これで送信されたメールのFromがno-reply@example.comとなりました。

[アプリケーション側設定例]

■Bitwarden
global.override.env

globalSettings__mail__replyToEmail=no-reply@example.com
globalSettings__mail__smtp__host=smtp.gmail.com
globalSettings__mail__smtp__port=587
globalSettings__mail__smtp__username=hogehoge@example.com
globalSettings__mail__smtp__password=<アプリパスワード>

■Mattermost
config.json

"FeedbackEmail": "no-reply@example.com",
"ReplyToAddress": "no-reply@example.com",
"FeedbackOrganization": "",
"EnableSMTPAuth": true,
"SMTPUsername": "hogehoge@example.com",
"SMTPPassword": "<アプリパスワード>",
"SMTPServer": "smtp.gmail.com",
"SMTPPort": "587",
"SMTPServerTimeout": 10,
"ConnectionSecurity": "STARTTLS",

■事後的なメリット

hotehoge@example.comアカウントのGmail[送信済み]に各種システムメールの送信ログがまとめて入るため、管理が簡単になりました。

【P2V】デスクトップPCをVM化してみた2022

【サマリ】

Windows11マシンをvmdk化してVMware Workstation Playerで動かしてみた。

【本メモの経緯】

以前はメジャーだったVMware vCenter Converter Standaloneは
2022年02月にretireになってた
https://blogs.vmware.com/vsphere/2022/02/vcenter-converter-unavailable-for-download.html
ので、他のP2Vソフトを探したところ、お馴染みEaseUS Todo Backup WorkstationのP2V機能でVMDKに変換できるようだ。
※ライセンスの再認証等については別問題なのでここでは触れません。

【ダウンロード】

EaseUS Todo Backup Workstation
https://down.easeus.com/product/tb_enterprise_trial
→無料で30日間利用できる。上記URLよりtb_enterprise_trialをインストール。

VMware Workstation Player
https://www.vmware.com/jp/products/workstation-player.html
→最新版取得してインストール。

【やってみた】

1)vmdk化
EaseUS Todo Backup Workstationを起動、
[ツール]-[P2Vコピー]で対象のディスクを選択、出力先に外付けHDDなど指定して実行
※500GBで数時間かかってたがvmdkが作成できた。

2)VMWare Workstation Playerで実行
上記で作成したvmdkを指定して開く→動く。

【残念な点】

UEFI/GPTベースシステム(例えばmacのBootCamp領域など)の場合、上記手順では仮想化できなかった。
以下の手順が参考となると思われるが、未検証。メモのみ残しておきます。

Windows10の初期化を設定の[回復]から実施する手順

【参考】
https://tanweb.net/2018/12/17/24529/
https://aonasuzutsuki.hatenablog.jp/entry/2016/10/23/175343


[設定]-[更新とセキュリティ]-[回復]-[このPCを初期状態に戻す]-[開始する]

この際以下のオプション選択

  • アプリとファイルを削除する
  • ドライブのクリーニングを実施する(詳細でONにすることが可能)
  • Windowsをダウンロードして再インストール

■BootCampでインストールされているWindows10について
macにBootCampでインストールされていたWindows10についても上記で初期化が可能(macOS側を破壊せずにWindows側の初期化が可能)だったが、インストール後にWindowsサポートソフトウェアのインストールを行ってもmacOSでの起動ができない(電源再起動時にoptionを押してパーティションを選ぶことで起動できる)ため、BootCampの場合はmacOS側からクリーンインストールしたほうが最終的な初期化コストは低いと思われる。


以上メモまで。

【CloudWatchLogs】特定の文字列が出たらアラートメールするメモ

【ゴール】

ログに"ERROR"という文字列が出たらSNS経由でメールが飛ぶようにします

【やったこと】

1)ロググループにメトリクスフィルターを追加する


ロググループを選択-[アクション]-[メトリクスフィルターを作成]

フィルターパターン:"ERROR"
メトリクスの割り当て
フィルター名:hogehoge_filter
メトリクス名:hogehoge_error
メトリクス名前空間:hogehogeApp
メトリクス値:1
デフォルト値:0
Unit:-

2)メトリクスフィルターによる値を記録するためにテストログを出す

https://dev.classmethod.jp/articles/metrics-filter-missing/CloudWatch Logs メトリクスフィルターは 継続的にデフォルト値をメトリクスに発行しているわけではない | DevelopersIO
によれば
「メトリクスフィルターがメトリクスに値を発行するのは、フィルターパターンに一致するにせよしないにせよ、ログイベントが発生した場合のみ」らしいので手動でテストログを追記する

[2022-xx-xx xx:xx:00] hoge.ERROR: this is test log. please igonre me.

→メトリクスにカスタム名前空間として先ほど作成した
> メトリクス名前空間:hogehogeApp
が出ているはずなので、その中のメトリクス「hogehoge_error」が出ていることを確認する

3)アラームの作成

SNSトピック「test-user」(スタンダード、サブスクリプションのエンドポイントが対象のメールアドレス)は既に存在している前提
[アラーム]-[アラームの作成]

メトリクスと条件の指定

メトリクス:2)で確認したメトリクスを選択
しきい値の種類:静的
アラーム条件 0より大きい
(5 分内の1データポイントのhogehoge_error > 0)

アクションの設定

通知:通知の送信先に作成済みのSNSトピック「test-user」を指定

名前と説明を追加

アラーム名:[testApp]hogehoge_error
アラームの説明:
testApp_hogehogeで"ERROR"を含むログが出力されました。
詳細はCloudwatchLogsのロググループ:****.log をご確認ください。

4)テスト

再度テストログを出力
→メールが届けばOK

AWS SESからのメールがGmailからはじかれるのでやったこと(DKIM/DMARC)

■前提

ネームサーバがRoute53管理じゃなかったので生成されたレコードを登録担当に連絡して登録してもらう流れ。

1)DKIM

参照:https://docs.aws.amazon.com/ja_jp/ses/latest/dg/creating-identities.html#verify-domain-procedure

[Amazon SES]-[Create identity]
Identity type : Domain
Domain : <ドメイン名>
オプションのチェックボックスは選択せず
その他はデフォルトのママで
[Create Identity]

→生成されたDKIMDNSレコードを先方に渡して設定してもらう
→CNAMEレコードが返るようになったら、再度認証し、
DomainKeys Identified Mail (DKIM)のDKIM configurationが「Successful」となることを確認

上記ができたら続いていDMARCの設定を進めます。

2)DMARC

2)-1 カスタムの MAIL FROM ドメインを使用する

参照:
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/mail-from.html
[Amazon SES]-[Configuration: Verified identities]-[Authentication]

Custom MAIL FROM domain
AWSの推奨する形で mail from ドメインとして
mail.<ドメイン名>
を作成(既存のレコードと衝突する場合は調整すること)。

出力されたDNSレコードを登録担当に連絡して登録してもらう

2)-2 ドメインの DMARC ポリシーのセットアップ

参照:
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-authentication-dmarc.html
AWSの推奨するポリシーで作成したTXTレコードを登録担当に連絡して登録してもらう

_dmarc.example.com	TXT	"v=DMARC1;p=quarantine;pct=25;rua=mailto:dmarcreports@example.com"

3)確認

Custom MAIL FROM domain の MAIL FROM configuration が「Successful」になっていることを確認

GMAILのメッセージのソースを表示で確認

■参照
https://dev.classmethod.jp/articles/ses-send-mail-best-practices-summary/#toc-13



以上

Ubuntu 16でLet's EncryptのURLが開けなかったのでクライアント側で DST Root CA X3 を信頼済みCA一覧から削除したメモ

【問題】

環境: Ubuntu 16.04.7 LTS
でLet's encryptのサイトがcurlできない

openssl s_client -connect <相手先>:443 -servername <相手先> -showcerts -CAfile /etc/ssl/certs/ca-certificates.crt
で以下の期限切れエラー

CONNECTED(00000003)
depth=3 O = Digital Signature Trust Co., CN = DST Root CA X3
verify error:num=10:certificate has expired
notAfter=Sep 30 14:01:15 2021 GMT

【参考】

上記コマンドの説明
openssl s_client コマンドでウェブサーバーの SSL/TLS 対応状況を診断する – ラボラジアン

■対応について
https://www.walbrix.co.jp/article/openssl-102-letsencrypt-crisis.html
> 2. クライアント側で DST Root CA X3 を信頼済みCA一覧から削除する

→編集と反映方法
https://qiita.com/msi/items/9cb90271836386dafce3

【具体的にどうするの?】

以下のようにして無効化して反映した

# バックアップ
cp -p /etc/ca-certificates.conf /etc/ca-certificates.conf.bak

# /etc/ca-certificates.confでDST_Root_CA_X3.crtを無効化

diff /etc/ca-certificates.conf /etc/ca-certificates.conf.bak
< !mozilla/DST_Root_CA_X3.crt
---
> mozilla/DST_Root_CA_X3.crt

# 反映
update-ca-certificates

→いけた

Ubuntu(WSL2の)でgit cloneしたらserver certificate verification failed

【概要】

Ubuntu/WSL2でgit cloneしたらけられた

fatal: unable to access 'https://ほげほげ': server certificate verification failed. CAfile: none CRLfile: none

【解決に至るメモ】

メッセージによれば証明書ファイルがないとのことなのでインストール

apt-get install --reinstall ca-certificates

→エラー

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://cli-assets.heroku.com/apt ./ InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY <PUBKEY>

ググるとこのPUBKEYを取得しないといけないらしい

sudo  apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv <PUBKEY>
===
Executing: /tmp/apt-key-gpghome.zCUNU82Zet/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv <PUBKEY>
gpg: key <PUBKEY>: public key "Heroku Inc. <support@heroku.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1
===

再度証明書をインストール

apt-get install --reinstall ca-certificates

これでgit cloneできたよ