Compare commits

...

16 Commits

8 changed files with 132 additions and 41 deletions

View File

@@ -11,14 +11,18 @@
"clamscan", "clamscan",
"Clamuko", "Clamuko",
"clamupdate", "clamupdate",
"concurrentdatabasereload",
"Dazuko", "Dazuko",
"dbname", "dbname",
"epel", "epel",
"excludepaths",
"fanotify", "fanotify",
"fdpass",
"filesize", "filesize",
"freshclam", "freshclam",
"getsebool", "getsebool",
"INADDR", "INADDR",
"kubelet",
"libclamav", "libclamav",
"logclean", "logclean",
"logfacility", "logfacility",
@@ -29,12 +33,15 @@
"logsyslog", "logsyslog",
"logtime", "logtime",
"logverbose", "logverbose",
"MAINPID",
"multiscan",
"mypass", "mypass",
"myproxy", "myproxy",
"myusername", "myusername",
"NOFILE", "NOFILE",
"normalisation", "normalisation",
"PCRE", "PCRE",
"pipefail",
"preludeanalyzername", "preludeanalyzername",
"preludeenable", "preludeenable",
"recieve", "recieve",

View File

@@ -9,7 +9,7 @@
- [WARNING](#warning) - [WARNING](#warning)
- [Features](#features) - [Features](#features)
- [Dependencies](#dependencies) - [Dependencies](#dependencies)
- [Deployment](#deployment) - [Deployment](#deployment)
- [Parameters](#parameters) - [Parameters](#parameters)
- [SELINUX](#selinux) - [SELINUX](#selinux)
- [Support](#support) - [Support](#support)
@@ -33,7 +33,8 @@
- manage required config files - manage required config files
- manage cronjob settings via parameters - manage cronjob settings via parameters
- run cron job to scan the file system (by default starting at root, configurable) via clamdscan - run cron job to scan the file system (by default starting at root, configurable) via clamdscan
- manage services - set ConcurrentDatabaseReload option `yes`/`no` to optimize RAM consumption. defaults to `no`
- manage `freshclam` and `clamd` services
## Dependencies ## Dependencies
@@ -41,7 +42,7 @@ All dependencies must be included in the catalogue.
- [confdroid_resources](https://sourcecode.confdroid.com/confdroid/confdroid_resources) for managing yum repo resources. - [confdroid_resources](https://sourcecode.confdroid.com/confdroid/confdroid_resources) for managing yum repo resources.
### Deployment ## Deployment
- native Puppet deployment - native Puppet deployment

View File

@@ -33,6 +33,7 @@ class confdroid_clamav::main::files (
seltype => etc_t, seltype => etc_t,
seluser => system_u, seluser => system_u,
content => template($cv_freshclam_erb), content => template($cv_freshclam_erb),
notify => Service[$cv_freshclam],
} }
# freshclam service config file # freshclam service config file
@@ -46,6 +47,21 @@ class confdroid_clamav::main::files (
seltype => etc_t, seltype => etc_t,
seluser => system_u, seluser => system_u,
content => template($cv_freshclam_svc_erb), content => template($cv_freshclam_svc_erb),
notify => Service[$cv_freshclam],
}
# clamd service config file
file { $cv_clamd_svc :
ensure => file,
owner => 'root',
group => 'root',
mode => '0600',
selrange => s0,
selrole => object_r,
seltype => etc_t,
seluser => system_u,
content => template($cv_clamd_svc_erb),
notify => Service[$cv_service],
} }
# shell script for scanning and alerting # shell script for scanning and alerting

View File

@@ -9,7 +9,7 @@ class confdroid_clamav::main::install (
) inherits confdroid_clamav::params { ) inherits confdroid_clamav::params {
require confdroid_resources::main::epel require confdroid_resources::main::epel
package { $reqpackages: package { $cv_reqpackages:
ensure => $pkg_ensure, ensure => $cv_pkg_ensure,
} }
} }

View File

@@ -3,8 +3,8 @@
# Author: 12ww1160 (12ww1160@confdroid.com) # Author: 12ww1160 (12ww1160@confdroid.com)
# @summary Class holds all parameters for the confdroid_clamav module and is # @summary Class holds all parameters for the confdroid_clamav module and is
# inherited by all classes except defines. # inherited by all classes except defines.
# @param [Array] reqpackages List of packages to install. # @param [Array] cv_reqpackages List of packages to install.
# @param [String] pkg_ensure # @param [String] cv_pkg_ensure
# which [package type](https://confdroid.com/2017/05/puppet-type-package/) # which [package type](https://confdroid.com/2017/05/puppet-type-package/)
# to choose, i.e. `latest` or `present`. # to choose, i.e. `latest` or `present`.
# @param [String] cv_logfile where to log messages for the clamd service. # @param [String] cv_logfile where to log messages for the clamd service.
@@ -35,35 +35,52 @@
# @param [String] cv_alert_file location and name of the alert file # @param [String] cv_alert_file location and name of the alert file
# @param [Boolean] cv_enable_freshclam whether to enable the freshclam service # @param [Boolean] cv_enable_freshclam whether to enable the freshclam service
# @param [Boolean] cv_enable_clamd whether to enable the clamd service # @param [Boolean] cv_enable_clamd whether to enable the clamd service
# @param [Boolean] cv_use_excludepaths whether to use advanced exclude paths
# @param [String] cv_concurrentdatabasereload whether to enable concurrent
# database reloads. This is useful when you have multiple clamd instances
# running on the same machine. If you have only one clamd instance, this
# should be set to 'no'.
# @param [String] cv_clamd_max_mem maximum memory usage for clamd.
# @param [String] cv_clamd_cpu_quota maximum CPU usage for clamd.
# @param [String] cv_nice_value nice value for clamd. This is a number between
# -20 and 19. The lower the number, the higher the priority. The default is
# 19, which is the lowest priority.
# @param [String] cv_timeout_start_sec timeout for starting the clamd service.
############################################################################## ##############################################################################
class confdroid_clamav::params ( class confdroid_clamav::params (
# installation # installation
Array $reqpackages = ['clamav','clamd','s-nail'], Array $cv_reqpackages = ['clamav','clamd','s-nail'],
String $pkg_ensure = 'present', String $cv_pkg_ensure = 'present',
# clamd # clamd
String $cv_logfile = '/var/log/clamd.scan', String $cv_logfile = '/var/log/clamd.scan',
String $cv_logfileunlock = 'no', String $cv_logfileunlock = 'no',
String $cv_logfilemaxsize = '2M', String $cv_logfilemaxsize = '2M',
String $cv_logtime = 'yes', String $cv_logtime = 'yes',
String $cv_logclean = 'no', String $cv_logclean = 'no',
String $cv_logsyslog = 'yes', String $cv_logsyslog = 'yes',
String $cv_logfacility = 'LOG_MAIL', String $cv_logfacility = 'LOG_MAIL',
String $cv_logverbose = 'no', String $cv_logverbose = 'no',
String $cv_logrotate = 'yes', String $cv_logrotate = 'yes',
String $cv_preludeenable = 'no', String $cv_preludeenable = 'no',
String $cv_preludeanalyzername = 'ClamAV', String $cv_preludeanalyzername = 'ClamAV',
String $cv_tcpsocket = '3310', String $cv_tcpsocket = '3310',
String $cv_tcpaddress = 'localhost', String $cv_tcpaddress = 'localhost',
String $cv_alert_email = 'you@example.com', String $cv_alert_email = 'you@example.com',
String $cv_cron_hour = '2', String $cv_cron_hour = '2',
String $cv_cron_minute = '0', String $cv_cron_minute = '0',
String $cv_cron_user = 'root', String $cv_cron_user = 'root',
String $cv_scan_dir = '/', String $cv_scan_dir = '/',
String $cv_alert_file = 'tmp/clamav-alert.txt', String $cv_alert_file = 'tmp/clamav-alert.txt',
Boolean $cv_enable_freshclam = true, Boolean $cv_enable_freshclam = true,
Boolean $cv_enable_clamd = true, Boolean $cv_enable_clamd = true,
Boolean $cv_use_excludepaths = true,
String $cv_concurrentdatabasereload = 'no',
String $cv_clamd_max_mem = '512M',
String $cv_clamd_cpu_quota = '30%',
String $cv_nice_value = '19',
String $cv_timeout_start_sec = '420'
) { ) {
# service # service
@@ -80,6 +97,8 @@ class confdroid_clamav::params (
$cv_freshclam_erb = 'confdroid_clamav/freshclam_conf.erb' $cv_freshclam_erb = 'confdroid_clamav/freshclam_conf.erb'
$cv_freshclam_svc = '/usr/lib/systemd/system/freshclam.service' $cv_freshclam_svc = '/usr/lib/systemd/system/freshclam.service'
$cv_freshclam_svc_erb = 'confdroid_clamav/freshclam_svc.erb' $cv_freshclam_svc_erb = 'confdroid_clamav/freshclam_svc.erb'
$cv_clamd_svc = '/usr/lib/systemd/system/clamd@.service'
$cv_clamd_svc_erb = 'confdroid_clamav/clamd_svc.erb'
$cv_shell_script = "${cv_config_d_dir}/scan.sh" $cv_shell_script = "${cv_config_d_dir}/scan.sh"
$cv_shell_script_erb = 'confdroid_clamav/scan.sh.erb' $cv_shell_script_erb = 'confdroid_clamav/scan.sh.erb'

22
templates/clamd_svc.erb Normal file
View File

@@ -0,0 +1,22 @@
################################################################################
### clamd.svc created by Puppet, manual changes will be overwritten!!! ###
################################################################################
[Unit]
Description = clamd scanner (%i) daemon
Documentation=man:clamd(8) man:clamd.conf(5) https://www.clamav.net/documents/
After = syslog.target nss-lookup.target network.target
[Service]
Type = forking
ExecStart = /usr/sbin/clamd -c /etc/clamd.d/%i.conf
# Reload the database
ExecReload=/bin/kill -USR2 $MAINPID
Restart = on-failure
TimeoutStartSec=<%= @cv_timeout_start_sec %>
MemoryMax=<%= @cv_clamd_max_mem %>
CPUQuota=<%= @cv_clamd_cpu_quota %>
Nice=<%= @cv_nice_value %>
[Install]
WantedBy = multi-user.target

View File

@@ -1,23 +1,26 @@
#!/bin/bash #!/bin/bash
set -euo pipefail
# Set paths
SCAN_DIR="<%= @cv_scan_dir %>" SCAN_DIR="<%= @cv_scan_dir %>"
LOG_FILE="<%= @cv_logfile %>" LOG_FILE="<%= @cv_logfile %>"
TMP_ALERT="<%= @cv_alert_file %>" TMP_ALERT="<%= @cv_alert_file %>"
EMAIL="<%= @cv_alert_email %>" EMAIL="<%= @cv_alert_email %>"
# Run clamscan # Ensure the log directory exists
clamscan -r --infected --log="$LOG_FILE" "$SCAN_DIR" > /dev/null mkdir -p "$(dirname "$LOG_FILE")"
# Check if infections were found # Preferred: clamdscan with multiscan + fdpass
if grep -q "Infected files: [^0]" "$LOG_FILE"; then clamdscan --multiscan --fdpass --infected --log="$LOG_FILE" "$SCAN_DIR" > /dev/null || true
echo "ClamAV has found infected files on $(hostname)!" > "$TMP_ALERT"
echo "" >> "$TMP_ALERT" # Check for infections (same logic as before)
grep "FOUND" "$LOG_FILE" >> "$TMP_ALERT" if grep -q "Infected files: [^0]" "$LOG_FILE" 2>/dev/null; then
{
echo "ClamAV has found infected files on $(hostname)!"
echo ""
grep "FOUND" "$LOG_FILE" || true
} > "$TMP_ALERT"
# Send the alert email
mail -s "⚠️ ClamAV Alert on $(hostname)" "$EMAIL" < "$TMP_ALERT" mail -s "⚠️ ClamAV Alert on $(hostname)" "$EMAIL" < "$TMP_ALERT"
fi fi
# Clean up
rm -f "$TMP_ALERT" rm -f "$TMP_ALERT"

View File

@@ -14,6 +14,7 @@ LogRotate <%= @cv_logrotate %>
PreludeEnable <%= @cv_preludeenable %> PreludeEnable <%= @cv_preludeenable %>
TCPSocket <%= @cv_tcpsocket %> TCPSocket <%= @cv_tcpsocket %>
TCPAddr <%= @cv_tcpaddress %> TCPAddr <%= @cv_tcpaddress %>
ConcurrentDatabaseReload <%= @cv_concurrentdatabasereload %>
# #
# Set the name of the analyzer used by prelude-admin. # Set the name of the analyzer used by prelude-admin.
# Default: ClamAV # Default: ClamAV
@@ -21,7 +22,7 @@ PreludeAnalyzerName ClamAV
# Log additional information about the infected file, such as its # Log additional information about the infected file, such as its
# size and hash, together with the virus name. # size and hash, together with the virus name.
#ExtendedDetectionInfo yes ExtendedDetectionInfo yes
# This option allows you to save a process identifier of the listening # This option allows you to save a process identifier of the listening
# daemon (main thread). # daemon (main thread).
@@ -132,6 +133,28 @@ PreludeAnalyzerName ClamAV
#ExcludePath ^/proc/ #ExcludePath ^/proc/
#ExcludePath ^/sys/ #ExcludePath ^/sys/
<% if @cv_use_excludepaths %>
ExcludePath ^/proc
ExcludePath ^/sys
ExcludePath ^/dev
ExcludePath ^/run
ExcludePath ^/var/run
ExcludePath ^/var/tmp
ExcludePath ^/tmp
ExcludePath ^/var/lib/clamav
ExcludePath ^/var/log/clamav
ExcludePath ^/var/lib/docker
ExcludePath ^/var/lib/containerd
ExcludePath ^/var/lib/kubelet/pods
ExcludePath ^/var/lib/kubelet/plugins
ExcludePath ^/var/lib/kubelet/plugins_registry
ExcludePath ^/var/log/pods
ExcludePath ^/var/log/containers
ExcludePath ^/var/cache
ExcludePath ^/run/containerd
ExcludePath ^/run/docker
<% end %>
# Maximum depth directories are scanned at. # Maximum depth directories are scanned at.
# Default: 15 # Default: 15
#MaxDirectoryRecursion 20 #MaxDirectoryRecursion 20