Firewall-Policy-Designer
view release on metacpan or search on metacpan
lib/Firewall/Policy/Designer/Topsec.pm view on Meta::CPAN
package Firewall::Policy::Designer::Topsec;
#------------------------------------------------------------------------------
# å è½½é¡¹ç®æ¨¡å
#------------------------------------------------------------------------------
use Moose;
use namespace::autoclean;
no warnings 'uninitialized';
use List::Util qw( uniq );
use Mojo::Util qw(dumper);
#------------------------------------------------------------------------------
# getAnalyzerReport è·åé²ç«å¢çç¥æºç®å°åãæå¡ç«¯å£åææ¥å
#------------------------------------------------------------------------------
use Firewall::Utils::Ip;
use Firewall::Policy::Searcher::Topsec;
use Firewall::Policy::Searcher::Report::FwInfo;
#------------------------------------------------------------------------------
# Firewall::Policy::Designer::Topsec éç¨å±æ§
#------------------------------------------------------------------------------
has dbi => ( is => 'ro', does => 'Firewall::DBI::Role', required => 1, );
has searcherReportFwInfo => ( is => 'ro', isa => 'Firewall::Policy::Searcher::Report::FwInfo', required => 1, );
has commandText => ( is => 'ro', isa => 'ArrayRef[Str]', default => sub { [] }, );
#------------------------------------------------------------------------------
# addToCommandText 设置 commandText 屿§ï¼å
¥å为æ é
#------------------------------------------------------------------------------
sub addToCommandText {
my ( $self, $commands ) = @_;
push @{$self->{"commandText"}}, $commands;
}
#------------------------------------------------------------------------------
# design çç¥è®¾è®¡å½æ°å
¥å£ï¼å
¥å为é²ç«å¢çç¥æ¥å -> searcherReportFwInfo
#------------------------------------------------------------------------------
sub design {
my $self = shift;
# æåé²ç«å¢çç¥æ¥åä¸ type 屿§
my $type = $self->{"searcherReportFwInfo"}{"type"};
my $action = $self->{"searcherReportFwInfo"}{"action"};
# æ
åµ1ï¼å½ç±»å为 newï¼åæ°å»ºçç¥
if ( $type eq 'new' ) {
$self->createRule();
}
# æ
åµ2ï¼å½ç±»å为 modifyï¼åä¿®æ¹çç¥
elsif ( $type eq 'modify' ) {
$self->modifyRule();
}
# æ
åµ3ï¼å½ç±»å为 ignoreï¼è¿éè¦æ£æ¥æ¯å¦åå¨ NAT çç¥
elsif ( $type eq 'ignore' ) {
my $param = $action->{"new"} if defined $action;
for my $natDirection ( keys %{$param} ) {
if ( $natDirection eq 'natSrc' || $natDirection eq 'natDst' ) {
$self->createNat( $param->{$natDirection}, $type );
}
}
}
# å
¶ä»æ
åµï¼æåºå¼å¸¸ï¼å®ä½æé¤
else {
confess "ERROR: searcherReportFwInfo->type("
. $self->{"searcherReportFwInfo"}{"type"}
. ") must be 'new' or 'modify'";
}
# æ¼æ¥æ°ç»ä¸ºå符串并è¿å
return join( "\n", uniq @{$self->{"commandText"}} );
} ## end sub design
#------------------------------------------------------------------------------
# createRule æ°å¢çç¥
#------------------------------------------------------------------------------
sub createRule {
my $self = shift;
# æ°å¢çç¥å
¶ action 为 new
my $create = $self->{"searcherReportFwInfo"}{"action"}{"new"};
# è·åæºç®å®å
¨åºå¹¶æ¼æ¥
( run in 1.076 second using v1.01-cache-2.11-cpan-39bf76dae61 )