First there is proper configuration at the infrastructure level. We can automate this ourselves by setting it up via Docker. and we are working on the documentation for this now for everyone else running on Bare Linux.
ModEvasive module for Apache (similar stuff for Nginx and Caddy too)
fail2ban and similar packages for Linux OS
Utilizing DNSBL for known malicious IP’s (can also be done at code/app levels maybe)
Second regarding at the code level:
IP bans for multiple failed log-ins
Not disclosing if username/email actually exists for password resets
Not disclosing if it was username or password that was flawed during failed login
Settings in the administration globals for whitelisting IP’s perhaps
Settings in the administration globals for GeoIP whitelisting, perhaps even down in the US at least to the State Level (in Texas this is starting to become quite common but seems hard to do for smaller states / in border areas)