システムログを監視する
L2TP/IPsec VPNサーバーにするためにルーターのUDPポートに穴を開けている。万が一侵入者がL2TP接続を仕掛けて来ないとも限らない。しかも直接Macにアクセスしてしまうので、システムログを監視して万が一自分以外がL2TP接続を試みた場合に警告を出力することにした。
swatch等の監視ツールもあるのだが追加でモジュールのインストール等が必要な場合があり、出来るだけ余計なものをインストールしたくないのでexpectコマンドでsystem.logの中で特定の文字列を拾い上げることにした。
#!/bin/sh expect -- << EOF set timeout -1 spawn tail -1 -f /var/log/system.log expect "L2TP incoming call" system osascript /Users/xxxxx/Library/Scripts/alert.scpt EOFこの例ではsystem.log中に「L2TP incoming call」という文字列が追加されるとalert.scptというAppleScriptファイルを実行する。
スクリプトに適当な名前(例ではlogwatch.sh)を付けて保存。保存先はどこでも構わないがユーザースクリプト~/Library/Scripts/に格納した(以下、全てのスクリプトファイルはユーザースクリプトフォルダに保存している)。
このシェルの起動タイミングをどうするか迷ったが、一番手軽なログイン項目で起動することにした(MacBook Proは常にログインした状態なので、OS起動時に自動実行する必要はないと判断)。
ログイン項目に追加するためにはアプリケーションである必要があるので、AppleScriptで新規ファイルに
do shell script "/Users/xxxxx/Library/Scripts/logwatch.sh"
を記述しアプリケーションとして保存。しかしこのままこのアプリケーションを起動するとDockやタスクリストにアプレットのアイコンが表示されてしまうので、info.plistに「LSUIElement」とキーに「1」を設定することでDockとタスクリストにアイコンを表示しないようにした。
(終わらせるためにはアクティビティモニターからプロセスを終了させる必要がある)
alert.scptには文字列を拾った際にどのような処理をさせるかをAppleScriptで記述。メールを送るでもダイアログを表示するでも適当に設定する。
logwatch.shは最初の文字列を拾うとalert.scptを読んで終了してしまうので、alert.scptの最後に再度logwatch.shを呼び出す行を追加。
do shell script "/Users/xxxxx/Library/Scripts/logwatch.sh"
これで同じ文字列を検出するたびにalert.scptを実行してくれるはず。
今回、拾う文字列を「L2TP incoming call」としたが、実際に動作させてみると期待通りのタイミングで拾わないケースもあった。より確実かつ適度なタイミングで処理するように今後色々な文字列で試してみる。
| 固定リンク
「iPad」カテゴリの記事
- iPad Air 2を購入(2014.12.21)
- iOS8(2014.09.18)
- iOSのGoogle ChromeからPDFを作成(2013.04.10)
- Apple Special Event, October 2012 雑感(2012.10.24)
- iOSでChrome(2012.07.03)
「internet」カテゴリの記事
- 回線速度の時間推移を測定してグラフ化する(2017.05.07)
- Googleモバイルで手書き検索(2012.07.30)
- IPv6 launch(2012.06.04)
- カレンダーを一元化(2012.02.11)
- QRコード(2012.02.06)
「Mac」カテゴリの記事
- iMac (27インチ Late 2015)でBluetooth使用不可(2020.04.28)
- iMac (27インチ Late 2015)のHDDを交換(2018.11.18)
- MacOSの透明度を下げるAppleScript(2018.11.08)
- Automatorで複数ファイルを一括でロック/ロック解除(2018.10.28)
「iPhone」カテゴリの記事
- iPhoneとの接続が切れたため、iPhoneを同期できませんでした(2018.11.19)
- iPhoneの液晶保護ガラス(2014.10.12)
- SIMフリーiPhoneとOCN モバイルONEとiOS8(2014.09.20)
- iOS8(2014.09.18)
- iOS7ベータからiOS6.1.3へのダウングレード(正式リリースされたため不可)(2013.06.11)
この記事へのコメントは終了しました。
コメント