Como fazer para restringir uma chave SSH a determinados endereços IP?

3

Eu quero fazer login em um servidor SSH (publicamente acessível) da rede local (192.168.1. *) usando alguma chave SSH, mas não quero que essa chave possa ser usada fora da rede local.
Eu quero que alguma outra chave seja usada para acesso externo (mesmo usuário em ambos os casos).

É possível alcançar isso no SSH?

    
por Mehrdad 22.03.2017 / 11:58

3 respostas

6

Sim.

No arquivo ~/.ssh/authorized_keys no servidor, cada entrada agora provavelmente se parece com

ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment

(ou similar)

Existe uma primeira coluna opcional que pode conter opções. Eles estão descritos no manual sshd .

Uma das opções é

from="pattern-list"

Specifies that in addition to public key authentication, either the canonical name of the remote host or its IP address must be present in the comma-separated list of patterns. See PATTERNS in ssh_config(5) for more information on patterns.

In addition to the wildcard matching that may be applied to hostnames or addresses, a from stanza may match IP addresses using CIDR address/masklen notation.

The purpose of this option is to optionally increase security: public key authentication by itself does not trust the network or name servers or anything (but the key); however, if somebody somehow steals the key, the key permits an intruder to log in from anywhere in the world. This additional option makes using a stolen key more difficult (name servers and/or routers would have to be compromised in addition to just the key).

Isso significa que você deve poder modificar ~/.ssh/authorized_keys de

ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment

para

from="pattern" ssh-ed25519 AAAAC3NzaC1lZSOMEKEYFINGERPRINT comment

Em que pattern é um padrão que corresponde ao host do cliente ao qual você está se conectando.

    
por 22.03.2017 / 12:07
3

Você pode conseguir isso adicionando from="192.168.1.0/24" na frente da chave pública no arquivo .authorized_keys . A linha inteira deve ficar assim:

from="192.168.1.0/24" ssh-rsa AAAA....
    
por 22.03.2017 / 12:07
1

A configuração do sshd no lado do servidor via authorized_keys já foi discutida. No entanto, também é possível gerar uma chave com uma opção para limitar quais endereços de origem são válidos para essa chave. Funcionará da mesma maneira para todos os sistemas aos quais você se conecta. Essa chave precisaria ser regenerada sempre que a lista de endereços de origem fosse alterada.

Isso elimina a necessidade de tocar em todos os arquivos authorized_keys em vários servidores que você pode querer limitar de uma maneira especial, caso, por exemplo, você esteja fazendo isso automaticamente e não queira mexer com a alteração automação para lidar com uma chave. Ou caso você queira outra camada de proteção caso haja uma reversão no servidor. Ou se você quiser limitar essa chave, não importa qual seja a configuração do servidor.

Nas opções de ssh-keygen, há uma opção chamada source-address , que usa uma lista separada por vírgula de pares de endereço / máscara de rede no formato CIDR. O comando para gerar a chave será parecido com isso, supondo que você queira usar essa chave somente a partir de 192.168.1. * E 10.255.255.254 como endereços de origem.

ssh-keygen -t rsa -b 4096 -O endereço-fonte = 192.168.1.0 / 24,10.255.255.254 / 32

Desculpe enganar alguém. Parece que o BowlOfRed está correto. Isso requer o uso de certificados em vez de chaves simples.

    
por 17.04.2018 / 23:38

Tags