Skip to main content
.com domains from $2.99 — free WHOIS privacy on every name

Hardening Reference

Brute force attack — Why a login flood shows up first as a speed complaint

The site got slower on Thursday, nothing was deployed, and the access log is almost entirely one URL.

The short answer

A brute-force attack is automated credential guessing — password lists, leaked pairs replayed, or a few obvious passwords sprayed thinly across many accounts — run continuously by machines with no interest in who you are.

The part most write-ups miss is the bill. Every POST to a login form is uncacheable by definition, so each attempt boots PHP, opens the database and occupies a worker. Long before anyone guesses a password, you are paying for the attempt in response time.

By the HostingFast team · Reviewed 24 August 2026

0

Hand-waving in this entry

100+

Entries wired to each other

Real

Numbers you can reproduce

Free

To read, no gate

The variants have names worth knowing because they behave differently in a log. Straight guessing hammers one account with many passwords. Credential stuffing replays real pairs from breach dumps, so the attempt rate is lower and the success rate is far higher. Password spraying tries three common passwords across a thousand usernames, deliberately staying under any lockout threshold you have set.

The defences stack, and they stack cheaply. A unique long password ends guessing outright. A second factor makes a correct guess useless. Rate limiting at the web server thins the traffic before PHP is involved. Key-only SSH ends the contest on that port entirely rather than merely slowing it down.

It costs workers before it costs an account

A cached page is served by LiteSpeed without waking PHP at all. A POST to wp-login.php cannot be cached, so every one of them takes a worker from the same small pool your real visitors are queueing for. Three hundred attempts a minute against a login form is a small denial-of-service attack that nobody set out to launch.

This is why the first complaint is usually about speed. The site is not compromised, it is busy — busy doing unpaid work for a botnet, at the expense of the people trying to check out.

Counting it in the access log

One pass over the log answers it. Filter to the login path, count by minute, then count by source address. A handful of attempts spread over hours is background noise; hundreds a minute from a wide address range is the thing you came looking for. Do the same for xmlrpc.php, which is the quieter route into the same problem on WordPress.

For SSH, the equivalent is the failed-login record and the authentication log. Thousands of failures overnight against root and admin is entirely normal for any machine with a public address, and it is only interesting if password authentication is still enabled.

Stop the request, not just the login

A login-limiting plugin refuses the attempt after PHP has already booted, which fixes the security half and none of the performance half. Blocking at the web server or the network edge is what actually recovers your workers, because the request dies before the application is involved.

fail2ban does the same job on a VPS by reading the log and adding short-lived firewall rules. Pair it with a jail for the web login path as well as for SSH; the default configuration usually only covers the second.

End the contest where you can

On SSH there is a clean answer: keys only, password authentication disabled. After that the attempts continue and every one of them is arithmetic that never terminates. That is a better outcome than any rate limit, because it removes the possibility rather than reducing the frequency.

On the web login you cannot go that far, so aim for a second factor plus edge rate limiting. Neighbouring entries: Two-Factor Authentication, Firewall, SSH and Malware. Edge filtering is standard on plans here, so the volumetric end of this is already handled.

The network filtering that soaks up attacks before they reach a site

Where security and performance turn out to be one subject

Half the security entries in this reference are also performance entries, because unwanted traffic costs the same resources wanted traffic does. We write them that way because that is how they turn up in a ticket.

Edge filtering, NVMe storage and LiteSpeed caching are standard on every tier, so the volumetric half of this is handled before it reaches your account.

  • Security and speed treated as one
  • Log commands, not reassurance
  • Terms linked in the order you meet them
  • Written by the engineers on call

Why HostingFast

Standard on every plan

The cost, stated first

Every login attempt is uncacheable, so it wakes PHP and takes a worker. That is the bill you are already paying.

Three variants told apart

Guessing, stuffing and spraying leave different fingerprints in a log and need different answers.

One pass over the log

Count by minute, then by source, on the login path and on xmlrpc.php. That is the whole diagnosis.

Block early, not late

A plugin refusing the attempt after PHP boots recovers no capacity at all. The edge does.

SSH solved outright

Keys only, passwords off, and the attempts become arithmetic that never terminates.

Wired to its neighbours

Two-Factor Authentication, Firewall and SSH are the entries that complete this one.

Quick Start

From order to online

  1. 1

    Count before you configure

    Filter the access log to the login path, count by minute and by source. Ten minutes of counting beats an afternoon of installing plugins.

  2. 2

    Move the block earlier

    Rate limit at the web server or the edge so the request never reaches PHP. That is where the capacity comes back.

  3. 3

    Take SSH out of the contest

    Keys only, password authentication disabled, then leave the log alone. Failed attempts against a key-only port cost nothing worth reading.

Built In

Loaded onto every plan

  • DDoS filtering absorbed out at the network edge
  • Free SSL on every plan, renewed automatically before it can expire
  • Spam and virus screening on every mailbox as standard
  • SSH, Git and Composer on the developer-focused plans
  • WordPress and 400+ other applications installed in one click
  • Softaculous on board for one-click application installs
  • Email addresses that run on your own domain name
  • A renewal price identical to the price you signed up at
  • Zero setup charges — there is no joining fee, ever
  • Money-back cover: 30 days on hosting plans, 7 on reseller

Frequently Asked

What people ask us most often

How do I count login attempts in my own access log?

Filter to the login path, group the entries by minute, then group them again by source address. Two numbers come out: the attempt rate and how widely it is spread. A steady rate from thousands of addresses is a distributed attempt; a burst from a handful is a script somebody pointed at you. Run the same two counts against xmlrpc.php, which carries the quieter version of the same traffic.

Does a login-limiting plugin fix the slowdown?

Only partly. It refuses the attempt, which is the security half, but PHP has already booted and the worker has already been taken by the time it runs. To get the capacity back the request has to be refused before the application is invoked — at the web server, or at the network edge. Run both if you like, but do not expect the plugin to move your response times.

Is moving SSH off port 22 worth doing?

It cuts log noise and nothing else. Scanners find the new port within a day. The change that matters is key-only authentication with passwords disabled, after which the attempts are irrelevant regardless of which port they arrive on. Do the second one first; treat the port change as tidying.

What if a rate limit locks me out of my own site?

You get back in through the panel, or by allow-listing your own address, or by waiting the window out. The asymmetry is the point: a few minutes of inconvenience for you against arithmetic that never finishes for someone with a million guesses to spend. Support can lift a block immediately if you are stuck, at any hour.

Keep reading

Changing hosts? Run through our checklist first.

A straightforward sequence for a switch your visitors never feel: which files move first, how to shift email across without losing a single message, the right moment to repoint DNS, and the two mistakes behind almost all the downtime we get asked to rescue.

You'll get the checklist email, then occasional pointers on keeping a site running fast. Unsubscribe the moment you want out — the privacy policy covers the rest.

Stop paying for other people's guesses.

Edge filtering on every tier, LiteSpeed caching in front of PHP, and support that reads a log with you.

View Dedicated Cloud plans