什麼是y OU正在尋找可能可以通過插件叫做logdog來完成:
$ cpanm Sparrow # install sparrow manager
$ yum install curl # you need a curl to upload sparrow index file
$ sparrow index update # get latest sparrow index
$ sparrow plg install logdog # install logdog plugin
$ sparrow project create myhost # project is just container for runnable plugins
$ sparrow check add myhost login-check # or whatever you name it; check just a entry point to run a plugin
$ sparrow check set myhost login-check logdog # you bind a logdog plugin to your check
$ export EDITOR=nano && sparrow check ini myhost login-check
# here comes configuration part, the hardest one
# as you have to set it precisely
[logdog]
# set path to log file
file = login.log
# this is examples of log entries
# sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
# define how to extract time chunks
# from your log entries:
# this should perl regexp:
time_pattern = ,(\d\d\d\d-\d\d-\d\d)\s(\d\d:\d\d:\d\d)
# this should be posix strftime format
# see `man strftime`
time_format = %Y-%m-%d %T
# check logs for last 5 minutes, 10 hours, 2 days , etc ...
history = 1 months
# to proper time calculation
# need to know a timezone
timezone = UTC
# I need these lines
filter = result_code=2
# group found entries by user logins:
key_field = user=(\S+?),
# density - is optional parameter
# show only groups with entries number
# more or equal $density
density = 1
給出一個日誌文件:
$ cat login.log
sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
我們將有:
$ sparrow check run myhost login-check
/tmp/.outthentic/22011/home/vagrant/my/logdog/story.t ..
ok 1 - stdout is already set
ok 2 - stdout saved to /tmp/.outthentic/22011/MSUYnYelwg
# history: 1 months
# filter: result_code=2
# density: 1
# group [email protected] count: 2
# sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
# sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
# group [email protected] count: 3
# sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
# sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
# sequence_number=12345,remote_client=sapserver,2016-03-18 03:29:44:782 EDT,messageID=1002,[email protected],client_ip_address=10.129.220.45,client_port=10250,browser_ip_address=x.x.x.x,result_code=2,result_action=Login Failure,result_reason=Invalid Password
ok 3 - output match /lines count: (\d+)/
ok 4 - output match /result_code=2/
1..4
ok
All tests successful.
Files=1, Tests=4, 0 wallclock secs (0.02 usr 0.00 sys + 0.10 cusr 0.00 csys = 0.12 CPU)
Result: PASS
對於你的目的ini文件應適應:
- 歷史= 5分鐘
- 時區=美國/紐約 (參考本list正確的價值觀,或許這是可以等於EST時區)
- 密度= 50
現在運行這個插件通過cron每5分鐘,你可能會得到你想要的...
PS> DISCLOSURE - 我是麻雀和logdog插件的作者。
看看awk - http://www.theunixschool.com/2012/06/awk-10-examples-to-group-data-in-csv-or.html,可能會讓你在正確的方向。你可以刪除列和按模式分組 - 很多例子可以幫助 – Hariboo
看看'fail2ban'並看看它能做你需要的嗎? –
感謝您的投入Etan。當發生這種錯誤的密碼嘗試時,我們不會阻止用戶的IP地址。作爲管理員,我們只希望腳本能夠通過電子郵件向用戶發送電子郵件,並且在一兩分鐘內不斷嘗試失敗。 – Prasee