Re: [Simple-evcorr-users] Defining a Map for Data - SOLVED

2011-10-24 Thread Justin J. Novack
David,

You are correct, sir!

Per the inline documentation:

  # if SIGHUP has arrived, reopen input files and logfile, re-read
  # configuration and empty all lists concerning events and correlation
  # information; *if SIGABRT has arrived, behave like SIGHUP but preserve *
*  # contexts that are active*


Mon Oct 24 12:45:52 2011: SIGHUP received: full restart of SEC
Mon Oct 24 12:45:52 2011: Reading configuration from /etc/sec/cisco/asa.sec
Mon Oct 24 12:45:52 2011: 21 rules loaded from /etc/sec/cisco/asa.sec
Mon Oct 24 12:45:52 2011: Creating SEC internal context 'SEC_INTERNAL_EVENT'
Mon Oct 24 12:45:52 2011: Creating SEC internal event 'SEC_RESTART'
Mon Oct 24 12:45:52 2011: Deleting SEC internal context 'SEC_INTERNAL_EVENT'


Mon Oct 24 12:57:09 2011: SIGABRT received: soft restart of SEC
Mon Oct 24 12:57:09 2011: Creating SEC internal context 'SEC_INTERNAL_EVENT'
Mon Oct 24 12:57:09 2011: Creating SEC internal event 'SEC_SOFTRESTART'
Mon Oct 24 12:57:09 2011: Deleting SEC internal context 'SEC_INTERNAL_EVENT'

A safer reload the hashes, without losing the contexts, is to send a KILL
$pid -ABRT after editing the file.

type=Single
desc=Dynamically reload Hashes
ptype=SubStr
continue=TakeNext
pattern=SEC_SOFT**RESTART
context=SEC_INTERNAL_EVENT
action=eval %a ( open(FILE, ") { chomp; my ($key, $val) = split /=/; $hash{"$key"} = $val;
})

Or, if feeling adventurous, it's merely a .pl file.  We can always
roll-your-own SIG handler. :)

---
Justin J. Novack
Official Disturber of the Peace


