minsec

Troubleshooting

The five things that actually go wrong, and the command that tells you which one it is.

Nothing is being banned

Work down this list; each step is offline or harmless.

1. Is the filter matching at all?

minsec test sshd /var/log/secure

No output means the pattern never matched. Either the log genuinely has no failures, or your service logs in a format the built-in pattern does not cover — compare a real failure line against minsec-filter.toml(5) and override the filter's patterns.

2. Is minsec reading the right source?

minsec inspect

This shows which files and journal identifiers each enabled filter is actually watching. A filter configured for /var/log/auth.log on an EL system (where the file is /var/log/secure) reads nothing and reports no error, because an absent file is a normal state — it may appear at the next rotation.

3. Is the threshold being reached?

maxretry failures must land inside findtime. Three failures an hour apart never trigger a default configuration. Lower maxretry or widen findtime for the filter.

4. Is the address allowlisted?

minsec inspect | grep -A5 allow

Loopback and local addresses are always implied. Your own address may be too.

5. Is the daemon running with a real backend?

minsec status

If backend is null, the engine is running and deciding correctly — it is just not writing to the firewall. That is the dry-run mode.

Bans exist but traffic still arrives

Check the kernel, not the daemon:

sudo nft list set inet minsec ban4

If the address is in the set and packets still get through, something ahead of priority -10 is accepting them first, or the traffic is arriving on a path the input/forward chains do not see (a container's own netns, for example). minsec does not modify other firewalls' rules by design — see firewall.

minsec check fails after an edit

That is the check doing its job. It compiles every enabled filter offline, so a bad regex or an unknown key fails here rather than at the next restart. The daemon does not live-reload; run check before restart, always.

The service will not start

systemctl status minsec
journalctl -u minsec -n 50 --no-pager

The most common causes are a configuration error (minsec check will say so), a missing /run/minsec (systemd-tmpfiles --create after a source install), or no nftables support in the kernel — try --backend null to confirm the engine itself is fine.

Multiplayer mode is not pulling anything

minsec-sync status

This reports enrollment state, the events-log cursor, and the feed cursors. A fresh enrollment solves a proof-of-work, which takes a few seconds of one core; until it completes there is no host_id and nothing is pulled. See multiplayer mode.

Still stuck

Open an issue at the minsec repository with the output of minsec inspect --json and minsec status --json. Neither contains log content, usernames or traffic — see privacy for exactly what they do contain.