Tudo o que você precisa saber sobre o servidor Linux OpenSSH
O pacote OpenSSH é uma coleção de ferramentas robustas destinadas a facilitar o controle remoto e a transferência de dados entre sistemas em rede. Consiste em uma série de ferramentas, incluindo SSH, SCP, SFTP, SSHD e muito mais. Cada vez que você usa ssh para fazer login em uma máquina remota, é altamente provável que você aproveite o servidor OpenSSH. Neste guia, forneceremos uma discussão aprofundada sobre como o OpenSSH funciona e como utilizá-lo adequadamente para atender às crescentes demandas de segurança. Então, se você quiser saber mais sobre os meandros do OpenSSH, fique conosco ao longo deste guia.
Aprofunde-se nos servidores e serviços OpenSSH
O servidor OpenSSH está no centro da comunicação remota entre máquinas Linux e/ou BSD. Alguns de seus recursos notáveis incluem criptografia de tráfego, vários métodos de autenticação poderosos, tunelamento seguro e recursos de configuração sofisticados. As seções abaixo fornecem uma compreensão significativa dos serviços fundamentais e dicas de segurança.
Os fundamentos de um servidor OpenSSH
Conforme sugerido pelo nome, OpenSSH utiliza o protocolo SSH (Secure Shell) para fornecer conexão remota e recursos de transferência de dados. Ele remove as vulnerabilidades de segurança associadas a métodos legados, como o comando FTP do Linux e o telnet. O OpenSSH facilita a autenticação de usuários legítimos e a criptografia de conexões remotas.
O principal utilitário do pacote OpenSSH responsável por gerenciar conexões remotas é o OpenSSH Server ou sshd. Ele escuta constantemente as solicitações recebidas e configura o tipo de conexão apropriado quando uma nova solicitação chega.
Por exemplo, se um usuário usar o programa cliente ssh para se comunicar com o servidor, o sshd configurará uma sessão de controle remoto assim que a autenticação for bem-sucedida. Se o usuário usar SCP, o sshd iniciará uma sessão de cópia segura.
O usuário final precisa escolher o mecanismo de comunicação apropriado para sua conexão. Isso é facilitado por ferramentas como ssh-add e ssh-keygen. Quando um usuário se conecta com sucesso à máquina remota usando o comando ssh, ele é saudado por um console baseado em texto. Quaisquer comandos inseridos neste console são enviados por um túnel SSH criptografado para execução na máquina remota.
Instalando e configurando o servidor OpenSSH
A seção a seguir discutirá como instalar o daemon do servidor OpenSSH e configurá-lo. Mostraremos as melhores opções de configuração para uso pessoal e empresarial. Também descreveremos as práticas recomendadas para configurar e proteger o OpenSSH no final desta seção.
Como instalar o servidor OpenSSH
A maioria das distribuições Linux modernas já vem com OpenSSH instalado. No entanto, se precisar instalá-lo manualmente, você pode fazê-lo usando o seguinte comando simples.
$ sudo apt install openssh-server
Este comando instalará o daemon do servidor. Use o comando abaixo para instalar o cliente OpenSSH em seu sistema.
$ sudo apt install openssh-client
Como configurar o servidor OpenSSH
OpenSSH oferece suporte a um grande número de opções de configuração para controlar coisas como configurações de comunicação e modos de autenticação. O arquivo sshd_config especifica os parâmetros de configuração e contém o endereço de outros arquivos de configuração, incluindo um ou mais arquivos chave de host e arquivos chaves_autorizadas. Ele está localizado no diretório /etc/ssh/ do seu sistema de arquivos.
Antes de prosseguir para ajustar alguns de seus parâmetros, sugerimos que você faça backup da cópia atual do arquivo sshd_config. Você pode fazer isso abrindo seu emulador de terminal Linux favorito e emitindo o seguinte comando.
$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
Dessa forma, se você bagunçar seu arquivosshd_config, você sempre poderá reverter para a configuração original. Agora, você pode prosseguir com a configuração do seu servidor ssh. Antes disso, sugerimos que os leitores testem sua configuração sshd eficaz usando o comando simples abaixo.
$ sudo sshd -T
Agora que você fez backup do seu arquivosshd_config e visualizou as configurações padrão, é hora de editar o arquivo de configuração. Usaremos o editor de texto vim para abrir e editar nosso arquivo de configuração. Mas você pode usar qualquer editor de texto Linux que desejar.
$ sudo vim /etc/ssh/sshd_config
Como você deve notar, já existem diversas opções pré-configuradas. No entanto, a maioria deles é comentada. Você pode ativá-los removendo o comentário da linha específica que especifica o parâmetro de opções. Remova o símbolo de cerquilha “#” do início de uma linha para descomentá-la. Discutimos algumas das opções importantes abaixo.
- AceitarEnv
Esta opção especifica quais variáveis de ambiente enviadas pelo cliente podem ser copiadas para o ambiente remoto.
- EndereçoFamília
Define a família de endereços IP para uso do sshd. As três opções disponíveis são – any, inet e inet6.
- Permitir encaminhamento de agente
Esta opção define se o encaminhamento do agente ssh é permitido ou não.
- AllowStreamLocalForwarding
Define se o encaminhamento de sockets de domínio Unix é permitido ou não.
- Permitir encaminhamento de TCP
Define se o encaminhamento TCP é permitido ou não.
- Permitir usuários
Esta opção pode definir uma lista de nomes de usuários com acesso permitido com base em um padrão. Todos os nomes de usuário são permitidos por padrão.
- Métodos de autenticação
Esta opção indica os métodos de autenticação que um usuário deve concluir antes de receber acesso.
- Arquivo de Chaves Autorizadas
Esta opção especifica o arquivo que contém as chaves públicas para autenticação do usuário.
- ChallengeResponseAuthentication
Quando ativada, esta opção permite autenticação de resposta a desafio.
- ChrootDirectory
Especifica o diretório raiz, que será apresentado aos usuários que foram autenticados com sucesso.
- Cifras
Esta opção define as cifras criptográficas permitidas pelo servidor OpenSSH. Há uma grande variedade de opções disponíveis.
- Compressão
Especifica se a compactação é permitida e, se for, em qual estágio.
- Negar usuários
Esta opção pode ser usada para definir uma lista de nomes de usuários com acesso negado com base em um padrão.
- ForceCommand
Pode ser usado para forçar a execução de um determinado comando. Faz com que o servidor ignore qualquer comando fornecido pelo cliente ssh e qualquer coisa presente em ~/.ssh/rc.
- GatewayPorts
Esta opção define se os hosts remotos podem se conectar às portas que foram encaminhadas para o lado do cliente.
- Autenticação GSSAPI
É usado para indicar se a autenticação de usuário baseada em GSSAPI é permitida ou não.
- Autenticação baseada em host
Esta opção especifica se uma chave pública presente na máquina cliente pode autenticar um host no servidor remoto.
- HostbasedUsesNameFromPacketOnly
Esta opção especifica se o servidor precisa realizar uma pesquisa reversa de nomes presentes em /.shosts, ~/.rhosts e /etc/hosts. arquivos equivalentes.
- HostKey
Pode ser usado para definir um arquivo que contém uma chave privada de host. Os administradores podem especificar vários arquivos-chave. os padrões são /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key e / etc/ssh/ssh_host_rsa_key.
- Algoritmos HostKey
Esta opção define os algoritmos de chave do host disponibilizados pelo servidor ssh. OpenSSH oferece suporte a um grande número de algoritmos para essa finalidade.
- IgnorarRhosts
Diz ao servidor para ignorar os arquivos .rhosts e .shosts para RhostsRSAAuthentication e HostbasedAuthentication.
- KbdInteractiveAuthentication
Esta opção define se o servidor permite autenticação interativa com teclado ou não.
- Algoritmos Kex
É usado para indicar os algoritmos disponíveis para troca de chaves ssh. OpenSSH oferece suporte a todos os principais algoritmos de troca de chaves, incluindo Diffie Hellman e Elliptic Curves.
- ListenAddress
Define quais endereços locais o daemon sshd deve escutar.
- LoginGraceTime
Esta opção define o tempo após o qual o sshd desconecta o usuário se ele não conseguir efetuar login com sucesso.
- LogLevel
Ele define o nível de detalhamento das mensagens de log para sshd.
- MACs
Esta opção é usada para definir os algoritmos de código de autenticação de mensagem (MAC) disponíveis. Eles são usados para proteger a integridade dos dados.
- MaxAuthTries
Esta opção define o número máximo de vezes que um usuário pode tentar se autenticar no servidor.
- Autenticação de senha
Define se um usuário remoto pode efetuar login usando autenticação baseada em senha.
- Permitir senhas vazias
Esta opção especifica se os usuários podem usar uma senha vazia para logins remotos.
- PermitRootLogin
Esta opção define se o login root é permitido ou não.
- PermissãoTTY
Esta opção define se o pseudo TTY é permitido ou não.
Remova o comentário da linha que contém uma das opções acima e defina o valor da opção desejada. A seção abaixo ilustra algumas práticas comuns de reforço de segurança para OpenSSH.
Como fortalecer a segurança do servidor OpenSSH
Como o OpenSSH atua como a porta de entrada do seu servidor, é extremamente importante fortalecer sua segurança. Tente manter as sugestões a seguir para tornar o login remoto ainda mais seguro.
1. Desativar login raiz
Você nunca deve permitir login root em seu servidor ssh, pois um escalonamento da conta root pode comprometer todo o servidor. Além disso, a conta do usuário root é constantemente alvo de usuários mal-intencionados. Portanto, é melhor criar um usuário regular e conceder permissões sudo a ele. Você pode desativar o login root definindo o valor de PermitRootLogin como não.
PermitRootLogin no
2. Limitar tentativas de autenticação
Os administradores devem limitar o número de tentativas de login de hosts remotos para evitar tentativas de login de força bruta. A ascensão de vastos exércitos de bots tornou isso mais importante do que nunca. Use a opção MaxAuthTries para definir o número de tentativas de autenticação permitidas em seu servidor. Muitos administradores consideram três um valor aceitável para esta opção. No entanto, você pode configurá-lo com base em seus padrões de segurança.
MaxAuthTries 3
3. Reduza o tempo de tolerância para login
Outra forma de evitar bots automatizados é reduzir o tempo de carência de login. Este é o período de tempo dentro do qual um usuário deve se autenticar com êxito após se conectar ao servidor. O arquivo sshd_config define esse valor em segundos.
LoginGraceTime 20
4. Desativar autenticação por senha
Você só deve permitir que os usuários façam login no servidor usando autenticação baseada em chave. Portanto, certifique-se de desabilitar o esquema de autenticação baseado em senha. Você pode fazer isso definindo o valor de PasswordAuthentication como não.
PasswordAuthentication no
Também é uma boa ideia desabilitar senhas vazias. Configure o valor do campo PermitEmptyPasswords como não.
PermitEmptyPasswords no
5. Desative outros métodos de autenticação
OpenSSH oferece suporte a alguns métodos de autenticação adicionais além da autenticação baseada em chave e senha. Você deve desabilitá-los completamente após configurar a autenticação baseada em chave e desabilitar a autenticação por senha.
ChallengeResponseAuthentication no KerberosAuthentication no GSSAPIAuthentication no
6. Desativar encaminhamento X11
O encaminhamento X11 é usado para exibir aplicativos gráficos no servidor para a máquina host remota. No entanto, não é necessário para a maioria dos servidores corporativos. Portanto, desative-o se não precisar desse recurso.
X11Forwarding no
Depois de desabilitar o encaminhamento X11, você precisa comentar todas as referências a AcceptEnv. Basta adicionar um hash(#) antes das linhas para comentá-las.
7. Desativar opções diversas
Desative as seguintes opções usadas para encapsulamento e encaminhamento se não precisar delas em seu servidor.
AllowAgentForwarding no AllowTcpForwarding no PermitTunnel no
8. Desativar banner SSH
O banner ssh detalhado é habilitado por padrão e exibe informações essenciais sobre o servidor. Os hackers podem aproveitar essas informações para planejar um ataque ao seu servidor. Portanto, é uma boa ideia desabilitar o banner ssh detalhado.
DebianBanner no
Se esta opção não estiver presente em seu arquivo sshd_config, adicione-a para desabilitar o banner.
9. Implementar lista de permissões de endereços IP
Na maioria dos casos, você acessará o servidor remoto a partir de vários endereços IP conhecidos. Você pode criar um endereço IP para permitir a lista para evitar que outras pessoas acessem seu servidor. Isso reduz o risco de violação do servidor, mesmo que suas chaves privadas tenham sido comprometidas.
No entanto, você deve ter cuidado ao implementar a lista de permissões de IP e evitar usar endereços dinâmicos, pois eles mudam com muita frequência.
Para definir a lista de permissões, primeiro descubra o endereço IP que você está usando atualmente para se conectar ao servidor OpenSSH. Você pode fazer isso executando o seguinte comando em seu terminal.
$ w
Anote o endereço IP sob o rótulo ‘FROM‘. Assumiremos um exemplo de endereço IP 203.0.113.1 para o restante deste guia. Agora, abra seu arquivo de configuração ssh e use a diretiva de configuração AllowUsers, conforme mostrado abaixo.
AllowUsers *@203.0.113.1
A linha acima restringirá todos os usuários remotos a um endereço IP selecionado. Você pode alterar isso para um intervalo de endereços IP usando a notação Classless Inter-Domain Routing (CIDR), conforme ilustrado abaixo.
AllowUsers *@203.0.113.0/24
10. Restringir o Shell de usuários remotos
É sempre uma boa prática restringir as operações realizadas pelo usuário remoto. Você pode fazer isso restringindo o shell do usuário remoto. OpenSSH permite múltiplas opções de configuração para auxiliar nesta tarefa. Mostraremos como restringir o acesso do shell de um usuário apenas ao SFTP usando essas opções.
Primeiro, criaremos um novo usuário chamado mary usando o shell /usr/sbin/nologin. Isso desabilitará logins interativos para esse usuário, mas ainda fornecerá sessões não interativas para realizar operações como transferências de arquivos.
$ sudo adduser --shell /usr/sbin/nologin mary
Este comando cria o usuário mary com shell nologin. Você também pode desabilitar o shell interativo para um usuário existente usando o comando a seguir.
$ sudo usermod --shell /usr/sbin/nologin alex
Se você tentar fazer login como um dos usuários acima, sua solicitação será rejeitada.
$ sudo su alex This account is currently not available.
No entanto, você ainda pode executar ações que não exigem um shell interativo usando essas contas.
Em seguida, abra sua configuração sshd mais uma vez e use as diretivas ForceCommand internal-sftp e ChrootDirectory para criar um usuário somente SFTP altamente restritivo. Vamos restringir o usuário alex neste exemplo. Além disso, é altamente recomendável adicionar quaisquer blocos Match na parte inferior do seu sshd_config.
Match User alex ForceCommand internal-sftp ChrootDirectory /home/alex/
Saia do arquivo de configuração e teste se o arquivo de configuração causa algum erro ou não. Você pode fazer isso executando o seguinte comando em seu emulador de terminal Linux.
$ sudo sshd -t
Se tudo correr bem, você deverá ter criado uma configuração robusta para o usuário alex. A sessão de login interativo está desativada para esse usuário e ele tem acesso apenas ao diretório inicial de sua conta.
Pensamentos Finais
Como o OpenSSH é essencial para a segurança do seu servidor remoto, é essencial aprender como ele funciona. É por isso que nossos editores apresentaram neste guia várias informações úteis sobre o servidor OpenSSH. Os tópicos incluem como funciona o OpenSSH, como ler e editar o arquivo de configuração e como implementar as melhores práticas de segurança.
Esperançosamente, conseguimos fornecer as informações que você procurava. Marque este guia para referências futuras. E não se esqueça de deixar um comentário se tiver mais dúvidas ou sugestões para tornar este guia mais utilizável.