プラグイン変更のお知らせ

コード部分の表示を行うために Crayon Syntax Highlighter を使っていましたが、保存時に特殊文字が強制エスケープされたりされなかったりという状態になってしまったため、Enlighter – Customizable Syntax Highlighter に変更しました。

Crayonの方が見栄えや使い勝手が好きだったのですがね…。

一通りコンテンツは見直しましたが、直し漏れがあったら、都度修正します。

LINEにメッセージが届いたら指定のメアドに通知する(その2)

はじめに

  • 先日ポストした『LINEにメッセージが届いたら指定のメアドに通知する』のその2となります。
  • LINE → IFTTT → Webhooks → Zapier → Gmail、の流れになります。
    前回は、LINE → IFTTT → Gmail、でした。
    Google から、『IFTTTとGmailの連携やめるよ』メールが届いたため、更新します。
  • 本TipsはAndroid専用です。
    iPhoneの場合、現物で試したわけではないのですが、Macがあれば次の方法で行けると思います。
    PushBulletのMac版が公開、iOSの通知をMacで受信可能&クリップボードも同期が可能に
  • 普通に検索で引っかかる、『メールが来たらLINEに通知』とは逆の、『LINEが来たらメールする』機能の実現です。
  • 動作タイミングは各構成要素のご機嫌次第です。
    通知が数時間遅延する、或いは全く届かない場合があります。
    あくまで、『無いよりはまし』程度の扱いにてお願いします。

今回の実装

LINE NEWS からメッセージが届いたら、設定したメールアドレスに通知する例を記します。最初は『LINE NEWS』で試したあと、実際に検知したい友達名に変更して下さい(IFTTT設定の9番と17番)。
本作業はWindows10なPC上で行いました。

Zapier側の設定

  1. Zapier にログイン
  2. 右上の、Make a Zap! をクリック
  3. Search hundreds of apps…webhooks と入力し、選択された Webhooks by Zapier をクリック
  4. Catch Hook をクリック
  5. Save + Continue をクリック
  6. リンク用のURLが表示されるので、コピーボタンを押して、URLをコピー、別に記録しておく
  7. 管理者権限の PowerShell 窓を開いて、
    Invoke-RestMethod -Uri "先程のURL" -Method Post -Body ( @{"value1"="LINE NEWS"} | ConvertTo-Json) -ContentType 'application/json'
    を実行
  8. 数秒待って、Ok, I did this をクリック
  9. Hook A と表示されたら、Continue をクリック
  10. Add a Step をクリック
  11. Action/Search をクリック
  12. Gmail を選択
  13. Send Email をクリック
  14. Save + Continue をクリック
  15. 使用する Gmail アカウントを選択して、Test をクリック、Success となったら、Save + Continue をクリック
  16. To 欄に、宛先のメアドを入力
  17. Subject 欄に、通知メールの題名を適当に入力
  18. Body 欄で、右側の+をクリック、value1 を選択、『から連絡がありました』と入力
  19. Continue をクリック
  20. テスト画面になるので、Send Test to Gmail をクリック
  21. 設定した通知先にメールが届いたら、Finish をクリック
  22. YOUR ZAP IS ON となっていれば、完了

IFTTT側の設定

  1. IFTTT にログイン
  2. My Applet に移動
  3. Applets タブを選択
  4. New Applet をクリック
  5. this をクリック
  6. Search services 欄に android device と入力し、選択されたサービスボタンをクリック
  7. Choose triggerNotification received from a specific app ボタンをクリック
  8. App nameLINE と入力
  9. Filter by notification keyword に『LINE NEWS』と入力
  10. Create trigger をクリック
  11. that をクリック
  12. Choose action service 欄に webhooks と入力し、選択されたサービスボタンをクリック
  13. Make a web request をクリック
  14. URL 欄に、先程コピーした Webhooks のURLをペースト
  15. MethodPOST を選択
  16. Content Typeapplication/json を選択
  17. Body 欄に
    {"value1":"LINE NEWS"}
    と入力
  18. Create action をクリック
  19. Review and finish 画面で、If Notification… の欄を、適当な名前に変更
  20. Finish をクリック

