« MacをL2TP/IPsecのVPNサーバー化、テザリング接続のMacBook AirからVPN接続 | トップページ | MacをAirPrintサーバー化 »

2012年1月25日 (水)

システムログを監視する




(前回からのつづき)

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」としたが、実際に動作させてみると期待通りのタイミングで拾わないケースもあった。より確実かつ適度なタイミングで処理するように今後色々な文字列で試してみる。

(次回につづく)





 
 

|

« MacをL2TP/IPsecのVPNサーバー化、テザリング接続のMacBook AirからVPN接続 | トップページ | MacをAirPrintサーバー化 »

internet」カテゴリの記事

iPad」カテゴリの記事

iPhone」カテゴリの記事

Mac」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/579837/53822161

この記事へのトラックバック一覧です: システムログを監視する:

« MacをL2TP/IPsecのVPNサーバー化、テザリング接続のMacBook AirからVPN接続 | トップページ | MacをAirPrintサーバー化 »