On Wed, Oct 19, 2011 at 3:37 PM,  wrote:
>
>
> I am thinking that they are lost on a -HUP because the -HUP recompiles the
> rules.
>
> I am thinking that you need something along the lines of
>
>
> type=Single
> desc=Load hashes at startup
> ptype=SubStr
> continue=TakeNext
> pattern=reload friendlynames.txt file
> action=eval %a ( open(FILE, "
>   while () { chomp; my ($key, $val) = split /=/; $hash{"$key"} =
> $val; })
>
> since you run things on reload, you probably need the clearing of the hash
> in your original version as well (since this file is something that usually
> only grows, the fact that a reload would not remove an entry from the hash
> is probably not a big problem, but in other contexts it will matter)
>
> David Lang
>
> --
> The demand for IT networking professionals continues to grow, and the
> demand for specialized networking skills is growing even more rapidly.
> Take a complimentary Learning@Ciosco Self-Assessment and learn
> about Cisco certifications, training, and career opportunities.
> http://p.sf.net/sfu/cisco-dev2dev
> ___
> Simple-evcorr-users mailing list
> Simple-evcorr-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users
>
>
--
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data - SOLVED

2011-10-19 Thread david

On Wed, 19 Oct 2011, Justin J. Novack wrote:


Again, thank you John, David, et. al.

My full solution is posted for reference.  Please feel free to include in
documentation.

/etc/sec/friendlynames.txt

GigabitEthernet1/37=TEST SERVER
GigabitEthernet3/39=IMPORTANT SERVER

/etc/sec/testing.sec
===
type=Single
desc=Load hashes at startup
ptype=SubStr
continue=TakeNext
pattern=SEC_STARTUP|SEC_RESTART
context=SEC_INTERNAL_EVENT
action=eval %a ( open(FILE, ") { chomp; my ($key, $val) = split /=/; $hash{"$key"} =
$val; })

#Aug  1 12:14:54 switchname 362351: %LINK-3-UPDOWN: Interface
GigabitEthernet1/37, changed state to down
type=Single
desc=Fire Event
ptype=RegExp
pattern=%LINK-3-UPDOWN: Interface ([\w\/]+), changed state to down
context= =($hash{"$1"})
action=eval %host ( return $hash{"$1"}; ); logonly  Uh-oh! Problem with
%host 


From here, you can do what you want with %host as normal.


(P.S. - David, since a reload will reload the hashes, does that count as
completing the extra credit? Do contexts persist a  'kill $PID -HUP'?)


I am thinking that they are lost on a -HUP because the -HUP recompiles the 
rules.


I am thinking that you need something along the lines of

type=Single
desc=Load hashes at startup
ptype=SubStr
continue=TakeNext
pattern=reload friendlynames.txt file
action=eval %a ( open(FILE, ") { chomp; my ($key, $val) = split /=/; $hash{"$key"} =
$val; })

since you run things on reload, you probably need the clearing of the hash 
in your original version as well (since this file is something that 
usually only grows, the fact that a reload would not remove an entry from 
the hash is probably not a big problem, but in other contexts it will 
matter)


David Lang--

The demand for IT networking professionals continues to grow, and the

demand for specialized networking skills is growing even more rapidly.

Take a complimentary Learning@Ciosco Self-Assessment and learn 

about Cisco certifications, training, and career opportunities. 

http://p.sf.net/sfu/cisco-dev2dev___

Simple-evcorr-users mailing list

Simple-evcorr-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

--
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Ciosco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data - SOLVED

2011-10-19 Thread Justin J. Novack
Again, thank you John, David, et. al.

My full solution is posted for reference.  Please feel free to include in
documentation.

/etc/sec/friendlynames.txt

GigabitEthernet1/37=TEST SERVER
GigabitEthernet3/39=IMPORTANT SERVER

/etc/sec/testing.sec
===
type=Single
desc=Load hashes at startup
ptype=SubStr
continue=TakeNext
pattern=SEC_STARTUP|SEC_RESTART
context=SEC_INTERNAL_EVENT
action=eval %a ( open(FILE, ") { chomp; my ($key, $val) = split /=/; $hash{"$key"} =
$val; })

#Aug  1 12:14:54 switchname 362351: %LINK-3-UPDOWN: Interface
GigabitEthernet1/37, changed state to down
type=Single
desc=Fire Event
ptype=RegExp
pattern=%LINK-3-UPDOWN: Interface ([\w\/]+), changed state to down
context= =($hash{"$1"})
action=eval %host ( return $hash{"$1"}; ); logonly  Uh-oh! Problem with
%host 

>From here, you can do what you want with %host as normal.

(P.S. - David, since a reload will reload the hashes, does that count as
completing the extra credit? Do contexts persist a  'kill $PID -HUP'?)
---
Justin J. Novack
Official Disturber of the Peace
--
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Ciosco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-19 Thread John P. Rouillard

In message
 ,
"Justin J. Novack" writes:

>Excellent points, all.  I've decided to combine the two approaches.
>However, I'm stuck.
>
>As you can see below, I'm loading the hashes on startup, and the second rule
>doesn't run. :(  If I remove the context from the second rule, it runs fine.
>I don't think context =($perl_hash{$2})

But that's not what you have, although it is what I typoed 8-(.

>is a valid context or check.  If that is the case, how do I dump
>the hash to create contexts?
>
>On Tue, Oct 18, 2011 at 3:48 PM, John P. Rouillard 
> wrote:
>
>
>> I think adding a
>>
>>  context = system_name_$2
>>
>> or
>>
>>  context =($perl_hash{$2})

My bad. Forgot an extra = sign. Should have been

 context =   =($perl_hash{$2})

>> to your rules will fix that nicely. If the contexts/hash entry aren't
>> defined the rules don't fire.
>
>testing.sec
>=
>type=Single
>desc=Load hashes at startup
>ptype=SubStr
>continue=TakeNext
>pattern=SEC_RESTART
>context=SEC_INTERNAL_EVENT
>action=eval %a ( undef %hash;  \
>open(FILE, "while () { chomp; my ($key, $val) = split /=/; $hash{"$key"} =
>$val; }); \
>eval %a (my $line; foreach (keys %hash) { $line .= "$_ = $hash{$_}\n";
>}; chomp($line); return $line);
>
>type=Single
>desc=WTF doesn't this work?!
>ptype=SubStr
>pattern=SEC_RESTART
>context=($hash{"GigabitEthernet1/37"})

context= =($hash{"GigabitEthernet1/37"})

Note the expression starting with the = sign.

See the manpage section CONTEXT EXPRESSIONS para 4 or so
starting with 'If the operand begins with the equal sign (=)'

--
-- rouilj
John Rouillard
===
My employers don't acknowledge my existence much less my opinions.

--
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Ciosco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-19 Thread Justin J. Novack
Sorry for the double post, I wanted to post an intermediate solution:

The correct context line for the second rule would be:
 context= =(if (exists $hash{"GigabitEthernet1/37"}) { return 1;} )

This should be the last stumbling block...

--
Justin J. Novack
Official Disturber of the Peace


On Wed, Oct 19, 2011 at 1:52 PM, Justin J. Novack  wrote:

> Excellent points, all.  I've decided to combine the two approaches.
>  However, I'm stuck.
>
> As you can see below, I'm loading the hashes on startup, and the second
> rule doesn't run. :(  If I remove the context from the second rule, it runs
> fine.  I don't think context =($perl_hash{$2}) is a valid context or check.
>  If that is the case, how do I dump the hash to create contexts?
>
> On Tue, Oct 18, 2011 at 3:48 PM, John P. Rouillard 
>  wrote:
>
>
>> I think adding a
>>
>>  context = system_name_$2
>>
>> or
>>
>>  context =($perl_hash{$2})
>>
>> to your rules will fix that nicely. If the contexts/hash entry aren't
>> defined the rules don't fire.
>
>
>
> testing.sec
> =
> type=Single
> desc=Load hashes at startup
> ptype=SubStr
> continue=TakeNext
> pattern=SEC_RESTART
> context=SEC_INTERNAL_EVENT
> action=eval %a ( undef %hash;  \
> open(FILE, " while () { chomp; my ($key, $val) = split /=/; $hash{"$key"} =
> $val; }); \
> eval %a (my $line; foreach (keys %hash) { $line .= "$_ = $hash{$_}\n";
> }; chomp($line); return $line);
>
> type=Single
> desc=WTF doesn't this work?!
> ptype=SubStr
> pattern=SEC_RESTART
> context=($hash{"GigabitEthernet1/37"})
> action=logonly Holy Guacamole!  It worked!
>
> tail -f /var/log/sec/
> =
> Wed Oct 19 13:36:16 2011: Reading configuration from /etc/sec/testing.sec
> Wed Oct 19 13:36:16 2011: 4 rules loaded from /etc/sec/testing.sec
> Wed Oct 19 13:36:16 2011: Creating SEC internal context
> 'SEC_INTERNAL_EVENT'
> Wed Oct 19 13:36:16 2011: Creating SEC internal event 'SEC_RESTART'
> Wed Oct 19 13:36:16 2011: Evaluating code 'undef %hash;  open(FILE,
> ") { chomp; my ($key, $val)
> = split /=/; $hash{"$key"} = $val; }' and setting variable '%a'
> Wed Oct 19 13:36:16 2011: Variable '%a' set to ''
> Wed Oct 19 13:36:16 2011: Evaluating code 'my $line; foreach (keys %hash) {
> $line .= "$_ = $hash{$_}\n"; }; chomp($line); return $line' and setting
> variable '%a'
> Wed Oct 19 13:36:16 2011: Variable '%a' set to 'GigabitEthernet3/16 =
> IMPORTANT SERVER
> GigabitEthernet1/37 = TEST SERVER'
> Wed Oct 19 13:36:16 2011: Deleting SEC internal context
> 'SEC_INTERNAL_EVENT'
>
>
>
>
>
>
> Justin J. Novack
> Official Disturber of the Peace
>
>
>
>
>
--
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Ciosco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-19 Thread Justin J. Novack
Excellent points, all.  I've decided to combine the two approaches.
 However, I'm stuck.

