지난 글에는 단일 오펜스만 닫는 perl script를 작성하였는데
속도가 굉장히 느려서 perl의 ForkManager 모듈을 이용한 멀티 프로세스의 offense closure를 새로 코딩했습니다.
10 pid로 10 items 를 해결하는데 27초 걸립니다.
테스트 환경은 QRadar 7.4.2 2020.7.0.20201113144954 버젼 입니다.
use strict;
use warnings;
use Parallel::ForkManager;
my $truecount = 0;
my @offlist;
my @listcmd = "curl -S -X GET -u admin:password1! -k -H 'Range: items=0-9' -H 'Version: 15.0' -H 'Accept: application/json' 'https://<console_ip>/api/siem/offenses?fields=id&filter=status%20%3D%20%22OPEN%22'";
my $pm = Parallel::ForkManager->new(10);
$pm->run_on_start(
sub {
my ( $pid ) = @_; # $pid
print "### START pid: $pid\n";
}
);
$pm->run_on_finish(
sub { # must be declared before first 'start'
my (
$pid,
$exit_code,
$ident,
$exit_signal,
$core_dump,
#$data,
) = @_; # $data exit return value
print "## END pid: $pid\n";
#$out{ $data->[0] } = $data->[1];
}
);
while($truecount == 0){
my $list = qx(@listcmd); #[{"id":85562},{"id":85561}] string
$list =~ s/\{\[?"id":(\d+)\]?\}/$1/g;
@offlist = split(/,/, $list); # create array
foreach my $shfoff (@offlist)
{
$pm->start() and next; # start pid
$shfoff =~ s/\[?(\d+)]?/$1/;
my @closecmd = ("curl -S -X POST -u admin:password1! -k-H 'Version: 15.0' -H 'Accept: application/json' 'https://<console_ip>/api/siem/offenses/$shfoff?closing_reason_id=1&status=CLOSED'");
system(@closecmd);
$pm->finish(0); # stop pid
};
$pm->wait_all_children;
};
이전 스크립트 보다 훨씬 깔끔해졌습니다.
username : password 와 <console_ip>를 채워주면 되고
my $list와 $shfoff를 보면 알겠지만 단순한 id값만 뽑아내서 열려있는 모든 오펜스를 닫는 스크립트입니다.
그래서 원하는 오펜스만 자동으로 닫으시려면 @listcmd 의 filter를 바꾸고 정규표현식만 약간 바꿔주면 작동이 잘 될겁니다.
'일 > IBM QRadar' 카테고리의 다른 글
IBM QRadar 자동으로 오펜스 닫기(Auto closing offenses) Perl Script (0) | 2021.10.08 |
---|---|
QRadar network_hierachy perl script (0) | 2021.10.07 |
QRadar 로그 소스 (소스포트) 생성 - 펄 스크립트 (0) | 2021.10.07 |
QRadar 설치 전 주의할점 (0) | 2021.08.11 |
IBM QRadar Structure (0) | 2021.08.06 |