Support

Admin Tools

#42954 Brute-force login protection on Joomla 6 — current recommended configuration

Posted in ‘Admin Tools for Joomla!’
This is a public ticket

Everybody will be able to see its contents. Do not include usernames, passwords or any other sensitive information.

Environment Information

Joomla! version
6.1.0
PHP version
8.4.21
Admin Tools version
Pro 7.8.8

Latest post by nicholas on Tuesday, 19 May 2026 02:58 CDT

crazyhorse

i'd like to ask for guidance on the current recommended configuration for protecting a Joomla 6 site against brute-force login attempts using Admin Tools Professional.

A site I administer recently received 603 failed administrator login attempts from a single IP (216.107.136.107) over 18 minutes. The attempts cycled through six generic usernames (admin, administrator, root, superadmin, demo, and the site name), none of which exist as accounts on the site. The IP was not automatically blocked.

In working through the configuration, I have established the following:

- The Auto-ban feature counts entries in the Blocked Requests Log. Failed Joomla logins are not recorded there, so the counter does not increment for this attack pattern.
- "Deactivate users on failed login" on the Hardening Options tab requires an existing username to act on. As none of the attempted usernames existed, this feature did not fire.
- I have reviewed all WAF Configuration tabs (Basic Features, Request Filtering, Hardening Options, Cloaking, Project Honeypot, Exceptions, Auto-ban, Logging & Reporting, Customisation) and the System - Admin Tools plugin settings without finding a setting that blocks an IP based on failed login count.

I have also read your May 2018 GDPR notice, which mentions that the previous "log failed login passwords" feature was removed, and I understand the reasoning for that.

My questions:

1. Within current Admin Tools Professional for Joomla 6, is there a configuration option that will block an IP after a given number of failed logins? If so, please point me to it.

2. If not, is this provided by Akeeba LoginGuard or another product in the Akeeba suite?

3. What is Akeeba's currently recommended configuration for mitigating brute-force login attacks on Joomla 6 sites? I am already aware of the Administrator Secret URL Parameter and intend to enable it; I want to confirm whether that is the primary recommended defence or whether additional measures are advised.

I can provide the full attack log or configuration screenshots if useful.

Thanks,
Philip

 Old and mostly in the way

crazyhorse
Looking back at ticket #30868 from February 2019, you advised the use of 'treat failed logins as security exceptions' as the third layer of a four-layer defence model. I can no longer locate that setting in the Joomla 6 build of Admin Tools. Has it been moved, renamed, or removed?
 Old and mostly in the way

nicholas
Akeeba Staff
Manager

Thank you for your detailed message and for doing the homework on what's available in Admin Tools.

To answer your questions directly:

1. Is there a configuration option in Admin Tools Professional for Joomla 6 that blocks an IP after failed logins?

No. Admin Tools does not currently have a built-in mechanism to track failed Joomla administrator login attempts and auto-block the originating IP. The Auto-ban feature in Admin Tools works from its own Blocked Requests Log (WAF violations, honeypot hits, etc.), not from Joomla's authentication failures. The "Deactivate users on failed login" hardening option also requires the username to exist on the site, so it does not help against the kind of username-cycling attack you described.

Nicholas told me he has thought about adding this feature, and the reason it has not reached the product yet is that tracking failed logins for usernames that do not exist on the site carries a significant risk of false positives. Users frequently mistype their username, conflate their username with their email address, or are not sure which of their three usual usernames they used on a given site. Blocking their IP in those cases would be worse than useless — it would create support tickets. He may add this as an option with a prominent warning about this behaviour in the future.

Another feature Nicholas has in mind is the ability to block logins using "forbidden" usernames. This was part of a two-pronged concept: disallowing registration of forbidden usernames (already implemented), and disallowing login to the site using those usernames (not yet implemented). This will come.

However, and regardless of these future changes, if an attacker follows a "spray" strategy — using a large number of IPs in a credentials stuffing attack — these features will not fully protect you. They will still see blocked requests because there are simply too many IPs involved. You cannot stop that. You have no control over what other people do. Your control is on your site, and that control comes from making credentials stuffing fail, not from trying to block every attacker at the network level.

2. Is this provided by Akeeba LoginGuard or another product?

Akeeba LoginGuard as a standalone product no longer exists. Its features were contributed into Joomla itself starting with Joomla 4.2. Joomla's native Multi-factor Authentication is Akeeba LoginGuard — under a different name. This is covered in point 3 below.

3. What is the currently recommended configuration?

Our recommendation is a layered approach:

Frontline defense: Administrator Password Protection — This is the primary defence layer. It requires a pre-shared password in addition to the standard Joomla credentials, making it extremely hard for automated tools to even attempt login.

Backup: Administrator Secret URL Parameter — You are already planning to enable this. It hides the administrator login URL behind a secret path, effectively removing the login page from public visibility.

