7.7. Hardening OpenSSH

You are concerned about security threats, both from the inside and the outside. You are concerned about brute-force attacks on the root account, and you want to restrict users to prevent mischief, whether accidental or deliberate. What can do you to make sure OpenSSH is as hardened as it can be?

OpenSSH is pretty tight out of the box. There are some refinements you can make; take a look at the following steps and tweak to suit your needs. First, fine-tune /etc/sshd_config with these restrictive directives:

	ListenAddress 12.34.56.78
	PermitRootLogin no
	Protocol 2
	AllowUsers carla foober@bumble.com lori meflin
	AllowGroups admins

You may want the SSH daemon to listen on a different port:

	Port 2222

Or, you can configure OpenSSH to disallow password logins, and require all users to have identity keys with this line in /etc/sshd_config:

	PasswordAuthentication no

Finally, configure iptables to filter traffic, blocking all but authorized bits (see Chapter 3).

Specifying the interfaces that the SSH daemon is to listen to and denying root logins, are basic, obvious precautions.

Protocol 2 means your server will only allow SSH-2 logins, and will reject SSH-1. SSH-1 is old enough, and has enough weaknesses, that it really isn't worth the risk of using it. SSH-2 has been around for several years, so there is no reason to continue using the SSH-1 protocol.

AllowUsers denies logins to all but the listed users. You may use just the login names, or restrict them even further by allowing them to log in only from certain hosts, like .

AllowGroups is a quick way to define allowed users by groups. Any groups not named are denied access. These are normal local Linux groups in /etc/group.

If you prefer, you may use DenyHosts and DenyGroups. These work the opposite of the Allow directives—anyone not listed is allowed to log in. Do not mix Allow and Deny directives; only use one or the other.

Changing to a nonstandard port will foil some of the SSH attacks that only look for port 22. However, determined portscanners will find out which port your SSH daemon is listening to, so don't count on it as a meaningful security measure—it's just a way to keep your logfiles from filling up too quickly.

Recipe 17.13, "Setting File Permissions on ssh Files," in Linux Cookbook,by Carla Schroder (O'Reilly)