Single Blog

OTserv Linux, aumentando a segurança do serviço SSH

08/12/2015, Written by 0 comment

O serviço SSH é muito utilizado para permitir uma comunicação segura e criptografada entre dois computadores. Desta forma você poderá conectar em um computador remoto e executar comandos como se estivesse acessando ele localmente. A segurança do serviço SSH depende da forma que ele é configurado. Agora nós iremos ensinar algumas dicas para aumentar o nível de segurança do sreviço SSH:

Abra com seu editor de preferência o arquivo /etc/ssh/sshd_config e altere as linhas abaixo, conforme suas necessidades:

1- Port:

Use uma porta diferente da 22 e que não seja não utilizada por outro serviço, pois evitará ataques de força bruta na porta padrão do SSH. Por exemplo:

Port 37281

2- Protocol:

Use apenas o protocolo da versão 2 do SSH:

Protocol 2

3- ListenAddress:

Evite rodar o SSH “escutando” em todas as interfaces de rede:

#ListenAddress 0.0.0.0 # configuração default aonde o SSH escutará em todas as interfaces com endereços IPv4
#ListenAddress ::          # configuração default aonde o SSH escutará em todas as interfaces com endereços IPv6

Recomendado colocar apenas o IP da interface que será usada para o servidor SSH. Por exemplo:

Vamos supor que seu servidor tem duas interfaces de rede e use o endereço “192.168.10.1” na rede local, mas você não deseja que o servidor SSH fique disponível na internet. Você só precisaria alterar para:

ListenAddress 192.168.10.1

Se quiser usar o SSH em mais de um endereço IP, é só adicionar mais linhas no padrão abaixo ou deixar o valor default (explicado anteriormente):

ListenAddress XXX.XXX.XXX.XXX (troque pelo ip desejado).

4- AddressFamily:

Caso não utilize IPv6, altere a configuração de AddressFamily:

Valores possíveis:
#AddressFamily any     # default
#AddressFamily inet    # apenas IPv4
#AddressFamily inet6   # apenas IPv6

De    -> AddressFamily any   # default
Para -> AddressFamily inet   # apenas IPv4

5- PermitEmptyPasswords:

Desabilite o login de contas sem senha:

PermitEmptyPasswords no

6- Caso precise de mais informações, aumente o nível de detalhes no arquivo de log:

SyslogFacility AUTH
SyslogFacility AUTHPRIV
LogLevel VERBOSE ( o padrão é INFO)

7- LoginGraceTime:

Por padrão o SSH aguardará até 2 minutos para o usuário ser autenticado. Se você usa uma conexão lenta, esse valor pode ser necessário, mas valores altos resultam em conexões abertas aguardando autenticação. Você pode reduzir o valor para 30 segundos, o que normalmente funciona em vários casos (altere de acordo com sua necessidade):

#LoginGraceTime 2m (valor default)
LoginGraceTime 30

8- IgnoreRhosts:

Por razões de segurança, é recomendado não utilizar os arquivos rhosts ou shosts para autenticação:

IgnoreRhosts yes

9-StrictModes

A opção StrictModes define se o SSH deve verificar ou não as permissões dos arquivos na pasta ~/.ssh no diretório do usuário. É recomendado deixar ativa esta opção, pois as vezes o usuário pode alterar as permissões acidentalmente e deixar seu diretório ~/.ssh liberado para acesso por outras pessoas:

StrictModes yes

10- X11Forwarding

Esta opção permite encaminhar as interfaces gráficas X11 de aplicativos no servidor para a máquina cliente. Isso significa que você pode começar um programa gráfico no servidor e interagir com ele no cliente. O cliente deve ter um sistema gráfico de janelas X disponível para isso. Qualquer desktop Linux tem esta capacidade. Resumindo, se você utiliza apenas a linha de comando, pode desativar seguramente esta opção com a linha abaixo:

X11Forwarding no

11- Para imprimir o conteúdo do arquivo /etc/motd (Message Of The Day) como uma mensagem assim que alguém fizer login via SSH, use:

