Security

Application-level security settings, what each one protects against, and the ones worth turning on before you go live.

7 min read9 sections

Every request that reached the application, parsed into readable entries — who asked for what, what they got back, and what they were using. This is where you see scanning, probing and brute-force attempts against this application specifically.

Getting here: Servers → a server → Applications → an application → Security

1. What this tab is, and what it is not

It is a reader. The tab pulls the web server's access log for the application and turns each line into a structured entry you can filter and search. It contains one section — Incidents logs.

It is not a control panel. There is nothing here to switch on, no rule to write, no address to block. Seeing an attack here does not stop it.

That division is worth being clear about up front, because the tab's own description mentions managing security settings:

NeedWhere it lives
See what is hitting the applicationSecurity (this tab)
Block an IP or a portServer → Firewall
Rate limiting, bot filtering, WAF rules, country blocksCloudflare Protection, for domains routed through Cloudflare
Restrict who can reach the server over SSH/SFTPApplication → Access

Read here, act there. The value of this tab is that it tells you what to go and block, and gives you the evidence.

2. Fetching

Unlike the Logs tab, this one loads by itself as soon as you open it — there is a view waiting for you rather than an empty state.

ControlNotes
Lines50 / 100 / 200 / 500 / 1000 — defaults to 50
Fetch LogsRuns the read; shows Fetching…
RefreshRe-runs it with the same settings
Last fetchedThe time of the most recent read

Newest first. Entries are shown in reverse order, so the most recent request is at the top. This is the opposite of the Logs tab, and it is the right way round here: when you are checking whether something is happening now, you want the latest request first.

Fetching is a snapshot. Nothing updates on its own — press Refresh to see what has happened since.

If it fails, the message names the log type it was trying to read; in practice the cause is an unreachable server or a missing access log rather than anything about log types.

3. What each entry shows

Every parsed line becomes a card:

FieldWhat it tells you
StatusThe HTTP response code, colour-coded
MethodGET, POST, HEAD, PUT…
PathWhat was requested — hover for the full path when truncated
IPWho made the request
TimestampWhen
User AgentWhat client they claimed to be — Unknown when absent
RefererWhere they claim to have come from, shown as a link

Lines that do not match the standard access-log format are shown raw, in grey, rather than being dropped.

Reading the colours

ColourStatusWhat it usually means here
Green2xxThe request succeeded — the visitor got what they asked for
Blue3xxA redirect — normal for www/non-www and HTTP→HTTPS
Amber4xxThe request was refused or the page doesn't exist
Red5xxYour application failed, not the visitor

The amber and red bands mean opposite things. A wall of 4xx is usually someone probing for things you don't have — which is noise unless it succeeds. A 5xx is your own application breaking, and belongs in the Logs tab's error log where the reason will be.

4. Filter badges

Five badges, each with a count:

BadgeCovers
AllEvery line fetched
Errors5xx
Warnings4xx
Info2xx
Debug3xx

Two behaviours to know:

  • Unparsed lines appear only under All. Selecting any specific level hides them, so a malformed or unusual log line can vanish from view. If something you saw disappears when you filter, go back to All.
  • The four counts need not add up to All, for the same reason — All counts every line including the ones that could not be parsed.

5. Text search

Filter logs… matches anywhere in the original log line, case-insensitively, and combines with the level badge. clears it.

Because it searches the raw line, it covers every field at once — IP, path, status, user agent and referer. That makes it the main investigative tool on the page.

What to search for

Signs of scanning — paths you don't have:

SearchWhat it finds
wp-login / wp-adminWordPress brute-force bots — noise on a WordPress site, pure scanning on anything else
.envAttempts to grab your environment file and its credentials
.gitAttempts to download your repository
phpmyadmin / adminerDatabase admin panel probing
xmlrpcA classic WordPress amplification target
/adminGeneric admin-panel discovery

Signs of automation — user agents:

SearchWhat it finds
curl / python-requests / Go-http-clientScripted clients, not browsers
bot / spiderCrawlers, legitimate and otherwise
sqlmap / nikto / nmapNamed attack tools that don't hide their identity

Signs of a specific actor: paste an IP address to see everything one source did, which is how you decide whether it is a scanner, a crawler or a real visitor before blocking it.

6. Reading the tab as a security review

A practical order to work in:

  1. 1Fetch 1000 lines — anything less is a keyhole.
  2. 2Check Errors (5xx) first. These are your application failing. If there are any, the reason is in the Logs tab's error log.
  3. 3Check Warnings (4xx) next, and look at the paths. Scattered 404s across random paths are scanning. Repeated 401 or 403 on a login path is a brute-force attempt.
  4. 4Search the offending IP to see the full pattern of what it did.
  5. 5Check whether anything succeeded. A scanner hitting /.env and getting 404s is noise. A scanner hitting /.env and getting 200 is an incident — that file is being served and its contents are gone. Rotate every credential in it immediately.
  6. 6Act elsewhere — block the IP in the server Firewall, or apply rate limiting and bot rules in Cloudflare Protection.

The judgement that matters

Constant probing is normal and mostly harmless. Any server with a public IP is scanned continuously by automated tools; a log full of 404s for WordPress paths on a Laravel application means the internet is doing what it always does. It is not a reason to panic and not usually a reason to act.

What matters is a 2xx where you did not expect one. The status code is the line between "someone tried" and "someone succeeded", and it is the single most useful thing on this page.

7. Limits worth knowing

  • This shows only what reached the web server. Requests blocked by the firewall, or absorbed by Cloudflare before reaching your origin, never appear here. An empty log is not proof of no attacks — it can mean your protection is working.
  • It is one application's log, not the server's. Another application on the same server has its own.
  • There is no alerting. Nothing here notifies you; you only see it when you look.
  • There is no history beyond the log file. Rotation eventually removes old entries, and the tail you fetch is bounded by the Lines setting.
  • The tab cannot block anything.

8. Common problems

ProblemCause
Very few entries on a busy siteLines is at its default of 50 — raise it
Search finds nothing you expectedIt only covers the lines fetched, not the whole file
An entry disappears when filterinUnparsed lines show only under All
The badge counts don't add upAll includes unparsed lines; the level badges don't
Entries look staleIt's a snapshot — press Refresh
Fetch failsThe server is unreachable, or the application has no access log yet
Nothing but 4xx from strangersRoutine internet scanning — noise, unless one returns 2xx
Lots of 5xxYour application is failing — go to the Logs tab's error log
Log is empty but the site has trafficThe vhost may write to a differently named log, or requests are being served from cache/CDN
You found an attacker but can't block themBy design — use the server Firewall or Cloudflare

9. How this relates to other places

WhereScope
Security (this tab)Parsed access log for one application — who hit it and what they got
Logs tabThe same access log raw, plus error, PHP-FPM, systemd and container logs
Server → FirewallWhere you actually block an address or close a port
Cloudflare ProtectionEdge-level blocking, rate limiting, bot management and WAF
Settings tabUptime alerts — tells you the site is down, not who took it down

The natural pairing: Security shows you the address, Firewall stops it.

Something here not matching what you see in the panel?

Tell us
Start your journey today

Ready to take control
of your hosting?

Deploy servers, run self-hosted business apps, and keep your data on your own VPS — with a dedicated DevOps manager by your side.

No lock-in contracts
No credit card required
Dedicated DevOps manager