SSH com filtragem baseada em MAC usando iptables - recomendado?

SSH com filtragem baseada em MAC usando iptables - recomendado?

Tenho um servidor em uma rede interna (faça login via VPN) de onde faço login no servidor via SSH com autenticação de chave pública/privada OpenSSH. Do ponto de vista da segurança, quero vincular os endereços MAC dos meus três clientes usados iptables​​ao servidor para que somente esses clientes possam fazer login nele.

iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
iptables -A INPUT -p tcp --destination-port 22 -j DROP

No entanto, é recomendado fazer dessa maneira? Que outros métodos (melhores) posso usar para vincular o login SSH aos clientes usados?

(Se alguém quiser solicitar 2FA, infelizmente 2FA não é possível como solução potencial.)

Obrigado.

Responder1

Suponho que você queira evitar que seu servidor SSH aceite conexões de hosts não confiáveis, mesmo que eles forneçam credenciais de usuário válidas. Está certo?

Uma possível solução para vincular a autenticação de chave pública dos usuários a hosts clientes selecionados é por meio da autenticação baseada em host. Configurando a autenticação baseada em host e definindo AuthenticationMethodsparâmetros /etc/ssh/sshd_configpara:

AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password

Ou:

AuthenticationMethods hostbased,publickey

Isso instruirá o daemon SSH a solicitar aos clientes que autentiquem os hosts dos quais estão se conectando antes de verificar as chaves ou senhas dos usuários. A primeira alternativa permite autenticação baseada em senha, enquanto a última a restringe apenas a chaves públicas. Como a autenticação baseada em host é baseada em pares de chaves, o servidor SSH será capaz de autenticar clientes com endereços IP dinâmicos.


Aqui segue instruções completas. A documentação de como o SSH executa a autenticação baseada em host está escrita emssh(1)página de manual. Observe como o SSH identifica os usuários e verifique se isso é aplicável ao seu caso.

A autenticação baseada em host funciona da seguinte maneira: Se a máquina na qual o usuário efetua login estiver listada na máquina remota /etc/hosts.equive/etc/ssh/shosts.equivos nomes de usuário são iguais em ambos os lados, ou se os arquivos ~/.rhostsexistirem ~/.shostsno diretório inicial do usuário na máquina remota econtém uma linha contendo o nome da máquina cliente e o nome do usuário nessa máquina, o usuário é considerado para login. Além disso, o servidor deve ser capaz de verificar a chave de host do cliente para que o login seja permitido. Este método de autenticação fecha falhas de segurança devido à falsificação de IP, falsificação de DNS e falsificação de roteamento. [Nota para o administrador: /etc/hosts.equiv, ~/.rhostse o protocolo rlogin/rsh em geral são inerentemente inseguros e devem ser desativados se a segurança for desejada.]

Para habilitar a autenticação baseada em host no OpenSSH:

# /etc/ssh/sshd_config

HostbasedAuthentication yes
IgnoreUserKnownHosts yes
IgnoreRhosts yes

# AuthenticationMethods hostbased,publickey hostbased,keyboard-interactive hostbased,password
AuthenticationMethods hostbased,publickey
  • Para realizar a autenticação baseada em host, você pode confiar nas informações de nome de host fornecidas pelos clientes configurando HostbasedUsesNameFromPacketOnly yesem/etc/ssh/sshd_config:
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly yes
  • Ou, alternativamente, você pode configurar o daemon SSH para identificar nomes de host por meio da resolução de endereços IP dos clientes usando informações armazenadas em /etc/hostsarquivos ou registros PTR no servidor DNS da rede:
# /etc/ssh/sshd_config

HostbasedUsesNameFromPacketOnly no
UseDNS yes
# /etc/ssh/shosts.equiv

ssh-client-alpha
ssh-client-bravo
ssh-client-charlie
  • Liste as chaves públicas dos hosts autorizados no /etc/ssh/ssh_known_hostsarquivo. Uma maneira conveniente de fazer isso é atravésssh-keyscan:
[root@ssh-server ~]# ssh-keyscan ssh-client-alpha >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-bravo >> /etc/ssh/ssh_known_hosts
[root@ssh-server ~]# ssh-keyscan ssh-client-charlie >> /etc/ssh/ssh_known_hosts

Depois de configurar o servidor OpenSSH para aceitar solicitações de autenticação baseadas em host, os clientes também devem ser configurados para solicitar autenticação baseada em host:

# /etc/ssh/ssh_config

Host *
    HostbasedAuthentication yes
    EnableSSHKeySign yes
  • Certifique-se de que os bits SUID/SGID estejamssh-keysignexecutável concede permissão de leitura para arquivos de chave privada do host:
[root@ssh-client-alpha ~]# find /usr -name ssh-keysign -ls
 16517300    616 -r-xr-sr-x   1  root     ssh_keys   630344 Feb  4 16:01 /usr/libexec/openssh/ssh-keysign

[root@ssh-client-alpha ~]# ls -l /etc/ssh/ssh_host_*key
-rw-r----- 1 root ssh_keys  480 Apr 13 06:51 /etc/ssh/ssh_host_ecdsa_key
-rw-r----- 1 root ssh_keys  387 Apr 13 06:51 /etc/ssh/ssh_host_ed25519_key
-rw-r----- 1 root ssh_keys 2578 Apr 13 06:51 /etc/ssh/ssh_host_rsa_key

informação relacionada