OOKNET                             [ /  search the index  ]  
──────────────────────────────────────────────────────────────────────────────────────
══════════════════════════════════════════════════════════════════════════════════════
OOKNET   [ /  search  ]  
────────────────────────────────────────────────
════════════════════════════════════════════════
 
HASH      c42ae82aa831
DATE      2025-10-23
SUBJECT   caddy: fail2ban configuration
FILES     2 CHANGED
HASH      c42ae82aa831
DATE      2025-10-23
SUBJECT   caddy: fail2ban configuration
FILES     2 CHANGED
 

diff --git a/modules/nixos/server/webserver/caddy-fail2ban.nix b/modules/nixos/ser
ver/webserver/caddy-fail2ban.nix
new file mode 100644
index 0000000..56c89b1
--- /dev/null
+++ b/modules/nixos/server/webserver/caddy-fail2ban.nix
@@ -0,0 +1,24 @@
+{
+  config,
+  lib,
+  ...
+}: let
+  inherit (lib) mkIf;
+  inherit (config.ooknet.server.webserver) caddy;
+  inherit (config.services) fail2ban;
+in {
+  config = mkIf (caddy.enable && fail2ban.enable) {
+    services.fail2ban.jails.caddy-4xx = {
+      settings = {
+        maxretry = 20;
+        findtime = "5m";
+        bantime = "1h";
+      };
+
+      filter.Definition = {
+        failregex = ''^.*"status":(4\d{2}).*"remote_ip":"<HOST>".*$'';
+        journalmatch = "_SYSTEMD_UNIT=caddy.service";
+      };
+    };
+  };
+}

diff --git a/modules/nixos/server/webserver/
caddy-fail2ban.nix b/modules/nixos/server/we
bserver/caddy-fail2ban.nix
new file mode 100644
index 0000000..56c89b1
--- /dev/null
+++ b/modules/nixos/server/webserver/caddy-f
ail2ban.nix
@@ -0,0 +1,24 @@
+{
+  config,
+  lib,
+  ...
+}: let
+  inherit (lib) mkIf;
+  inherit (config.ooknet.server.webserver) 
caddy;
+  inherit (config.services) fail2ban;
+in {
+  config = mkIf (caddy.enable && fail2ban.e
nable) {
+    services.fail2ban.jails.caddy-4xx = {
+      settings = {
+        maxretry = 20;
+        findtime = "5m";
+        bantime = "1h";
+      };
+
+      filter.Definition = {
+        failregex = ''^.*"status":(4\d{2}).
*"remote_ip":"<HOST>".*$'';
+        journalmatch = "_SYSTEMD_UNIT=caddy
.service";
+      };
+    };
+  };
+}
 

diff --git a/modules/nixos/server/webserver/default.nix b/modules/nixos/server/web
server/default.nix
index 1f898a8..0e67171 100644
--- a/modules/nixos/server/webserver/default.nix
+++ b/modules/nixos/server/webserver/default.nix
@@ -1,5 +1,6 @@
 {
   imports = [
     ./caddy.nix
+    ./caddy-fail2ban.nix
   ];
 }

diff --git a/modules/nixos/server/webserver/
default.nix b/modules/nixos/server/webserver
/default.nix
index 1f898a8..0e67171 100644
--- a/modules/nixos/server/webserver/default
.nix
+++ b/modules/nixos/server/webserver/default
.nix
@@ -1,5 +1,6 @@
 {
   imports = [
     ./caddy.nix
+    ./caddy-fail2ban.nix
   ];
 }
 
[ BACK TO LOG ]
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET