VPN接続があったことを知るための方法はいくつかあると思いますが、今回はsyslogに出力される以下の1行があったらVPN接続があったと判断し、この1行をそのままメール通知するようにします。
2015/01/27 10:10:00: PP[ANONYMOUS01] Call detected from user '(ユーザー名)'
作ったLuaスクリプト(ダウンロードはこちら)
--------------------------## 設定値 ##--------------------------------
-- 検出したい SYSLOG の文字列パターン
ptn = " Call detected from user "
-- メールの設定
mail_tbl = {
smtp_address = "(SMTPサーバーのアドレス)",
smtp_port = "587", ← SMTP認証の場合(例)
smtp_auth_protocol = "plain", ← SMTP認証の場合(例)
smtp_auth_name = "(アカウント名)", ← SMTP認証の場合
smtp_auth_password = "(パスワード)", ← SMTP認証の場合
from = "(送信元メールアドレス)",
to = "(宛先メールアドレス)"
}
-- メールの送信に失敗した時に出力する SYSLOG のレベル (info, debug, notice)
log_level = "info"
----------------------## 設定値ここまで ##----------------------------
------------------------------------------------------------
-- 現在の日時を取得する関数 --
------------------------------------------------------------
function time_stamp()
local t
t = os.date("*t")
return string.format("%d/%02d/%02d %02d:%02d:%02d",
t.year, t.month, t.day, t.hour, t.min, t.sec)
end
------------------------------------------------------------
-- メインルーチン --
------------------------------------------------------------
local rtn, str
while (true) do
rtn, str = rt.syslogwatch(ptn) -- SYSLOG の監視(SYSLOG の出力が行われない間、呼び出し元の Lua タスクはスリープ状態になる)。
if (rtn) and (str) then
mail_tbl.text = string.format("ログに検索文字列が検出されました。\r\n検索文字列: \"%s\"\r\n\r\n", ptn)
mail_tbl.text = mail_tbl.text .. str[1]
mail_tbl.subject = string.format("VPNアクセスあり (%s)", time_stamp())
rtn = rt.mail(mail_tbl)
if (not rtn) then
rt.syslog(log_level, "failed to send mail. (Lua スクリプトファイル名)")
end
end
end
通知されるメール本文
Model: RTX1210
Revision: Rev.14.01.05
Time: 2015/01/27 10:10:01
ログに検索文字列が検出されました。
検索文字列: " Call detected from user "
2015/01/27 10:10:00: PP[ANONYMOUS01] Call detected from user '(ユーザー名)'