PrintMotd yes

12- UsePrivilegeSeparation:

Esta opção ativada permite ao SSH gerar processos filhos apenas com os privilégios necessários para suas tarefas. Este é um recurso de segurança para isolar os processos em caso de uma brecha de segurança.

UsePrivilegeSeparation yes

13- PrintLastLog:

Diz ao daemon SSH para imprimir informações sobre o seu último login.

PrintLastLog yes

14- ClientAliveCountMax e ClientAliveInterval:

ClientAliveCountMax = Indica o número total de mensagens “checkalive” enviadas pelo servidor SSH sem obter qualquer resposta do cliente SSH. O valor padrão é 3;

ClientAliveInterval      = Indica o tempo limite em segundos. Depois de X número de segundos, o servidor SSH irá enviar uma mensagem para o cliente pedindo resposta. O valor padrão é 0 (o servidor não irá enviar mensagem de verificação para o cliente).

Se você quiser que o cliente SSH saia (timeout) automaticamente após 10 minutos (600 segundos), modifique o arquivo /etc/ssh/sshd_config e defina os dois parâmetros como mostrado abaixo:

nano /etc/ssh/sshd_config

ClientAliveInterval 600
ClientAliveCountMax 0

15-HostbasedAuthentication:

Para desabilitar a autenticação baseada em host, adicione a seguinte configuração:

HostbasedAuthentication no

16- AllowTcpForwarding:

Se você não precisa de port forwarding, use a linha abaixo:

AllowTcpForwarding no

17- PermitRootLogin:

Desabilite o acesso de root via SSH:

PermitRootLogin no

Após isso, precisará de outro usuário para acessar seu servidor e que tenha permissão de “super usuário” ou com priviléǵios de root. Execute os passos abaixo logado como o usuário root do servidor:

1o passo: Criar um novo usuário

adduser toor

Você será solicitado a responder algumas perguntas, começando com a senha da conta. Entre com uma senha forte e, opcionalmente, preencha quaisquer informações adicionais se desejar. Isto não é requerido e você pode apenas teclar “ENTER” em qualquer campo que quiser pular. Isto irá permitir nosso usuário normal executar comandos com privilégios administrativos colocando a palavra sudo antes de cada comando.

*OBS.: Em alguns sistemas o sudo não vem instalado por padrão. Use o comando abaixo para instalar (se já estiver no sistema, o comando será ignorado):

#Debian/Ubuntu
apt-get install sudo

#Centos/Fedora
yum install sudo

2o passo: Adicionar ao grupo sudo

Para adicionar privilégios para nosso novo usuário, precisamos adicionar o novo usuário ao grupo “sudo”.

gpasswd -a toor sudo

Agora seu usuário pode executar comandos com privilégios de super usuário! Caso queira mais informações sobre como editar o arquivo de configuração do sudo, visite https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file-on-ubuntu-and-centos.

3o passo: Gerar a chave pública

Agora precisamos configurar uma chave pública de autenticação para seu novo usuário. Se você já tiver uma chave que queira utilizar, pule o passo Copiar a Chave Pública, senão, prossiga com os comados abaixo para gerar uma nova chave:

ssh-keygen

A saída geralmente é essa:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/toor/.ssh/id_rsa):

Pressione ENTER para aceitar este nome de arquivo e o caminho aonde será criado.

4o passo: Copiar a Chave Pública

Depois da geração do par de chaves SSH, você vai querer copiar sua chave pública para seu novo servidor.

Assumindo que você gerou um par de chaves SSH utilizando o passo anterior, use o seguinte comando no terminal de sua máquina local para imprimir sua chave pública (id_rsa.pub):

cat ~/.ssh/id_rsa.pub

