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
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
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:
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
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:
Veja que meu Skype está lá abrindo conexões de socket, mesmo eu não utilizando-o. Vamos finalizar ele então:
$ kill 2066
Já diminuiu bastante né?!
Vamos ver as portas que estão externamente aguardando conexão:
$ nmap -sV localhost
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
Vamos passar um scan completo agora:
$ nmap -p 1-65535 localhost
Vamos investigar a primeira porta 4381:
$ ss -ltunp | grep -i 4381
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!