You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
<td><p>Specifies action that is applied when one of the defined thresholds (credentialsStuffingMatchesReached, failedLoginAttemptsRateReached) is reached.</p>
882
-
<blockquote>
883
-
<ul>
884
-
<li><strong>alarm</strong>: The system will log the login attempt.</li>
885
-
<li><strong>alarm-and-client-side-integrity</strong>: The system determines whether the client is a legal browser or a bot by sending a page containing JavaScript code and waiting for a response. Legal browsers are able to execute JavaScript and produce a valid response, whereas bots cannot. A login attempt is logged if the client successfully passes the Client Side Integrity challenge.</li>
<td>After configured threshold (number of detected login attempts that match known leaked credentials library) defined action will be applied for the next login attempt.</td>
<td>After configured threshold (number of failed login attempts within measurementPeriod) defined action will be applied for the next login attempt.</td>
<li><strong>alarm</strong>: The system will log the login attempt.</li>
931
861
<li><strong>alarm-and-blocking-page</strong>: The system will log the login attempt, block the request and send the Blocking page.</li>
932
-
<li><strong>alarm-and-client-side-integrity</strong>: The system determines whether the client is a legal browser or a bot by sending a page containing JavaScript code and waiting for a response. Legal browsers are able to execute JavaScript and produce a valid response, whereas bots cannot. A login attempt is logged if the client successfully passes the Client Side Integrity challenge.</li>
933
-
<li><strong>alarm-and-drop</strong>: The system will log the login attempt and reset the TCP connection.</li>
934
-
<li><strong>alarm-and-honeypot-page</strong>: The system will log the login attempt, block the request and send the Honeypot page. The Honeypot page is used for attacker deception. The page should look like an application failed login page. Unlike with the Blocking page, when the Honeypot page is sent an attacker is not able to distinguish a failed login response from a mitigation. As a result, the attacker will not change identity (Source IP or Device ID) and the brute force attack will be rendered ineffective. The Honeypot page is recommended when mitigation is request blocking.</li>
<li><strong>alarm</strong>: The system will log the login attempt.</li>
983
-
<li><strong>alarm-and-client-side-integrity</strong>: The system determines whether the client is a legal browser or a bot by sending a page containing JavaScript code and waiting for a response. Legal browsers are able to execute JavaScript and produce a valid response, whereas bots cannot. A login attempt is logged if the client successfully passes the Client Side Integrity challenge.</li>
Copy file name to clipboardExpand all lines: content/nap-waf/v4/configuration-guide/configuration.md
+70-11Lines changed: 70 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -655,15 +655,43 @@ claims['address'] = "{ \"address\": { .... } }" # JSON structs can be accessed u
655
655
656
656
### Overview
657
657
658
-
Brute force attacks are attempts to break in to secured areas of a web application by trying exhaustive,
658
+
Brute force attacks are attempts to break in to secured areas of a web application by trying exhaustive,
659
659
systematic, username/password combinations to discover legitimate authentication credentials.
660
-
To prevent brute force attacks, WAF tracks the number of failed attempts to reach login pages
661
-
with enforced brute force protection. When brute force patterns are detected,
662
-
the WAF policy considers it to be an attack if the failed logon rate increased significantly or
663
-
if failed logins reached a maximum threshold.
660
+
To prevent brute force attacks, NGINX App Protect WAF monitors IP addresses, usernames, and the number of failed login attempts beyond a maximum threshold.
661
+
When brute force patterns are detected, the NGINX App Protect WAF policy either trigger an alarm or block the attack if the failed
662
+
login attempts reached a maximum threshold for a specific username or coming from a specific IP address.
663
+
To enable brute force protection, at least one login page must be created.
664
664
665
+
---
666
+
667
+
### Login page policy example
668
+
669
+
A login page specifies the login URL that users must pass through to get authenticated. The configuration of a login URL includes the URL itself, the username and passwords parameters and the validation criteria (how we know that a login was successful or failed)
670
+
```json
671
+
"login-pages": [
672
+
{
673
+
"accessValidation" : {
674
+
"responseContains": "Success"
675
+
},
676
+
"authenticationType": "form",
677
+
"url" : {
678
+
"method" : "*",
679
+
"name" : "/html_login",
680
+
"protocol" : "http",
681
+
"type" : "explicit"
682
+
},
683
+
"usernameParameterName": "username",
684
+
"passwordParameterName": "password"
685
+
}
686
+
]
687
+
```
688
+
689
+
{{< note >}} For further configuration details, see NGINX App Protect WAF Declarative Policy Guide [Declarative Policy guide]({{< relref "/nap-waf/v4/declarative-policy/policy/#policy/login-pages" >}}). {{< /note >}}
690
+
691
+
---
665
692
### Brute force policy example
666
693
694
+
Example1: A single brute force configuration is applied universally to all login pages.
667
695
```json
668
696
{
669
697
"policy": {
@@ -676,10 +704,6 @@ if failed logins reached a maximum threshold.
676
704
"brute-force-attack-preventions" : [
677
705
{
678
706
"bruteForceProtectionForAllLoginPages" : true,
679
-
"detectionCriteria" : {
680
-
"action" : "alarm",
681
-
"failedLoginAttemptsRateReached" : 100
682
-
},
683
707
"loginAttemptsFromTheSameIp" : {
684
708
"action" : "alarm",
685
709
"enabled" : true,
@@ -690,16 +714,51 @@ if failed logins reached a maximum threshold.
690
714
"enabled" : true,
691
715
"threshold" : 3
692
716
},
693
-
"measurementPeriod" : 900,
694
-
"preventionDuration" : "3600",
695
717
"reEnableLoginAfter" : 3600,
696
718
"sourceBasedProtectionDetectionPeriod" : 3600
697
719
}
698
720
]
699
721
}
700
722
}
723
+
```
701
724
725
+
Example2: Different brute force configurations can be defined for individual login pages.
726
+
```json
727
+
{
728
+
"policy": {
729
+
"name": "BruteForcePolicySpec",
730
+
"template": {
731
+
"name": "POLICY_TEMPLATE_NGINX_BASE"
732
+
},
733
+
"applicationLanguage": "utf-8",
734
+
"enforcementMode": "blocking",
735
+
"brute-force-attack-preventions" : [
736
+
{
737
+
"bruteForceProtectionForAllLoginPages" : false,
738
+
"loginAttemptsFromTheSameIp" : {
739
+
"action" : "alarm",
740
+
"enabled" : true,
741
+
"threshold" : 20
742
+
},
743
+
"loginAttemptsFromTheSameUser" : {
744
+
"action" : "alarm",
745
+
"enabled" : true,
746
+
"threshold" : 3
747
+
},
748
+
"reEnableLoginAfter" : 3600,
749
+
"sourceBasedProtectionDetectionPeriod" : 3600,
750
+
"url": {
751
+
"method": "*",
752
+
"name": "/html_login",
753
+
"protocol": "http"
754
+
}
755
+
}
756
+
],
757
+
758
+
}
759
+
}
702
760
```
761
+
{{< note >}} For further configuration details, see NGINX App Protect WAF Declarative Policy Guide [Declarative Policy guide]({{< relref "/nap-waf/v4/declarative-policy/policy/#policy/brute-force-attack-preventions" >}}). {{< /note >}}
Copy file name to clipboardExpand all lines: content/nap-waf/v5/configuration-guide/configuration.md
+73-12Lines changed: 73 additions & 12 deletions
Original file line number
Diff line number
Diff line change
@@ -791,15 +791,46 @@ To enable mTLS in NGINX, you need to perform the following steps:
791
791
792
792
## Brute Force Attack Preventions
793
793
794
-
Brute force attacks are attempts to break in to secured areas of a web application by trying exhaustive,
794
+
### Overview
795
+
796
+
Brute force attacks are attempts to break in to secured areas of a web application by trying exhaustive,
795
797
systematic, username/password combinations to discover legitimate authentication credentials.
796
-
To prevent brute force attacks, WAF tracks the number of failed attempts to reach login pages
797
-
with enforced brute force protection. When brute force patterns are detected,
798
-
the WAF policy considers it to be an attack if the failed logon rate increased significantly or
799
-
if failed logins reached a maximum threshold.
798
+
To prevent brute force attacks, NGINX App Protect WAF monitors IP addresses, usernames, and the number of failed login attempts beyond a maximum threshold.
799
+
When brute force patterns are detected, the NGINX App Protect WAF policy either trigger an alarm or block the attack if the failed
800
+
login attempts reached a maximum threshold for a specific username or coming from a specific IP address.
801
+
To enable brute force protection, at least one login page must be created.
802
+
803
+
---
804
+
805
+
### Login page policy example
806
+
807
+
A login page specifies the login URL that users must pass through to get authenticated. The configuration of a login URL includes the URL itself, the username and passwords parameters and the validation criteria (how we know that a login was successful or failed)
808
+
```json
809
+
"login-pages": [
810
+
{
811
+
"accessValidation" : {
812
+
"responseContains": "Success"
813
+
},
814
+
"authenticationType": "form",
815
+
"url" : {
816
+
"method" : "*",
817
+
"name" : "/html_login",
818
+
"protocol" : "http",
819
+
"type" : "explicit"
820
+
},
821
+
"usernameParameterName": "username",
822
+
"passwordParameterName": "password"
823
+
}
824
+
]
825
+
```
826
+
827
+
{{< note >}} For further configuration details, see NGINX App Protect WAF Declarative Policy Guide [Declarative Policy guide]({{< relref "/nap-waf/v5/declarative-policy/policy/#policy/login-pages" >}}). {{< /note >}}
828
+
829
+
---
800
830
801
831
### Brute force policy example
802
832
833
+
Example1: A single brute force configuration is applied universally to all login pages.
803
834
```json
804
835
{
805
836
"policy": {
@@ -812,11 +843,6 @@ if failed logins reached a maximum threshold.
812
843
"brute-force-attack-preventions" : [
813
844
{
814
845
"bruteForceProtectionForAllLoginPages" : true,
815
-
"detectionCriteria" : {
816
-
"action" : "alarm",
817
-
"detectDistributedBruteForceAttack" : true,
818
-
"failedLoginAttemptsRateReached" : 100
819
-
},
820
846
"loginAttemptsFromTheSameIp" : {
821
847
"action" : "alarm",
822
848
"enabled" : true,
@@ -827,16 +853,51 @@ if failed logins reached a maximum threshold.
827
853
"enabled" : true,
828
854
"threshold" : 3
829
855
},
830
-
"measurementPeriod" : 900,
831
-
"preventionDuration" : "3600",
832
856
"reEnableLoginAfter" : 3600,
833
857
"sourceBasedProtectionDetectionPeriod" : 3600
834
858
}
835
859
]
836
860
}
837
861
}
862
+
```
838
863
864
+
Example2: Different brute force configurations can be defined for individual login pages.
865
+
```json
866
+
{
867
+
"policy": {
868
+
"name": "BruteForcePolicySpec",
869
+
"template": {
870
+
"name": "POLICY_TEMPLATE_NGINX_BASE"
871
+
},
872
+
"applicationLanguage": "utf-8",
873
+
"enforcementMode": "blocking",
874
+
"brute-force-attack-preventions" : [
875
+
{
876
+
"bruteForceProtectionForAllLoginPages" : false,
877
+
"loginAttemptsFromTheSameIp" : {
878
+
"action" : "alarm",
879
+
"enabled" : true,
880
+
"threshold" : 20
881
+
},
882
+
"loginAttemptsFromTheSameUser" : {
883
+
"action" : "alarm",
884
+
"enabled" : true,
885
+
"threshold" : 3
886
+
},
887
+
"reEnableLoginAfter" : 3600,
888
+
"sourceBasedProtectionDetectionPeriod" : 3600,
889
+
"url": {
890
+
"method": "*",
891
+
"name": "/html_login",
892
+
"protocol": "http"
893
+
}
894
+
}
895
+
],
896
+
897
+
}
898
+
}
839
899
```
900
+
{{< note >}} For further configuration details, see NGINX App Protect WAF Declarative Policy Guide [Declarative Policy guide]({{< relref "/nap-waf/v5/declarative-policy/policy/#policy/brute-force-attack-preventions" >}}). {{< /note >}}
0 commit comments