Mateus Müller

O carinha do Linux

26 dez. 2017

Boas práticas para a segurança de informação no Linux

No artigo de hoje quero compartilhar algumas boas práticas para a segurança de informação no Linux, que você pode aplicar no seu dia-a-dia, seja em casa ou no trabalho.

Neste exemplo, estarei utilizando o meu equipamento com Ubuntu 17.10. Obviamente esses processos que vou ensinar são básicos e não haverá nada de complexo relacionado a criptografias e outros métodos avançados de proteção. Como o próprio artigo já diz, serão apenas boas práticas que podem ser aplicadas.

Mãos a obra!

Firewall

Por default no Ubuntu o firewall vem desativado, então vamos rodar os seguintes comandos:

$ systemctl enable ufw
$ systemctl start ufw
$ ufw enable
$ ufw status

Agora seu firewall está ativo e iniciará toda as vezes quando bootar o sistema. Por default ele irá droppar as conexões em todas as portas, basta então você liberar apenas o que vai usar. No meu caso, utilizo bastante o SSH, então:

$ ufw allow ssh
$ ufw status
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Agora somente a porta 22 via protocolo TCP está habilitada à receber conexões.

Caso você não queira colocar o nome do serviço, pode fazer desta forma:

$ ufw allow 22/tcp

TCP Wrappers

TCP Wrappers é um sistema de controle baseado em ACL (Access Control List). Basicamente este recurso fica empacotado em uma librarie e os serviços que querem utilizar ele, apenas importam essa biblioteca.

Podemos ver se um serviço tem suporte a TCP Wrappers com o seguinte comando:

$ ldd $(which sshd) | grep -i libwrap
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Se ele retornar alguma coisa, significa que ele utiliza TCP Wrappers.

Ok, mas como configurar TCP Wrappers?

Sabe os arquivos /etc/hosts.allow e /etc/hosts.deny? Pois então, eles são os arquivos de configuração!

Como boa prática, vamos dar um deny em todos os serviços e depois habilitar somente o necessário. Então no /etc/hosts.deny adicione a seguinte linha:

$ vi /etc/hosts.deny
  • ALL: ALL

Pressione ESC e :wq! para salvar e sair:

Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Agora no arquivo /etc/hosts.allow vamos adicionar somente o serviço e de qual rede vamos aceitar conexões:

$ vi /etc/hosts.allow
  • sshd: 192.168.25.0/24
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Pressione ESC e :wq! para salvar e sair.

E prontinho! Somente conexões no SSH e vindas da rede 192.168.25.0/24, que é a rede da minha casa, serão aceitas. Você pode fazer esse mesmo procedimento para outros serviços que aceitem TCP Wrappers, como por exemplo o vsftpd.

Sudo

O sudo já vem por padrão na maioria das distribuições e é importante que você tenha ele configurado no seu sistema.

Quando você está utilizando autenticação com sudo, o login diretamente no usuário root é desabilitado, forçando que somente usuário que estejam nas regras do sudo possam se tornar o root.

Então, imagine que no meu equipamento tenho o usuário mateus e somente ele pode virar o root com o comando sudo. É muito melhor do que qualquer pessoa poder executar um “su root” e mudar de usuário, correto?

Você pode ver se o sudo está instalado com o comando:

$ dpkg -l | grep -i sudo

O arquivo de configuração é o /etc/sudoers.

Troca de senha

É interessante que você configure tanto para você mesmo, quanto para outros usuários um limite de tempo para trocar de senha. Isso pode ser feito com o comando chage_.

$ chage -E 2018-02-28 mateus

Desta forma coloquei a expiração de senha do usuário mateus para o dia 02 de Fevereiro de 2018, onde ele será forçado a trocar de senha.

Caso queira remover a data de expiração:

$ chage -E -1 mateus

Portas abertas

Sempre finalize os serviços que você não estiver utilizando, bem como os aplicativos abertos.

Vamos rodar alguns comandos para validar isso:

$ ss -ltunp

Com este comando vamos listar todas as conexões de socket abertas que estão em estado listening, utilizando os protocolos UDP e TCP sem resolver nomes, assim podemos ver qual é a porta. Também serão mostrados os processos utilizando determinado socket, para que você possa finalizá-los, se assim desejar:

Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Veja que meu Skype está lá abrindo conexões de socket, mesmo eu não utilizando-o. Vamos finalizar ele então:

$ kill 2066
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Já diminuiu bastante né?!

Vamos ver as portas que estão externamente aguardando conexão:

$ nmap -sV localhost
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Veja que meu cups (servidor de impressão) está rodando. Mas, espera aí, eu não tenho impressora. Preciso mesmo dele ocupando recursos de hardware e me dando vulnerabilidade? Não! Vamos pará-lo e desativá-lo:

$ systemctl disable cups
$ systemctl stop cups
$ nmap -sV localhost
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Vamos passar um scan completo agora:

$ nmap -p 1-65535 localhost
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Vamos investigar a primeira porta 4381:

$ ss -ltunp | grep -i 4381
Boas práticas para a segurança de informação no Linux
Boas práticas para a segurança de informação no Linux

Olha se não é o safado do Spotify. Entendeu por que é importante que você feche os aplicativos assim que terminar de utilizá-los?

SSH

Vamos aprender a deixar o seu SSH mais seguro:

$ vi /etc/ssh/sshd_config

Adicione ou altere a linha PermitRootLogin:

PermitRootLogin no

Também altere o protocolo para a versão dois:

Protocol 2

Configure autenticação via chave pública e chave privada. Se não sabe como fazer isso, veja o vídeo que eu fiz a respeito:

Depois, se você quiser logar apenas com chave pública, sem utilizar senha, altere a seguinte opção:

PasswordAuthentication no

Basta salvar com ESC e :wq!.

Reinicie o SSH.

$ systemctl restart ssh

Lembrando que se você estiver em um desktop, provavelmente não precisa que outras pessoas acessem sua máquina. Desta forma, você pode parar o daemon do SSH ou até remover o OpenSSH Server para não ter uma porta aberta sem necessidade.

Bom pessoal, espero que tenham gostado.

Grande abraço!

Se tiver alguma dúvida ou sugestão de conteúdo, por favor, comente!

Comentários Disqus