Limite o acesso SSH a clientes específicos por endereço IP

Limite o acesso SSH a clientes específicos por endereço IP

Como permitimos que determinado conjunto de IPs privados entre através de login SSH (par de chaves RSA) no servidor Linux?

Responder1

Você pode limitar quais hosts podem se conectar configurandoInvólucros TCP ou filtrar o tráfego de rede (firewall) usandotabelas de ip. Se você quiser usar diferentes métodos de autenticação dependendo do endereço IP do cliente, configure o daemon SSH (opção 3).

Opção 1: Filtrando com IPTABLES

As regras do Iptables são avaliadas em ordem, até a primeira correspondência.

Por exemplo, para permitir o tráfego da rede 192.168.0.0/24 e, de outra forma, descartar o tráfego (para a porta 22). A DROPregra não é necessária se sua política padrão do iptables estiver configurada para DROP.

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Você pode adicionar mais regras antes da regra de eliminação para corresponder a mais redes/hosts. Se você tiver muitas redes ou endereços de host, você deve usaripsetmódulo. Há tambémIntervalo de IPmódulo que permite usar qualquer intervalo arbitrário de endereços IP.

Iptables não são persistentes nas reinicializações. Você precisa configurar algum mecanismo para restaurar o iptables na inicialização.

iptablesaplicam-se apenas ao tráfego IPv4. Sistemas que possuem ssh escutando endereço IPv6 a configuração necessária pode ser feita com ip6tables.

Opção 2: usando wrappers TCP

Nota: isso pode não ser uma opção em distribuições modernas, já que o suporte para tcpwrappers foi removido doOpenSSH 6.7

Você também pode configurar quais hosts podem se conectar usando wrappers TCP. Com wrappers TCP, além dos endereços IP, você também pode usar nomes de host nas regras.

Por padrão, negue todos os hosts.

/etc/hosts.deny:

sshd : ALL

Em seguida, liste os hosts permitidos em hosts.allow. Por exemplo, para permitir rede192.168.0.0/24ehost local.

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

Opção 3: configuração do daemon SSH

Você pode configurar o daemon ssh em sshd_config para usar métodos de autenticação diferentes dependendo do endereço/nome do host do cliente. Se você deseja apenas bloquear a conexão de outros hosts, você deve usar iptables ou TCP wrappers.

Primeiro remova os métodos de autenticação padrão:

PasswordAuthentication no
PubkeyAuthentication no

Em seguida, adicione os métodos de autenticação desejados após a Match Addressno final do arquivo. A colocação Matchno final do arquivo é importante, pois todas as linhas de configuração posteriores a ele são colocadas dentro do bloco condicional até a próxima Matchlinha. Por exemplo:

Match Address 127.0.0.*
    PubkeyAuthentication yes

Outros clientes ainda conseguem se conectar, mas os logins falharão porque não há métodos de autenticação disponíveis.

Argumentos de correspondência e opções de configuração condicional permitidas estão documentados em Página de manual sshd_config. Os padrões de correspondência são documentados emPágina de manual ssh_config.

Responder2

Aqui estão algumas configurações adicionais para o daemon SSH para estender a resposta anterior:

  • Adicione filtragem de usuário com AllowUsersopção no sshd_configarquivo:

    AllowUsers [email protected].* [email protected].* otherid1 otherid2
    

    Isso permitejohndoeeadministrador2apenas de 192.168.1.*endereços eoutroid1,outroid2de qualquer lugar.

  • Restrinja uma chave ssh ou chave baseada em ca a um conjunto de endereços no .ssh/authorized_keysarquivo do diretório inicial de um determinado usuário:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    Neste exemplo, a chave pública para useralias será eficaz apenas a partir de determinados endereços.

Responder3

Se você não se importa em instalar o UFW (FireWall Descomplicado):

sudo ufw allow from 192.168.1.0/24 to any port 22

Editar: Como mencionado anteriormente, é uma boa prática autenticar apenas usando chaves em vez de senhas, o que pode ser feito editando/etc/ssh/sshd_config:

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

Responder4

Se estiver usando SSH CA para autenticação de cliente, você poderá especificar a source-addressopção ao assinar certificados:

ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

O certificado id_rsa-cert.pubpode ser usado para efetuar login em hosts apenas a partir de 172.16.0.0/16endereços (nem mesmo 127.0.0.1a menos que você especifique isso também).

man 1 ssh-keygené um bom documento se você quiser mais detalhes.

informação relacionada