I hope that you have password authentication turned off on any server which opens any SSH port to the 'net.
Whenever I know the clients will use a protected key storage, like
ssh-agent with passphrase-protected key files, I definitely prefer public key authentication. Otherwise, it is a balance between the risk of keylogging (and leaking a password), or some process swiping the unprotected key files.
Notably, the browsers I currently use, do not let any JavaScript do either of those.
For allowing trusted friends temporary access to my machine, I set up a new account, and a randomly-generated but easily spoken password (for conveying via telephone or similar).
When I have to use passwords, and for the passphrases protecting my keys, I default to cryptographically secure random number generator generated ones with 96–144 bits, 16 to 24 characters (
openssl rand or
/dev/random source). To store these on paper, I use large cryptos (on 5mm gridded A4 paper), with no password in a straight line in it. Elsewhere, I have "artwork" which describes the shape the various passwords have. Overkill, because keylogging is how they'll leak if they leak, but I like it. (Or by someone drugging me and hitting me with a $5 wrench till I reveal the password, per XKCD #538.)
Fail2Ban is a bit too heavy to use on OpenWRT routers, so I've been thinking about writing a lightweight userspace service to maintain a ban list based on port scanning. The idea is to reduce garbage traffic at the internet-facing edge. There are two basic approaches: netfilter logging, and monitoring honeypot sockets for incoming connection attempts. The former is more versatile, but the latter is simpler (if one is only interested in TCP and possibly UDP honeypot sockets).
For SMTP I get another form of "attack" - throwing email at random user names within my domain. For this one fail2ban does not really work - the system doesn't error, it accepts the mail, runs it through spam and virus filters and then ... tries to return it to the sender, completely gumming up email.
Yup. Unless it is an authenticated user, bounces (return to sender) should be disabled. Filtering on RCPT TO makes a lot of sense. I don't think fail2ban can help in this.
I don't currently run my own email server; I use a hosted one, and lots of spam filters on my own mail program.