SSH AllowUsers da rede particular

3

Como permitir que apenas determinados usuários façam login em um servidor SSH de uma determinada interface de rede?

por exemplo.

  • eth0 está "fora", eth1 está "dentro".
  • o usuário 1 é confiável para fazer login em qualquer lugar
  • user2 só tem permissão para fazer login de "dentro"

Não é possível usar AllowUsers user1@eth0 porque AllowUsers usa um nome de host e não um nome de interface.

Outras respostas neste site sugerem algo como:

Match address 1.2.3.4/16 # eth0's network
   AllowUsers user1
Match address 2.3.4.5/16 # eth1's network
   AllowUsers user1,user2
Match address 0.0.0.0/0  # Match's equivalent of a closing brace?

No entanto, se eth0 estiver usando um servidor DHCP para obter seu endereço, ele não sabe de antemão que 1.2.3.4 é o endereço correto para colocar em sshd_config.

(OpenSSH no Ubuntu 12.04 se isso faz diferença)

    
por OJW 14.02.2013 / 13:49

6 respostas

5

Eu não sei como fazer isso em um bloco Match , e seu comentário acima sugere que não é possível (assim como, como você nota, a página man ).

Mas, se tiver certeza de que deseja fazer a restrição de usuários por interface - o que suas perguntas dizem - você pode executar dois sshd s, cada um com um sshd_config diferente, que o direciona para ouvir em um somente interface, controlada pela diretiva ListenAddress .

A sshd que escuta na interface interna pode ter em sua configuração AllowUsers user1 user2 , enquanto que a escuta na interface externa pode ter AllowUsers user1 . Eu provavelmente faria isso por ser membro do grupo e ter AllowGroups internal / AllowGroups internal external , mas isso é só comigo.

Editar : imo, a maneira correta de fazer isso é executar /usr/sbin/sshd -f /etc/ssh/sshd_config_inside e /usr/sbin/sshd -f /etc/ssh/sshd_config_outside . Organizar como isso funciona no momento da inicialização e garantir que seus arquivos de inicialização / desligamento de serviço façam a coisa certa é realmente importante, mas também é uma coisa perfeitamente normal que um administrador de sistema precise fazer e fazer. É definitivamente não é necessário ter dois binários, ou mesmo o mesmo binário por dois nomes diferentes, para fazer isso.

    
por 19.02.2013 / 12:16
3

Match address 1.2.3.4/16 é inválido, deve ser Match address 1.2.0.0/16 . Os endereços de rede das interfaces não mudam, não são? Então não importa o IP que você recebe.

Outra opção pode ser (não tenho experiência pessoal com isso) para criar duas interfaces virtuais com um endereço estático, ter duas instâncias sshd, cada uma ligada a apenas um desses endereços e fazer o DNAT da interface do DHCP para o virtual .

    
por 14.02.2013 / 14:12
3

Eu sei que esta é uma pergunta antiga, mas eu estava procurando uma solução sem ter que iniciar 2 instâncias do sshd.

Referindo-se à sua pergunta específica e à sub-rede 1.2.3.4/16 e à sub-rede 2.3.4.5/16, você pode usar o seguinte:

AllowUsers [email protected].* [email protected].* [email protected].*

Referência: link

Para minha rede, eu uso o seguinte para permitir que o usuário chris faça o ssh de qualquer lugar, mas apenas permita que o usuário1, user2 e user3 façam o ssh na minha rede interna (192.168.0.0/24):

AllowUsers chris [email protected].* [email protected].* [email protected].*

Versão: SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3 no Ubuntu 14.04.3 LTS

    
por 07.10.2015 / 08:43
1

Talvez você possa escrever um pequeno script para obter o endereço eth0 atual (a partir do ifconfig?) e configurar o sshd_config (usando sed); se bem me lembro, também é possível escrever scripts de gancho para serem executados toda vez que uma interface ethernet ficar inativa (isso pode resolver a necessidade de atualizar manualmente ou via crontab o arquivo sshd_config).

    
por 14.02.2013 / 14:03
0

A resposta curta: você não pode.

A resposta longa: você não vai.

É apenas um pseudo-ganho em termos de segurança. Você deve pensar primeiro em seu conceito de segurança.

Mas, no interesse da discussão profissional, você pode com hacks fugly:

  1. Espere até que você tenha seus IPs DHCP (Caramba! Eu não faria estática em um servidor)
  2. Configure dois sshds diferentes com os ListenAddress'es apropriados, atribuindo a cada um deles um conjunto diferente de usuários permitidos também. (edit: foi descrito nas outras respostas aqui)
  3. Inicie os dois daemons separados.
por 19.02.2013 / 13:24
0

Match Adress e Match User devem funcionar e desde alguns meses, desde o OpenSSH 7.7, pelo menos se você acredita que o bug reporta aqui você também pode ter negando correspondências.

Se você quiser bloquear seu SSH com sshd_config , a ressalva é que você deve desabilitar logins baseados em senha e pubkey para qualquer outra pessoa.

Por exemplo:

  • permite acesso root apenas de dentro (192.168.1.0/24, intervalo "office")
  • permite um acesso de usuário especial da VPN (10.10.10.0/24, VPN "privada" intervalo)
  • permite apenas o acesso por chave de pub a outros usuários sem privilégios de qualquer lugar, Não importa se dentro ou fora ou em VPN

sshd_config

[...]
PasswordAuthentication no   #
PubkeyAuthentication no     # to disable access for all other users
[...]
Match Address 192.168.1.0/24
        PermitRootLogin yes
        PasswordAuthentication yes
        PubkeyAuthentication yes

Match User vpnuser Address 10.10.10.0/24
        PasswordAuthentication yes
        PubkeyAuthentication yes


Match User sarah peter robert Address *
        PasswordAuthentication no
        PubkeyAuthentication yes

Dessa forma, não importa quantas interfaces seu servidor possui e qual endereço DHCP ele recebe. É importante saber de onde os usuários estão se conectando, e é isso que deve preocupá-lo.

    
por 13.09.2018 / 16:44

Tags