| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
use strict; |
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
my $psad_lib_dir = '/usr/lib/psad'; |
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
&import_psad_perl_modules(); |
|---|
| 10 |
|
|---|
| 11 |
my $ipt = new IPTables::ChainMgr( |
|---|
| 12 |
'iptables' => '/sbin/iptables', |
|---|
| 13 |
'verbose' => 1 |
|---|
| 14 |
); |
|---|
| 15 |
my $total_rules = 0; |
|---|
| 16 |
|
|---|
| 17 |
my ($rv, $out_aref, $err_aref) = $ipt->create_chain('filter', 'PSAD'); |
|---|
| 18 |
print "create_chain() rv: $rv\n"; |
|---|
| 19 |
print "$_\n" for @$out_aref; |
|---|
| 20 |
print "$_\n" for @$err_aref; |
|---|
| 21 |
|
|---|
| 22 |
($rv, $out_aref, $err_aref) = $ipt->add_jump_rule('filter', 'INPUT', 'PSAD'); |
|---|
| 23 |
print "add_jump_rule() rv: $rv\n"; |
|---|
| 24 |
print "$_\n" for @$out_aref; |
|---|
| 25 |
print "$_\n" for @$err_aref; |
|---|
| 26 |
|
|---|
| 27 |
($rv, $out_aref, $err_aref) = $ipt->add_ip_rule('1.1.1.1', |
|---|
| 28 |
'0.0.0.0/0', 10, 'filter', 'PSAD', 'DROP'); |
|---|
| 29 |
print "add_ip_rule() rv: $rv\n"; |
|---|
| 30 |
print "$_\n" for @$out_aref; |
|---|
| 31 |
print "$_\n" for @$err_aref; |
|---|
| 32 |
|
|---|
| 33 |
($rv, $total_rules) = $ipt->find_ip_rule('1.1.1.1', '0.0.0.0/0', 'filter', 'PSAD', 'DROP'); |
|---|
| 34 |
print "find ip: $rv, total chain rules: $total_rules\n"; |
|---|
| 35 |
|
|---|
| 36 |
($rv, $out_aref, $err_aref) = $ipt->add_ip_rule('2.2.1.1', '0.0.0.0/0', 10, |
|---|
| 37 |
'filter', 'PSAD', 'DROP'); |
|---|
| 38 |
print "add_ip_rule() rv: $rv\n"; |
|---|
| 39 |
print "$_\n" for @$out_aref; |
|---|
| 40 |
print "$_\n" for @$err_aref; |
|---|
| 41 |
|
|---|
| 42 |
($rv, $out_aref, $err_aref) = $ipt->add_ip_rule('2.2.4.1', '0.0.0.0/0', 10, |
|---|
| 43 |
'filter', 'PSAD', 'DROP'); |
|---|
| 44 |
print "add_ip_rule() rv: $rv\n"; |
|---|
| 45 |
print "$_\n" for @$out_aref; |
|---|
| 46 |
print "$_\n" for @$err_aref; |
|---|
| 47 |
|
|---|
| 48 |
($rv, $out_aref, $err_aref) = $ipt->delete_ip_rule('1.1.1.1', '0.0.0.0/0', |
|---|
| 49 |
'filter', 'PSAD', 'DROP'); |
|---|
| 50 |
print "delete_ip_rule() rv: $rv\n"; |
|---|
| 51 |
print "$_\n" for @$out_aref; |
|---|
| 52 |
print "$_\n" for @$err_aref; |
|---|
| 53 |
|
|---|
| 54 |
($rv, $out_aref, $err_aref) = $ipt->delete_chain('filter', 'INPUT', 'PSAD'); |
|---|
| 55 |
print "delete_chain() rv: $rv\n"; |
|---|
| 56 |
print "$_\n" for @$out_aref; |
|---|
| 57 |
print "$_\n" for @$err_aref; |
|---|
| 58 |
|
|---|
| 59 |
($rv, $out_aref, $err_aref) = $ipt->run_ipt_cmd('/sbin/iptables -nL INPUT'); |
|---|
| 60 |
print "list on 'INPUT' chain rv: $rv\n"; |
|---|
| 61 |
print for @$out_aref; |
|---|
| 62 |
print for @$err_aref; |
|---|
| 63 |
|
|---|
| 64 |
($rv, $out_aref, $err_aref) = $ipt->run_ipt_cmd('/sbin/iptables -nL INPU'); |
|---|
| 65 |
print "bogus list on 'INPU' chain rv: $rv (this is expected).\n"; |
|---|
| 66 |
print for @$out_aref; |
|---|
| 67 |
print for @$err_aref; |
|---|
| 68 |
|
|---|
| 69 |
exit 0; |
|---|
| 70 |
|
|---|
| 71 |
sub import_psad_perl_modules() { |
|---|
| 72 |
|
|---|
| 73 |
my $mod_paths_ar = &get_psad_mod_paths(); |
|---|
| 74 |
|
|---|
| 75 |
push @$mod_paths_ar, @INC; |
|---|
| 76 |
splice @INC, 0, $ |
|---|
| 77 |
|
|---|
| 78 |
require IPTables::Parse; |
|---|
| 79 |
require IPTables::ChainMgr; |
|---|
| 80 |
|
|---|
| 81 |
return; |
|---|
| 82 |
} |
|---|
| 83 |
|
|---|
| 84 |
sub get_psad_mod_paths() { |
|---|
| 85 |
|
|---|
| 86 |
my @paths = (); |
|---|
| 87 |
|
|---|
| 88 |
unless (-d $psad_lib_dir) { |
|---|
| 89 |
my $dir_tmp = $psad_lib_dir; |
|---|
| 90 |
$dir_tmp =~ s|lib/|lib64/|; |
|---|
| 91 |
if (-d $dir_tmp) { |
|---|
| 92 |
$psad_lib_dir = $dir_tmp; |
|---|
| 93 |
} else { |
|---|
| 94 |
die "[*] psad lib directory: $psad_lib_dir does not exist, ", |
|---|
| 95 |
"use --Lib-dir <dir>"; |
|---|
| 96 |
} |
|---|
| 97 |
} |
|---|
| 98 |
|
|---|
| 99 |
opendir D, $psad_lib_dir or die "[*] Could not open $psad_lib_dir: $!"; |
|---|
| 100 |
my @dirs = readdir D; |
|---|
| 101 |
closedir D; |
|---|
| 102 |
shift @dirs; shift @dirs; |
|---|
| 103 |
|
|---|
| 104 |
push @paths, $psad_lib_dir; |
|---|
| 105 |
|
|---|
| 106 |
for my $dir (@dirs) { |
|---|
| 107 |
|
|---|
| 108 |
next unless -d "$psad_lib_dir/$dir"; |
|---|
| 109 |
push @paths, "$psad_lib_dir/$dir" |
|---|
| 110 |
if $dir =~ m|linux| or $dir =~ m|thread|; |
|---|
| 111 |
} |
|---|
| 112 |
return \@paths; |
|---|
| 113 |
} |
|---|
| 114 |
|
|---|