What is the point of sshd “UseDNS” option?
The UseDNS
option is mostly useless. If the client machines are out there on the Internet, there is a high chance that they don't have any reverse DNS, their reverse DNS doesn't resolve forward, or their DNS doesn't provide any information other than “belongs to this ISP” which the IP address already tells you.
In typical configurations, DNS is only used for logging. It can be used for authentication, but only if IgnoreRhosts no
is specified in sshd_config
. This is for compatibility with old installations that used rsh, where you can say “the user called bob
on the machine called darkstar
may log in as alice
without showing any credentials” (by writing darkstar bob
in ~alice/.rhosts
). It is only secure if you trust all the machines that may possibly be connecting to the ssh server. In other words, this is very very rarely usable in a secure way.
Given that the DNS lookup doesn't provide any useful information except in very peculiar circumstances, it should be turned off. As far as I can tell, the only reason it's on by default is that it's technically more secure (if you're concerned about authentication, not availability), even though that only applies to a tiny set of circumstances.
Another argument for turning off this feature is that every superfluous feature is an unnecessary security risk.
I added to a bug report (old but still current) in Ubuntu about this.
https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/424371
I proposed changing the default to No and adding newer documentation on it:
# UseDNS - Determines whether IP Address to Hostname lookup and comparison is performed
# Default value is No which avoids login delays when the remote client's DNS cannot be resolved
# Value of No implies that the usage of "from=" in authorized_keys will not support DNS host names but only IP addresses.
# Value of Yes supports host names in "from=" for authorized_keys. Additionally if the remote client's IP address does not match the resolved DNS host name (or could not be reverse lookup resolved) then a warning is logged.
From the manpage of sshd_config(5)
:
UseDNS Specifies whether sshd(8) should look up the remote host name and
check that the resolved host name for the remote IP address maps
back to the very same IP address. The default is “yes”.
Enabling this makes access from a location without proper (forward and reverse) DNS generate a warning in the logs.
So this doesn't prevent any attack except that it would need some qualified remote address of the client in order not to log any warning. Such a warning may help you in tracing down the attacker only if that PTR record makes any sense.
edit: updated according to comment of Andrey Voitenkov.