As you can see below, I'm loading the hashes on startup, and the second rule
doesn't run. :(  If I remove the context from the second rule, it runs fine.
 I don't think context =($perl_hash{$2}) is a valid context or check.  If
that is the case, how do I dump the hash to create contexts?

On Tue, Oct 18, 2011 at 3:48 PM, John P. Rouillard 
 wrote:


> I think adding a
>
>  context = system_name_$2
>
> or
>
>  context =($perl_hash{$2})
>
> to your rules will fix that nicely. If the contexts/hash entry aren't
> defined the rules don't fire.



testing.sec
=
type=Single
desc=Load hashes at startup
ptype=SubStr
continue=TakeNext
pattern=SEC_RESTART
context=SEC_INTERNAL_EVENT
action=eval %a ( undef %hash;  \
open(FILE, ") { chomp; my ($key, $val) = split /=/; $hash{"$key"} =
$val; }); \
eval %a (my $line; foreach (keys %hash) { $line .= "$_ = $hash{$_}\n";
}; chomp($line); return $line);

type=Single
desc=WTF doesn't this work?!
ptype=SubStr
pattern=SEC_RESTART
context=($hash{"GigabitEthernet1/37"})
action=logonly Holy Guacamole!  It worked!

tail -f /var/log/sec/
=
Wed Oct 19 13:36:16 2011: Reading configuration from /etc/sec/testing.sec
Wed Oct 19 13:36:16 2011: 4 rules loaded from /etc/sec/testing.sec
Wed Oct 19 13:36:16 2011: Creating SEC internal context 'SEC_INTERNAL_EVENT'
Wed Oct 19 13:36:16 2011: Creating SEC internal event 'SEC_RESTART'
Wed Oct 19 13:36:16 2011: Evaluating code 'undef %hash;  open(FILE,
") { chomp; my ($key, $val)
= split /=/; $hash{"$key"} = $val; }' and setting variable '%a'
Wed Oct 19 13:36:16 2011: Variable '%a' set to ''
Wed Oct 19 13:36:16 2011: Evaluating code 'my $line; foreach (keys %hash) {
$line .= "$_ = $hash{$_}\n"; }; chomp($line); return $line' and setting
variable '%a'
Wed Oct 19 13:36:16 2011: Variable '%a' set to 'GigabitEthernet3/16 =
IMPORTANT SERVER
GigabitEthernet1/37 = TEST SERVER'
Wed Oct 19 13:36:16 2011: Deleting SEC internal context 'SEC_INTERNAL_EVENT'






