Zezwalaj tylko na uwierzytelnianie hasła do serwera SSH z sieci wewnętrznej

22

Mam serwer OpenSSH 5.9p1 działający na systemie Ubuntu Precise 12.04, który akceptuje połączenia zarówno z sieci wewnętrznej, jak i Internetu. Chciałbym wymagać uwierzytelnienia klucza publicznego dla połączeń z Internetu, ale akceptuję uwierzytelnienie klucza publicznego lub hasła dla połączeń z sieci wewnętrznej. Czy mogę skonfigurować OpenSSH, aby to zaimplementować?

mgorven
źródło

Odpowiedzi:

34

MatchDyrektywa /etc/ssh/sshd_configpozwala na selektywne zastosowanie dyrektyw konfiguracyjnych. Jednym z dostępnych kryteriów dopasowania jest adres źródłowy połączenia, więc można go użyć do zaimplementowania tego, co chcesz. Możesz domyślnie wyłączyć uwierzytelnianie hasła, a następnie włączyć je dla połączeń z wewnętrznych zakresów adresów IP sieci. (Pamiętaj, że chcesz również wyłączyć ChallengeResponseAuthentication, aby zapobiec użyciu haseł.) Ten przykład umożliwia uwierzytelnianie hasła ze wszystkich prywatnych zakresów adresów IP RFC1918. Więcej informacji można znaleźć na stronie podręcznika 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

Pamiętaj, że blok dopasowania powinien zostać dodany na końcu pliku, w przeciwnym razie wszystko, co nastąpi po nim, zostanie dopasowane do następnego bloku dopasowania. Złe ustawienie bloku dopasowania może spowodować niemożność połączenia.

mgorven
źródło
3
Uwaga: jeśli to zrobisz i prześlesz SSH z jakiejś publicznie dostępnej maszyny (jumphost) na maszynę z powyższą konfiguracją (host wewnętrzny) nadal możesz otworzyć się na atak, ponieważ źródłowy adres IP jumphost będzie adresem RFC1918 i zezwól na uwierzytelnianie hasłem na twoim wewnętrznym hoście.
c4urself