※Zapier の Gmail設定画面(Edit Template)で、+が表示されている各フィールドには、IFTTT から投げ付ける json の値が使えます。


2019.03.26
iPhone版についての記述を追加
2019.05.29
引っ掛ける友達名についての説明を更新

GCPにPandora FMSを入れてみるテスト

本コンテンツの内容は2019年3月現在の情報を元にしています。

前提条件

  • GCP(Google Cloud Platform)のアカウントを作成済みのこと
  • プロジェクト名を適当に作成済みのこと
  • Tera Termを使っていること
  • FQDNでアクセスする場合は、DNSサーバへのレコード登録が出来ること

Tera Term でSSH鍵を作成

※既に鍵を持っている場合は、ここはパスして構いません
※ここで鍵を作成するときのWindowsログイン名が、後程作成するVMのログイン名になります

  1. Tera Term のメニューから『設定』→『SSH鍵生成』
  2. 『生成』
  3. 鍵の種類は『RSA』ビット数は『2048』で、『生成』
  4. パスフレーズは空のままで
  5. 『公開鍵の保存』で任意の場所に公開鍵を保存
    ファイル名はデフォルトの場合、id_rsa.pub
    この公開鍵をあとでVMに突っ込みます
  6. 『秘密鍵の保存』で任意の場所に公開鍵を保存
    ファイル名はデフォルトの場合、id_rsa
    この秘密鍵をあとで Tera Term で使います

固定IP取得

  1. GCPのコンソールを開く
  2. 左上の三本線(ナビゲーションメニュー)をクリック
  3. ネットワーキング→VPCネットワーク→外部IPアドレス
  4. 『+静的アドレスを予約』
  5. 名前を適当に設定
  6. 『標準』『IPv4』『リージョン』を選択
  7. リージョンは『asia-northeast1』
  8. 『予約』

FQDNで使う場合は、取得したIPアドレスを利用しているDNSに登録ください

VM作成

  1. GCPのコンソールを開く
  2. 左上の三本線(ナビゲーションメニュー)をクリック
  3. コンピューティング→Compute Engine→VMインスタンス
  4. 『+インスタンスを作成』
  5. 名前は適当に
  6. リージョンは『asia-northeast1』
  7. ゾーンとマシンタイプはそのまま
  8. ブートディスクの『変更』
  9. 『CentOS7』『標準の永続ディスク』『20GB』で『選択』
  10. ファイアウォールで『HTTPトラフィックを許可する』
  11. 『作成』
  12. 起動したVM名をクリックし、『VMインスタンスの詳細』で『編集』
  13. ネットワークインターフェースの鉛筆マークををクリック
  14. 外部IPに、先程作成した固定IPを選択し、『完了』
  15. 少し下の『SSHキーが0個あります』の『表示して編集する』
  16. 『認証鍵全体を入力』フィールドに、公開鍵をコピペ
    鍵が有効な場合、ログイン名が鍵フィールドの左側に表示されます
    この名前でVMにログインすることになります
  17. 『保存』

Tera Term にホストを登録

  1. 管理者権限でコマンドプロンプトを開き、teraterm.ini をノートパッドで開く
  2. [Hosts]セクションに、Hostを追加(Host番号は適当に編集下さい)
    Host1=VMのIPまたはFQDN /ssh /auth=publickey /user=公開鍵内のログイン名 /keyfile=path\id_rsa /KR=UTF8 /KT=UTF8

VM内での作業

Tera Term でVMに公開鍵認証なSSHで接続し、sudo su – でrootになってください。

# SELinux無効化
setenforce 0
vi /etc/sysconfig/selinux
# 7行目 変更
SELINUX=disabled 
# 保存してvi終了

# タイムゾーンを変更
timedatectl set-timezone Asia/Tokyo
# Apache登録
yum -y install httpd
# ウェルカムページ削除
rm -f /etc/httpd/conf.d/welcome.conf
vi /etc/httpd/conf/httpd.conf
# 86行目 管理者アドレス指定
ServerAdmin root@foo-bar.com
# 95行目 サーバー名設定
ServerName pandora.foo-bar.com:80
# 151行目 変更
AllowOverride All
# 164行目 変更
DirectoryIndex index.html index.php
# 最終行に追記
ServerTokens Prod
KeepAlive On
# 保存してvi終了
# Apache起動/自動起動設定
systemctl start httpd
systemctl enable httpd