Justin J. Novack
Official Disturber of the Peace
--
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Ciosco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-18 Thread John P. Rouillard

In message
 ,
"Justin J. Novack" writes:

>Great idea, however, now all 432 ports on my device would send out an email
>on flap, rather than the 60 important ones.  This would be perfect if an
>entire switch needed friendly names.

I think adding a 

  context = system_name_$2

or

  context =($perl_hash{$2})

to your rules will fix that nicely. If the contexts/hash entry's
aren't defined the rules don't fire. Since you would check to see if
the switch port has a pretty name you can simply the actions by not
emptying the variables first since there will always be a value if the
action triggers.

You could also move this to the action's shell command:

  pipe ... 'var=`grep $2 /file/mapping` && /bin/mail ... -s "ERROR $$var "' 

(I think $$ is the substitution token to put a single $ in the actual
string.)  But if you are ignoring that many ports the fork/exec time
for all those processes that are going to exit seems excessive.

>As for David's suggestion, this would also be the case, however, I could
>error out (silently) if it doesn't match something in the hash.  I would
>still need to call a shellcmd, I don't just email, I also trigger additional
>alerts like sounds and phones with the shellcmd announce.php, I'm happy to
>call that separately.  At that point, I might as well just offload EVERY
>event to different perl files and fail silently if the switch/port
>combination is not in a hash/map.
>
>Are these ways any safer(?) or less performance intensive than 60+ rules?

