diff --git a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
index 8a3c982fcb95..08b1d779e751 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
@@ -321,7 +321,26 @@
Other Notable Changes
-
-
+
+
+
+ The setting
+ services.openssh.logLevel
+ "VERBOSE"
+ "INFO". This brings NixOS in line
+ with upstream and other Linux distributions, and reduces log
+ spam on servers due to bruteforcing botnets.
+
+
+ However, if
+ services.fail2ban.enable
+ is true, the fail2ban
+ will override the verbosity to
+ "VERBOSE", so that
+ fail2ban can observe the failed login
+ attempts from the SSH logs.
+
+
+
diff --git a/nixos/doc/manual/release-notes/rl-2111.section.md b/nixos/doc/manual/release-notes/rl-2111.section.md
index f7578c8ddee8..c19b46c5def0 100644
--- a/nixos/doc/manual/release-notes/rl-2111.section.md
+++ b/nixos/doc/manual/release-notes/rl-2111.section.md
@@ -79,3 +79,7 @@ In addition to numerous new and upgraded packages, this release has the followin
old 2.7.7 version.
## Other Notable Changes {#sec-release-21.11-notable-changes}
+
+- The setting [`services.openssh.logLevel`](options.html#opt-services.openssh.logLevel) `"VERBOSE"` `"INFO"`. This brings NixOS in line with upstream and other Linux distributions, and reduces log spam on servers due to bruteforcing botnets.
+
+ However, if [`services.fail2ban.enable`](options.html#opt-services.fail2ban.enable) is `true`, the `fail2ban` will override the verbosity to `"VERBOSE"`, so that `fail2ban` can observe the failed login attempts from the SSH logs.
diff --git a/nixos/modules/services/networking/ssh/sshd.nix b/nixos/modules/services/networking/ssh/sshd.nix
index 227dfe834b29..91caa2ccb422 100644
--- a/nixos/modules/services/networking/ssh/sshd.nix
+++ b/nixos/modules/services/networking/ssh/sshd.nix
@@ -351,15 +351,12 @@ in
logLevel = mkOption {
type = types.enum [ "QUIET" "FATAL" "ERROR" "INFO" "VERBOSE" "DEBUG" "DEBUG1" "DEBUG2" "DEBUG3" ];
- default = "VERBOSE";
+ default = "INFO"; # upstream default
description = ''
Gives the verbosity level that is used when logging messages from sshd(8). The possible values are:
- QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3. The default is VERBOSE. DEBUG and DEBUG1
+ QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, and DEBUG3. The default is INFO. DEBUG and DEBUG1
are equivalent. DEBUG2 and DEBUG3 each specify higher levels of debugging output. Logging with a DEBUG level
violates the privacy of users and is not recommended.
-
- LogLevel VERBOSE logs user's key fingerprint on login.
- Needed to have a clear audit track of which key was used to log in.
'';
};
diff --git a/nixos/modules/services/security/fail2ban.nix b/nixos/modules/services/security/fail2ban.nix
index 07702bfb9d0f..499d34667509 100644
--- a/nixos/modules/services/security/fail2ban.nix
+++ b/nixos/modules/services/security/fail2ban.nix
@@ -45,7 +45,12 @@ in
enable = mkOption {
default = false;
type = types.bool;
- description = "Whether to enable the fail2ban service.";
+ description = ''
+ Whether to enable the fail2ban service.
+
+ See the documentation of
+ for what jails are enabled by default.
+ '';
};
package = mkOption {
@@ -221,6 +226,15 @@ in
defined in /etc/fail2ban/action.d,
while filters are defined in
/etc/fail2ban/filter.d.
+
+ NixOS comes with a default sshd jail;
+ for it to work well,
+ should be set to
+ "VERBOSE" or higher so that fail2ban
+ can observe failed login attempts.
+ This module sets it to "VERBOSE" if
+ not set otherwise, so enabling fail2ban can make SSH logs
+ more verbose.
'';
};
@@ -313,6 +327,9 @@ in
banaction_allports = ${cfg.banaction-allports}
'';
# Block SSH if there are too many failing connection attempts.
+ # Benefits from verbose sshd logging to observe failed login attempts,
+ # so we set that here unless the user overrode it.
+ services.openssh.logLevel = lib.mkDefault "VERBOSE";
services.fail2ban.jails.sshd = mkDefault ''
enabled = true
port = ${concatMapStringsSep "," (p: toString p) config.services.openssh.ports}