diff --git a/app/Models/Key.php b/app/Models/Key.php
index 8f9b75920006377f8d485a88d5bb68d70e3d1950..4dbc633abbe121595fb3a63f3028b969300d5c65 100644
--- a/app/Models/Key.php
+++ b/app/Models/Key.php
@@ -2,6 +2,9 @@
 
 namespace App\Models;
 
+use Illuminate\Support\Facades\Redis;
+use Request;
+
 class Key
 {
     public $key;
@@ -23,6 +26,29 @@ class Key
     {
         if ($this->key !== '' && $this->status === null) {
             $this->updateStatus();
+            if(empty($this->status)){
+                // The user provided an invalid key which we will log to fail2ban
+                $fail2banEnabled = config("metager.metager.fail2ban_enabled");
+                if(empty($fail2banEnabled) || !$fail2banEnabled || !env("fail2banurl", false) || !env("fail2banuser") || !env("fail2banpassword")){
+                    return false;
+                }
+
+                // Submit fetch job to worker
+                $mission = [
+                        "resulthash" => "captcha",
+                        "url" => env("fail2banurl") . "/mgkeytry/",
+                        "useragent" => "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0",
+                        "username" => env("fail2banuser"),
+                        "password" => env("fail2banpassword"),
+                        "headers" => [
+                            "ip" => Request::ip()
+                        ],
+                        "cacheDuration" => 0,
+                        "name" => "Captcha",
+                    ];
+                $mission = json_encode($mission);
+                Redis::rpush(\App\MetaGer::FETCHQUEUE_KEY, $mission);
+            }
         }
         if ($this->status === null || $this->status === false) {
             return false;