Using David's or my methods are a lot less intensive than 60+ rules as
the majority of the computation effort in most SEC installations is
the pattern/regexp match for the rule. Assuming a server that you care
about can randomly error, you will have to compare and fail to match
30 regexps (1/2 the servers won't match on average) to find the server
that matches. If the port reporting the error doesn't match any
server, you would have to do 60 regexp comparisons to reach that
conclusion.

With the methods David and I suggest it's one regexp match to extract
data then a lookup to see what has to be done next. Much much less
computational effort.

>My initial thought was to write a template and seed file (ala Section 4.2
>http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html#SECPERFORMANCE)

On that page, look at the performance differences between 1 rule and
50 rules in 'Table 2. SEC Performance With Data Processed Through
syslogd'. With the same input the 50 rule case takes 2-5 times more
wall clock run time and 10-~18 times the actual time spent working the
cpu in user time.

Also see section 4 "Strategies to improve performance" of
http://www.cs.umb.edu/~rouilj/sec/sec_paper_full.pdf linked from
http://www.cs.umb.edu/~rouilj/sec/.

>and just deal with adding a line (for each friendly named port) and
>recompiling the rules file every time I want to change.

If your port churn rate is low enough you can do this. But remember
every time you recompile the rules files, you destroy any pending
correlation operations that came from rules in that rule file.  There
are ways around that, but they really aren't worth the trouble if
there is another way to accomplish the same thing.

--
-- rouilj
John Rouillard
===
My employers don't acknowledge my existence much less my opinions.

--
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-18 Thread david
On Tue, 18 Oct 2011, Justin J. Novack wrote:

> Great idea, however, now all 432 ports on my device would send out an email
> on flap, rather than the 60 important ones.  This would be perfect if an
> entire switch needed friendly names.
>
> As for David's suggestion, this would also be the case, however, I could
> error out (silently) if it doesn't match something in the hash.  I would
> still need to call a shellcmd, I don't just email, I also trigger additional
> alerts like sounds and phones with the shellcmd announce.php, I'm happy to
> call that separately.  At that point, I might as well just offload EVERY
> event to different perl files and fail silently if the switch/port
> combination is not in a hash/map.
>
> Are these ways any safer(?) or less performance intensive than 60+ rules?
> My initial thought was to write a template and seed file (ala Section 4.2
> http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html#SECPERFORMANCE)
> and just deal with adding a line (for each friendly named port) and
> recompiling the rules file every time I want to change.
>
> Thoughts?

regex matches are expensive (even in perl), if you can replace many regex 
matches with one perl match you will gain a lot of efficiency.

forexample, instead of your current match

pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface 
(GigabitEthernet4\/38), changed state to down

you could replace it with a perl snippet along the lines of:

pattern= sub (@junk = split(' ',substr($[0],17)); if (exists 
%serverhash{$junk[8]} && $junk[4] eq 'LINK-3-UPDOWN') {return $_;}

this will return the line as $0 if the line is a 'LINK-3-UPDOWN' event and 
the interface is in the serverhash list. you can easily add additional 
parsing of the line in perl to pull apart the data in other ways.

doing a split on space is far cheaper than evaluating a lengthy regex, 
especially with a lot of \w+ \s+ \d+ type entries. with a default syslog 
line you need to do the split on the substring starting with column 17 
because the date will have an extra space in it for the first 9 days of 
each month.

David Lang

> --
> Justin J. Novack
> Official Disturber of the Peace
>
>
> On Tue, Oct 18, 2011 at 1:52 PM, John P. Rouillard wrote:
>
>>
>> In message
>>  ,
>> "Justin J. Novack" writes:
>>> [...]
>>> I could tap the collective knowledge.  My dilemma is that I'd like to be
>>> able to email out a friendly name for a port if one should exist.
>>>
>>> Rather than writing a x number of rules for x number of ports with a
>>> friendly name, (Port 1 belongs to EXCHANGE, port 2 belongs to
>>> DOMAINCONTROLLER, port 3 belongs to DNSSERVER, etc), I was wondering if
>>> there is a way to reference a map (by an external file or written within
>> the
>>> rule itself).
>>
>> You could use `grep interface name /file/mapping` in the commands
>> where you invoke the shell. Alternatively you could call a shell
>> script that interfaces to your inventory management system and does a
>> lookup so when the IMS changes mappings, you get the change
>> automatically.
>>
>> action=pipe '%s' /bin/mail -s '[ERROR] `grep '^$2' /file/mapping`
>> LINK_DOWN!' n...@domain.net;
>>
>> for example.
>>
>>> My admins don't know what Ethernet4/38 maps to, and they shouldn't be
>>> expected to memorize it.  So currently I have to write the following rule:
>>>
>>> # IMPORTANT SERVER 1
>>> type=Single
>>> ptype=RegExp
>>> pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
>>> (GigabitEthernet4\/38), changed state to down
>>> desc=(MAJOR) $1 interface $2 DOWN!
>>> action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN!'
>>> n...@domain.net; \
>>>shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
>>> 1 Link DOWN" "%s" 9
>>> [...]
>>> Multiply that over each port needed, and I am swamped in rules.  Is it
>>> possible to utilize a mapping function so I have to write that rule once,
>>> but I can map interfaces with friendly names?
>>>
>>> GigabitEthernet4/38, IMPORTANT SERVER 1
>>> GigabitEthernet4/39, IMPORTANT SERVER 2
>>> GigabitEthernet4/40, IMPORTANT SERVER 3
>>
>> I can see a couple of other ways of doing this inside of sec, but I am
>> not sure it's easier/better than using `` in the command output:
>>  1) use contexts
>>  2) use a perl associative array
>>
>> The context could be called server_for_GigabitEthernet4/38 and have
>> the value IMPORTANT SERVER 1. To populate it a rule like:
>>
>>  type = single
>>  ptype = regexp
>>  pattern = ^set (GigabitEthernet[0-9/]*) (.*)
>>  action = fill server_for_$1 $2
>>
>> and generate a series of events/input lines like:
>>
>>  set GigabitEthernet4/40 IMPORTANT SERVER 3
>>
>> into SEC (see the mailing list archives for doing this over a secure
>> control channel).
>>
>> Then to use the mapping:
>>
>>   action2=assign %S; copy server_for_$2 %S; pipe '%s' /bin/mail -s
>> '[WARNING] %S Link Bounce' n...@domain.net; ...
>>
>> Note I may have some syntax off as I am doing this

Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-18 Thread Justin J. Novack
Great idea, however, now all 432 ports on my device would send out an email
on flap, rather than the 60 important ones.  This would be perfect if an
entire switch needed friendly names.

As for David's suggestion, this would also be the case, however, I could
error out (silently) if it doesn't match something in the hash.  I would
still need to call a shellcmd, I don't just email, I also trigger additional
alerts like sounds and phones with the shellcmd announce.php, I'm happy to
call that separately.  At that point, I might as well just offload EVERY
event to different perl files and fail silently if the switch/port
combination is not in a hash/map.

Are these ways any safer(?) or less performance intensive than 60+ rules?
 My initial thought was to write a template and seed file (ala Section 4.2
http://sixshooter.v6.thrupoint.net/SEC-examples/article-part2.html#SECPERFORMANCE)
and just deal with adding a line (for each friendly named port) and
recompiling the rules file every time I want to change.

Thoughts?
--
Justin J. Novack
Official Disturber of the Peace


On Tue, Oct 18, 2011 at 1:52 PM, John P. Rouillard wrote:

>
> In message
>  ,
> "Justin J. Novack" writes:
> > [...]
> >I could tap the collective knowledge.  My dilemma is that I'd like to be
> >able to email out a friendly name for a port if one should exist.
> >
> >Rather than writing a x number of rules for x number of ports with a
> >friendly name, (Port 1 belongs to EXCHANGE, port 2 belongs to
> >DOMAINCONTROLLER, port 3 belongs to DNSSERVER, etc), I was wondering if
> >there is a way to reference a map (by an external file or written within
> the
> >rule itself).
>
> You could use `grep interface name /file/mapping` in the commands
> where you invoke the shell. Alternatively you could call a shell
> script that interfaces to your inventory management system and does a
> lookup so when the IMS changes mappings, you get the change
> automatically.
>
> action=pipe '%s' /bin/mail -s '[ERROR] `grep '^$2' /file/mapping`
> LINK_DOWN!' n...@domain.net;
>
> for example.
>
> >My admins don't know what Ethernet4/38 maps to, and they shouldn't be
> >expected to memorize it.  So currently I have to write the following rule:
> >
> ># IMPORTANT SERVER 1
> >type=Single
> >ptype=RegExp
> >pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
> >(GigabitEthernet4\/38), changed state to down
> >desc=(MAJOR) $1 interface $2 DOWN!
> >action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN!'
> >n...@domain.net; \
> >shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
> >1 Link DOWN" "%s" 9
> > [...]
> >Multiply that over each port needed, and I am swamped in rules.  Is it
> >possible to utilize a mapping function so I have to write that rule once,
> >but I can map interfaces with friendly names?
> >
> >GigabitEthernet4/38, IMPORTANT SERVER 1
> >GigabitEthernet4/39, IMPORTANT SERVER 2
> >GigabitEthernet4/40, IMPORTANT SERVER 3
>
> I can see a couple of other ways of doing this inside of sec, but I am
> not sure it's easier/better than using `` in the command output:
>  1) use contexts
>  2) use a perl associative array
>
> The context could be called server_for_GigabitEthernet4/38 and have
> the value IMPORTANT SERVER 1. To populate it a rule like:
>
>  type = single
>  ptype = regexp
>  pattern = ^set (GigabitEthernet[0-9/]*) (.*)
>  action = fill server_for_$1 $2
>
> and generate a series of events/input lines like:
>
>  set GigabitEthernet4/40 IMPORTANT SERVER 3
>
> into SEC (see the mailing list archives for doing this over a secure
> control channel).
>
> Then to use the mapping:
>
>   action2=assign %S; copy server_for_$2 %S; pipe '%s' /bin/mail -s
> '[WARNING] %S Link Bounce' n...@domain.net; ...
>
> Note I may have some syntax off as I am doing this from memory. The
> assign is needed to wipe any prior value and the copy pulls the value
> from the context.
>
> You can also do something similar using a perl associative array
> replacing the fill ... from above with
>
>  eval %v ($ServerName{$1} = '$2')
>
> using the same single rule.  To retrieve the value use something like:
>
>   eval %S ($ServerName{$2})
>
> which will return the value or use some extra perl (... || "Unknown
> server" perhaps??) to return a default value if the key doesn't
> exist. Note there may need to be a return or some other perlish syntax
> around $ServerName{$1}. I'm not in a position to test at the moment.
>
> All of these alternatives allow you to change the mappings on the fly
> using input to SEC (or rewriting an external file) which is usually
> wanted since a change in the wiring infrastructure shouldn't require a
> restart of SEC.
>
> --
>-- rouilj
> John Rouillard
> ===
> My employers don't acknowledge my existence much less my opinions.
>
--
All

Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-18 Thread david

On Tue, 18 Oct 2011, Justin J. Novack wrote:


Hello Everyone,

Nothing relevant has turned up in a search of the archives, so I was hoping
I could tap the collective knowledge.  My dilemma is that I'd like to be
able to email out a friendly name for a port if one should exist.

Rather than writing a x number of rules for x number of ports with a
friendly name, (Port 1 belongs to EXCHANGE, port 2 belongs to
DOMAINCONTROLLER, port 3 belongs to DNSSERVER, etc), I was wondering if
there is a way to reference a map (by an external file or written within the
rule itself).

My admins don't know what Ethernet4/38 maps to, and they shouldn't be
expected to memorize it.  So currently I have to write the following rule:

# IMPORTANT SERVER 1
type=Single
ptype=RegExp
pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
(GigabitEthernet4\/38), changed state to down
desc=(MAJOR) $1 interface $2 DOWN!
action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN!'
n...@domain.net; \
   shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
1 Link DOWN" "%s" 9

type=PairWithWindow
ptype=RegExp
pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
(GigabitEthernet4\/38), changed state to down
desc=(MAJOR) $1 interface $2 DOWN and not up for 30 seconds!
action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN for 30
seconds!' n...@domain.net; \
   shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
1 Link DOWN after 30 seconds" "%s" 9
ptype2=RegExp
pattern2=\w+\s+\d+\s\d+:\d+:\d+\s($1).*LINK-3-UPDOWN.*Interface ($2),
changed state to up
desc2=(MINOR) %1 interface %2 BOUNCE within 30 seconds.
action2=pipe '%s' /bin/mail -s '[WARNING] IMPORTANT SERVER 1 Link Bounce'
n...@domain.net; \
   shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
1 Link Bounce" "%s" 9
window=30

Multiply that over each port needed, and I am swamped in rules.  Is it
possible to utilize a mapping function so I have to write that rule once,
but I can map interfaces with friendly names?

GigabitEthernet4/38, IMPORTANT SERVER 1
GigabitEthernet4/39, IMPORTANT SERVER 2
GigabitEthernet4/40, IMPORTANT SERVER 3


create a STARTUP event that executes perl and reads a file into a perl 
hash


then change your rules to execute a perl snippet instead of a shellcmd and 
you can reference the perl hash


as extra credit, create a rule such that when you send a specific message 
through the log, it will clear and reload the perl hash from the file.


David Lang--

All the data continuously generated in your IT infrastructure contains a

definitive record of customers, application performance, security

threats, fraudulent activity and more. Splunk takes this data and makes

sense of it. Business sense. IT sense. Common sense.

http://p.sf.net/sfu/splunk-d2d-oct___

Simple-evcorr-users mailing list

Simple-evcorr-users@lists.sourceforge.net

https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users

--
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


Re: [Simple-evcorr-users] Defining a Map for Data

2011-10-18 Thread John P. Rouillard

In message
 ,
"Justin J. Novack" writes:
> [...]
>I could tap the collective knowledge.  My dilemma is that I'd like to be
>able to email out a friendly name for a port if one should exist.
>
>Rather than writing a x number of rules for x number of ports with a
>friendly name, (Port 1 belongs to EXCHANGE, port 2 belongs to
>DOMAINCONTROLLER, port 3 belongs to DNSSERVER, etc), I was wondering if
>there is a way to reference a map (by an external file or written within the
>rule itself).

You could use `grep interface name /file/mapping` in the commands
where you invoke the shell. Alternatively you could call a shell
script that interfaces to your inventory management system and does a
lookup so when the IMS changes mappings, you get the change
automatically.

action=pipe '%s' /bin/mail -s '[ERROR] `grep '^$2' /file/mapping` LINK_DOWN!' 
n...@domain.net;

for example.

>My admins don't know what Ethernet4/38 maps to, and they shouldn't be
>expected to memorize it.  So currently I have to write the following rule:
>
># IMPORTANT SERVER 1
>type=Single
>ptype=RegExp
>pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
>(GigabitEthernet4\/38), changed state to down
>desc=(MAJOR) $1 interface $2 DOWN!
>action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN!'
>n...@domain.net; \
>shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
>1 Link DOWN" "%s" 9
> [...]
>Multiply that over each port needed, and I am swamped in rules.  Is it
>possible to utilize a mapping function so I have to write that rule once,
>but I can map interfaces with friendly names?
>
>GigabitEthernet4/38, IMPORTANT SERVER 1
>GigabitEthernet4/39, IMPORTANT SERVER 2
>GigabitEthernet4/40, IMPORTANT SERVER 3

I can see a couple of other ways of doing this inside of sec, but I am
not sure it's easier/better than using `` in the command output:
 1) use contexts
 2) use a perl associative array

