Restringindo o ssh a um hostname específico

2

Então, aqui está o problema:

  • Eu tenho um único servidor com vários nomes de host, o que significa que tenho registros A example.com e *.example.com apontando para o endereço IP do servidor
  • Quero limitar as conexões ssh de entrada a um nome de host específico, ou seja, permitir somente logins para [email protected] e não permitir tentativas de login usando user @ ip-address ou [email protected]

A página man do sshd_config tem o seguinte para ListenAddress :

Specifies the local addresses sshd(8) should listen on.  
The following forms may be used:

ListenAddress host|IPv4_addr|IPv6_addr
ListenAddress host|IPv4_addr:port
ListenAddress [host|IPv6_addr]:port

que parece indicar que o sshd tem a capacidade de restringir-se a um nome de host específico. No entanto eu tentei ListenAddress secret.example.com:22 , mas depois de reiniciar o sshd que parece não adicionar restrições com base no nome do host usado.

man sshd_config não parece mostrar outras opções nesse sentido.

Há algo que eu esteja perdendo, ou o sshd simplesmente não tem essa habilidade?

    
por cobaco 17.02.2013 / 00:54

4 respostas

5

Não existe uma conexão "DNS". Uma vez que o cliente obtém um IP, ele só pode fazer uma conexão TCP / IP. O servidor só vê IPs, por isso não faz ideia do nome que o cliente usou para encontrar o servidor.

O motivo pelo qual temos hosts virtuais no website é porque o cliente transmite um cabeçalho solicitando um host específico. Na verdade, os hosts virtuais não funcionavam com SSL até que o SSL (TLS) fosse modificado para permitir "Indicação do nome do servidor" durante a conexão inicial.

Para que "hosts virtuais" funcionem com o SSH, é necessário que o cliente transmita o nome do host na conexão. Mas mesmo que o SSH suporte esse recurso, você está adicionando segurança zero exigindo um nome de host específico. A razão é que o sshd deve decriptografar o pacote do atacante para executar o filtro. Contanto que você desabilite senhas SSH, há pouca diferença em descriptografar o pacote do invasor para comparar com sua chave SSH.

Se você não quiser ser verificado, mova a porta SSH e / ou instale o fail2ban. Se você é realmente paranóico, pode instalar um aldrava de porta que "esconda" sua porta aberta do scanner casual e / ou use o iptables para colocar endereços IP na lista de permissões.

    
por 17.02.2013 / 05:01
2

Is there something I'm missing, or does sshd simply not have that ability?

Fundamentalmente, o DNS não tem essa capacidade. O cliente resolve um nome DNS em um IP, então tenta se conectar a ele, então essa informação é perdida no momento da conexão (a menos que o SSH transmita de forma que o servidor possa usá-lo antes do login, o que eu acho que não ).

    
por 17.02.2013 / 00:56
1

Cribbed de outra questão SF , que tal isso?

You could use the AllowUsers directive in /etc/ssh/sshd_config e.g. AllowUsers [email protected]

Se você fizer alguma alteração no seu arquivo sshd_config, não se esqueça de reiniciar o sshd.

da manpage do sshd_config

This keyword can be followed by a list of user name patterns, separated by spaces. If specified, login is allowed only for user names that match one of the patterns. ‘*’ and ‘?’ can be used as wildcards in the patterns. Only user names are valid; a numerical user ID is not recognized. By default, login is allowed for all users. If the pattern takes the form USER@HOST then USER and HOST are separately checked, restricting logins to particular users from particular hosts.

-- original answer ends --

Pelo que vejo, você pode definir um caractere curinga para que apenas os usuários que apresentam o elemento de nome de host correto correspondente a curingas sejam ouvidos pelo SSHd, por exemplo, %código%. Estrondo! Logs de usuário baseados em IP negados.

NÃO coloque nada como *@sub.domain.tld até depois das declarações AllowUsers / AllowGroups. As listas de negação são avaliadas antes de permitir listas e substituem quaisquer Permitentes explícitos. Eu não experimentei, mas pelo que li no passado, você provavelmente nem precisa definir o DenyUsers * uma vez que você define explicitamente uma lista de permissões.

Apenas não se esqueça de sempre se permitir. ; -)

    
por 17.02.2013 / 05:23
0

O que você pode fazer é ter vários endereços IP na máquina. Em seguida, cada um dos seus registros A aponta para um endereço IP diferente, que finalmente vai para a mesma caixa. Então você poderá usar ListenAddress para restringir. Não tenho certeza do que você ganha com isso, afinal, é a mesma máquina de qualquer maneira.

    
por 17.02.2013 / 01:00

Tags