1.8 KiB
1.8 KiB
Caddy + fail2ban
Caddy
Modern http proxy server with easy configuration.
Install log formatter plugin:
caddy add-package github.com/caddyserver/transform-encoder
Add to /etc/caddy/Caddyfile:
files.example.com { # your url
request_body {
max_size 4GB
}
reverse_proxy 127.0.0.1:8080 { # serveg address
transport http {
versions 1.1
}
}
# log response status and request authorization for fail2ban
log {
output file /var/log/caddy/files-auth.log
format transform "{ts} {request>client_ip} {status} {request>headers>Authorization>[0]}" {
time_format iso8601
placeholder -
}
}
}
Restart caddy:
sudo systemctl restart caddy
Fail2ban
Service that reads logs from various sources, finds password trials and bans ip if it tries to brute force password.
Write to /etc/fail2ban/filter.d/caddy-auth.conf
[Definition]
failregex = <ADDR> 401 REDACTED$
ignoreregex =
Write to /etc/fail2ban/jail.d/caddy-auth.local
[caddy-auth]
enabled = true
filter = caddy-auth # /etc/fail2ban/filter.d/caddy-auth.conf
logpath = /var/log/caddy/files-auth.log
backend = auto # without it on debian fail2ban will use systemd logging and to read caddy log
maxretry = 10 # N wrong passwords
findtime = 10m # sent during 10 minutes
bantime = 1h # ban for 1 hour
banaction = iptables-allports # ban the ip for all ports
protocol = all # and all protocols
ignoreip = 127.0.0.1/8 ::1 # ignore localhost
Reload fail2ban:
sudo fail2ban-client reload
Test fail2ban:
curl -s -o /dev/null -u wrong:wrong https://files.example.com/
curl -s -o /dev/null https://files.example.com/
fail2ban-regex /var/log/caddy/files-auth.log /etc/fail2ban/filter.d/caddy-auth.conf