# /var/www/html に適当なファイルを置いて、httpdの動作を確認
# 確認後テストファイルは削除下さい

# IPアドレス制限(可能であれば何らかの方法で制限しておいた方が良いと思います)
# 先程アクセスしたIPアドレスを確認
cat /var/log/httpd/access.log
vi /etc/httpd/conf/httpd.conf
# 104行目 追加(Requireの方が良いかも)
Allow from localhost
Allow from 先程のIPアドレス
Deny from all
# 保存してvi終了
systemctl restart httpd

# PHP7.2のインストール
# epelリポジトリとremiレポジトリのインストール
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
# PHPのインストール
yum -y install --enablerepo=remi,remi-php72 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql php-zip php-pecl-zip php-ldap php-snmp
# php.iniの編集(ファイルのバージョンにより、各行の位置は微妙に変わる筈)
vi /etc/php.ini
# 902行目 変更
date.timezone = "Asia/Tokyo"
# 1509行目 変更
mbstring.language = Japanese
# 1516行目 変更
mbstring.internal_encoding = UTF-8
# 1524行目 変更
mbstring.http_input = UTF-8
# 1534行目 変更
mbstring.http_output = pass
# 1542行目 変更
mbstring.encoding_translation = On
# 1547行目 変更
mbstring.detect_order = auto
# 保存してvi終了
# Apache再起動
systemctl restart httpd
# PHP動作確認
echo '<?php phpinfo(); ?>' > /var/www/html/info.php
curl http://localhost/info.php | grep 'PHP Version' | tail -1 | sed -e 's/<[^>]*>//g'
# PHP Version が表示されることを確認すること
rm -f /var/www/html/info.php

# MariaDBインストール
yum -y install mariadb-server
vi /etc/my.cnf.d/server.cnf
# 13行目 追加
character-set-server=utf8
# 保存してvi終了
# MariaDB起動/自動起動設定
systemctl start mariadb
systemctl enable mariadb
systemctl restart httpd
# MariaDB初期設定
mysql_secure_installation
# 最初に聞かれるパスワードはそのままEnter
# Set root password? で y
# パスワードを適当に設定(記録しておいてください)
# 残りの設問は全て y

# Pandoraインストール
# 次のような流れになります
#  ①パッケージインストール
#  ②インストーラ実行(初期設定)
#  ③confファイルの設定
#  ④pandora_server 起動
#
vi /etc/yum.repos.d/pandorafms.repo
# 以下の内容を追加
[artica_pandorafms]
name=CentOS7 - PandoraFMS official repo
baseurl=http://firefly.artica.es/centos7
gpgcheck=0
enabled=1
# 保存してvi終了
yum -y install pandorafms_console pandorafms_server bind-utils
systemctl restart httpd

# localhostからのMariaDBへのアクセス権を設定する
# これをやっておかないと、Pandoraインストーラが完走しません
mysql -u root -p
# パスワードは先程設定したもの
grant all privileges on *.* to root@localhost identified by '先程のパスワード' with grant option;
flush privileges;
exit;

# Pandora初期設定
# http://IPまたはFQDN/pandora_console/ にアクセス
# Step1 『Next』
# Step2 『Yes』
# Step3 『Next』
# Step4 DB Password に先程設定したパスワードを入力し、『Next』
# Step5 A new random password has been generated: に表示されているパスワードを記録し、『Next』
# ※パスワードを忘れた時は、Step4の『Drop Database if exists』にチェックを入れて再試行
# Step6 『Yes』
# 一旦ブラウザを閉じます

# confファイルの設定
vi /etc/pandora/pandora_server.conf
# 59行目 編集
dbpass Step5で提示されたパスワード
# 保存してvi終了

# Pandora Server 起動
/etc/init.d/pandora_server start

http://IPまたはFQDN/pandora_console/ にアクセス
左側のCommunity edition のIDにadmin、パスワードにpandoraでログイン

