nixos/fail2ban: add custom options
This commit is contained in:
parent
a55be8d794
commit
f1d7dfe29f
1 changed files with 115 additions and 1 deletions
|
@ -62,6 +62,108 @@ in
|
||||||
description = "The firewall package used by fail2ban service.";
|
description = "The firewall package used by fail2ban service.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
banaction = mkOption {
|
||||||
|
default = "iptables-multiport";
|
||||||
|
type = types.str;
|
||||||
|
example = "nftables-multiport";
|
||||||
|
description = ''
|
||||||
|
Default banning action (e.g. iptables, iptables-new, iptables-multiport,
|
||||||
|
shorewall, etc) It is used to define action_* variables. Can be overridden
|
||||||
|
globally or per section within jail.local file
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
banaction-allports = mkOption {
|
||||||
|
default = "iptables-allport";
|
||||||
|
type = types.str;
|
||||||
|
example = "nftables-allport";
|
||||||
|
description = ''
|
||||||
|
Default banning action (e.g. iptables, iptables-new, iptables-multiport,
|
||||||
|
shorewall, etc) It is used to define action_* variables. Can be overridden
|
||||||
|
globally or per section within jail.local file
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bantime-increment.enable = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
description = ''
|
||||||
|
Allows to use database for searching of previously banned ip's to increase
|
||||||
|
a default ban time using special formula, default it is banTime * 1, 2, 4, 8, 16, 32...
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bantime-increment.rndtime = mkOption {
|
||||||
|
default = "4m";
|
||||||
|
type = types.str;
|
||||||
|
example = "8m";
|
||||||
|
description = ''
|
||||||
|
"bantime-increment.rndtime" is the max number of seconds using for mixing with random time
|
||||||
|
to prevent "clever" botnets calculate exact time IP can be unbanned again
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bantime-increment.maxtime = mkOption {
|
||||||
|
default = "10h";
|
||||||
|
type = types.str;
|
||||||
|
example = "48h";
|
||||||
|
description = ''
|
||||||
|
"bantime-increment.maxtime" is the max number of seconds using the ban time can reach (don't grows further)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bantime-increment.factor = mkOption {
|
||||||
|
default = "1";
|
||||||
|
type = types.str;
|
||||||
|
example = "4";
|
||||||
|
description = ''
|
||||||
|
"bantime-increment.factor" is a coefficient to calculate exponent growing of the formula or common multiplier,
|
||||||
|
default value of factor is 1 and with default value of formula, the ban time grows by 1, 2, 4, 8, 16 ...
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bantime-increment.formula = mkOption {
|
||||||
|
default = "ban.Time * (1<<(ban.Count if ban.Count<20 else 20)) * banFactor";
|
||||||
|
type = types.str;
|
||||||
|
example = "ban.Time * math.exp(float(ban.Count+1)*banFactor)/math.exp(1*banFactor)";
|
||||||
|
description = ''
|
||||||
|
"bantime-increment.formula" used by default to calculate next value of ban time, default value bellow,
|
||||||
|
the same ban time growing will be reached by multipliers 1, 2, 4, 8, 16, 32...
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bantime-increment.multipliers = mkOption {
|
||||||
|
default = "1 2 4 8 16 32 64";
|
||||||
|
type = types.str;
|
||||||
|
example = "2 4 16 128";
|
||||||
|
description = ''
|
||||||
|
"bantime-increment.multipliers" used to calculate next value of ban time instead of formula, coresponding
|
||||||
|
previously ban count and given "bantime.factor" (for multipliers default is 1);
|
||||||
|
following example grows ban time by 1, 2, 4, 8, 16 ... and if last ban count greater as multipliers count,
|
||||||
|
always used last multiplier (64 in example), for factor '1' and original ban time 600 - 10.6 hours
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
bantime-increment.overalljails = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
"bantime-increment.overalljails" (if true) specifies the search of IP in the database will be executed
|
||||||
|
cross over all jails, if false (dafault), only current jail of the ban IP will be searched
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
ignoreIP = mkOption {
|
||||||
|
default = [ ];
|
||||||
|
type = types.listOf types.str;
|
||||||
|
example = [ "192.168.0.0/16" "2001:DB8::42" ];
|
||||||
|
description = ''
|
||||||
|
"ignoreIP" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban will not ban a host which
|
||||||
|
matches an address in this list. Several addresses can be defined using space (and/or comma) separator.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
daemonConfig = mkOption {
|
daemonConfig = mkOption {
|
||||||
default = ''
|
default = ''
|
||||||
[Definition]
|
[Definition]
|
||||||
|
@ -160,10 +262,22 @@ in
|
||||||
# Add some reasonable default jails. The special "DEFAULT" jail
|
# Add some reasonable default jails. The special "DEFAULT" jail
|
||||||
# sets default values for all other jails.
|
# sets default values for all other jails.
|
||||||
services.fail2ban.jails.DEFAULT = ''
|
services.fail2ban.jails.DEFAULT = ''
|
||||||
|
${optionalString cfg.bantime-increment.enable ''
|
||||||
|
# Bantime incremental
|
||||||
|
bantime.increment = ${if cfg.bantime-increment.enable then "true" else "false"}
|
||||||
|
bantime.maxtime = ${cfg.bantime-increment.maxtime}
|
||||||
|
bantime.factor = ${cfg.bantime-increment.factor}
|
||||||
|
bantime.formula = ${cfg.bantime-increment.formula}
|
||||||
|
bantime.multipliers = ${cfg.bantime-increment.multipliers}
|
||||||
|
bantime.overalljails = ${if cfg.bantime-increment.overalljails then "true" else "false"}
|
||||||
|
''}
|
||||||
# Miscellaneous options
|
# Miscellaneous options
|
||||||
ignoreip = 127.0.0.1/8 ${optionalString config.networking.enableIPv6 "::1"}
|
ignoreip = 127.0.0.1/8 ${optionalString config.networking.enableIPv6 "::1"} ${concatStringsSep " " cfg.ignoreIP}
|
||||||
maxretry = 3
|
maxretry = 3
|
||||||
backend = systemd
|
backend = systemd
|
||||||
|
# Actions
|
||||||
|
banaction = ${cfg.banaction}
|
||||||
|
banaction_allports = ${cfg.banaction-allports}
|
||||||
'';
|
'';
|
||||||
# Block SSH if there are too many failing connection attempts.
|
# Block SSH if there are too many failing connection attempts.
|
||||||
services.fail2ban.jails.sshd = mkDefault ''
|
services.fail2ban.jails.sshd = mkDefault ''
|
||||||
|
|
Loading…
Reference in a new issue