Support

Admin Tools

#43318 WAF blocking specific user on backend only - no log entries generated

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.3
PHP version
8.4.25
Admin Tools version
7.9.2

Latest post by nicholas on Thursday, 10 September 2026 10:36 CDT

dhillock
Hello,

I'm the administrator for a Joomla running Admin Tools. I'm trying to diagnose a WAF block that I can't trace through any of the normal tools, and I'm hoping you can point me to where else this might be logged or configured.

Symptoms:
- A specific user (not me) is blocked from accessing the backend (/administrator) and shown our custom WAF message (set under Configure WAF -> Customisation -> Custom message).
- She can access the site frontend without any issue - only the backend triggers the block.
- The block is reproducible: with the Admin Tools system plugin enabled, she is blocked every time (confirmed with a hard refresh and cleared browser cache). With the plugin disabled (renamed provider.php in plugins/system/admintools/services/ to disable it), she can log into the backend without issue.
- Her IP address is entered in the IP Allow list (Site IP Allow List) and is NOT present in the IP Disallow List, WAF Deny List, ipblock table, or ipautoban table.
- I checked the XXX_admintools_log table directly in the database (with "Log blocked requests" set to Yes) and there is no entry at all for her IP, before or after her most recent blocked attempt.
- I enabled "Keep a debug log file" under Logging & Reporting, had her retry, and no new debug log file was created anywhere under /administrator/logs or /tmp, and no file anywhere on the site was modified in the 2 hours around her attempt.
- I also checked admintools_wafblacklists, admintools_ipallow, admintools_adminiplist, and admintools_filescache without finding anything relevant.

Given that the block clearly originates from the Admin Tools plugin (disabling it resolves the issue immediately) but produces no log, debug file, or database record anywhere I can find, could you help me identify the problem.

Happy to provide screenshots, config exports, or further details as needed.

Thank you for your help.

David Hillock
Website Chair, Toronto Camera Club
torontocameraclub.com

nicholas
Akeeba Staff
Manager

I believe that you have set up an administrator secret URL parameter but that person is not using it, or using it improperly.

As for your troubleshooting:

  • What is logged is configurable. If you have added Admin Query String in "Do not log these reasons" this block reason will not be logged.
  • If you have set Log blocked requests to No nothing will be logged.
  • Remember that Keep A Debug Log File will only write to the log file what is being logged. The aforementioned two cases where this block or anything at all is not logged also applied to the log file.
  • The Site IP Allow List only is a whitelist. It only applies when "Allow administrator access only to IPs in Exclusive Allow IP List" is enabled. What you are looking for is "Never block these IPs" in the Configure WAF page.
  • IP addresses tend to change. I have seen very few ISPs which will keep your IP address static without asking for a hefty monthly payment.

Ultimately, I believe the issue can be resolved by simply letting that person know that instead of visiting https://www.example.com/administrator they must visit https://www.example.com/administrator/index.php?your_secret_word.

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!

dhillock
This is now happening to me - a SuperUser - but only in Safari for Mac - Firefox works fine.

Your explanation about the Site IP Allow List was very helpful, and it led me to a bigger discovery: when I triggered the Rescue URL (after temporarily removing my custom WAF message so the default block page would show), the resulting email reported the blocked IP as 127.0.0.1 - not my real IP address. That confirmed the site is behind a reverse proxy and Admin Tools was evaluating every visitor against that same loopback address.

I went to System - Global Configuration - Server tab and enabled "Behind Load Balancer" (previously set to No), then saved. Real visitor IPs immediately started appearing correctly in the admintools_log table (I can see genuine IPs like 142.198.132.244 and 67.69.69.230 logged for loginfailure events afterward), so the proxy detection is now working.

However, I'm still getting blocked with the custom message myself, even after this fix, and even though my current IP (99.228.210.42) is entered in "Never block these IPs" under Configure WAF - Exceptions. When this happens, there is still no corresponding entry in the admintools_log table for my IP, before or after the block - logging is enabled (Log blocked requests = Yes) and "Do not log these reasons" is empty.

Note that I've removed the Safari cache and cookies and have tried this in a safari private window, with the same result.

Could you help me understand what type of block would bypass admintools_log entirely even now that real IPs are detected? Is there a separate check (e.g., related to the Administrator secret URL parameter or its cookie override) that doesn't route through the standard logging function?

Happy to provide further details, screenshots, or database output as needed.

David

nicholas
Akeeba Staff
Manager

Are you behind a CDN, e.g. CloudFlare? If so, make a rule that all https://www.example.com/administrator* URLs (note there's intentionally no slash between administrator and the star) are non-eligible for caching – replace www.example.com with your own site's domain, of course. Otherwise, when one person gets blocked – whoever that may be – anyone else accessing that URL will see that block message.

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!

dhillock
We are not using a CDN and we have not changed anything on our VPS.
This is now happening to all three SuperUsers, including myself.

The other two SUs are using Chrome and they have also tried Microsoft's Edge. Same issue. I have the same issue when I use Edge on my windows box.

On my Mac, I have the same problem with Chrome and Safari. However, Firefox works.

Thank you for your feedback.

David

nicholas
Akeeba Staff
Manager

Your claim that Behind Load Balancer made the real visitor IPs available is diametrically incompatible with your assertion that your site is not behind a CDN, load balancer, reverse proxy, or opaque network infrastructure in general. There is a causal relationship between Behind Load Balancer making real IPs available (which were previously unavailable) and being behind opaque network infrastructure. You are wrong about one of your assertions. I cannot tell you which one. From where I am, I see your site resolve to an IP that belongs to IONOS. I don't know what goes on behind it; only your host can answer that.