メール発報を行いたいとき

  1. Postfix設定
    https://www.server-world.info/query?os=CentOS_7&p=mail&f=1
    の『574行目:追記』まで実行
  2. /etc/pandora/pandora_server.conf の 234行目を有効化
  3. SendGridの設定
    https://qiita.com/ariaki/items/e389cc3dce549f450e3b
    にて外部へのメール送信を実装
  4. postfix と pandora_server をリスタート

 

 

Office365サービスのIPアドレス確認(変更監視)について

はじめに

セキュリティ機器等にO365サービスのIPアドレスを登録する時の確認方法が Microsoft公式ページ にて公開されています。
今回、Win10なPCとIFTTTとWebhookとGmailを使い、当該IPアドレスの変更を検知して通知メールを飛ばすようにしてみました。
※IFTTTとWebhookとGmailの登録及び連携は済んでいるものとします
※以下、常時ログインしているユーザ名を『foo』とします

IFTTTの設定

  1. 公式ページ内のサンプルスクリプトを取り込み、適当に保存します。
    例:C:\Users\foo\Documents\Office365IPCheck.ps1

  2. PowerShell から上記スクリプトを実行します。

  3. 上記スクリプトの実行結果
    C:\Users\foo\AppData\Local\Temp\endpoints_clientid_latestversion.txt
    を開いて、一行目の文字列をメモっておきます。
    これが後程必要となる ClientRequestId となります。

  4. IFTTTで新規アプレットを作成します。
    this には『Webhooks』を選択
    Event Name には『トリガー名(半角ANKで)』を入力
    that には『Gmail(Send an email)』を選択
    To address には『通知先メアド』を入力
    Body には次の内容を
    What: {{EventName}}<br>
    When: {{OccurredAt}}<br>
    Old Version: {{Value1}}<br>
    New Version: {{Value2}}<br>
    <a href="https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId">https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId</a>
    Attachment URL には次の内容を
    https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
    記入します。
  5. アプレットを保存します。

PowerShellスクリプトの変更

  1. IFTTT 上の Webhooks のページにある『Documentation』をクリックし、『Your key is:』の値をメモします。

  2. PowerShellスクリプトの最後の方の、『# TODO』行と『}』行の間に、次の行を追加します。
    Invoke-RestMethod -Uri "https://maker.ifttt.com/trigger/上で決めたトリガー名/with/key/先程メモったキーの値" -Method Post -Body ( @{"value1"="$lastVersion";"value2"=$version.latest} | ConvertTo-Json) -ContentType 'application/json'
  3. PowerShellスクリプトを保存します。

監視タスクの追加

  1. 監視タスク実行時に窓が表示されるのを防ぐために、キック用スクリプトを次のような内容で作成します。
    例:C:\Users\foo\Documents\task-scheduler.js
    wsShell = WScript.createObject("WScript.Shell");
    retCode = wsShell.Run("\"C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe\" -File \"" + WScript.Arguments.Item(0)+"\"",0,true);
    WScript.Quit(retCode);
  2. タスクスケジューラで監視タスクを作成します。
    • トリガータイミングは適当に(毎時とか毎日とか毎週とか)
    • 操作→プログラムの開始
    • プログラム名には、『task-scheduler.js』を入力
    • 引数には、PowerShellスクリプト名をダブルクォートで囲って設定
      例:”C:\Users\foo\Documents\Office365IPCheck.ps1″
    • 開始オプションに、PowerShellスクリプトの保管場所を指定
      例:C:\Users\foo\Documents\
  3. 監視タスクを保存します。

動作テスト

  1. PowerShellスクリプトの実行結果ファイル
    C:\Users\foo\AppData\Local\Temp\endpoints_clientid_latestversion.txt
    を削除します。
    本ファイルを削除することにより、PowerShellスクリプトの実行時に『IPアドレスが更新された』と判断されます。

  2. タスクスケジューラで設定したタイミングでメール通知が届けば成功です。

2019.03.22追記:本日、GmailとIFTTTの連携を停止する通知がGoogleから届きました。
いまのところどうしようもないみたいなので、回避策を記します。

