Skip to content
Snippets Groups Projects
Commit 5aadf81f authored by Jakub Cegan's avatar Jakub Cegan
Browse files

Revert "Merge branch"

 'warden-server-2.2' of homeproj.cesnet.cz:warden

This reverts commit 008ab67b, reversing
changes made to 505ba410.
parent 6d747ced
No related branches found
No related tags found
No related merge requests found
Showing
with 481 additions and 1138 deletions
......@@ -24,11 +24,7 @@ err()
#-------------------------------------------------------------------------------
# edit when you build new package
<<<<<<< HEAD
version="2.1"
=======
version="2.2"
>>>>>>> 981838c056f36b6f42b2de30eb017bd7ab441a1e
package_name="warden-server"
package="${package_name}-${version}"
......
#!/usr/bin/perl
#!/usr/bin/perl -w
#
# getClients.pl
#
# Copyright (C) 2011-2013 Cesnet z.s.p.o
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.
use strict;
use warnings;
use Getopt::Std;
use DBI;
use DBD::mysql;
use FindBin qw($RealBin $RealScript);
FindBin::again();
use lib "$RealBin/../lib";
use WardenCommon;
use File::Basename;
################################################################################
# VARIABLES
################################################################################
our $VERSION = "2.2";
my $etc = "$RealBin/../etc";
our $VERSION = "2.1";
# read config file
my $conf_file = "$etc/warden-server.conf";
WardenCommon::loadConf($conf_file);
my $warden_path = '/opt/warden-server';
require $warden_path . '/lib/WardenStatus.pm';
my $filename = basename($0);
################################################################################
# FUNCTIONS
################################################################################
#-------------------------------------------------------------------------------
# Functions
#-------------------------------------------------------------------------------
sub usage {
print "Usage: $RealScript (without parameters) [-h -V]\n";
print "Usage: $filename [without parameters]\n";
exit 1;
}
sub help {
print "$RealScript (without parameters) [-h -V]\n";
print "-h print this text and exit\n";
print "-V print version and exit\n";
exit 0;
}
#-------------------------------------------------------------------------------
# errMsg - print error message and die
#-------------------------------------------------------------------------------
sub errMsg
{
my $msg = shift;
$msg = trim($msg);
print $msg . "\n";
exit 1;
} # End of errMsg
sub version {
print "Current version: $VERSION\n";
exit 0;
}
#-------------------------------------------------------------------------------
# trim - remove whitespace from the start and end of the string
#-------------------------------------------------------------------------------
sub trim
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
} # End of trim
################################################################################
#-------------------------------------------------------------------------------
# MAIN
################################################################################
our ($opt_h, $opt_V);
#-------------------------------------------------------------------------------
our ($opt_h);
die usage unless getopts("hV");
my $help = $opt_h;
my $script_version = $opt_V;
die usage unless getopts("h");
my $help = $opt_h;
# catch help option
# catch help param
if ($help) {
help;
usage;
}
# catch version option
if ($script_version) {
version;
# superuser controle
my $UID = $<;
if ($UID != 0) {
die errMsg("You must be root for running this script!")
}
# connect to DB
my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
# obtain data from DB
my $sth = $dbh->prepare("SELECT * FROM clients ORDER BY client_id ASC;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $hash_ref = $sth->fetchall_hashref("client_id");
# print table of clients
print "+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
print "| Client ID | Hostname | Registered | Requestor | Service | CT | Type | ROE | Description tags | IP Net Client | Valid |\n";
print "+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
foreach my $key (sort {$a<=>$b} keys %$hash_ref) {
printf("| %-10s ", $hash_ref->{$key}->{client_id} || "unknown");
printf("| %-30s ", $hash_ref->{$key}->{hostname} || "unknown");
printf("| %19s ", $hash_ref->{$key}->{registered} || "unknown");
printf("| %-23s ", $hash_ref->{$key}->{requestor} || "unknown");
printf("| %-25s ", $hash_ref->{$key}->{service} || "-");
printf("| %-2s ", $hash_ref->{$key}->{client_type} || "unknown");
printf("| %-15s ", $hash_ref->{$key}->{type} || "-");
printf("| %-4s ", $hash_ref->{$key}->{receive_own_events} || "-");
printf("| %-50s ", $hash_ref->{$key}->{description_tags} || "-");
printf("| %-18s ", $hash_ref->{$key}->{ip_net_client}|| "unknown");
printf("| %-5s |\n", $hash_ref->{$key}->{valid}|| "unknown");
my @clients = WardenStatus::getClients($warden_path);
print "+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
print "| Client ID | Hostname | Registered | Requestor | Service | CT | Type | ROE | Description tags | IP Net Client |\n";
print "+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
foreach (@clients) {
printf("| %-10s ", @$_[0] || "unknown");
printf("| %-30s ", @$_[1] || "unknown");
printf("| %19s ", @$_[2] || "unknown");
printf("| %-23s ", @$_[3] || "unknown");
printf("| %-25s ", @$_[4] || "unknown");
printf("| %-2s ", @$_[5] || "unknown");
printf("| %-15s ", @$_[6] || "unknown");
printf("| %-4s ", @$_[7] || "unknown");
printf("| %-50s ", @$_[8] || "unknown");
printf("| %-18s |\n", @$_[9] || "unknown");
}
print "+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
print "+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n";
print "\n";
print "Current registered clients in: " . scalar localtime(time) . "\n";
# cleanup section
END {
if (defined $dbh) {
$dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
}
}
exit 0;
#!/usr/bin/perl
#!/usr/bin/perl -w
#
# getStatus.pl
#
# Copyright (C) 2011-2013 Cesnet z.s.p.o
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.
use strict;
use warnings;
use Getopt::Std;
use DBI;
use DBD::mysql;
use Format::Human::Bytes;
use FindBin qw($RealBin $RealScript);
FindBin::again();
use lib "$RealBin/../lib";
use WardenCommon;
################################################################################
# VARIABLES
################################################################################
our $VERSION = "2.2";
my $etc = "$RealBin/../etc";
use File::Basename;
# read config file
my $conf_file = "$etc/warden-server.conf";
WardenCommon::loadConf($conf_file);
our $VERSION = "2.1";
my $warden_path = '/opt/warden-server';
require $warden_path . '/lib/WardenStatus.pm';
my $filename = basename($0);
################################################################################
# FUNCTIONS
################################################################################
#-------------------------------------------------------------------------------
# Functions
#-------------------------------------------------------------------------------
sub usage {
print "Usage: $RealScript (without parameters) [-h -V]\n";
print "Usage: $filename [without parameters]\n";
exit 1;
}
sub help {
print "$RealScript (without parameters) [-h -V]\n";
print "-h print this text and exit\n";
print "-V print version and exit\n";
exit 0;
}
#-------------------------------------------------------------------------------
# errMsg - print error message and die
#-------------------------------------------------------------------------------
sub errMsg
{
my $msg = shift;
$msg = trim($msg);
print $msg . "\n";
exit 1;
} # End of errMsg
sub version {
print "Current version: $VERSION\n";
exit 0;
}
#-------------------------------------------------------------------------------
# trim - remove whitespace from the start and end of the string
#-------------------------------------------------------------------------------
sub trim
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
} # End of trim
################################################################################
#-------------------------------------------------------------------------------
# MAIN
################################################################################
our ($opt_h, $opt_V);
#-------------------------------------------------------------------------------
our ($opt_h);
die usage unless getopts("hV");
my $help = $opt_h;
my $script_version = $opt_V;
die usage unless getopts("h");
my $help = $opt_h;
# catch help option
# catch help param
if ($help) {
help;
}
# catch version option
if ($script_version) {
version;
usage;
}
# superuser controle
my $UID = $<;
if ($UID != 0) {
WardenCommon::errMsg("You must be root for running this script!");
die errMsg("You must be root for running this script!")
}
# connect to DB
my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
my @status = WardenStatus::getStatus($warden_path);
#-----------------------------------------------------------------------------
# Warden server variables
my $package_version = WardenCommon::trim(`cat /opt/warden-server/etc/package_version`);
my $version = substr($package_version, 14);
my $hostname = WardenCommon::trim(`hostname -f`);
my $ip_address = WardenCommon::trim(`hostname -i`);
my $port = WardenCommon::trim(`netstat -pln | grep apache | cut -f 4 -d ":"`);
my ($syslog, $syslog_verbose);
if ($WardenCommon::SYSLOG == 1) {
# take and remove first element of array @status and save it into $server_status_ref
my $server_status_ref = shift(@status);
my @server_status = @$server_status_ref;
my $syslog;
my $syslog_verbose;
if ($server_status[7] == 1) {
$syslog = "enabled";
} else {
$syslog = "disabled";
}
if ($WardenCommon::SYSLOG_VERBOSE == 1) {
if ($server_status[8] == 1) {
$syslog_verbose = "enabled";
} else {
$syslog_verbose = "disabled";
}
#-------------------------------------------------------------------------------
# Warden server status
# size of database events
my $sth = $dbh->prepare("SELECT data_length + index_length FROM information_schema.TABLES WHERE table_schema = ? AND TABLE_NAME = ?") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($WardenCommon::DB_NAME, 'events') or die "Cannot execute statement: " . $sth->errstr;
my $size = $sth->fetchrow();
my $db_size = defined $size ? Format::Human::Bytes::base10($size) : "none";
# sum of all records in table events
$sth = $dbh->prepare("SELECT count(*) FROM events;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $events_sum = $sth->fetchrow();
if (!defined $events_sum) {
$events_sum = "none";
}
# sum of valid records in table events
$sth = $dbh->prepare("SELECT count(*) FROM events WHERE valid = 't';") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $events_sum_valid = $sth->fetchrow();
if (!defined $events_sum_valid) {
$events_sum_valid = "none";
}
# sum of obsolete records in table events
$sth = $dbh->prepare("SELECT count(*) FROM events WHERE valid = 'o';") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $events_sum_obsolete = $sth->fetchrow();
if (!defined $events_sum_obsolete) {
$events_sum_obsolete = "none";
}
# sum of fail records in table events
$sth = $dbh->prepare("SELECT count(*) FROM events WHERE valid = 'f';") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $events_sum_invalid = $sth->fetchrow();
if (!defined $events_sum_invalid) {
$events_sum_invalid = "none";
}
# id of last record in table events
$sth = $dbh->prepare("SELECT max(id) FROM events WHERE valid = 't';") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $events_last_id = $sth->fetchrow();
if (!defined $events_last_id) {
$events_last_id = "none";
}
# timestamp of first record in table events
$sth = $dbh->prepare("SELECT received FROM events WHERE id = (SELECT min(id) FROM events WHERE valid = 't');") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $events_first_timestamp = $sth->fetchrow();
if (!defined $events_first_timestamp) {
$events_first_timestamp = "none";
}
# timestamp of last record in table events
$sth = $dbh->prepare("SELECT received FROM events WHERE id = (SELECT max(id) FROM events WHERE valid = 't');") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $events_last_timestamp = $sth->fetchrow();
if (!defined $events_last_timestamp) {
$events_last_timestamp = "none";
}
# sum of all records in table clients
$sth = $dbh->prepare("SELECT count(*) FROM clients;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $clients_sum = $sth->fetchrow();
if (!defined $clients_sum) {
$clients_sum = "none";
}
# sum of valid records in table clients
$sth = $dbh->prepare("SELECT count(*) FROM clients WHERE valid = 't';") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $clients_sum_valid = $sth->fetchrow();
if (!defined $clients_sum_valid) {
$clients_sum_valid = "none";
}
# sum of invaled records in table clients
$sth = $dbh->prepare("SELECT count(*) FROM clients WHERE valid = 'f';") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my $clients_sum_invalid = $sth->fetchrow();
if (!defined $clients_sum_invalid) {
$clients_sum_invalid = "none";
}
#-------------------------------------------------------------------------------
# Statistics of active registered senders
my $hash_ref;
if ($clients_sum != 0) {
# $sth = $dbh->prepare("SELECT clients.client_id, clients.hostname, clients.service, count(*), max(received) FROM events LEFT JOIN clients ON (events.hostname=clients.hostname AND events.service=clients.service) WHERE clients.valid='t' AND events.valid='t' GROUP BY client_id;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth = $dbh->prepare("SELECT clients.client_id, clients.hostname, clients.service, count(*), max(received) FROM events LEFT JOIN clients ON (events.client_id=clients.client_id) WHERE clients.valid='t' AND events.valid='t' GROUP BY client_id;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute or die "Cannot execute statement: " . $sth->errstr;
my ($client_id, $hostname, $service, $count, $timestamp, $client_status);
$hash_ref = $sth->fetchall_hashref("client_id");
}
#-------------------------------------------------------------------------------
# Print status info output
print "Warden server variables:\n";
print "========================\n";
print "SERVER_VERSION:\t\t$version\n";
print "HOSTNAME:\t\t$hostname\n";
print "IP_ADDRESS:\t\t$ip_address\n";
print "PORT:\t\t\t$port\n";
print "BASEDIR:\t\t$WardenCommon::BASEDIR\n";
print "DB_NAME:\t\t$WardenCommon::DB_NAME\n";
print "DB_USER:\t\t$WardenCommon::DB_USER\n";
print "DB_HOST:\t\t$WardenCommon::DB_HOST\n";
print "SERVER_VERSION:\t\t$server_status[0]\n";
print "HOSTNAME:\t\t$server_status[1]\n";
print "IP_ADDRESS:\t\t$server_status[2]\n";
print "PORT:\t\t\t$server_status[3]\n";
print "DB_NAME:\t\t$server_status[4]\n";
print "DB_USER:\t\t$server_status[5]\n";
print "DB_HOST:\t\t$server_status[6]\n";
print "SYSLOG:\t\t\t$syslog\n";
print "SYSLOG_VERBOSE:\t\t$syslog_verbose\n";
print "SYSLOG_FACILITY:\t$WardenCommon::SYSLOG_FACILITY\n";
print "MAX_EVENTS_LIMIT:\t$WardenCommon::MAX_EVENTS_LIMIT\n";
print "SYSLOG_FACILITY:\t$server_status[9]\n";
print "\n";
print "Warden server status:\n";
print "=====================\n";
print "Database size:\t\t\t\t$db_size\n";
print "Count of all saved events:\t\t$events_sum\n";
print " - count of valid events:\t\t$events_sum_valid\n";
print " - count of obsolete events:\t\t$events_sum_obsolete\n";
print " - count of invalid events:\t\t$events_sum_invalid\n";
print "Last (valid) ID in events table:\t$events_last_id\n";
print "Time of first (valid) inserted event:\t$events_first_timestamp (UTC)\n";
print "Time of latest (valid) inserted event:\t$events_last_timestamp (UTC)\n";
print "Count of all registered clients:\t$clients_sum\n";
print " - count of valid registered clients:\t$clients_sum_valid\n";
print " - count of invalid registered clients:\t$clients_sum_invalid\n";
print "Database size:\t\t\t$server_status[10]\n";
print "Count of saved events:\t\t$server_status[11]\n";
print "Last ID in events table:\t$server_status[12]\n";
print "Time of first inserted event:\t$server_status[13] (UTC)\n";
print "Time of latest inserted event:\t$server_status[14] (UTC)\n";
print "Count of registered clients:\t$server_status[15]\n";
print "\n";
if ($clients_sum != 0) {
print "Statistics of ACTIVE and VALID registered senders:\n";
print "==================================================\n";
# check if sum of registered client isn't 0
if ($server_status[15] != 0) {
print "Statistics of active registered senders:\n";
print "========================================\n";
print "+----------------------------------------------------------------------------------------------------------------+\n";
print "| Client ID | Hostname | Service | Stored events | Last insertion (UTC) |\n";
print "+----------------------------------------------------------------------------------------------------------------+\n";
foreach my $key (sort {$a<=>$b} keys %$hash_ref) {
printf("| %-10s ", $hash_ref->{$key}->{client_id} || "unknown");
printf("| %-30s ", $hash_ref->{$key}->{hostname}|| "unknown");
printf("| %-25s ", $hash_ref->{$key}->{service} || "unknown");
printf("| %-13s ", $hash_ref->{$key}->{"count(*)"} || "unknown");
printf("| %-20s |\n", $hash_ref->{$key}->{"max(received)"} || "unknown");
foreach my $client_status_ref (@status){
my @client_status = @$client_status_ref;
printf("| %-10s ", $client_status[0] || "unknown");
printf("| %-30s ", $client_status[1] || "unknown");
printf("| %-25s ", $client_status[2] || "unknown");
printf("| %-13s ", $client_status[3] || "unknown");
printf("| %-20s |\n", $client_status[4] || "unknown");
}
print "+----------------------------------------------------------------------------------------------------------------+\n";
print "\n";
......@@ -261,11 +134,4 @@ if ($clients_sum != 0) {
print "Current server status in:\t" . scalar localtime(time) . "\n";
# cleanup section
END {
if (defined $dbh) {
$dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
}
}
exit 0;
#!/usr/bin/perl
#!/usr/bin/perl -w
#
# registerReceiver.pl
#
# Copyright (C) 2011-2013 Cesnet z.s.p.o
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.
use strict;
use warnings;
use Getopt::Std;
use Switch;
use DBI;
use DBD::mysql;
use DateTime;
use Sys::Syslog qw(:DEFAULT setlogsock);
Sys::Syslog::setlogsock('unix');
use Carp;
use FindBin qw($RealBin $RealScript);
FindBin::again();
use lib "$RealBin/../lib";
use WardenCommon;
################################################################################
# VARIABLES
################################################################################
our $VERSION = "2.2";
my $etc = "$RealBin/../etc";
# read config file
my $conf_file = "$etc/warden-server.conf";
WardenCommon::loadConf($conf_file);
use File::Basename;
our $VERSION = "2.0";
my $warden_path = '/opt/warden-server';
require $warden_path . '/lib/WardenReg.pm';
my $filename = basename($0);
################################################################################
# FUNCTIONS
################################################################################
#-------------------------------------------------------------------------------
# Functions
#-------------------------------------------------------------------------------
sub usage {
print "Usage: $RealScript -n <hostname> -r <requestor> -t <type> -o -c <ip_net_client> [-i <client_id> -h -V]\n";
print "Usage: $filename [-h -o -n <hostname> -r <requestor> -t <type> -i <ip_net_client>]\n";
exit 1;
}
sub help {
print "$RealScript -n <hostname> -r <requestor> -t <type> -o -c <ip_net_client> [-i <client_id> -h -V]\n";
print "$filename [-h -o -n <hostname> -r <requestor> -t <type> -i <ip_net_client>]\n";
print "-h print this text and exit\n";
print "-n hostname of receiver\n";
print "-r e-mail address of client registration requestor\n";
print "-r client registration requestor\n";
print "-t type of received events or '_any_' for receiving of all types of events\n";
print "-o enable receiving of own events\n";
print "-c CIDR of receiver\n";
print "-i user defined client ID (optional)\n";
print "-h print this text and exit\n";
print "-V print version and exit\n";
print "-i CIDR of receiver\n";
exit 0;
}
sub version {
print "Current version: $VERSION\n";
exit 0;
}
#-------------------------------------------------------------------------------
# sendMsg - wrapper for more complex WardenCommon::sendMsg function
# errMsg - print error message and die
#-------------------------------------------------------------------------------
sub sendMsg
sub errMsg
{
my $severity = shift;
my $syslog_msg = shift;
my $msg = shift;
$msg = trim($msg);
print $msg . "\n";
exit 1;
} # End of errMsg
WardenCommon::sendMsg($WardenCommon::SYSLOG, $WardenCommon::SYSLOG_VERBOSE, $WardenCommon::SYSLOG_FACILITY, $severity,
$syslog_msg, undef, $RealScript);
}
#-------------------------------------------------------------------------------
# trim - remove whitespace from the start and end of the string
#-------------------------------------------------------------------------------
sub trim
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
} # End of trim
################################################################################
#-------------------------------------------------------------------------------
# MAIN
################################################################################
our ($opt_n, $opt_r, $opt_t, $opt_o, $opt_c, $opt_i, $opt_h, $opt_V);
#-------------------------------------------------------------------------------
our ($opt_n, $opt_r, $opt_t, $opt_o, $opt_i, $opt_h);
if ($#ARGV == -1) {
usage;
}
if ($#ARGV == -1) {usage}
die usage unless getopts("n:r:t:c:i:ohV");
die usage unless getopts("n:r:t:i:ho");
my $hostname = $opt_n;
my $requestor = $opt_r;
my $type = $opt_t;
my $ip_net_client = $opt_c;
my $client_id = $opt_i;
my $ip_net_client = $opt_i;
my $help = $opt_h;
my $script_version = $opt_V;
my $receive_own_events = "f";
if ($opt_o) {
$receive_own_events = "t";
}
# catch help option
# catch help param
if ($help) {
help;
}
# catch version option
if ($script_version) {
version;
}
# check parameters definition
switch () {
case {!defined $hostname} {WardenCommon::errMsg("Parameter 'hostname' is not defined!")}
case {!defined $requestor} {WardenCommon::errMsg("Parameter 'requestor' is not defined!")}
case {!defined $type} {WardenCommon::errMsg("Parameter 'type' is not defined!")}
case {!defined $receive_own_events} {WardenCommon::errMsg("Parameter 'receive_own_events' is not defined!")}
case {!defined $ip_net_client} {WardenCommon::errMsg("Parameter 'ip_net_client' is not defined!")}
}
# check validity of IP address (CIDR format)
if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
WardenCommon::errMsg("Enter correct IP address in CIDR format!");
die errMsg("Enter correct IP in CIDR format!");
}
# check client ID
if (defined $client_id && $client_id !~ /^\d+\z/) {
WardenCommon::errMsg("Parameter 'client_id' is not a integer!");
}
# superuser controle
my $UID = $<;
if ($UID != 0) {die errMsg("You must be root for running this script!")}
# defined variables by script
my $client_type = "r";
my $valid = "t";
my $registered = DateTime->now;
my $service = undef;
my $description_tags = undef;
# connect to DB
my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
my $warden_server = WardenCommon::trim(`hostname -f`);
# check if user defined client_id wasn't used
my ($sth, $client_id_db, $registered_db);
if (defined $client_id) {
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Client with ID '$client_id_db' has been already registered at Warden server '$warden_server' in '$registered_db'");
}
}
# check if receiver has been already registered
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE hostname = ? AND client_type = ? AND type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($hostname, $client_type, $type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to re-register receiver (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Receiver has been already registered at Warden server '$warden_server' in '$registered_db' with ID '$client_id_db'");
} else {
# register receiver
$sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
my $ret_val = $sth->execute($client_id, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
if ($ret_val == 1) {
my $last_insert_id = $dbh->last_insert_id(undef, undef, "clients", undef);
sendMsg("info", "New receiver [ID: '$last_insert_id', Hostname: '$hostname', Requestor: '$requestor', Type: '$type', ROE: '$receive_own_events', CIDR: '$ip_net_client'] has been registered");
WardenCommon::succMsg("Registration of receiver (#$last_insert_id) was SUCCESSFUL!!!");
} else {
WardenCommon::errMsg("Registration of receiver $hostname ($type) FAILED!!!");
}
# check parameters definition
switch () {
case {!defined $hostname} { print "ERROR: Parameter 'hostname' is not defined!\n"; exit 1; }
case {!defined $requestor} { print "ERROR: Parameter 'requestor' is not defined!\n"; exit 1; }
case {!defined $type} { print "ERROR: Parameter 'type' is not defined!\n"; exit 1; }
case {!defined $receive_own_events} { print "ERROR: Parameter 'receive_own_events' is not defined!\n"; exit 1; }
case {!defined $ip_net_client} { print "ERROR: Parameter 'ip_net_client' is not defined!\n"; exit 1; }
}
# cleanup section
END {
if (defined $dbh) {
$dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
}
}
my $return = WardenReg::registerReceiver($warden_path, $hostname, $requestor, $type, $receive_own_events, $ip_net_client);
$return ? print "Registration of $hostname was SUCCESSFUL...\n" : print "Registration of $hostname FAILED!\n";
exit 0;
#!/usr/bin/perl
#!/usr/bin/perl -w
#
# registerSender.pl
#
# Copyright (C) 2011-2013 Cesnet z.s.p.o
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.
use strict;
use warnings;
use Getopt::Std;
use Switch;
use DBI;
use DBD::mysql;
use DateTime;
use Sys::Syslog qw(:DEFAULT setlogsock);
Sys::Syslog::setlogsock('unix');
use Carp;
use FindBin qw($RealBin $RealScript);
FindBin::again();
use lib "$RealBin/../lib";
use WardenCommon;
################################################################################
# VARIABLES
################################################################################
our $VERSION = "2.2";
my $etc = "$RealBin/../etc";
# read config file
my $conf_file = "$etc/warden-server.conf";
WardenCommon::loadConf($conf_file);
use File::Basename;
our $VERSION = "2.0";
my $warden_path = '/opt/warden-server';
require $warden_path . '/lib/WardenReg.pm';
my $filename = basename($0);
################################################################################
# FUNCTIONS
################################################################################
#-------------------------------------------------------------------------------
# Functions
#-------------------------------------------------------------------------------
sub usage {
print "Usage: $RealScript -n <hostname> -r <requestor> -s <service> -d <description_tags> -c <ip_net_client> [-i <client_id> -h -V]\n";
print "Usage: $filename [-h -n <hostname> -r <requestor> -s <service> -d <description_tags> -i <ip_net_client>]\n";
exit 1;
}
sub help {
print "$RealScript -n <hostname> -r <requestor> -s <service> -d <description_tags> -c <ip_net_client> [-i <client_id> -h -V]\n";
print "$filename [-h -n <hostname> -r <requestor> -s <service> -d <description_tags> -i <ip_net_client>]\n";
print "-h print this text and exit\n";
print "-n hostname of sender\n";
print "-r e-mail address of client registration requestor\n";
print "-r client registration requestor\n";
print "-s name of service which sent events\n";
print "-d description tags of send events\n";
print "-c CIDR of sender\n";
print "-i user defined client ID (optional)\n";
print "-h print this text and exit\n";
print "-V print version and exit\n";
exit 0;
}
sub version {
print "Current version: $VERSION\n";
print "-i CIDR of sender\n";
exit 0;
}
#-------------------------------------------------------------------------------
# sendMsg - wrapper for more complex WardenCommon::sendMsg function
# errMsg - print error message and die
#-------------------------------------------------------------------------------
sub sendMsg
sub errMsg
{
my $severity = shift;
my $syslog_msg = shift;
my $msg = shift;
$msg = trim($msg);
print $msg . "\n";
exit 1;
} # End of errMsg
WardenCommon::sendMsg($WardenCommon::SYSLOG, $WardenCommon::SYSLOG_VERBOSE, $WardenCommon::SYSLOG_FACILITY, $severity,
$syslog_msg, undef, $RealScript);
}
#-------------------------------------------------------------------------------
# trim - remove whitespace from the start and end of the string
#-------------------------------------------------------------------------------
sub trim
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
} # End of trim
################################################################################
# MAIN
################################################################################
our ($opt_n, $opt_r, $opt_s, $opt_d, $opt_c, $opt_i, $opt_h, $opt_V);
#-------------------------------------------------------------------------------
# MAIN
#-------------------------------------------------------------------------------
our ($opt_n, $opt_r, $opt_s, $opt_d, $opt_i, $opt_h);
if ($#ARGV == -1) {
usage;
}
if ($#ARGV == -1) {usage}
die usage unless getopts("n:r:s:d:c:i:hV");
die usage unless getopts("n:r:s:d:i:h");
my $hostname = $opt_n;
my $requestor = $opt_r;
my $service = $opt_s;
my $description_tags = $opt_d;
my $ip_net_client = $opt_c;
my $client_id = $opt_i;
my $ip_net_client = $opt_i;
my $help = $opt_h;
my $script_version = $opt_V;
# catch help option
# catch help param
if ($help) {
help;
}
# catch version option
if ($script_version) {
version;
}
# check parameters definition
switch () {
case {!defined $hostname} {WardenCommon::errMsg("Parameter 'hostname' is not defined!")}
case {!defined $requestor} {WardenCommon::errMsg("Parameter 'requestor' is not defined!")}
case {!defined $service} {WardenCommon::errMsg("Parameter 'service' is not defined!")}
case {!defined $description_tags} {WardenCommon::errMsg("Parameter 'description_tags' is not defined!")}
case {!defined $ip_net_client} {WardenCommon::errMsg("Parameter 'ip_net_client' is not defined!")}
}
# check validity of IP address (CIDR format)
if ($ip_net_client !~ /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(\d|[1-2]\d|3[0-2]))$/) {
WardenCommon::errMsg("Enter correct IP in CIDR format!");
die errMsg("Enter correct IP in CIDR format!");
}
# check client ID
if (defined $client_id && $client_id !~ /^\d+\z/) {
WardenCommon::errMsg("Parameter 'client_id' is not a integer!");
}
# superuser controle
my $UID = $<;
if ($UID != 0) {die errMsg("You must be root for running this script!")}
# defined variables by method
my $client_type = "s";
my $valid = "t";
my $registered = DateTime->now;
my $type = undef;
my $receive_own_events = undef;
# connect to DB
my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
my $warden_server = WardenCommon::trim(`hostname -f`);
# check if user defined client_id wasn't used
my ($sth, $client_id_db, $registered_db);
if (defined $client_id) {
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to use client_id (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Client with ID '$client_id_db' has been already registered at Warden server '$warden_server' in '$registered_db'");
}
}
# check if sender has been already registered
$sth = $dbh->prepare("SELECT client_id, registered FROM clients WHERE hostname = ? AND service = ? AND client_type = ? AND ip_net_client = ? LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($hostname, $service, $client_type, $ip_net_client) or die "Cannot execute statement: " . $sth->errstr;
($client_id_db, $registered_db) = $sth->fetchrow();
if (defined $client_id_db) {
sendMsg("err", "Attempt to re-register sender (#$client_id_db) registered at Warden server '$warden_server' in '$registered_db'");
WardenCommon::errMsg("Sender has been already registered at Warden server '$warden_server' in '$registered_db' with ID '$client_id_db'");
} else {
# register sender
$sth = $dbh->prepare("INSERT INTO clients VALUES (?,?,?,?,?,?,?,?,?,?,?);") or die "Cannot prepare statement: " . $dbh->errstr;
my $ret_val = $sth->execute($client_id, $hostname, $registered, $requestor, $service, $client_type, $type, $receive_own_events, $description_tags, $ip_net_client, $valid) or die "Cannot execute statement: " . $sth->errstr;
if ($ret_val == 1) {
my $last_insert_id = $dbh->last_insert_id(undef, undef, "clients", undef);
sendMsg("info", "New sender [ID: '$last_insert_id', Hostname: '$hostname', Requestor: '$requestor', Service: '$service', Description_tags: '$description_tags', CIDR: '$ip_net_client'] has been registered");
WardenCommon::succMsg("Registration of sender (#$last_insert_id) was SUCCESSFUL!!!");
} else {
WardenCommon::errMsg("Registration of sender $hostname ($service) FAILED!!!");
}
# check parameters definition
switch () {
case {!defined $hostname} { print "ERROR: Parameter 'hostname' is not defined!\n"; exit 1; }
case {!defined $requestor} { print "ERROR: Parameter 'requestor' is not defined!\n"; exit 1; }
case {!defined $service} { print "ERROR: Parameter 'service' is not defined!\n"; exit 1; }
case {!defined $description_tags} { print "ERROR: Parameter 'description_tags' is not defined!\n"; exit 1; }
case {!defined $ip_net_client} { print "ERROR: Parameter 'ip_net_client' is not defined!\n"; exit 1; }
}
# cleanup section
END {
if (defined $dbh) {
$dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
}
}
# register sender at warden server
my $return = WardenReg::registerSender($warden_path, $hostname, $requestor, $service, $description_tags, $ip_net_client);
$return ? print "Registration of $hostname was SUCCESSFUL...\n" : print "Registration of $hostname FAILED!\n";
exit 0;
#!/usr/bin/perl
#!/usr/bin/perl -w
#
# unregisterClient.pl
#
# Copyright (C) 2011-2013 Cesnet z.s.p.o
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.
use strict;
use warnings;
use Getopt::Std;
use Switch;
use DBI;
use DBD::mysql;
use DateTime;
use Sys::Syslog qw(:DEFAULT setlogsock);
Sys::Syslog::setlogsock('unix');
use Carp;
use FindBin qw($RealBin $RealScript);
FindBin::again();
use lib "$RealBin/../lib";
use WardenCommon;
################################################################################
# VARIABLES
################################################################################
our $VERSION = "2.2";
my $etc = "$RealBin/../etc";
use File::Basename;
# read config file
my $conf_file = "$etc/warden-server.conf";
WardenCommon::loadConf($conf_file);
our $VERSION = "2.0";
my $warden_path = '/opt/warden-server';
require $warden_path . '/lib/WardenReg.pm';
my $filename = basename($0);
################################################################################
# FUNCTIONS
################################################################################
#-------------------------------------------------------------------------------
# Functions
#-------------------------------------------------------------------------------
sub usage {
print "Usage: $RealScript -i <client_id> [-h -V]\n";
print "Usage: $filename [-h -i <client_id>]\n";
exit 1;
}
sub help {
print "$RealScript -i <client_id> [-h -V]\n";
print "-i client_id for unregistration\n";
print "$filename [-h -i <client_id>]\n";
print "-h print this text and exit\n";
print "-V print version and exit\n";
exit 0;
}
sub version {
print "Current version: $VERSION\n";
print "-i client_id for unregistration\n";
exit 0;
}
#-------------------------------------------------------------------------------
# sendMsg - wrapper for more complex WardenCommon::sendMsg function
# errMsg - print error message and die
#-------------------------------------------------------------------------------
sub sendMsg
sub errMsg
{
my $severity = shift;
my $syslog_msg = shift;
my $msg = shift;
$msg = trim($msg);
print $msg . "\n";
exit 1;
} # End of errMsg
WardenCommon::sendMsg($WardenCommon::SYSLOG, $WardenCommon::SYSLOG_VERBOSE, $WardenCommon::SYSLOG_FACILITY, $severity,
$syslog_msg, undef, $RealScript);
}
#-------------------------------------------------------------------------------
# trim - remove whitespace from the start and end of the string
#-------------------------------------------------------------------------------
sub trim
{
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
} # End of trim
################################################################################
#-------------------------------------------------------------------------------
# MAIN
################################################################################
our ($opt_i, $opt_h, $opt_V);
#-------------------------------------------------------------------------------
our ($opt_h, $opt_i);
if ($#ARGV == -1) {
usage;
}
if ($#ARGV == -1) {usage}
die usage unless getopts("i:hV");
my $client_id = $opt_i;
my $help = $opt_h;
my $script_version = $opt_V;
die usage unless getopts("i:h");
my $client_id = $opt_i;
my $help = $opt_h;
# catch help option
# catch help param
if ($help) {
help;
help;
}
# catch version option
if ($script_version) {
version;
}
# superuser controle
my $UID = $<;
if ($UID != 0) {die errMsg("You must be root for running this script!")}
# check parameters definition
if (!defined $client_id) {
WardenCommon::errMsg("Parameter 'client_id' is not defined!");
}
# connect to DB
my $dbh = WardenCommon::connectDB($WardenCommon::DB_NAME, $WardenCommon::DB_HOST, $WardenCommon::DB_USER, $WardenCommon::DB_PASS);
my $warden_server = WardenCommon::trim(`hostname -f`);
# check if client has been already registered
my $sth = $dbh->prepare("SELECT client_id, hostname, service, client_type, type FROM clients WHERE client_id = ? AND valid = 't' LIMIT 1;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
my ($id, $hostname, $service, $client_type, $type) = $sth->fetchrow();
# delete registered client
if (!defined $id) {
sendMsg("err", "Attempt to delete unregister client [Client_id: '$client_id'] from Warden server '$warden_server'");
WardenCommon::errMsg("Client (#$client_id) is not registered at Warden server '$warden_server'");
} else {
if ($client_type eq 's') {
$sth = $dbh->prepare("UPDATE clients SET valid = 'f' WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
my $ret_val = $sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
if ($ret_val == 1) {
$sth = $dbh->prepare("UPDATE events SET valid = 'o' WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
$sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
# log message until after invalidate all events
sendMsg("info", "Sender [Client_id: '$client_id', Hostname: '$hostname', Service: '$service'] has been deleted and its data were invalidated from Warden server '$warden_server'");
WardenCommon::succMsg("Unregistration of sender (#$client_id) was SUCCESSFUL!!!");
} else {
WardenCommon::errMsg("Unregistration of sender (#$client_id) FAILED!!!");
}
} else {
$sth = $dbh->prepare("UPDATE clients SET valid = 'f' WHERE client_id = ?;") or die "Cannot prepare statement: " . $dbh->errstr;
my $ret_val = $sth->execute($client_id) or die "Cannot execute statement: " . $sth->errstr;
if ($ret_val == 1) {
sendMsg("info", "Receiver [Client_id: '$client_id', Hostname: '$hostname', Type: '$type'] has been deleted from Warden server '$warden_server'");
WardenCommon::succMsg("Unregistration of receiver (#$client_id) was SUCCESSFUL!!!");
} else {
WardenCommon::errMsg("Unregistration of receiver (#$client_id) FAILED!!!");
}
}
print "ERROR: Parameter 'client_id' is not defined!\n";
exit 1;
}
# cleanup section
END {
if (defined $dbh) {
$dbh->disconnect or warn "Disconnection from database '$WardenCommon::DB_NAME' failed: $dbh->errstr\n";
}
}
my $return = WardenReg::unregisterClient($warden_path, $client_id);
$return ? print "Unregistration of client (#$client_id) was SUCCESSFUL...\n" : print "Unregistration of client (# $client_id) FAILED!\n";
exit 0;
#!/usr/bin/perl
#
# WardenWatchdog.pl
#
# Copyright (C) 2011-2013 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.
use WardenConf;
use strict;
use warnings;
use DBI;
use DBD::mysql;
use DateTime;
#use Email::Simple;
use Sys::Hostname;
use Text::Wrap;
use Data::Dumper;
sub sendmailWrapper{
my $message = shift;
if(open(my $sendmail, '|/usr/sbin/sendmail -oi -t')){
print $sendmail $message;
close $sendmail;
return 1;
} else {
return (0, "Sending email failed: $!");
}
}
# Array of hashes
#{query => ; text => ; contact => }
# Get clients admins
sub sendReport{
my $input_data = shift;
my $contact = $$input_data{'contact'};
my $domain = $$input_data{'domain'};
my $text = $$input_data{'text'};
my $from_hostname;
my $message;
if(!($contact)){
return (0, "Empty 'To' email header!\n");
}
$domain =~ s/\./\./;
eval{
$from_hostname = hostname();
if(!($from_hostname =~ m/$domain/gi)){
$from_hostname .= $domain;
}
};
if($@){
return (0, "Can't retrive hostname for 'From' header!\n");
}
eval{
#$message = Email::Simple->create(
#header => [
#To => $contact,
#From => 'warden_watchdog@'.$from_hostname,
#Subject => 'Kotrola stavu udalosti na Wardenu'],
#body => fill('','',$text));
};
if($@){
return (0, "Can't create email message\n");
}
print "== $contact ==\n$text\n";
my ($rc, $err) = 1;#sendmailWrapper($message->as_string);
if(!$rc){
return (0, $err);
}
return 1;
}
sub connect_to_DB {
my $dbPlatform = 'mysql';
my $dbName = 'warden';
my $dbHostname = 'localhost';
my $dbUser = 'root';
my $dbPasswd = 'w4rd3n&r00t';
my $dbhRef = shift;
my $dbh;
if($dbh = DBI->connect( "dbi:$dbPlatform:database=$dbName;host=$dbHostname", $dbUser, $dbPasswd, {RaiseError => 1, mysql_auto_reconnect => 1})){
$$dbhRef = $dbh;
return 1;
}
else{
return (0,"Cannot connect to database! ".DBI->errstr);
}
}
sub sendQuery{
my $configRef = shift;
my $eventsRef = shift;
my @config = @{$configRef};
my %bad_events;
my ($rc,$err);
my $dbh;
my $i = 0;
# connect to DB
($rc,$err) = connect_to_DB(\$dbh);
if (!$rc){
return (0, $err);
}
while ($i < scalar(@config)) {
my $contact;
# run DB query -> requestor, client name
my $sth;
if (defined($config[$i]{query})){
$sth = $dbh->prepare($config[$i]{query});
}
else{
return (0, "No query availble\n");
}
if (!($sth->execute)){
return (0, "Couldn't get data from my database: $sth->errstr\n");
};
my @result;
while(@result = $sth->fetchrow()){
if (defined($config[$i]{contact})){
$contact = $config[$i]{contact};
}
else{
$contact = "from_db\@$result[0]";
}
$bad_events{$contact} .= $config[$i]{text} . "DB INFO: ". join(', ',@result) ."\n";
}
$sth->finish;
$i++;
}
# disconnect to DB
$dbh->disconnect;
%$eventsRef = %bad_events;
return 1;
}
sub run{
my $domain = shift;
my $period = shift;
my $date;
eval{
my $dt = DateTime->now();
$dt = DateTime->now()->subtract(days => $period);
$date = $dt->date();
};
if($@){
print "Warden watchdog - can't work with date\n";
#syslog("err|Warden watchdog - can't work with date\n");
}
my @configuration = (
{query => "SELECT hostname, service, MAX(received) FROM events WHERE valid = 't' GROUP BY hostname, service ORDER BY MAX(received) ASC;", text => "Hey, this is test of warning for admin!\n"},
{query => "SELECT requestor FROM clients WHERE service IN (SELECT service FROM events WHERE detected > '$date' AND type NOT IN ('portscan', 'bruteforce', 'probe', 'spam', 'phishing', 'botnet_c_c', 'dos', 'malware', 'copyright', 'webattack', 'test', 'other') AND valid = 't' GROUP BY service) GROUP BY requestor;", text => "Hey, this is test of warning!\n", contact => 'warden-administrator@cesnet.cz'});
$Text::Wrap::columns = 80;
my %bad_events;
my $i = 0;
while ($i < scalar(@configuration)) {
my ($rc,$err) = sendQuery(\@configuration,\%bad_events);
if (!$rc){
print "Warden watchdog - $err\n";
#syslog("err|Warden watchdog - $err\n");
}
$i++;
}
while (my ($contact, $text) = each(%bad_events)){
my %input = (contact => $contact, domain => $domain, text => $text);
my ($rc,$err) = sendReport(\%input);
if (!$rc){
# TODO syslog
print $err;
#syslog("err|Warden client - networkReporter $err\n");
}
print "\n\n";
}
}
run('warden-dev.cesnet.cz',7);
1;
<<<<<<< HEAD
2013-02-05 v2.1 stable version
=======
2013-??-?? v2.2 stable version
------------------------------
2012-11-16 v2.1 stable version
>>>>>>> 981838c056f36b6f42b2de30eb017bd7ab441a1e
------------------------------
- fixed bug in default value of database timestamp type (#576, #577)
- fixed bug in getStatus function (#566)
......
......@@ -52,7 +52,7 @@ D. Post-installation steps
- include parameters from the Warden server configuration file (<warden-server_path>/etc/warden-apache.conf)
# vim /etc/apache2/sites-enabled/default(-ssl)
# vim /etc/apache2/sites-enables/default(-ssl)
<VirtualHost *:443>
...
......@@ -93,7 +93,7 @@ D. Post-installation steps
4) Warden server configuration
- configure warden-server.conf and warden-apache.conf placed in <warden-server_path>/etc directory
- configure warden-server.conf, warden-client.conf and warden-apache.conf placed in <warden-server_path>/etc directory
5) Restart of Apache server
......
BSD License
Copyright © 2011-203 Cesnet z.s.p.o
Copyright © 2011-2012 Cesnet z.s.p.o
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
......
+----------------------------+
| README - Warden Server 2.2 |
| README - Warden Server 2.1 |
+----------------------------+
Content
......@@ -25,11 +25,7 @@ A. Overall Information
2. Version
<<<<<<< HEAD
2.1 (2013-02-05)
=======
2.2 (2013-??-??)
>>>>>>> 981838c056f36b6f42b2de30eb017bd7ab441a1e
3. Package structure
......@@ -53,10 +49,13 @@ A. Overall Information
etc/
package_version
warden-apache.conf
warden-client.conf
warden-server.conf
lib/
WardenConf.pm
Warden.pm
WardenCommon.pm
WardenReg.pm
WardenStatus.pm
Warden/
ApacheDispatch.pm
uninstall.sh
......@@ -95,11 +94,11 @@ C. Installation
1. Check SHA1 checksum of the Warden server package archive.
$ sha1sum -c warden-server-2.2.tar.gz.sig
$ sha1sum -c warden-server-2.1.tar.gz.sig
2. Untar it.
$ tar xzvf warden-server-2.2.tar.gz
$ tar xzvf warden-server-2.1.tar.gz
3. Run install.sh.
......@@ -124,10 +123,16 @@ C. Installation
4. Configuration files
You are advised to check configuration file warden-apache.conf and
warden-server.conf in warden-server/etc/ directory after installation.
For more information about post-installation steps see INSTALL file in
'doc' directory.
You are advised to check configuration file warden-apache.conf,
warden-server.conf and warden-client.conf in warden-server/etc/
directory after installation. For more information about post-installation
steps see INSTALL file in 'doc' directory.
Although this is the Warden server package it also contains several
functions (for administration and maintenance) that are strictly
client-side in a way the Warden system handles functions. Therefore you have
to check both server and client config files to make sure your installation
of the Warden server was successful and complete.
SOAP protocol is used for handling communication between server and clients.
Therefore, correct URI of Warden server must be set.
......@@ -137,8 +142,22 @@ C. Installation
Configuration files contain following parameters:
a) warden-client.conf:
a) warden-server.conf:
URI - URI Warden server
e.g. 'https://warden.server.com:443/Warden'
SSL_KEY_FILE - path to a host key file,
e.g. '/etc/ssl/private/warden.server.com.key'
SSL_CERT_FILE - path to a host certificate file,
e.g. '/etc/ssl/certs/warden.server.com.pem'
SSL_CA_FILE - path to a CA file
e.g. '/etc/ssl/certs/tcs-ca-bundle.pem'
b) warden-server.conf:
The Warden server configuration file contains:
......@@ -178,7 +197,7 @@ C. Installation
);
b) warden-apache.conf
c) warden-apache.conf
The Apache2 configuration file for Warden server:
......@@ -276,7 +295,7 @@ G. Registration of Clients
The Warden server administrator is responsible for registering new clients or
removing those already registered. Both registration or unregistration scripts
are provided in the Warden server package. Those scripts should be run from
the same machine the Warden server is installed and running on.
localhost (the same machine the Warden server is installed and running on).
Members of Warden community who would like to have their client registered must
contact the Warden server administrator with the requirement. This is usually
......@@ -295,8 +314,7 @@ G. Registration of Clients
client registration,
service - name of the service of a new registered client,
description_tags - tags describing the nature of the service,
ip_net_client - CIDR the client is only allowed to communicate from,
client_id - user defined client ID (optionaly).
ip_net_client - CIDR the client is only allowed to communicate from.
One can run registerSender.pl with -h argument to see a help.
......@@ -315,15 +333,14 @@ G. Registration of Clients
for receiving of all types of events,
receive_own_events - boolean value describing if events originating from
the same CIDR will be sent to the client,
ip_net_client - CIDR the client is only allowed to communicate from,
client_id - user defined client ID (optionaly)
ip_net_client - CIDR the client is only allowed to communicate from.
One can run registerReceiver.pl with -h argument to see a help.
3. Unregister Client
In the Warden system, already registered clients can be unregistered
via unregisterClient.pl.
In the Warden system, already registered clients can be removed
(unregistered) via unregisterClient.pl.
Following attribute must be provided in order to unregister existing client
successfully:
......@@ -332,9 +349,9 @@ G. Registration of Clients
One can run unregisterClient.pl with -h argument to see a help.
The process of unregistration set client (specified by client_id) like 'invalid'
in DB table clients and all messages stored by this client (considering "sender"
client) are not deleted, they are merely set 'invalid' in DB table events too.
The process of unregistration deletes this client from clients table in DB.
But all messages stored by this client (considering "sender" client) are not
deleted, they are merely set 'invalid' in DB table events.
--------------------------------------------------------------------------------
H. Status Info
......@@ -359,4 +376,4 @@ H. Status Info
--------------------------------------------------------------------------------
Copyright (C) 2011-2013 Cesnet z.s.p.o
Copyright (C) 2011-2012 Cesnet z.s.p.o
......@@ -41,7 +41,6 @@ CREATE TABLE `clients` (
`receive_own_events` varchar(1) default NULL,
`description_tags` varchar(256) default NULL,
`ip_net_client` varchar(256) default NULL,
`valid` varchar(1) DEFAULT NULL,
PRIMARY KEY (`client_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;
......@@ -55,6 +54,8 @@ SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `events` (
`id` int(11) NOT NULL auto_increment,
`hostname` varchar(256) default NULL,
`service` varchar(64) default NULL,
`detected` timestamp NOT NULL default '0000-00-00 00:00:00',
`received` timestamp NOT NULL default '0000-00-00 00:00:00',
`type` varchar(64) default NULL,
......@@ -67,7 +68,6 @@ CREATE TABLE `events` (
`priority` int(1) unsigned default NULL,
`timeout` int(2) unsigned default NULL,
`valid` varchar(1) default NULL,
`client_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
SET character_set_client = @saved_cs_client;
......
ALTER TABLE `clients` CHANGE `registered` `registered` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00';
ALTER TABLE `events`
CHANGE `detected` `detected` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
CHANGE `target_port` `target_port` INT( 2 ) UNSIGNED DEFAULT NULL ,
CHANGE `attack_scale` `attack_scale` INT( 4 ) UNSIGNED DEFAULT NULL ,
CHANGE `priority` `priority` INT( 1 ) UNSIGNED DEFAULT NULL ,
CHANGE `timeout` `timeout` INT( 2 ) UNSIGNED DEFAULT NULL;
ALTER TABLE `clients`
ADD `valid` varchar(1) DEFAULT NULL;
ALTER TABLE `events`
DROP COLUMN `hostname`,
DROP COLUMN `service`,
ADD `client_id` int(11) DEFAULT NULL;
warden-server-2.2
warden-server-2.1
#
#
# warden-apache.conf - configuration file for the Apache server
#
......@@ -11,15 +10,15 @@ SSLOptions +StdEnvVars +ExportCertData
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/ssl/certs/warden-c.cesnet.cz.pem
SSLCertificateKeyFile /etc/ssl/private/warden-c.cesnet.cz.key
SSLCertificateFile /etc/ssl/certs/warden-dev.cesnet.cz.pem
SSLCertificateKeyFile /etc/ssl/private/warden-dev.cesnet.cz.key
SSLCACertificateFile /etc/ssl/certs/tcs-ca-bundle.pem
PerlOptions +Parent
PerlSwitches -I /opt/warden-server/lib
<Location /Warden>
SetHandler perl-script
PerlHandler Warden::ApacheDispatch
SSLOptions +StdEnvVars
SetHandler perl-script
PerlHandler Warden::ApacheDispatch
SSLOptions +StdEnvVars
</Location>
#
# warden-client.conf - configuration file for registration and status clients
#
#-------------------------------------------------------------------------------
# URI - URI address of Warden server
#-------------------------------------------------------------------------------
$URI = "https://warden-dev.cesnet.cz:443/Warden";
#-------------------------------------------------------------------------------
# SSL_KEY_FILE - path to server SSL certificate key file
#-------------------------------------------------------------------------------
$SSL_KEY_FILE = "/etc/ssl/private/warden-dev.cesnet.cz.key";
#-------------------------------------------------------------------------------
# SSL_CERT_FILE - path to server SSL certificate file
#-------------------------------------------------------------------------------
$SSL_CERT_FILE = "/etc/ssl/certs/warden-dev.cesnet.cz.pem";
#-------------------------------------------------------------------------------
# SSL_CA_FILE - path to CA certificate file
#-------------------------------------------------------------------------------
$SSL_CA_FILE = "/etc/ssl/certs/tcs-ca-bundle.pem";
......@@ -5,12 +5,12 @@
#-------------------------------------------------------------------------------
# BASEDIR - base directory of Warden server
#-------------------------------------------------------------------------------
$BASEDIR = "/opt/warden-server";
$BASEDIR = '/opt/warden-server';
#-------------------------------------------------------------------------------
# SYSLOG - enable/disable syslog logging
#-------------------------------------------------------------------------------
$SYSLOG = 1;
$SYSLOG = 1;
#-------------------------------------------------------------------------------
# SYSLOG_VERBOSE - enable/disable logging in verbose mode (stack info added)
......@@ -20,38 +20,38 @@ $SYSLOG_VERBOSE = 1;
#-------------------------------------------------------------------------------
# SYSLOG_FACILITY - syslog facility
#-------------------------------------------------------------------------------
$SYSLOG_FACILITY = "local7";
$SYSLOG_FACILITY = 'local7';
#-------------------------------------------------------------------------------
# DB_NAME - MySQL database name of Warden server
#-------------------------------------------------------------------------------
$DB_NAME = "warden";
$DB_NAME = 'warden';
#-------------------------------------------------------------------------------
# DB_USER - MySQL database user of Warden server
#-------------------------------------------------------------------------------
$DB_USER = "root";
$DB_USER = 'root';
#-------------------------------------------------------------------------------
# DB_PASS - MySQL database password of Warden server
#-------------------------------------------------------------------------------
$DB_PASS = "";
$DB_PASS = '';
#-------------------------------------------------------------------------------
# DB_HOST - MySQL database host
#-------------------------------------------------------------------------------
$DB_HOST = "localhost";
$DB_HOST = 'localhost';
#-------------------------------------------------------------------------------
# MAX_EVENTS_LIMIT - server limit of maximum number of events that can be
# delivered to one client in one batch
#-------------------------------------------------------------------------------
$MAX_EVENTS_LIMIT = 1000000;
$MAX_EVENTS_LIMIT = '1000000';
#-------------------------------------------------------------------------------
# VALID_STRINGS - validation hash containing allowed event attributes
#-------------------------------------------------------------------------------
%VALID_STRINGS = (
"type" => ["portscan", "bruteforce", "probe", "spam", "phishing", "botnet_c_c", "dos", "malware", "copyright", "webattack", "test", "other", "_any_"],
"source_type" => ["IP", "URL", "Reply-To:"]
'type' => ['portscan', 'bruteforce', 'probe', 'spam', 'phishing', 'botnet_c_c', 'dos', 'malware', 'copyright', 'webattack', 'test', 'other'],
'source_type' => ['IP', 'URL', 'Reply-To:']
);
This diff is collapsed.
......@@ -2,7 +2,7 @@
#
# ApacheDispatch.pm
#
# Copyright (C) 2011-2013 Cesnet z.s.p.o
# Copyright (C) 2011-2012 Cesnet z.s.p.o
#
# Use of this source is governed by a BSD-style license, see LICENSE file.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment