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 DROP
regra 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.
iptables
aplicam-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 Address
no final do arquivo. A colocação Match
no 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 Match
linha. 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
AllowUsers
opção nosshd_config
arquivo: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_keys
arquivo 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-address
opçã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.pub
pode ser usado para efetuar login em hosts apenas a partir de 172.16.0.0/16
endereços (nem mesmo 127.0.0.1
a menos que você especifique isso também).
man 1 ssh-keygen
é um bom documento se você quiser mais detalhes.