Quando alguém fala que um servidor Linux é mais seguro do que outros sistemas operacionais, a grande maioria dos profissionais TI com toda certeza irão concordar, ou não!
No entanto, o Linux tem um padrão de segurança que pode ser melhorado, e principalmente adaptado a necessidade, são vários os ajustes que podem tornar o seu servidor Linux mais seguro ainda.
Quando você iniciar a configuração de um servidor LINUX, irá perceber que o sistema operacional oferece muita flexibilidade e opções de configuração.
Proteger um servidor LINUX que já está em produção contra hackers e crackers é uma tarefa desafiadora para um administrador de Sistema, contudo o sistema LINUX tem muitas opções que podem facilitar e muito esse processo.
Abaixo dicas e truques que irá ajudá-lo a entender alguns passos para proteger o seu servidor LINUX.
1. Segurança física do servidor LINUX
Configure o BIOS para desabilitar a inicialização de CD/DVD, dispositivos externos, USB. Em seguida, ative a senha do BIOS e também proteja o GRUB com senha para restringir o acesso físico do seu sistema.
É o básico a fazer contra ataques físicos, imagine se alguém está na frente do seu servidor LINUX com um LIVE/CD? Você irá gostar se uma pessoa má intencionada fizer um boot no seu servidor e montar suas partições de disco?
2. Configure muito bem as partições de disco do seu servidor LINUX
É importante ter partições diferentes para obter maior segurança de dados no caso de ocorrer algum desastre.
Criando diferentes partições, os dados podem ser separados e agrupados. Quando ocorre um acidente inesperado, somente os dados dessa partição serão danificados, enquanto os dados em outras partições estão lá a salvo.
Certifique-se de que você deve ter partições separadas a seguir e certifique-se de que aplicativos de terceiros devem ser instalados em sistemas de arquivos separados em /opt.
/ /boot /usr /var /home /tmp /opt
Eu explico muito bem sobre essa técnica, aqui nessa aula sobre instalação de servidores LINUX.
3. Minimizar Pacotes para Minimizar a Vulnerabilidade
Você realmente quer todos os tipos de serviços instalados? A resposta é não!
É recomendável evitar a instalação de pacotes inúteis para evitar vulnerabilidades nos pacotes.
Antes de continuar falando sobre pacotes do LINUX, é interessante você acessar esse artigo aqui, onde eu explico melhor sobre pacotes do LINUX.
Instalar menos pacotes pode minimizar o risco de que o comprometimento de um serviço pode levar ao comprometimento de outros serviços, resumindo, fazer uma instalação minimalista no seu servidor LINUX é muito importante.
Nesse video aqui eu falei exatamente sobre isso, respondendo a pergunta de uma aluno do Curso PROFISSIONAIS LINUX.
Então o melhor é localizar, remover ou desativar serviços indesejados do servidor LINUX para minimizar a vulnerabilidade.
Use o comando ‘chkconfig’ para descobrir os serviços que estão sendo executados no runlevel 3.
# /sbin/chkconfig --list |grep '3:on'
Depois de descobrir se qualquer serviço indesejado está sendo executado, desative-os usando o seguinte comando.
# chkconfig nome_do_serviço off
Use o gerenciador de pacotes RPM e DPKG, com as ferramentas “yum” e “apt-get” para listar todos os pacotes instalados em um sistema e removê-los usando o seguinte comando.
No CentOS
# yum -y remove nome-do-pacote
No DEBIAN
# apt-get remove nome-do-pacote
Veja aqui, mais comandos para gerenciar pacotes no seu servidor LINUX.
4. Verifique quais portas estão abertas no seu servidor LINUX
Com a ajuda do comando de rede ‘netstat’ você pode visualizar todas as portas abertas e programas associados.
Como eu disse acima, use o comando ‘chkconfig’ para desativar todos os serviços de rede indesejados do sistema.
# netstat -tulpn
5. Utilizar o SSH (Secure Shell) no servidor LINUX
Ainda bem que o ssh é padrão no LINUX, pois telnet e protocolos rlogin usam texto simples, em formato não criptografado.
SSH é um protocolo seguro que usa a tecnologia de criptografia durante a comunicação com o servidor.
Nunca faça login diretamente como root, a menos que seja necessário.
Use o “sudo” para executar comandos. O sudo é configurado no arquivo /etc/sudoers também podem ser editados com o utilitário “visudo” que abre no editor VI.
Também é recomendável alterar o número da porta do SSH, 22 é o padrão, modifique para algum outro número de porta mais alta.
Abra o arquivo de configuração principal do SSH e faça alguns dos seguintes parâmetros para restringir o acesso dos usuários.
# vi /etc/ssh/sshd_config
Desativar login do root
PermitRootLogin no
Permitir somente usuários específicos
AllowUsers username
Utilizar a versão SSH Protocol 2
Protocol 2
6. Manter o sistema do servidor sempre atualizado
Sempre mantenha o sistema atualizado com patches de versões mais recentes, correções de segurança e kernel atualizados.
Para fazer isso, em distribuição LINUX baseada em CentOS
# yum updates # yum check-update
Para fazer isso, em distribuição LINUX baseada em DEBIAN
# apt-get update # apt-get upgrade
Caso você precise aprender mais sobre gerenciamento de pacotes no UBUNTU, você poderá baixar esse ebook aqui
7. É melhorar bloquear o Cron
O Cron já tem um recurso, onde permite você administrador do servidor LINUX especificar quem pode, e quem não pode querer executar JOBS (trabalhos agendados).
Isso é controlado com os arquivos chamados /etc/cron.allow e /etc/cron.deny.
Para bloquear que um usuário utilize o cron, basta adicionar os nomes de usuários no cron.deny e para permitir que um usuário execute o cron, adicione o nome do usuário no arquivo cron.allow.
Se você quiser desabilitar todos os usuários, para que ninguém utilize o cron do seu servidor LINUX, adicione a linha ‘ALL’ ao arquivo cron.deny.
Veja o exemplo abaixo:
# echo ALL >>/etc/cron.deny
8. Servidor Linux não deve detectar USB automaticamente
Quando queremos bloquear a utilização do USB no nosso servidor LINUX, podemos restringir bloqueando que o sistema detecte automaticamente o dispositivo USB.
Uma forma de fazer isso é criar um arquivo ‘/etc/modprobe.d/no-usb’ e adicionar a linha abaixo.
install usb-storage /bin/true
9. Ative o SELinux no seu servidor
Security Enhanced Linux (SELinux) é um mecanismo de segurança de controle de acesso do próprio kernel do LINUX.
Você pode instalar o SELinux na distribuição DEBIAN, com o comando abaixo.
apt install selinux-basics selinux-policy-default
Desativar o SELinux significa remover um grande mecanismo de segurança do sistema.
Pense duas vezes antes de remover, se o seu sistema está conectado à internet e tem acesso externo.
Você pode exibir o status atual do modo SELinux a partir da linha de comando:
‘system-config-selinux’, ‘getenforce’ ou ‘sestatus’.
Exemplo:
# sestatus
O SELinux pode ser gerenciado no do arquivo ‘/etc/selinux/config’, onde podemos ativá-lo ou desativá-lo.
10. Remova o ambiente gráfico (KDE / GNOME) do servidor LINUX
Não há necessidade de executar ambientes XWindow como o KDE ou GNOME ( ou vários outros que existem) no seu servidor LINUX.
Eu comentei sobre isso nesse video também.
Você pode removê-los ou desativá-los para aumentar a segurança do servidor principalmente o desempenho.
Eu recomendo que você não instale os pacotes do KDE ou GNOME no servidor. Se os pacotes do ambiente gráfico já estão instalados do seu servidor LINUX, é recomendável remover.
11. Desative o IPv6
Se você não estiver usando um protocolo IPv6, então você deve desativá-lo porque a maioria das aplicações ou políticas não requer protocolo IPv6 e atualmente não é necessário no servidor LINUX.
No CentOS, na configuração de rede e adicione as linhas abaixo para desativá-lo.
# vi /etc/sysconfig/network
NETWORKING_IPV6=no IPV6INIT=no
No Debian, para desativar o IPV6, você deve editar o arquivo /etc/sysctl.conf, conforme abaixo:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 net.ipv6.conf.eth0.disable_ipv6 = 1
Depois, é interessante reiniciar o servidor LINUX ou executar o comando abaixo para ativar a configuração do IPV6
# sysctl -p
12. Verificar a expiração de senha do usuário
No Linux, as senhas dos usuários são armazenadas no arquivo ‘/etc/shadow’ em formato criptografado.
Para verificar a data em que a senha dos usuários irão expirar, você precisa usar o comando ‘chage’.
Ele exibe informações de detalhes de expiração e de senha juntamente com a última data de alteração.
Esses detalhes são usados pelo sistema para decidir quando um usuário deve alterar sua senha.
Para exibir as informações de qualquer usuário existente, como data e hora de expiração, use o seguinte comando.
#chage -l username
Para alterar a data que as senhas irão expirar, use o seguinte comando.
#chage -M 60 username #chage -M 60 -m 7 -W 7 userName
Parâmetros
- -M Definir o número máximo de dias
- -m Definir o número mínimo de dias
- -W Definir o número de dias para o aviso
13. Bloquear e desbloquear uma conta de usuário manualmente
Os recursos de bloqueio e desbloqueio são muito úteis, em vez de remover uma conta do sistema, você pode bloqueá-lo por uma semana ou um mês. Para bloquear um usuário específico, você pode usar o comando abaixo.
# passwd -l nome-do-usuario
Nota: O usuário bloqueado ainda está disponível apenas para o usuário root. O bloqueio é executado substituindo a senha criptografada por uma string (!). Se alguém tentar acessar o sistema usando esta conta, ele receberá um erro semelhante ao abaixo.
# su - nome-do-usuario This account is currently not available.
Para desbloquear ou habilitar o acesso a uma conta bloqueada, use o comando passwd com a opção -u, conforme abaixo. Isso removerá (!), da sequência de caracteres com a senha criptografada.
# passwd -u nome-do-usuario
14. Forçando senhas mais fortes
Alguns usuários usam senhas fracas e sua senha pode ser descoberta por ataques de força bruta por exemplo.
O módulo ‘pam_cracklib’ está disponível na pilha de módulos PAM (Pluggable Authentication Modules) que forçará o usuário a definir senhas fortes.
Abra o seguinte arquivo com um editor.
# vi /etc/pam.d/system-auth
E adicione a linha usando parâmetros (lcredit, ucredit, dcredit e / ou ocredit, respectivamente minúsculas, maiúsculas, dígitos e outros)…
/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1
15. Ativar Iptables (Firewall)
É recomendável habilitar um firewall para garantir a segurança do servidor Linux.
Aplique regras no iptables para filtrar pacotes de entrada, saída e encaminhamento.
Utilize o conteúdo desse artigo… para conhecer mais sobre o Firewall do Linux.
Com o IPTABLES podemos especificar o endereço de origem e de destino, permitir e negar o número de portas, e protocolos como o udp/tcp.
O IPTABLES trabalha com a utilização de tabelas, veja mais aqui.
16. Verifique se existem contas de usuário com senhas vazias no seu servidor Linux
Qualquer conta com uma senha vazia significa que ela está aberta para acesso não autorizado.
Portanto, você deve verificar se todas as contas têm senhas fortes. Contas de senha vazias são riscos de segurança e que podem ser facilmente hackeada.
Para verificar se há alguma conta com senha vazia no seu servidor Linux, use o seguinte comando.
# cat /etc/shadow | awk -F: '($2==""){print $1}'
Você também pode automatizar essas tarefas, com a utilização de shell scripts, veja nesse artigo aqui.
17. Monitorar Atividades dos Usuários
Se você está lidando com muitos usuários, então é importante coletar as informações de cada usuário, atividades e processos e analisá-los em um momento posterior.
Mas como podemos monitorar e coletar informações de atividades do usuário?
Existem duas ferramentas úteis chamadas ‘psacct’ e ‘acct’ são usadas para monitorar atividades e processos do usuário em um sistema.
Essas ferramentas são executadas no sistema em segundo plano, e acompanha cada atividade do usuário, como por exemplo os recursos consumidos por serviços como Apache, MySQL, SSH, FTP, etc.
Para instalar o acct no Debian, utilize o comando abaixo
# sudo apt-get install acct
Agora você já tem o comando ac, digite no console do seu servidor Linux
# ac
18. Faça Backup dos seus arquivos de Log ( e ou utilize um servidor de Logs)
Mover logs para um servidor de log dedicado é recomendado, isso irá facilitar que futuras auditorias sejam feitas em caso de sinistro com um dos seus servidores.
Abaixo estão os nomes dos arquivos de log padrão do Linux:
/var/log/message /var/log/auth.log /var/log/kern.log /var/log/cron.log /var/log/maillog /var/log/boot.log /var/log/mysqld.log /var/log/secure /var/log/utmp /var/log/yum.log
19. Backup dos arquivos de configuração
Em um servidor Linux já em produção, é necessário fazer backup de arquivos importantes e mantê-los com muita segurança, como por exemplo em um site remoto para recuperação de desastres.
Portanto, sempre mantenha uma cópia do seu diretório /etc, essa tarefa pode ser automatizada com o rsync.
20. Fazer o boot do sistema no modo somente leitura
O kernel do Linux e seus arquivos relacionados estão no diretório /boot que é por padrão um partição leitura e escrita.
Alterá-lo para somente leitura reduz o risco de modificação não autorizada de arquivos críticos de inicialização.
Para fazer isso, abra o arquivo “/etc/fstab”
# vi /etc/fstab
Adicione a seguinte linha na parte inferior.
LABEL=/boot /boot ext2 defaults,ro 1 2
Observe que você precisa redefinir a alteração para leitura-gravação se precisar atualizar o kernel no futuro.
21. Ignorar ICMP ou Broadcast Request
Adicione a seguinte linha no arquivo “/etc/sysctl.conf” para ignorar a solicitação de ping ou broadcast.
Ignore ICMP request: net.ipv4.icmp_echo_ignore_all = 1 Ignore Broadcast request: net.ipv4.icmp_echo_ignore_broadcasts = 1
Para carregar novas configurações ou alterações, executando o seguinte comando
#sysctl -p
Assim seu servidor Linux não irá mais responder a solicitação de ping.
Isso é tudo?
Não com toda certeza não é! Mas são 21 pontos que você poderá começar a agir, e melhorar a segurança do seu servidor LINUX.
Algumas dicas são muito básicas, mas se aplicadas podem trazer ótimos resultados e principalmente prevenir futuros problemas.
Aproveite também para assistir essa aula completa sobre instalação de servidores Linux, nessa aula eu aplico alguns dos conceitos que foram comentados nesse artigo.
Até a Próxima