ホーム > 製品情報 > ネットワーク周辺機器 > 設定例 > Luaスクリプト機能 > Luaスクリプト > SYSLOGを監視する
SYSLOGを監視する
特定のSYSLOGが出力されたら、指定したコマンドの出力結果をメールで通知するLuaスクリプトです。
LANの
インタフェースの設定
(LAN1ポートを使用) |
ip lan1 address 192.168.0.1/24
|
WANの
インタフェースの設定
(LAN2ポートを使用) |
pp select 1
pp always-on on
pppoe use lan2
pp auth accept pap chap
pp auth myname (ISPに接続するID) (ISPに接続するパスワード)
ppp lcp mru on 1454
ppp ipcp ipaddress on
ppp ipcp msext on
ip pp mtu 1454
ip pp nat descriptor 1
pp enable 1
ip route default gateway pp 1
|
| NATの設定 |
nat descriptor type 1 masquerade
|
| DHCPの設定 |
dhcp service server
dhcp scope 1 192.168.0.2-192.168.0.100/24
|
| DNSの設定 |
dns server (ISPより指定されたDNSサーバーのIPアドレス)
dns private address spoof on
|
| フィルタの設定 |
ip filter source-route on
ip filter directed-broadcast on
ip filter 1010 reject * * udp,tcp 135 *
ip filter 1011 reject * * udp,tcp * 135
ip filter 1012 reject * * udp,tcp netbios_ns-netbios_ssn *
ip filter 1013 reject * * udp,tcp * netbios_ns-netbios_ssn
ip filter 1014 reject * * udp,tcp 445 *
ip filter 1015 reject * * udp,tcp * 445
ip filter 1020 reject 192.168.0.0/24 *
ip filter 1030 pass * 192.168.0.0/24 icmp
ip filter 2000 reject * *
ip filter 3000 pass * *
ip filter dynamic 100 * * ftp
ip filter dynamic 101 * * www
ip filter dynamic 102 * * domain
ip filter dynamic 103 * * smtp
ip filter dynamic 104 * * pop3
ip filter dynamic 105 * * netmeeting
ip filter dynamic 106 * * tcp
ip filter dynamic 107 * * udp
pp select 1
ip pp secure filter in 1020 1030 2000
ip pp secure filter out 1010 1011 1012 1013 1014 1015 3000 dynamic 100 101 102 103 104 105 106 107 # 注釈1
pp enable 1
|
| Luaスクリプトのスケジュール設定 |
schedule at 1 startup * lua (Luaスクリプトファイル名)
|
| 設定値 |
-- 検出したいSYSLOGの文字列パターン
ptn = "(ログパターン)"
-- ptn の文字列パターンを検出した時に結果を通知する show コマンドをカンマで区切って列挙する
-- 例えばルーターの設定を通知する場合には、"show config" を、
-- ログを通知したい場合には "show log" を記述する
cmd_tbl = {
"(show系コマンド1)",
"(show系コマンド2)"
}
-- メールの設定
mail_tbl = {
smtp_address = "(SMTPサーバーのアドレス)",
from = "(送信元メールアドレス)",
to = "(宛先メールアドレス)"
}
-- メールの送信に失敗した時に出力する SYSLOG のレベル(info, debug, notice)
log_level = "(SYSLOGレベル)"
|
| コマンドの実行結果を出力する関数 |
function exec_command(cmd)
local rtn, str
rtn, str = rt.command(cmd)
if (not rtn) or (not str) then
str = "実行失敗\r\n"
end
return rtn, string.format("# %s\r\n%s\r\n", cmd, str)
end
|
| 現在の日時を取得する関数 |
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)
if (rtn) and (str) then
mail_tbl.text = string.format("ログに検索文字列が検出されました。\r\n検索文字列: \"%s\"\r\n\r\n", ptn)
for i, cmd in ipairs(cmd_tbl) do
rtn, str = exec_command(cmd)
mail_tbl.text = mail_tbl.text .. str
end
mail_tbl.subject = string.format("pattern string detected (%s)", time_stamp())
rtn = rt.mail(mail_tbl)
if (not rtn) then
rt.syslog(log_level, "failed to send mail. (Luaスクリプトファイル名)")
end
end
end
|
ページトップへ戻る