From c134c8de3459e9b7d3f22c6de75a488fab49c1da Mon Sep 17 00:00:00 2001 From: Arne Teuke Date: Fri, 28 Jul 2017 13:49:05 +0100 Subject: [PATCH] outsourcing NRPE to cd_nrpe --- README.md | 10 +- manifests/client/target.pp | 201 +++++++++++------------ manifests/main/install.pp | 13 +- manifests/params.pp | 9 +- templates/nrpe/nrpe.cfg | 318 +++++++++++++++++++++++++++++++++++++ 5 files changed, 435 insertions(+), 116 deletions(-) create mode 100644 templates/nrpe/nrpe.cfg diff --git a/README.md b/README.md index 06320a7..c3a5914 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ |Repo Name| version | Build Status| |---|---|---|---| -|`cd_nagios`| 0.0.1.0 | [![Build Status](https://jenkins.confdroid.com/buildStatus/icon?job=cd_nagios)](https://jenkins.confdroid.com/job/cd_nagios/)| +|`cd_nagios`| 0.0.1.1 | [![Build Status](https://jenkins.confdroid.com/buildStatus/icon?job=cd_nagios)](https://jenkins.confdroid.com/job/cd_nagios/)| ### Synopsis Nagios is a powerful open source software solution for monitoring your IT environments. @@ -25,7 +25,8 @@ Nagios is a powerful open source software solution for monitoring your IT enviro * [SELINUX](#selinux) * [Certbot](#certbot) * [Httpd vHost Files](#httpd-vhost-files) -* [Manage additional resources] +* [Client Connections](#client-connections) +* [Manage additional resources](#manage-additional-resources) * [Known Problems](#known-problems) * [Support](#support) * [Tests](#tests) @@ -141,6 +142,11 @@ If you prefer to use https but use self-signed certs or your own CA, simply set ### httpd vHost files by Default, Nagios creates its own nagios.conf file, which is not a vhost file and relies on the main ssd.conf. However, as Nagios might be running on a regular web server with various other web instances (not recommended through for performance reasons), we will not want to manage ssl.conf directly, hence the module creates a vhost for the ssl host. +### Client Connections +In order to monitor clients, NAGIOS must be able to connect to them. There are multiple ways of doing so, the most common ones being NRPE and SSH. +So far this module works through the usage of NRPE, which by default is enabled. Class cd_nagios::client::nrpe configures nrpe.cfg and opens the required firewall port on clients (optional,default). + + ### Manage additional resources ### Known Problems diff --git a/manifests/client/target.pp b/manifests/client/target.pp index 96dee87..904c471 100644 --- a/manifests/client/target.pp +++ b/manifests/client/target.pp @@ -26,114 +26,117 @@ class cd_nagios::client::target ( ) inherits cd_nagios::params { if $::fqdn != $ng_nagios_server { + if $ng_include_nrpe == true { require cd_nagios::main::install + require cd_nrpe - @@nagios_host { $::fqdn: - ensure => $ng_ping_ensure, - alias => $::hostname, - address => $::fqdn, - use => 'linux-server', - target => $ng_target_host, - hostgroups => 'linux-servers', - contacts => 'ops', - max_check_attempts => $ng_max_check_attempts, - notification_period => '24x7', - owner => $ng_user, - group => $ng_user, - mode => '0640', - check_command => "check_ping!${ng_ping_warn}!${ng_ping_crit}", - notify => Service[$ng_user], - } + @@nagios_host { $::fqdn: + ensure => $ng_ping_ensure, + alias => $::hostname, + address => $::fqdn, + use => 'linux-server', + target => $ng_target_host, + hostgroups => 'linux-servers', + contacts => 'ops', + max_check_attempts => $ng_max_check_attempts, + notification_period => '24x7', + owner => $ng_user, + group => $ng_user, + mode => '0640', + check_command => "check_ping!${ng_ping_warn}!${ng_ping_crit}", + notify => Service[$ng_user], + } - @@nagios_service { "root_partition_${::hostname}": - ensure => $ng_disk_ensure, - check_command => "check_nrpe!check_disk!${ng_disk_warn}!${ng_disk_crit}!/", - use => 'generic-service', - host_name => $::fqdn, - contacts => 'ops', - notification_period => '24x7', - service_description => "${::hostname}_root_partition", - servicegroups => 'linux-services', - target => $ng_target_service, - owner => $ng_user, - group => $ng_user, - mode => '0640', - } + @@nagios_service { "root_partition_${::hostname}": + ensure => $ng_disk_ensure, + check_command => "check_nrpe!check_disk!${ng_disk_warn}!${ng_disk_crit}!/", + use => 'generic-service', + host_name => $::fqdn, + contacts => 'ops', + notification_period => '24x7', + service_description => "${::hostname}_root_partition", + servicegroups => 'linux-services', + target => $ng_target_service, + owner => $ng_user, + group => $ng_user, + mode => '0640', + } - @@nagios_service { "Swap_Usage_${::hostname}": - ensure => $ng_swap_ensure, - check_command => "check_nrpe!check_swap!${ng_swap_warn}!${ng_swap_crit}", - use => 'generic-service', - host_name => $::fqdn, - contacts => 'ops', - notification_period => '24x7', - service_description => "${::hostname}_swap_usage", - servicegroups => 'linux-services', - target => $ng_target_service, - owner => $ng_user, - group => $ng_user, - mode => '0640', - } + @@nagios_service { "Swap_Usage_${::hostname}": + ensure => $ng_swap_ensure, + check_command => "check_nrpe!check_swap!${ng_swap_warn}!${ng_swap_crit}", + use => 'generic-service', + host_name => $::fqdn, + contacts => 'ops', + notification_period => '24x7', + service_description => "${::hostname}_swap_usage", + servicegroups => 'linux-services', + target => $ng_target_service, + owner => $ng_user, + group => $ng_user, + mode => '0640', + } - @@nagios_service { "Local_Users_${::hostname}": - ensure => $ng_users_ensure, - check_command => "check_nrpe!check_users!${ng_users_warn}!${ng_users_crit}", - use => 'generic-service', - host_name => $::fqdn, - contacts => 'ops', - notification_period => '24x7', - service_description => "${::hostname}_local_users", - servicegroups => 'linux-services', - target => $ng_target_service, - owner => $ng_user, - group => $ng_user, - mode => '0640', - } + @@nagios_service { "Local_Users_${::hostname}": + ensure => $ng_users_ensure, + check_command => "check_nrpe!check_users!${ng_users_warn}!${ng_users_crit}", + use => 'generic-service', + host_name => $::fqdn, + contacts => 'ops', + notification_period => '24x7', + service_description => "${::hostname}_local_users", + servicegroups => 'linux-services', + target => $ng_target_service, + owner => $ng_user, + group => $ng_user, + mode => '0640', + } - @@nagios_service { "Total Processes_${::hostname}": - ensure => $ng_procs_tot_ens, - check_command => "check_nrpe!check_procs!${ng_procs_tot_warn}!${ng_procs_tot_crit}!${ng_procs_tot_param}", - use => 'generic-service', - host_name => $::fqdn, - contacts => 'ops', - notification_period => '24x7', - service_description => "${::hostname}_total_processes", - servicegroups => 'linux-services', - target => $ng_target_service, - owner => $ng_user, - group => $ng_user, - mode => '0640', - } + @@nagios_service { "Total Processes_${::hostname}": + ensure => $ng_procs_tot_ens, + check_command => "check_nrpe!check_procs!${ng_procs_tot_warn}!${ng_procs_tot_crit}!${ng_procs_tot_param}", + use => 'generic-service', + host_name => $::fqdn, + contacts => 'ops', + notification_period => '24x7', + service_description => "${::hostname}_total_processes", + servicegroups => 'linux-services', + target => $ng_target_service, + owner => $ng_user, + group => $ng_user, + mode => '0640', + } - @@nagios_service { "Zombie Processes_${::hostname}": - ensure => $ng_procs_z_ensure, - check_command => "check_nrpe!check_procs!${ng_procs_z_warn}!${ng_procs_z_crit}!${ng_procs_z_param}", - use => 'generic-service', - host_name => $::fqdn, - contacts => 'ops', - notification_period => '24x7', - service_description => "${::hostname}_zombie_processes", - servicegroups => 'linux-services', - target => $ng_target_service, - owner => $ng_user, - group => $ng_user, - mode => '0640', - } + @@nagios_service { "Zombie Processes_${::hostname}": + ensure => $ng_procs_z_ensure, + check_command => "check_nrpe!check_procs!${ng_procs_z_warn}!${ng_procs_z_crit}!${ng_procs_z_param}", + use => 'generic-service', + host_name => $::fqdn, + contacts => 'ops', + notification_period => '24x7', + service_description => "${::hostname}_zombie_processes", + servicegroups => 'linux-services', + target => $ng_target_service, + owner => $ng_user, + group => $ng_user, + mode => '0640', + } - @@nagios_service { "Current_Load_${::hostname}": - ensure => $ng_load_ensure, - check_command => "check_nrpe!check_load!${ng_load_warn}!${ng_load_crit}", - use => 'generic-service', - host_name => $::fqdn, - contacts => 'ops', - notification_period => '24x7', - service_description => "${::hostname}_current_load", - servicegroups => 'linux-services', - target => $ng_target_service, - owner => $ng_user, - group => $ng_user, - mode => '0640', + @@nagios_service { "Current_Load_${::hostname}": + ensure => $ng_load_ensure, + check_command => "check_nrpe!check_load!${ng_load_warn}!${ng_load_crit}", + use => 'generic-service', + host_name => $::fqdn, + contacts => 'ops', + notification_period => '24x7', + service_description => "${::hostname}_current_load", + servicegroups => 'linux-services', + target => $ng_target_service, + owner => $ng_user, + group => $ng_user, + mode => '0640', + } } } } diff --git a/manifests/main/install.pp b/manifests/main/install.pp index 5239862..390ff9f 100644 --- a/manifests/main/install.pp +++ b/manifests/main/install.pp @@ -41,15 +41,6 @@ class cd_nagios::main::install ( package {$reqpackages_client: ensure => $pkg_ensure, } - - # install NRPE if enabled - - if $ng_include_nrpe == true { - - package {$reqpackages_nrpe: - ensure => $pkg_ensure, - } - } } # if we are not the nagios server, install client packages @@ -62,9 +53,7 @@ class cd_nagios::main::install ( # if we want to use NRPE, install it if $ng_include_nrpe == true { - package {$reqpackages_nrpe: - ensure => $pkg_ensure, - } + require cd_nrpe } } } diff --git a/manifests/params.pp b/manifests/params.pp index deea859..c97a72f 100644 --- a/manifests/params.pp +++ b/manifests/params.pp @@ -642,6 +642,8 @@ # backoff_change - # of jobs to remove from jobs_limit when backing off # rampup_limit - Minimum rampup_change # rampup_change - # of jobs to add to jobs_limit when ramping up +# @param [string] ng_nrpe_port the port for NRPE. used by firewall and in +# configuration file. ############################################################################### class cd_nagios::params ( @@ -661,6 +663,7 @@ $ng_http_https_fw = true, $ng_fw_order = '50', $ng_http_port = '80', $ng_https_port = '443', +$ng_nrpe_port = '5666', # check command parameters ## ping @@ -907,9 +910,6 @@ $ng_loadctl_options = 'jobs_max=100;backoff_limit=10;rampup_change=5', 'nagios-plugins-nrpe', 'nagios-common'] } - $reqpackages_nrpe = $::operatingsystem ? { - /(?i-mx:centos|fedora|redhat)/ => ['nrpe'] - } # service $ng_service = 'nagios' @@ -992,6 +992,9 @@ $ng_cntctgrps_rule_erb = 'cd_nagios/nagios/contactgroups_cfg_rule.erb' $ng_target_command = "${ng_conf_d_dir}/nagios_commands_base.cfg" $ng_nagios_service_cmd = 'check_nagios!/var/log/nagios/status.dat!5!/usr/sbin/nagios' +# nrpe +$ng_nrpe_file = "${ng_main_dir}/nrpe.cfg" + # includes must be last include cd_nagios::main::config diff --git a/templates/nrpe/nrpe.cfg b/templates/nrpe/nrpe.cfg new file mode 100644 index 0000000..080d53f --- /dev/null +++ b/templates/nrpe/nrpe.cfg @@ -0,0 +1,318 @@ +############################################################################# +# Sample NRPE Config File +# Written by: Ethan Galstad (nagios@nagios.org) +# +# Last Modified: 2016-05-10 +# +# NOTES: +# This is a sample configuration file for the NRPE daemon. It needs to be +# located on the remote host that is running the NRPE daemon, not the host +# from which the check_nrpe client is being executed. +############################################################################# + + +# LOG FACILITY +# The syslog facility that should be used for logging purposes. + +log_facility=daemon + + + +# LOG FILE +# If a log file is specified in this option, nrpe will write to +# that file instead of using syslog. + +#log_file=/var/run/nrpe.log + + + +# DEBUGGING OPTION +# This option determines whether or not debugging messages are logged to the +# syslog facility. +# Values: 0=debugging off, 1=debugging on + +debug=0 + + + +# PID FILE +# The name of the file in which the NRPE daemon should write it's process ID +# number. The file is only written if the NRPE daemon is started by the root +# user and is running in standalone mode. + +pid_file=/var/run/nrpe/nrpe.pid + + + +# PORT NUMBER +# Port number we should wait for connections on. +# NOTE: This must be a non-privileged port (i.e. > 1024). +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +server_port=5666 + + + +# SERVER ADDRESS +# Address that nrpe should bind to in case there are more than one interface +# and you do not want nrpe to bind on all interfaces. +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +#server_address=127.0.0.1 + + + +# LISTEN QUEUE SIZE +# Listen queue size (backlog) for serving incoming connections. +# You may want to increase this value under high load. + +#listen_queue_size=5 + + + +# NRPE USER +# This determines the effective user that the NRPE daemon should run as. +# You can either supply a username or a UID. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +nrpe_user=nrpe + + + +# NRPE GROUP +# This determines the effective group that the NRPE daemon should run as. +# You can either supply a group name or a GID. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +nrpe_group=nrpe + + + +# ALLOWED HOST ADDRESSES +# This is an optional comma-delimited list of IP address or hostnames +# that are allowed to talk to the NRPE daemon. Network addresses with a bit mask +# (i.e. 192.168.1.0/24) are also supported. Hostname wildcards are not currently +# supported. +# +# Note: The daemon only does rudimentary checking of the client's IP +# address. I would highly recommend adding entries in your /etc/hosts.allow +# file to allow only the specified host to connect to the port +# you are running this daemon on. +# +# NOTE: This option is ignored if NRPE is running under either inetd or xinetd + +allowed_hosts=127.0.0.1,::1 + + + +# COMMAND ARGUMENT PROCESSING +# This option determines whether or not the NRPE daemon will allow clients +# to specify arguments to commands that are executed. This option only works +# if the daemon was configured with the --enable-command-args configure script +# option. +# +# *** ENABLING THIS OPTION IS A SECURITY RISK! *** +# Read the SECURITY file for information on some of the security implications +# of enabling this variable. +# +# Values: 0=do not allow arguments, 1=allow command arguments + +dont_blame_nrpe=0 + + + +# BASH COMMAND SUBSTITUTION +# This option determines whether or not the NRPE daemon will allow clients +# to specify arguments that contain bash command substitutions of the form +# $(...). This option only works if the daemon was configured with both +# the --enable-command-args and --enable-bash-command-substitution configure +# script options. +# +# *** ENABLING THIS OPTION IS A HIGH SECURITY RISK! *** +# Read the SECURITY file for information on some of the security implications +# of enabling this variable. +# +# Values: 0=do not allow bash command substitutions, +# 1=allow bash command substitutions + +allow_bash_command_substitution=0 + + + +# COMMAND PREFIX +# This option allows you to prefix all commands with a user-defined string. +# A space is automatically added between the specified prefix string and the +# command line from the command definition. +# +# *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! *** +# Usage scenario: +# Execute restricted commmands using sudo. For this to work, you need to add +# the nagios user to your /etc/sudoers. An example entry for allowing +# execution of the plugins from might be: +# +# nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/ +# +# This lets the nagios user run all commands in that directory (and only them) +# without asking for a password. If you do this, make sure you don't give +# random users write access to that directory or its contents! + +# command_prefix=/usr/bin/sudo + + + +# COMMAND TIMEOUT +# This specifies the maximum number of seconds that the NRPE daemon will +# allow plugins to finish executing before killing them off. + +command_timeout=60 + + + +# CONNECTION TIMEOUT +# This specifies the maximum number of seconds that the NRPE daemon will +# wait for a connection to be established before exiting. This is sometimes +# seen where a network problem stops the SSL being established even though +# all network sessions are connected. This causes the nrpe daemons to +# accumulate, eating system resources. Do not set this too low. + +connection_timeout=300 + + + +# WEAK RANDOM SEED OPTION +# This directive allows you to use SSL even if your system does not have +# a /dev/random or /dev/urandom (on purpose or because the necessary patches +# were not applied). The random number generator will be seeded from a file +# which is either a file pointed to by the environment valiable $RANDFILE +# or $HOME/.rnd. If neither exists, the pseudo random number generator will +# be initialized and a warning will be issued. +# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness + +#allow_weak_random_seed=1 + + + +# SSL/TLS OPTIONS +# These directives allow you to specify how to use SSL/TLS. + +# SSL VERSION +# This can be any of: SSLv2 (only use SSLv2), SSLv2+ (use any version), +# SSLv3 (only use SSLv3), SSLv3+ (use SSLv3 or above), TLSv1 (only use +# TLSv1), TLSv1+ (use TLSv1 or above), TLSv1.1 (only use TLSv1.1), +# TLSv1.1+ (use TLSv1.1 or above), TLSv1.2 (only use TLSv1.2), +# TLSv1.2+ (use TLSv1.2 or above) +# If an "or above" version is used, the best will be negotiated. So if both +# ends are able to do TLSv1.2 and use specify SSLv2, you will get TLSv1.2. +# If you are using openssl 1.1.0 or above, the SSLv2 options are not available. + +#ssl_version=SSLv2+ + +# SSL USE ADH +# This is for backward compatibility and is DEPRECATED. Set to 1 to enable +# ADH or 2 to require ADH. 1 is currently the default but will be changed +# in a later version. + +#ssl_use_adh=1 + +# SSL CIPHER LIST +# This lists which ciphers can be used. For backward compatibility, this +# defaults to 'ssl_cipher_list=ALL:!MD5:@STRENGTH' in this version but +# will be changed to something like the example below in a later version of NRPE. + +#ssl_cipher_list=ALL:!MD5:@STRENGTH +#ssl_cipher_list=ALL:!aNULL:!eNULL:!SSLv2:!LOW:!EXP:!RC4:!MD5:@STRENGTH + +# SSL Certificate and Private Key Files + +#ssl_cacert_file=/etc/ssl/servercerts/ca-cert.pem +#ssl_cert_file=/etc/ssl/servercerts/nagios-cert.pem +#ssl_privatekey_file=/etc/ssl/servercerts/nagios-key.pem + +# SSL USE CLIENT CERTS +# This options determines client certificate usage. +# Values: 0 = Don't ask for or require client certificates (default) +# 1 = Ask for client certificates +# 2 = Require client certificates + +#ssl_client_certs=0 + +# SSL LOGGING +# This option determines which SSL messages are send to syslog. OR values +# together to specify multiple options. + +# Values: 0x00 (0) = No additional logging (default) +# 0x01 (1) = Log startup SSL/TLS parameters +# 0x02 (2) = Log remote IP address +# 0x04 (4) = Log SSL/TLS version of connections +# 0x08 (8) = Log which cipher is being used for the connection +# 0x10 (16) = Log if client has a certificate +# 0x20 (32) = Log details of client's certificate if it has one +# -1 or 0xff or 0x2f = All of the above + +#ssl_logging=0x00 + + + +# NASTY METACHARACTERS +# This option allows you to override the list of characters that cannot +# be passed to the NRPE daemon. + +# nasty_metachars="|`&><'\\[]{};\r\n" + + +# INCLUDE CONFIG FILE +# This directive allows you to include definitions from an external config file. + +#include= + + + +# INCLUDE CONFIG DIRECTORY +# This directive allows you to include definitions from config files (with a +# .cfg extension) in one or more directories (with recursion). + +include_dir=/etc/nrpe.d/ + + + +# COMMAND DEFINITIONS +# Command definitions that this daemon will run. Definitions +# are in the following format: +# +# command[]= +# +# When the daemon receives a request to return the results of +# it will execute the command specified by the argument. +# +# Unlike Nagios, the command line cannot contain macros - it must be +# typed exactly as it should be executed. +# +# Note: Any plugins that are used in the command lines must reside +# on the machine that this daemon is running on! The examples below +# assume that you have plugins installed in a /usr/local/nagios/libexec +# directory. Also note that you will have to modify the definitions below +# to match the argument format the plugins expect. Remember, these are +# examples only! + + +# The following examples use hardcoded command arguments... + +command[check_users]=/usr/lib64/nagios/plugins/check_users -w 5 -c 10 +command[check_load]=/usr/lib64/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20 +command[check_hda1]=/usr/lib64/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1 +command[check_zombie_procs]=/usr/lib64/nagios/plugins/check_procs -w 5 -c 10 -s Z +command[check_total_procs]=/usr/lib64/nagios/plugins/check_procs -w 150 -c 200 + + +# The following examples allow user-supplied arguments and can +# only be used if the NRPE daemon was compiled with support for +# command arguments *AND* the dont_blame_nrpe directive in this +# config file is set to '1'. This poses a potential security risk, so +# make sure you read the SECURITY file before doing this. + +#command[check_users]=/usr/lib64/nagios/plugins/check_users -w $ARG1$ -c $ARG2$ +#command[check_load]=/usr/lib64/nagios/plugins/check_load -w $ARG1$ -c $ARG2$ +#command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$ +#command[check_procs]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$