Your browser has nothing to do with your IP address. But what you were previously describing is an IP block.

Moreover, you claim that Admin Tools blocks you, you have checked that logging is enabled, nothing is excluded from logging, but there is no log for you getting blocked... yet there are log entries for other requests getting blocked. I can tell you upfront that what you are describing is impossible. Logging takes place BEFORE your request is blocked, which takes place BEFORE your IP address is blocked. Assuming you checked that logging blocked requests is enabled and excluding from the log is empty, you can't be blocked by Admin Tools without a corresponding Blocked Requests Log entry. The fact that you see blocked entries from other people means that logging blocked requests is enabled. Check if you are excluding any blocked request type from being logged.

You also claim that Admin Tools blocks you despite the fact your IP is in Never block these IPs. This is also impossible. If the IP your site sees matches a record in that table the security controls are disabled altogether.

Given all that, I conclude that your problem was never with Admin Tools but something else. If you were right about Behind Load Balancer making a difference, your VPS is behind a misconfigured caching reverse proxy. In this case, random Visitor X gets blocked trying to access your backend improperly. Then you visit the same page and your host's caching proxy serves the cached page with the error message. Your changing browsers does absolutely nothing but introduce enough time for that cache to expire.

I am sorry, but this does not actually look like an Admin Tools issue at all.

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!

dhillock
Thank you so much for the detailed feedback - it helped me to resolve the issue!

Our VPS (IONOS, Plesk) uses an Nginx reverse proxy in front of Apache. The site-wide Nginx config correctly forwards X-Real-IP and X-Forwarded-For headers, and enabling "Behind Load Balancer" in Joomla's Global Configuration made real visitor IPs show up correctly almost everywhere.

However, we had a custom Nginx location block for /administrator/ (added previously to prevent the login page from being cached after password changes) that used its own proxy_pass directive but never included those two header lines. As a result, every request to /administrator specifically was still being seen by Joomla/Admin Tools as coming from 127.0.0.1, regardless of who the real visitor was or what was in the Never Block / IP Allow lists. That explains why our IPs being on the Never Block list never helped, and why we never found matching log entries when searching by our real IP addresses - the logged IP was always 127.0.0.1, tied to a real WAF check we simply weren't searching for correctly.

Before (missing the two header lines):

location /administrator/ {
proxy_cache_bypass 1;
proxy_no_cache 1;
proxy_pass https://127.0.0.1:7081;
proxy_set_header Host $host;
proxy_ssl_name $host;
proxy_ssl_server_name on;
}

After (fixed):

location /administrator/ {
proxy_cache_bypass 1;
proxy_no_cache 1;
proxy_pass https://127.0.0.1:7081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_ssl_name $host;
proxy_ssl_server_name on;
}

We added the missing proxy_set_header X-Real-IP and proxy_set_header X-Forwarded-For lines to that location block, and the issue is now fully resolved for every browser and every Super User who was affected.

Thank you for pointing us toward the reverse proxy / load balancer angle - that was the key that let us find it. Appreciate your help and patience through this.

David

nicholas
Akeeba Staff
Manager

Now it makes so much more sense!

For what it's worth, last year I had created a containerized site I have misconfigured deliberately. It's there so I can test broken IP forwarding setups. Your configuration ended up accidentally reproducing this broken config on a live server.

The reason I didn't think of it is that in my head, all of my past clients' servers, and my reproduction repository linked above it's always been an "all or nothing" situation. It either happens on the entire site, or not at all. I hadn't seen a site where only /administrator had a misbehaving NginX proxy rule set. Now I know to take that into consideration as well.

Also, for what it's worth, I waved off the browser factor for a reason. The way I read your troubleshooting recount it seemed to me that Firefox was always the last browser you were trying. I assumed that the block is time-constrained and trying all the other browsers wasted enough of your time that the block expired. Therefore, by the time you started using Firefox the block had been lifted, and the browser actually had nothing to do with it. Do tell me if I had a good guess here.

Thank you for pointing us toward the reverse proxy / load balancer angle - that was the key that let us find it. Appreciate your help and patience through this.

I always try to help, even with "impossible" issues. Web servers are deterministic and have no free will. If something's broken, there's a reason. The reason may not be in our software, but I am happy trying to help to the extent humanly possible.

On that note, thank you for being willing to follow my breadcrumbs trying to solve this instead of screaming abuse at me. I don't take it for granted.

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!

dhillock
Thanks for the detailed reply, and for the wonky_host repo - that's a great resource, and good to know you'll have this scoped-to-one-path scenario on your radar now.

On the browser question: I don't think it was just timing. At one point I specifically logged out of Firefox, closed the tab, opened a brand new tab, and went straight to the backend - it worked immediately, first try, no waiting involved. My guess is that Firefox had already picked up the "browser cookie override for the administrator secret URL parameter" cookie at some point before the /administrator proxy issue started causing trouble, and that cookie let it skip the failing check. Logging out only clears the Joomla session cookie, not that one. Safari and Chrome, especially in private windows, never had that cookie, so they always hit the real (broken) check.

Thanks again for sticking with this - it's resolved now and I really appreciate the help.

David

nicholas
Akeeba Staff
Manager

I agree on what happened with Firefox.

Have a fantastic day!

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!