Zapierでの実装について

  1. Zapierのアカウントを作成し、ログインを済ませておきます
  2. 次のURLに移動します
    https://zapier.com/apps/gmail/integrations/webhook
  3. “Send an email from Gmail when a webhook is received” の『Try It』をクリックします
  4. “Catch Hook”画面で『Continue』をクリックします
  5. URLが表示されるのでコピーしておき、『Ok, I did this』をクリックします
  6. ps1スクリプトを変更します
    1. Invoke-RestMethod -Uri での飛び先をIFTTTからZapierの先程コピーしたURLに変更
    2. スクリプトをキック
    3. Zapier画面で待機
      問題無ければ、数分後には5.の画面に『Continue』ボタンが現れるので、クリックします
  7. Gmail / Send Email 画面で『Continue』をクリックします
  8. Select Gmail Account画面で(連携未設定の場合は『Connect an Account』を押して連携設定後)アカウントを選択し、『Continue』をクリックします
  9. Set up Gmail Email画面で、To:やFrom:、Subject:等を設定します
  10. Bodyは次のように書きます
    Old Version:
    New Version:
    https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
  11. 『Old Version:』の右をクリックして、画面右側の『+』をクリック、『Value1』を選択します
    Old Version: の右に『Step1:値』が挿入されます
  12. 『New Version:』の右をクリックして、画面右側の『+』をクリック、『Value2』を選択します
    Old Version: の右に『Step2:値』が挿入されます
  13. Attachmentには次の値を投入します
    https://endpoints.office.com/endpoints/Worldwide?ClientRequestId=上でメモったClientRequsestId
  14. 入れ終わったら、『Continue』をクリックします
  15. テストボタンが出るので、クリックします
  16. 無事にメールが届いたら、『Finish』をクリックします

2019.04.15追記
バージョンチェックファイルが存在するのに、Test-Pathにて『存在しない』扱いになるケースがあるようです。waitを挟んでも、複数回チェックしても、駄目な時は駄目な感じ。実害は無いとは思うのですが、回避策等について現在確認中です。


2019.05.07追記
IPアドレスは基本的に月末に更新されるようです。
このときにバージョンチェックファイルendpoints_clientid_latestversion.txtの更新がうまく行かない場合は、次の図の①の部分を見直してみて下さい。
スケジュールのプロパティログインアカウントのパスワードを変更したりすると、ここの部分で引っかかったりもするようです。
テスト時の実行アカウントと、スケジュール実行アカウントの権限の差が原因の場合もあります。

ファイル所有者名の確認
dir /q バージョンチェックファイル名

ここで駄目な場合は、②の部分を触るとうまく行くようになる場合があります。
それでも駄目な場合は、スケジュール自体を作り直してみて下さい。

LINEにメッセージが届いたら指定のメアドに通知する

ご注意

  • 本TipsはAndroid専用です。
    iPhoneの場合、現物で試したわけではないのですが、Macがあれば次の方法で行けると思います。
    PushBulletのMac版が公開、iOSの通知をMacで受信可能&クリップボードも同期が可能に
  • 普通に検索で引っかかる、『メールが来たらLINEに通知』とは逆の、『LINEが来たらメールする』機能の実現です。
  • 動作タイミングは端末/LINE/IFTTTのご機嫌次第です。
    通知が数時間遅延する、或いは全く届かない場合があります。
    あくまで、『無いよりはまし』程度の扱いにてお願いします。

皆さん勤務中は私用スマホ(Android)をロッカーに入れてますよね?
そのため、家族からLINEが来ても気付きませんよね?
そうすると、怒られ心配されますよね?
と言うことで、特定の人からLINEメッセージが届いたら、指定のメールアドレスに通知してみます。


作り方

IFTTTのアカウント登録と、Gmail連携が済んでいるものとします。

this→Android Device
that→Gmail
で、次のように設定します。

App name→LINE
Filter by notification keyword→監視対象の友達名
To address→通知先メアド

以上となります。
連携サービスはslack等に差し替えても大丈夫かも知れません。


2019.03.22追記
Googleから、『IFTTTとGmail連携終了のお知らせ』が届きました。対応策確認後、本ポストを後程アップデートする予定です。

2019.03.25追記
アップデートした結果、行けそうなので、次のリンクで公開します。

2019.03.26追記
iPhone版についての記述を追加。