Deve aparecer algo na tela parecido com os dados abaixo:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBGTO0tsVejssuaYR5R3Y/i73SppJAhme1dH7W2c47d4gOqB4izP0+fRLfvbz/tnXFz4iOP/H6eCV05hqUhF+KYRxt9Y8tVMrpDZR2l75o6+xSbUOMu6xN+uVF0T9XzKcxmzTmnV7Na5up3QM3DoSRYX/EP3utr2+zAqpJIfKPLdA74w7g56oYWI9blpnpzxkEd3edVJOivUkpZ4JoenWManvIaSdMTJXMy3MtlQhva+j9CgguyVbUkdzK9KKEuah+pFZvaugtebsU+bllPTB0nlXGIJk98Ie9ZtxuY3nCKneB+KjKiXrAvXUPCI9mWkYS/1rggpFmu3HbXBnWSUdf localuser@machine.local

Selecione e copie a sua chave pública.

5o passo: Adicionar a Chave Pública para o Novo Usuário Remoto

Para permitir o uso da sua chave pública SSH para autenticar-se, ela deve ser adicionada no diretório do usuário na pasta /home.

Digite o seguinte comando para chavear para o novo usuário (substitua pelo nome do usuário que criou):

su – toor

Agora você estará no diretório home do seu novo usuário.

Caso não exista um diretório chamado .ssh, crie-o e restrinja suas permissões com os seguintes comandos:

mkdir .ssh
chmod 700 ~/.ssh

Agora abra um arquivo dentro de .ssh chamado authorized_keys com um editor de textos. Utilizaremos o nano para esta tarefa:

nano .ssh/authorized_keys

Agora insira sua chave pública (que deve estar em sua área de transferência) colando-a dentro do editor.

Tecle CTRL-X para sair do arquivo, a tecla Y para salvar as alteações que fez e depois tecle ENTER para confirmar o nome do arquivo.

Agora restrinja as permissões do arquivo authorized_keys com este comando:

chmod 600 .ssh/authorized_keys

Reinicie o SSH para ele utilizar as novas configurações:

service ssh restart (ou service sshd restart)

Antes de sair do servidor, teste para ver se o acesso com seu novo usuário está funcionando, senão ficará bloqueado de acessar como root e consertar qualquer problema que possa ter acontecido. Abra uma nova janela no terminal ou no seu cliente SSH e tente conectar usando os dados do novo usuário criado (no caso deste exemplo, é o usuário toor). Caso utilize o Putty ou qualquer outro programa gráfico, não esqueça de alterar a porta do SSH, caso tenha feito essa alteração também. Após fazer o login, execute o comando abaixo para testar:

sudo ls

Digite sua senha de usuário e aparecerá o resultado do comando. Caso dê algum erro, refaça todos os passos novamente.

Configuração opcional para o firewall iptables:

Se você é incapaz de limitar os endereços IP de origem, e precisa abrir a porta SSH globalmente, então o iptables pode ajudar a prevenir ataques de força bruta adicionando as tentativas de invasão no arquivo de log e bloqueando as tentativas repetidas de login a partir do mesmo endereço IP:

iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set –name ssh –rsource
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent ! –rcheck –seconds 60 –hitcount 4 –name ssh –rsource -j ACCEPT

A primeira regra registra o endereço IP de cada nova tentativa de acesso a porta 22 usando o módulo “recent”. A segunda regra verifica se o endereço IP tentou conectar 4 ou mais vezes nos últimos 60 segundos, e se não, então o pacote é aceito. Note que esta regra exigiria uma política padrão DROP na chain INPUT.

Fontes:

https://www.digitalocean.com/community/tutorials/configuracao-inicial-de-servidor-com-ubuntu-14-04-pt
http://www.scalescale.com/tips/nginx/secure-ssh-server/
https://ubuntu-tutorials.com/2008/01/12/disabling-ssh-connections-on-ipv6/
http://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html
http://www.hardware.com.br/tutoriais/dominando-ssh/pagina4.html
http://www.vivaolinux.com.br/artigo/SSH-completo-%28passo-a-passo%29?pagina=3

admin

Leave a reply

Your email address will not be published. Required fields are marked *