2026-03-11 12:12:23 +01:00
|
|
|
## confdroid_fail2ban::params.pp
|
|
|
|
|
# Module name: confdroid_fail2ban
|
|
|
|
|
# Author: 12ww1160 (12ww1160@confdroid.com)
|
|
|
|
|
# @summary Class holds all parameters for the confdroid_fail2ban module
|
|
|
|
|
# @param [String] fn_pkg_ensure
|
2017-08-03 12:01:32 +01:00
|
|
|
# which [package type](https://confdroid.com/2017/05/puppet-type-package/)
|
|
|
|
|
# to choose, i.e. `latest` or `present`.
|
2026-03-11 12:12:23 +01:00
|
|
|
# @param [array] fn_reqpackages the packages to install.
|
2025-03-02 23:30:48 +01:00
|
|
|
# @param [boolean] fn_manage_config Whether to manage the fail2ban
|
2017-08-03 15:29:17 +01:00
|
|
|
# configuration files. If set to false, fail2ban will be installed, but the
|
|
|
|
|
# configuration will not be managed.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_enable_service Whether to enable/start or disable/stop
|
2017-08-03 15:29:17 +01:00
|
|
|
# the fail2ban service. Valid options are `running` or `stopped`.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_loglevel Set the log level output. Valid options are
|
2017-08-03 15:29:17 +01:00
|
|
|
# `CRITICAL`,`ERROR`,`WARNING`,`NOTICE`,`INFO` and `DEBUG`.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_logtarget Set the log target. This could be a file,
|
2017-08-03 15:29:17 +01:00
|
|
|
# SYSLOG, STDERR or STDOUT. Only one log target can be specified.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_syslogsocket Set the syslog socket file. Only used when
|
2017-08-03 15:29:17 +01:00
|
|
|
# logtarget is SYSLOG. auto uses platform.system() to determine predefined
|
|
|
|
|
# paths Valid options: [ auto | FILE ].
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_socket Set the socket file to communicate with the daemon.
|
|
|
|
|
# @param [String] fn_pidfile Set the PID file to store the process ID of the
|
2017-08-03 15:29:17 +01:00
|
|
|
# fail2ban server.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_dbfile file for the fail2ban persistent data to be stored.
|
2017-08-03 15:29:17 +01:00
|
|
|
# A value of ":memory:" means database is only stored in memory
|
|
|
|
|
# and data is lost when fail2ban is stopped.
|
|
|
|
|
# A value of "None" disables the database.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_dbpurgeage age in seconds at which bans should be purged
|
2017-08-03 15:29:17 +01:00
|
|
|
# from the database.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_ignoreip can be an IP address, a CIDR mask or a DNS host.
|
2017-08-03 17:25:10 +01:00
|
|
|
# Fail2ban will not ban a host which matches an address in this list. Several
|
|
|
|
|
# addresses can be defined using space (and/or comma) separator.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_ignorecommand External command that will take an
|
2017-08-03 17:25:10 +01:00
|
|
|
# tagged arguments to ignore, e.g. <ip>,and return true if the IP is to be
|
|
|
|
|
# ignored. False otherwise.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_bantime number of seconds that a host is banned.
|
|
|
|
|
# @param [String] fn_findtime A host is banned if it has generated "maxretry"
|
2017-08-03 17:25:10 +01:00
|
|
|
# during the last "findtime" seconds.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_maxretry number of failures before a host get banned.
|
|
|
|
|
# @param [String] fn_backend specifies the backend used to get files
|
2017-08-03 17:25:10 +01:00
|
|
|
# modification. options are "pyinotify", "gamin", "polling", "systemd" and
|
|
|
|
|
# "auto".
|
|
|
|
|
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
|
|
|
|
|
# If pyinotify is not installed, Fail2ban will use auto.
|
|
|
|
|
# gamin: requires Gamin (a file alteration monitor) to be installed.
|
|
|
|
|
# If Gamin is not installed, Fail2ban will use auto.
|
|
|
|
|
# polling: uses a polling algorithm which does not require external libraries.
|
|
|
|
|
# systemd: uses systemd python library to access the systemd journal.
|
|
|
|
|
# Specifying "logpath" is not valid for this backend.
|
|
|
|
|
# See "journalmatch" in the jails associated filter config
|
|
|
|
|
# auto: will try to use the following backends, in order:
|
|
|
|
|
# pyinotify, gamin, polling.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_usedns specifies if jails should trust hostnames in logs,
|
2017-08-03 17:25:10 +01:00
|
|
|
# warn when DNS lookups are performed, or ignore all hostnames in logs
|
|
|
|
|
# yes: if a hostname is encountered, a DNS lookup will be performed.
|
|
|
|
|
# warn: if a hostname is encountered, a DNS lookup will be performed,
|
|
|
|
|
# but it will be logged as a warning.
|
|
|
|
|
# no: if a hostname is encountered, will not be used for banning,
|
|
|
|
|
# but it will be logged as info.
|
|
|
|
|
# raw: use raw value (no hostname), allow use it for no-host filters/actions
|
|
|
|
|
# (example user)
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_logencoding specifies the encoding of the log files
|
2017-08-03 17:25:10 +01:00
|
|
|
# handled by the jail This is used to decode the lines from the log file.
|
|
|
|
|
# Typical examples: "ascii", "utf-8"
|
|
|
|
|
# auto: will use the system locale setting
|
2025-03-02 23:30:48 +01:00
|
|
|
# @param [boolean] fn_enabled enables the jails.
|
2017-08-03 17:25:10 +01:00
|
|
|
# By default all jails are disabled, and it should stay this way.
|
|
|
|
|
# Enable only relevant to your setup jails in your .local or jail.d/*.conf
|
|
|
|
|
# true: jail will be enabled and log files will get monitored for changes
|
|
|
|
|
# false: jail is not enabled
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_filter defines the filter to use by the jail.
|
2017-08-03 17:25:10 +01:00
|
|
|
# By default jails have names matching their filter name
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_destemail Destination email address used solely for the
|
2021-09-10 15:28:11 +02:00
|
|
|
# interpolations in jail.{conf.local.d/*} configuration files.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_mta E-mail action. Since 0.8.1 Fail2Ban uses sendmail MTA
|
2017-08-03 17:25:10 +01:00
|
|
|
# for the mailing. Change mta configuration parameter to mail if you want to
|
|
|
|
|
# revert to conventional 'mail'.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_protocol Default protocol.
|
|
|
|
|
# @param [String] fn_chain Specify chain where jumps would need to be added in
|
2017-08-03 17:25:10 +01:00
|
|
|
# iptables-* actions.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_port # Ports to be banned Usually should be overridden
|
2017-08-03 17:25:10 +01:00
|
|
|
# in a particular jail
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_fail2ban_agent Format of user-agent
|
2017-08-03 17:25:10 +01:00
|
|
|
# https://tools.ietf.org/html/rfc7231#section-5.5.3
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_banaction Default banning action
|
|
|
|
|
# @param [String] fn_banaction_allports Default banning action
|
|
|
|
|
# @param [String] fn_action_ ban only
|
|
|
|
|
# @param [String] fn_action_mw ban & send an e-mail with whois report to the
|
2017-08-05 14:03:52 +01:00
|
|
|
# destemail.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_action_mwl ban & send an e-mail with whois report and
|
2017-08-06 15:30:02 +01:00
|
|
|
# relevant log lines
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_action_xarf ban & send a xarf e-mail to abuse contact of
|
2017-08-06 15:30:02 +01:00
|
|
|
# IP address and include relevant log lines.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_action_cf_mwl ban IP on CloudFlare & send an e-mail with
|
2017-08-06 15:30:02 +01:00
|
|
|
# whois report and relevant log lines.
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_action_blocklist_de Report block via blocklist.de fail2ban
|
2017-08-06 15:30:02 +01:00
|
|
|
# reporting service API
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_action_badips String to be be used in config files
|
|
|
|
|
# @param [String] fn_action_badips_report # Report ban via badips.com
|
2017-08-06 15:30:02 +01:00
|
|
|
# (uses action.d/badips.conf for reporting only).
|
2025-05-15 14:07:31 +02:00
|
|
|
# @param [String] fn_default_action Choose default action.
|
|
|
|
|
# @param [String] fn_jail_paths the fail path. defaults to fedora.
|
2026-03-11 14:27:05 +01:00
|
|
|
# @param [Boolean] fn_incl_target Whether to include monitoring targets for
|
|
|
|
|
# nagios. If set to true, monitoring targets will be included for the service.
|
|
|
|
|
# @param [String] fn_target_service The path to the nagios service configuration
|
|
|
|
|
# file to be created if fn_incl_target is set to true.
|
|
|
|
|
# @param [String] fn_target_contacts The nagios contacts to be notified for
|
|
|
|
|
# the service if fn_incl_target is set to true.
|
2026-03-12 12:33:00 +01:00
|
|
|
# @param [String] fn_procs_allowed The allowed number of fail2ban processes
|
|
|
|
|
# for the nagios check. Default is '1:1', which means exactly one process
|
|
|
|
|
# should be running.
|
2017-08-03 17:25:10 +01:00
|
|
|
###############################################################################
|
2026-03-11 12:12:23 +01:00
|
|
|
class confdroid_fail2ban::params (
|
2017-08-03 12:01:32 +01:00
|
|
|
|
2020-06-07 14:17:18 +02:00
|
|
|
# installation
|
2026-03-11 12:17:01 +01:00
|
|
|
String $fn_pkg_ensure = 'present',
|
|
|
|
|
Array $fn_reqpackages = ['fail2ban','fail2ban-firewalld',
|
2025-03-02 23:30:48 +01:00
|
|
|
'fail2ban-sendmail','fail2ban-server.noarch','whois'],
|
2020-06-07 14:22:43 +02:00
|
|
|
|
2026-03-11 12:17:01 +01:00
|
|
|
Boolean $fn_manage_config = true,
|
|
|
|
|
String $fn_enable_service = 'running',
|
2017-08-03 17:25:10 +01:00
|
|
|
|
|
|
|
|
# fail2ban.conf/local
|
|
|
|
|
|
2026-03-11 12:17:01 +01:00
|
|
|
String $fn_loglevel = 'INFO',
|
|
|
|
|
String $fn_logtarget = 'SYSLOG',
|
|
|
|
|
String $fn_syslogsocket = 'auto',
|
|
|
|
|
String $fn_socket = '/var/run/fail2ban/fail2ban.sock',
|
|
|
|
|
String $fn_pidfile = '/var/run/fail2ban/fail2ban.pid',
|
|
|
|
|
String $fn_dbfile = '/var/lib/fail2ban/fail2ban.sqlite3',
|
|
|
|
|
String $fn_dbpurgeage = '86400',
|
2017-08-03 13:07:42 +01:00
|
|
|
|
2017-08-03 17:25:10 +01:00
|
|
|
# jail.conf/local
|
2026-03-11 12:17:01 +01:00
|
|
|
String $fn_ignoreip = '127.0.0.1/8',
|
2026-03-11 12:26:37 +01:00
|
|
|
Optional[String] $fn_ignorecommand = undef,
|
2026-03-11 12:17:01 +01:00
|
|
|
String $fn_bantime = '600',
|
|
|
|
|
String $fn_findtime = '600',
|
|
|
|
|
String $fn_maxretry = '5',
|
|
|
|
|
String $fn_backend = 'auto',
|
|
|
|
|
String $fn_usedns = 'warn',
|
|
|
|
|
String $fn_logencoding = 'auto',
|
|
|
|
|
Boolean $fn_enabled = false,
|
|
|
|
|
String $fn_filter = '%(__name__)s',
|
|
|
|
|
String $fn_destemail = 'root@localhost',
|
|
|
|
|
String $fn_mta = 'sendmail',
|
|
|
|
|
String $fn_protocol = 'tcp',
|
|
|
|
|
String $fn_chain = 'INPUT',
|
|
|
|
|
String $fn_port = '0:65535',
|
|
|
|
|
String $fn_fail2ban_agent = 'Fail2Ban/%(fail2ban_version)s',
|
|
|
|
|
String $fn_banaction = 'iptables-multiport',
|
|
|
|
|
String $fn_banaction_allports = 'iptables-allports',
|
|
|
|
|
String $fn_action_ = '%(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]',
|
|
|
|
|
String $fn_action_mw = '%(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
2017-08-06 16:07:51 +01:00
|
|
|
%(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]',
|
2026-03-11 12:26:37 +01:00
|
|
|
String $fn_action_mwl = '%(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
2017-08-06 16:07:51 +01:00
|
|
|
%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]',
|
2026-03-11 12:17:01 +01:00
|
|
|
String $fn_action_xarf = '%(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
|
2017-08-06 16:07:51 +01:00
|
|
|
xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath=%(logpath)s, port="%(port)s"]',
|
2026-03-11 12:17:01 +01:00
|
|
|
String $fn_action_cf_mwl = 'cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
|
2017-08-06 16:07:51 +01:00
|
|
|
%(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]',
|
2026-03-11 12:17:01 +01:00
|
|
|
String $fn_action_blocklist_de = 'blocklist_de[email="%(sender)s", service=%(filter)s, apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]',
|
|
|
|
|
String $fn_action_badips = 'badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]',
|
|
|
|
|
String $fn_action_badips_report = 'badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]',
|
|
|
|
|
String $fn_default_action = 'action_',
|
|
|
|
|
String $fn_jail_paths = 'fedora',
|
2017-08-13 15:15:43 +01:00
|
|
|
|
2026-03-11 14:27:05 +01:00
|
|
|
# nagios
|
|
|
|
|
Boolean $fn_incl_target = false,
|
|
|
|
|
String $fn_target_service = '/etc/nagios/conf.d/fail2ban_service.cfg',
|
|
|
|
|
String $fn_target_contacts = 'nagiosadmin',
|
2026-03-12 12:33:00 +01:00
|
|
|
String $fn_procs_allowed = '1:1',
|
2026-03-11 14:27:05 +01:00
|
|
|
|
2017-08-03 12:01:32 +01:00
|
|
|
) {
|
2017-08-03 17:25:10 +01:00
|
|
|
# shortcuts
|
2025-03-02 23:30:48 +01:00
|
|
|
$fqdn = $facts['networking']['fqdn']
|
|
|
|
|
$fn_os = $facts['os']
|
2025-03-02 23:43:51 +01:00
|
|
|
$fn_sender = "fail2ban@${fqdn}"
|
2017-08-03 14:01:25 +01:00
|
|
|
|
2017-08-03 13:07:42 +01:00
|
|
|
# service
|
2025-03-02 23:30:48 +01:00
|
|
|
$fn_service = 'fail2ban'
|
2017-08-03 14:01:25 +01:00
|
|
|
|
|
|
|
|
# directories
|
2025-03-02 23:30:48 +01:00
|
|
|
$fn_main_dir = '/etc/fail2ban'
|
|
|
|
|
$fn_action_d_dir = "${fn_main_dir}/action.d"
|
|
|
|
|
$fn_fail2ban_d_dir = "${fn_main_dir}/fail2ban.d"
|
|
|
|
|
$fn_filter_d_dir = "${fn_main_dir}/filter.d"
|
|
|
|
|
$fn_jail_d_dir = "${fn_main_dir}/jail.d"
|
|
|
|
|
$fn_var_lib_dir = '/var/lib/fail2ban'
|
|
|
|
|
$fn_var_run_dir = '/var/run/fail2ban'
|
2017-08-03 14:01:25 +01:00
|
|
|
|
|
|
|
|
# files
|
2025-03-02 23:30:48 +01:00
|
|
|
$fn_fail2ban_conf_file = "${fn_main_dir}/fail2ban.conf"
|
2026-03-11 12:12:23 +01:00
|
|
|
$fn_fail2ban_conf_erb = 'confdroid_fail2ban/fail2ban_conf.erb'
|
2025-03-02 23:30:48 +01:00
|
|
|
$fn_fail2ban_local_file = "${fn_main_dir}/fail2ban.local"
|
2026-03-11 12:12:23 +01:00
|
|
|
$fn_fail2ban_local_erb = 'confdroid_fail2ban/fail2ban_local.erb'
|
2025-03-02 23:30:48 +01:00
|
|
|
$fn_jail_conf_file = "${fn_main_dir}/jail.conf"
|
2026-03-11 12:12:23 +01:00
|
|
|
$fn_jail_conf_erb = 'confdroid_fail2ban/jail_conf.erb'
|
2025-03-02 23:30:48 +01:00
|
|
|
$fn_jail_local_file = "${fn_main_dir}/jail.local"
|
2026-03-11 12:12:23 +01:00
|
|
|
$fn_jail_local_erb = 'confdroid_fail2ban/jail_local.erb'
|
2025-03-02 23:30:48 +01:00
|
|
|
$fn_paths_common_file = "${fn_main_dir}/paths-common.conf"
|
2026-03-11 12:12:23 +01:00
|
|
|
$fn_paths_common_erb = 'confdroid_fail2ban/paths_common_conf.erb'
|
2017-08-03 13:07:42 +01:00
|
|
|
|
2017-08-03 12:01:32 +01:00
|
|
|
# includes must be last
|
|
|
|
|
|
2026-03-11 12:12:23 +01:00
|
|
|
include confdroid_fail2ban::main::config
|
2017-08-03 12:01:32 +01:00
|
|
|
}
|