The context could be called server_for_GigabitEthernet4/38 and have
the value IMPORTANT SERVER 1. To populate it a rule like:

  type = single
  ptype = regexp
  pattern = ^set (GigabitEthernet[0-9/]*) (.*)
  action = fill server_for_$1 $2

and generate a series of events/input lines like:

  set GigabitEthernet4/40 IMPORTANT SERVER 3

into SEC (see the mailing list archives for doing this over a secure
control channel).

Then to use the mapping:

   action2=assign %S; copy server_for_$2 %S; pipe '%s' /bin/mail -s '[WARNING] 
%S Link Bounce' n...@domain.net; ...

Note I may have some syntax off as I am doing this from memory. The
assign is needed to wipe any prior value and the copy pulls the value
from the context.

You can also do something similar using a perl associative array
replacing the fill ... from above with

  eval %v ($ServerName{$1} = '$2')

using the same single rule.  To retrieve the value use something like:

   eval %S ($ServerName{$2})

which will return the value or use some extra perl (... || "Unknown
server" perhaps??) to return a default value if the key doesn't
exist. Note there may need to be a return or some other perlish syntax
around $ServerName{$1}. I'm not in a position to test at the moment.

All of these alternatives allow you to change the mappings on the fly
using input to SEC (or rewriting an external file) which is usually
wanted since a change in the wiring infrastructure shouldn't require a
restart of SEC.

--
-- rouilj
John Rouillard
===
My employers don't acknowledge my existence much less my opinions.

--
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users


[Simple-evcorr-users] Defining a Map for Data

2011-10-18 Thread Justin J. Novack
Hello Everyone,

Nothing relevant has turned up in a search of the archives, so I was hoping
I could tap the collective knowledge.  My dilemma is that I'd like to be
able to email out a friendly name for a port if one should exist.

Rather than writing a x number of rules for x number of ports with a
friendly name, (Port 1 belongs to EXCHANGE, port 2 belongs to
DOMAINCONTROLLER, port 3 belongs to DNSSERVER, etc), I was wondering if
there is a way to reference a map (by an external file or written within the
rule itself).

My admins don't know what Ethernet4/38 maps to, and they shouldn't be
expected to memorize it.  So currently I have to write the following rule:

# IMPORTANT SERVER 1
type=Single
ptype=RegExp
pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
(GigabitEthernet4\/38), changed state to down
desc=(MAJOR) $1 interface $2 DOWN!
action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN!'
n...@domain.net; \
shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
1 Link DOWN" "%s" 9

type=PairWithWindow
ptype=RegExp
pattern=\w+\s+\d+\s\d+:\d+:\d+\s(switch).*LINK-3-UPDOWN.*Interface
(GigabitEthernet4\/38), changed state to down
desc=(MAJOR) $1 interface $2 DOWN and not up for 30 seconds!
action=pipe '%s' /bin/mail -s '[ERROR] IMPORTANT SERVER 1 LINK_DOWN for 30
seconds!' n...@domain.net; \
shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
1 Link DOWN after 30 seconds" "%s" 9
ptype2=RegExp
pattern2=\w+\s+\d+\s\d+:\d+:\d+\s($1).*LINK-3-UPDOWN.*Interface ($2),
changed state to up
desc2=(MINOR) %1 interface %2 BOUNCE within 30 seconds.
action2=pipe '%s' /bin/mail -s '[WARNING] IMPORTANT SERVER 1 Link Bounce'
n...@domain.net; \
shellcmd /usr/bin/php /home/scripts/announce.php "IMPORTANT SERVER
1 Link Bounce" "%s" 9
window=30

Multiply that over each port needed, and I am swamped in rules.  Is it
possible to utilize a mapping function so I have to write that rule once,
but I can map interfaces with friendly names?

GigabitEthernet4/38, IMPORTANT SERVER 1
GigabitEthernet4/39, IMPORTANT SERVER 2
GigabitEthernet4/40, IMPORTANT SERVER 3

Thank you kindly,
--
Justin J. Novack
Official Disturber of the Peace
--
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct___
Simple-evcorr-users mailing list
Simple-evcorr-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simple-evcorr-users