Last line of defense: Multi-factor Authentication (MFA) — The Akeeba LoginGuard suite was contributed into Joomla 4.2+ as the native Multi-factor Authentication system. We strongly recommend enabling MFA on all administrator accounts. We are also preparing a companion plugin that will allow you to disable password-based logins entirely for accounts with two or more passkeys configured — passkeys provide the strongest possible authentication.

While MFA and passkeys will not stop attackers from trying to log in, they guarantee that they will fail to gain access. Hiding the door (via Secret URL) is useful, but making the door's lock virtually unpickable is what truly matters.

If you'd like an immediate fix for the current attack, you can add the attacking IP (216.107.136.107) to the Manual IP Deny List (Admin Tools → WAF Configuration → Manual IP Deny List). This will block it right away, though it does not scale for future dynamic IPs.

Nicholas K. Dionysopoulos

Lead Developer and Director

🇬🇷Greek: native 🇬🇧English: excellent 🇫🇷French: basic • 🕐 My time zone is Europe / Athens
Please keep in mind my timezone and cultural differences when reading my replies. Thank you!

nicholas
Akeeba Staff
Manager

In case you're wondering about the third person in my reply – I had my developer draft the reply, I edited it, I posted it, and forgot to change it to first person. Oops!

Nicholas K. Dionysopoulos

Lead Developer and Director

🇬🇷Greek: native 🇬🇧English: excellent 🇫🇷French: basic • 🕐 My time zone is Europe / Athens
Please keep in mind my timezone and cultural differences when reading my replies. Thank you!

crazyhorse

Thanks Nicholas — that's exactly what I needed. Will work through enabling Admin Password Protection and MFA this week.

 Old and mostly in the way

nicholas
Akeeba Staff
Manager

Another point that was probably lost here is that the Treat Failed Logins As Blocked Request will indeed block these IPs after a few failed attempts each. Still, you perceive it as non-effective because the attack is spread across multiple IPs. If you have a threshold of three attacks in 5 minutes and the attacker is using 100 IPs they do get 300 tries.

Also, I just remembered something.

Having had this kind of attack launched against me. It's ultimately impossible to stop it in any meaningful way on your server, be it automatic or manual. The attacks come from a variety of IPs from different providers, countries, and continents – I bet that's a botnet comprised of compromised devices and servers. Because of that, you can't block an ASN or IP block and call it a day. The only giveaway is the rate of requests, but filtering on the rate of requests requires having Redis (or a similar in-memory database), as using an RDBMS like MySQL or PostgreSQL to keep count of request rate per IP will lead to performance degradation on your site, ultimately turning a merely annoying credentials stuffing attack into a Denial of Service.

One thing you can do is use something like CloudFlare which can indeed notice the rate of requests and throw a CAPTCHA page to the attacker. Even if they use automated methods to solve the CAPTCHA (with varying degrees of success) this slows them down and wastes their resources badly enough that they eventually stop even trying. That said, most of these credentials stuffing attacks are not that sophisticated; when they are met with a CAPTCHA page they just move onto the next credentials pair. When they fail enough CAPTCHA pages their IPs get flagged as spammy and CloudFlare just declines serving them altogether.

Do note that Apache does have built-in modules which can rate-limit requests. However, I recommend NOT using them. If you make the limits sensitive enough to block these attacks (which consist of a single HTTP GET and POST request pair for each credential) they will be sensitive enough to block legitimate traffic (which consists of dozens of requests to fetch all the media files that go with your page). If you make them lax enough to allow legitimate traffic, they won't be stopping the malicious traffic – and they might indeed stop some of the legitimate traffic regardless. This is why having CloudFlare show a CAPTCHA page is a better solution. It will catch legitimate traffic, but it will mostly just be a 2–3 second delay while a small piece of JavaScript checks it's a real browser accessing the site, with a fallback to a traditional CAPTCHA if JS is disabled or the auto-detection fails. Legitimate visitors caught in error will be marginally slowed down or ever so slightly inconvenienced whereas malicious traffic will be stopped dead on its tracks. This is not something you can do without a fairly elaborate setup that's beyond what is realistic on commercial hosting, and definitely beyond what I could realistically ship in a mass-distributed extension (that is to say, I know how to implement it, which is how I know it won't work for the vast majority of my clients who can't have access to the server software and environment configuration necessary).

Nicholas K. Dionysopoulos

Lead Developer and Director

🇬🇷Greek: native 🇬🇧English: excellent 🇫🇷French: basic • 🕐 My time zone is Europe / Athens
Please keep in mind my timezone and cultural differences when reading my replies. Thank you!

Support Information

Working hours: We are open Monday to Friday, 9am to 7pm Cyprus timezone (EET / EEST). Support is provided by the same developers writing the software, all of which live in Europe. You can still file tickets outside of our working hours, but we cannot respond to them until we're back at the office.

Support policy: We would like to kindly inform you that when using our support you have already agreed to the Support Policy which is part of our Terms of Service. Thank you for your understanding and for helping us help you!