Tables name a journal source by its first two units or identifiers; guard test shows 20 matching lines and addresses (--all for all), no /32; Housecarl connection errors without Go's request URL, said once by guard check; status tells "not running" from "no permission"; bans says when there are none; "1 ban lifted". Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Changelog
All notable changes to Guard are documented here. The format follows Keep a Changelog, and versions follow Semantic Versioning.
[Unreleased]
Added
- First version. Guard watches log files (followed through rotation and
truncation) and the systemd journal (by unit and syslog identifier),
matches lines with patterns holding one
<IP>, counts each address's bounty within a window, and bans an address that reaches a watch's hits in a Housecarl ban list (Housecarl 0.2): of every port, or of the watch's protocol and ports, for a time that grows for repeat offenders. IPv6 addresses are counted and banned by the ban list's prefix (/64). Never banned:never_ban(addresses, prefixes, host names), loopback, link-local, multicast; Housecarl adds its own. Bans wait while Housecarl can't be reached, across restarts. - Presets:
sshd,jarl,housecarl,steward,bind-xfr,postfix-sasl,dovecot,nginx-auth,housecarl-drops(Housecarl's log of dropped packets, TCP only by default). - Commands:
guard run,check,config [--example],presets,test(a watch's patterns over a log),status(through a local socket),bans,ban,unban,version. - A Debian package with a sandboxed systemd unit, as the
guarduser in theadmandsystemd-journalgroups, published with each release to the Gitea Debian registry (stable, ortestingfor a release candidate) along with tarballs for Linux amd64 and arm64.
Fixed
- The package's
guarduser is now in theadmandsystemd-journalgroups itself, as the documentation said, not only through its unit'sSupplementaryGroups.sudo -u guard guard testandguard checkcould read neither/var/log's files (permission denied) nor the journal. Upgrading adds the groups. - Shorter, plainer command output. Tables name a journal source by its
first two units or identifiers (
journal postfix/smtpd, postfix/submission/smtpd +1), sopresets,checkandstatusfit a normal terminal.guard testprints the first 20 matching lines (not 200) and the first 20 addresses it would ban (--allfor every one), single addresses without/32, and counts the matches fromnever_banaddresses. When Housecarl doesn't answer,guard checksays so once ("Housecarl at URL doesn't answer: connection refused") instead of once per ban list with the request's URL, and only asks forlog:readwhen Housecarl refused the log.guard statustells "not running" from "no permission".guard banssays when there are none;guard unbansays "1 ban lifted".