Ban lists: where Guard and fail2ban ban addresses
A program bans an address (every port, or a protocol's ports) for a time; the ban list says what it is kept from: the firewall, some hosts behind it, or everything. Bans drop ahead of every rule, close the address's connections, group IPv6 by /64, are kept in the database across restarts and audited. Never banned: the inside, the firewall's own addresses, the caller, the list's never. bans grant (bans:write:LIST), hc banlist/bans/ban/unban, Traffic -> Bans, a fail2ban action in contrib/, and failed logins and refused tokens logged for Guard and fail2ban. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6f56eefae2
commit
500bfc7bdd
44 files changed
+2541
-39
No files matched your search
@@ -8,6 +8,28 @@ All notable changes to Housecarl are documented here. The format follows
|
||||
|
||||
### Added
|
||||
|
||||
- **Ban lists** ([docs/bans.md](docs/bans.md)). A program (Guard, which
|
||||
reads logs, or fail2ban) bans an address, of every port or of some,
|
||||
for a time; the ban list says what the address is kept from: the
|
||||
firewall itself (`firewall`), some hosts behind it (`hosts`, port
|
||||
forwards to them included), or `everything`. Bans are dropped ahead of
|
||||
every rule, established connections too, and the banned address's
|
||||
connections are closed. IPv6 addresses are banned by /64 (`group_v6`).
|
||||
Never banned: inside networks, the firewall's own addresses, whoever
|
||||
asks, and the list's `never`. Bans end by themselves, are cut to the
|
||||
list's longest time, survive restarts and reboots, and are audited, but
|
||||
aren't configuration (no history, probation or changesets). `hc
|
||||
banlist`, `hc bans`, `hc ban`, `hc unban`; Traffic → Bans in the web UI;
|
||||
`/banlists` and `/banlists/{ref}/bans` in the API; a `bans` grant that
|
||||
can name lists (`bans:write:web`), in the `viewer` and `operator`
|
||||
roles.
|
||||
- **A fail2ban action**, `contrib/fail2ban/action.d/housecarl.conf`
|
||||
(installed under `/usr/share/doc/housecarl/contrib/`): fail2ban's bans
|
||||
go into a ban list, with the jail's port and protocol.
|
||||
- **Failed logins in the journal.** A failed login and a refused API
|
||||
token are logged (`msg="login failed" ip=… user=…`), for Guard and
|
||||
fail2ban to act on.
|
||||
|
||||
- **Quota usage as a share.** What a quota used shows its percentage
|
||||
(`12.3 GB of 50.0 GB used (24%)`, each address's in the quota
|
||||
dialog), on the Rules page, the dashboard and in `hc quotas`.
|
||||
@@ -81,6 +103,8 @@ All notable changes to Housecarl are documented here. The format follows
|
||||
|
||||
### Changed
|
||||
|
||||
- Set names starting with `ban_` are now reserved (`set_name_reserved`):
|
||||
ban lists' sets use them.
|
||||
- **Rules read as a direction.** A match's zones are written `lan → wan`,
|
||||
`any but wan → any`, or with the firewall itself as the other end
|
||||
(`lan → firewall` in input, `firewall → wan` in output), instead of
|
||||
|
||||
Reference in new issue
Block a user