mirror of
https://github.com/zeek/zeek.git
synced 2025-10-05 16:18:19 +00:00
NetControl: Add functions to search for rules affecting IPs/subnets
Adds the functions NetControl::find_rules_addr and NetControl::fund_rules_subnet which return a vector containing all rules affecting a certain IP or subnet.
This commit is contained in:
parent
692662abcc
commit
21c300c333
5 changed files with 223 additions and 2 deletions
|
@ -0,0 +1,54 @@
|
|||
# @TEST-EXEC: bro -r $TRACES/tls/ecdhe.pcap %INPUT
|
||||
# @TEST-EXEC: btest-diff .stdout
|
||||
|
||||
# Verify the state of internal tables after rules have been deleted...
|
||||
|
||||
@load base/frameworks/netcontrol
|
||||
|
||||
module NetControl;
|
||||
|
||||
export {
|
||||
global dump_state: function();
|
||||
}
|
||||
|
||||
function dump_state()
|
||||
{
|
||||
print "Dumping state";
|
||||
print rules;
|
||||
print rule_entities;
|
||||
print rules_by_subnets;
|
||||
}
|
||||
|
||||
module GLOBAL;
|
||||
|
||||
global rules: vector of string;
|
||||
|
||||
event NetControl::init()
|
||||
{
|
||||
local netcontrol_debug = NetControl::create_debug(T);
|
||||
NetControl::activate(netcontrol_debug, 10);
|
||||
}
|
||||
|
||||
event remove_all()
|
||||
{
|
||||
for ( i in rules )
|
||||
NetControl::remove_rule(rules[i]);
|
||||
}
|
||||
|
||||
event dump_info()
|
||||
{
|
||||
NetControl::dump_state();
|
||||
}
|
||||
|
||||
event connection_established(c: connection)
|
||||
{
|
||||
local id = c$id;
|
||||
rules[|rules|] = NetControl::shunt_flow([$src_h=id$orig_h, $src_p=id$orig_p, $dst_h=id$resp_h, $dst_p=id$resp_p], 0secs);
|
||||
rules[|rules|] = NetControl::drop_address(id$orig_h, 0secs);
|
||||
rules[|rules|] = NetControl::whitelist_address(id$orig_h, 0secs);
|
||||
rules[|rules|] = NetControl::redirect_flow([$src_h=id$orig_h, $src_p=id$orig_p, $dst_h=id$resp_h, $dst_p=id$resp_p], 5, 0secs);
|
||||
|
||||
schedule 1sec { remove_all() };
|
||||
schedule 2sec { dump_info() };
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
# @TEST-EXEC: bro %INPUT
|
||||
# @TEST-EXEC: btest-diff out
|
||||
|
||||
@load base/frameworks/netcontrol
|
||||
|
||||
global outfile: file;
|
||||
|
||||
event NetControl::init()
|
||||
{
|
||||
local netcontrol_debug = NetControl::create_debug(T);
|
||||
NetControl::activate(netcontrol_debug, 0);
|
||||
}
|
||||
|
||||
event NetControl::init_done() &priority=-5
|
||||
{
|
||||
NetControl::shunt_flow([$src_h=192.168.17.1, $src_p=32/tcp, $dst_h=192.168.17.2, $dst_p=32/tcp], 30sec);
|
||||
NetControl::drop_address(1.1.2.2, 15sec, "Hi there");
|
||||
NetControl::whitelist_address(1.2.3.4, 15sec);
|
||||
NetControl::redirect_flow([$src_h=192.168.17.1, $src_p=32/tcp, $dst_h=192.168.17.2, $dst_p=32/tcp], 5, 30sec);
|
||||
NetControl::quarantine_host(127.0.0.2, 8.8.8.8, 127.0.0.3, 15sec);
|
||||
|
||||
outfile = open("out");
|
||||
local rules = NetControl::find_rules_addr(1.2.3.4);
|
||||
print outfile, |rules|;
|
||||
print outfile, rules[0]$entity;
|
||||
rules = NetControl::find_rules_addr(1.2.3.5);
|
||||
print outfile, |rules|;
|
||||
rules = NetControl::find_rules_addr(127.0.0.2);
|
||||
print outfile, |rules|;
|
||||
print outfile, rules[0]$entity, rules[0]$ty;
|
||||
print outfile, rules[3]$entity, rules[3]$ty;
|
||||
close(outfile);
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue