Skip to content
Obscenter

Blog 26 October 2026 · 6 min read

SSH brute force and attack detection for your servers

Detect SSH and RDP password guessing, spraying, logins from new places and web scanners from logs your agent already reads, mapped by country and source.

Server security page with upgrade and restart tiles and an SSH attack card showing 246 refused attempts in 24 hours

Any server with a public address is being tried right now: SSH passwords against root and admin, RDP logons against Administrator, and web requests for /.env, /.git/config and old admin panels. Almost all of it is background noise. The job of attack detection is to keep it as background — counted, mapped, out of the way — and to be loud about the very few events that are not noise.

Obscenter does that from logs its agents already read. There is no separate sensor to install.

Where the data comes from

  • SSH: auth.log or the SSH journal unit. It is always among the agent's "worth switching on" log suggestions, because a quiet auth log is the good case.
  • Windows: the Security event log, events 4625 (failed) and 4624 (succeeded), read as structured fields so it works on a Windows in any language. RDP is told apart from other logon types.
  • Scanning: the nginx or Apache access logs the agent collects.

Failed attempts and scanners are kept as a salted hash and a country, never as an address — enough to follow one source through the table, too little to identify anybody. Successful SSH logins are the exception: they show the address, the region and the reverse DNS name, because the question about a login that worked is "was that me?", and you can only answer it if you can recognise your own connection.

Logs page with lines from nginx, postgresql and an sshd connection closed during preauth
The auth log is one more source on the logs page; switching it on fills the SSH cards

SSH brute force: breadth, not volume

A detector that alarms on every failed login is switched off within a day. So the rules ask for breadth, which is what guessing looks like, rather than volume:

TicketWhenSeverity
Guessing from one source10 or more failures across at least 3 accounts, or 5 accounts that do not exist, within 10 minutesWarning; serious from 100 failures
Guessing from many sourcesSeveral guessing sources on one machine, or 15 or more sources with 50 or more failuresWarning
A login worked after guessingThe same guessing pattern, then a successCritical with a password, serious with a key
Login from a new placeA success from a network not seen beforeCritical

Somebody who mistypes their own password four times and then gets in is not an attack, and is not reported as one. A key login after failures is milder than a password login, because a key cannot be guessed. Your own successful logins show in green as signed in, not as an alarm.

Logins from new places

A login counts as usual when an earlier login came from the same network — the same /24 for IPv4 or /64 for IPv6 — or from the same provider's dynamic pool within the same wider block, because mobile carrier NAT moves you between /24s every day. A hosting provider's name never counts as usual: an attacker renting a server from the same provider is exactly the case to catch. When the agent first starts, the last eight days of logs are read in as the baseline, so the first week does not page you about yourself.

Anything else is a new place, and a critical ticket that mails, written in words: the machine, the place, your usual places, the local time, and what to do if it was not you.

RDP and Windows logon guessing

Windows logons follow the same rules: guessing from one source, guessing from many, and a logon that succeeded after failures, which is critical. One more ticket covers a single account failing again and again with the wrong password — usually a service still holding an old password, not an attacker, and worded as such. Every 30 minutes the Windows agent checks that the Security log is readable and that logon auditing is on, because a silent log on a machine with auditing off is not good news.

Problems page with a Security panel listing an open ticket beside the error and slowdown panels
Security tickets get their own panel, so a scan never buries a slow checkout and vice versa

Web scanners and the 200 that matters

The scanning view reads collected access logs and answers four questions: where from, when, who, and where it landed — which site, on which machine. It maps sources by country and draws them by hour.

A refused probe and an answered one are always kept apart. A thousand 404s for /.env is weather. A 200 means the server handed something out. But a single-page app answers 200 to everything, because its router runs in the browser, so a 200 alone proves nothing. Obscenter compares the size of the answer with what the site serves for its ordinary pages, and then checks for itself: it fetches the path from origins your install already knows are yours — never from a URL taken out of a log line — and recognises a private key, a git config, cloud credentials, an .env file or a database dump from the content.

  • Being scanned: one source asking for at least 8 different probe paths in 12 or more requests within 10 minutes — a warning.
  • Served a secret to a scan: critical only once the content is confirmed; an unconfirmed answer is serious. Verdicts are re-checked every six hours.

Your own machine is never the attacker

Loopback, private ranges and link-local addresses are left out of all three views. This rule exists because of a real mistake: a reverse proxy appears as 127.0.0.1 in its own access log, and a detector once opened a critical ticket accusing the operator's own proxy of stealing a git config. The fix was to exclude the machine's own traffic everywhere, and the check for it is a set of negative controls.

Hosts page with four Ubuntu machines, their public addresses, uptime and agent version
Every machine with an agent is watched at its doors; there is nothing extra to install

The dashboard's own door

Sign-ins to Obscenter itself are recorded in a separate sign-in book, with an automatic brake on repeated failures and administrator blocks that end every session of the blocked account on the spot. That is covered in the server security article, together with vulnerability scanning and reboots.

Details and thresholds: SSH logins, Windows logons and scanning and Logs and log patterns.

Watch your doors

Install the agent, switch on the auth log it suggests, and the SSH cards fill in from the first lines.

Start free or read Getting started.

More from the blog