Разрешить аутентификацию по паролю только для SSH-сервера из внутренней сети

22

У меня есть сервер OpenSSH 5.9p1, работающий на Ubuntu Precise 12.04, который принимает соединения как из внутренней сети, так и из Интернета. Я хотел бы требовать аутентификацию с открытым ключом для соединений из Интернета, но принимаю аутентификацию с открытым ключом или паролем для соединений из внутренней сети. Могу ли я настроить OpenSSH для реализации этого?

mgorven
источник

Ответы:

34

MatchДиректива /etc/ssh/sshd_configпозволяет выборочно применять директивы конфигурации. Одним из доступных критериев соответствия является адрес источника соединения, и поэтому его можно использовать для реализации того, что вы хотите. По умолчанию вы можете отключить аутентификацию по паролю, а затем включить ее для соединений из диапазонов IP-адресов внутренней сети. (Обратите внимание, что вы также хотите отключить ChallengeResponseAuthentication, чтобы предотвратить использование паролей.) В этом примере разрешается аутентификация по паролю для всех частных диапазонов RFC1918. Смотрите страницу руководства sshd_config для более подробной информации.

PasswordAuthentication no
ChallengeResponseAuthentication no

Match Address 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
    PasswordAuthentication yes

Обратите внимание, что блок Match должен быть добавлен в конец файла, в противном случае все, что следует за ним, будет сопоставлено до следующего блока Match. Неправильное расположение блока соответствия может привести к невозможности подключения.

mgorven
источник
3
Обратите внимание: если вы сделаете это и перенаправите SSH с какого-либо общедоступного компьютера (jumphost) на компьютер с вышеуказанным конфигом (внутренним хостом), вы все равно можете открыть себя для атаки, поскольку исходным IP-адресом jumphost будет адрес RFC1918 и разрешить аутентификацию по паролю для вашего внутреннего хоста.
c4urself