Nada mais, nada menos do que 40 dicas para reforçar a segurança do seu servidor ou mesmo do seu computador pessoal rodando sob kernel Linux!
| Se você apoia nosso site, desative o AdBlock quando visitá-lo, inclusive em Mobile!
Os anúncios são poucos e não invasivos. Se quiser contribuir com nosso trabalho, clique em qualquer banner de sua preferência, exceto dos Parceiros. Mais detalhes clicando aqui.
Introdução
Seguinte meus queridos, segurança digital é algo importante hoje em dia e sei que tem uma galera aqui que quer reforçar a segurança de seus servidores caseiros ou mesmo aprender técnicas de reforço de segurança para seus computadores domésticos – muitas das dicas dadas aqui servirão para ambos!
A maioria das dicas valem para distros que usam gerenciador de pacotes YUM ou o APT, abrangendo a maior parte dos usuários de Linux.
Portanto sem muita enrolação porque o post é imenso, seguem abaixo 40 dicas de como melhorar, reforçar e otimizar a segurança do seu servidor – ou mesmo do seu computador doméstico que roda sob GNU/Linux!
1) Criptografe sua Comunicação
Todos os dados transmitidos pela rede estão abertos á monitoramento. Criptografar os dados transmitidos sempre que possível, com senhas ou chaves/certificados.
Use algum protocolo como o scp, ssh, rsync ou sftp para transferir arquivos pela rede pois estes suportam criptografia nativamente.
GnuPG permite criptografas e assinar seus arquivos além de um sistema de gerenciamento de chaves com módulos para acesso a chaves em diretórios públicos/compartilhados.
OpenVPN possui um bom custo-benefício, uma conexão SSL VPN leve para assegurar os dados conectados remotamente.
2) Corra das Conexões FTP, Telnet, e rlogin/rsh Services
Sob configurações de servidores, nomes de usuário, senhas, comandos via FTP/telnet/rsh e arquivos transferidos por eles podem ser interceptados por sniffers de rede. Uma maneira de solucionar isso é usar protocolos criptografados e mais modernos como OpenSSH , SFTP, ou FTPS (FTP over SSL), que adiciona criptografia SSL ou TLS ao FTP. Esse comando remove todos os principais serviços obsoletos de seu sistema:
# yum erase xinetd ypserv tftp-server telnet-server rsh-server
Se utiliza um sistema baseado no Debian:
$ sudo apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server
3) Diminua a Quantidade de Software Instalado para Diminuir Vulnerabilidades.
Você realmente precisa de todo aquele monte de serviços Web ativos?
Remova softwares inativos e desnecessários para diminuir a probabilidade de possuir vulnerabilidades em seu sistema.
Se você utiliza o gerenciador Yum:
# yum list installed # yum list nome-do-pacote # yum remove nome-do-pacote
Ou se você utiliza pacotes .deb:
# dpkg --list # dpkg --info nome-do-pacote # apt-get remove nome-do-pacote
4) Execute um Serviço de Rede por Sistema, ou Instância de Máquina Virtual
Tente rodar diferentes serviços em servidores ou máquinas virtuais diferentes. Isso limita o numero de serviços comprometidos num possivel ataque. Por exemplo, se um atacante for bem sucedido e afetar o Apache, ele pode ter acesso aos demais serviços como MySQL,/MariaDB/PGSql, servidor de email e etc.
5) Mantenha seu Kernel Linux e seu Sistema Atualizados!
Aplicar patches de segurança são uma parte importante da manutenção de um servidor GNU/Linux. Os sistemas sob kernel Linux naturalmente fornecem ferramentas para manter o sistema atualizado e permite facilmente dar upgrade entre as diversas versões. Todos os updates de segurança devem ser feitos rapidamente para garantir que esteja tudo em ordem!.
Para sistemas com pacotes rpm:
# yum update && yum upgrade
Para sistemas com pacotes .deb:
# apt-get update && apt-get upgrade
Você pode ainda configurar seu Red hat / CentOS / Fedora Linux a enviar notificações de update via email usando um comando do cron. Sob o Debian / Ubuntu Linux você pode usar o apticron para enviar notificações de segurança para seu email. Tambem pode configurar para updates não autorizados.
Para configurar os pacotes em sistemas baseados em Debian:
$ sudo apt-get install unattended-upgrades apt-listchanges bsd-mailx
6) Use Extensões de Segurança para o Linux
O Linux utiliza diversas ferramentas de segurança nativas para proteger seus programas e seu sistema. É possivel usar o SELinux e outras extensões de segurança para reforçar os acessos á rede por diversos programas.
7) SELinux
Recomendo fortemente que use o SELinux, que provém um sistema MAC bem flexivel (Mandatory Access Control). Sob essa diretriz, um programa ou processo em execução só roda sob a UID ou SUID do usuário que o abriu restringindo ainda mais as permissões que o habitualmente nativo do sistema. O sistema SELinux pode reforçar a segurança do seu sistema consideravelmente!
8) Contas de Usuário e Senhas mais Seguros
Use o comando useradd/usermod para criar e dar manutenção em contas de usuario no sistema. Tambem tenha certeza de que utiliza senhas seguras e fortes! Por exemplo, uma boa senha inclui pelo menos 8 caracteres em tamanho misturados com caracteres especiais, maiusculas e minusculas.
Você ainda pode utilizar ferramentas como “John the Ripper” (ParrotOS ou KaliLinux) para fazer testes de penetração em seu sistema.
9) Prazo de Validade da Senha
O comando “chage” altera o numero de dias entre a ultima troca de senha e a criação da senha atual. Essa informação é usada pra saber quando uma senha deve ser trocada. O arquivo /etc/login.defs define explicitamente configurações que definem a idade de uma senha e sua expiração. Para desativar a validade de uma senha:
# chage -M 99999 userName
Para pegar informações de expiração de senha:
# chage -l usuario
Finalmente, você pode editar o arquivo /etc/shadows editando os seguintes campos:
{userName}:{password}:{lastpasswdchanged}:{Minimum_d ays}:{Maximum_days}:{Warn} :{Inactive}:{Expire}:
- Minimum_days: O tempo minimo em dias que a senha deverá mudar. Por exemplo, o numero de dias que um usuário terá de prazo para mudar sua senha.
- Maximum_days: O tempo máximo de duração da senha (depois disso o usuário será obrigado a troca-la)
- Warn: O numero de dias para a senha expirar depois que o usuário é alertado.
- Expire: Dias desde 1 de Janeiro de 1970 que a conta será desabilitada. Você pode usar o comando chage para editar esses parâmetros sem ter que necessariamente editar o arquivo shadow:
# chage -M 60 -m 7 -W 7 userName
10) Evitando o Reaproveitamento de Senhas Anteriores.
Você pode prever que todos os usuários reutilizem senhas velhas no seu sistema Linux. Um parametro do modulo pam_unix permite essa configuração do numero de senhas anteriores que não podem ser reutilizadas.
11) Trancando Contas de quem Erra o Login!
O Linux permite que você use o log de falha de login para limitar a quantidade de erros de login que um usuário pode ter. Para detalhes do log de falha de login:
# faillog
Para destravar uma conta bloqueada por errar demais a senha:
# faillog -r -u usuario
Note que você pode usar o comando passwd para bloquear e desbloquear contas:
Bloquear conta:
# passwd -l userName
Desbloquear conta:
# passwd -u userName
12) Verificando se uma Conta possui Senhas em Branco
Comando:
# awk -F: '($2 == "") {print}' /etc/shadow
Travar as contas com senha em branco:
# passwd -l accountName
13) Tenha certeza que Contas não-Root não possuem UID 0
Somente o usuário root pode ter UID 0 com acesso total ao sistema!
Digite esse comando para descobrir quem tem UID = 0:
# awk -F: '($3 == "0") {print}' /etc/passwd
Você só pode ver essas linhas, qualquer coisa fora disso e a conta tem permissões acima do permitido:
root:x:0:0:root:/root:/bin/bash
14) Desabilitar o Login do Root
Nunca, repito NUNCA dê login como usuário Root!
Você deve executar sudo antes de qualquer comando que vá requerer acesso root. Sudo tambem permite mapear o que um usuário fez de forma simples e prática.
15) Segurança Física do Servidor
Você deve proteger seu servidor contra acessos locais/fisicos: Configure sua BIOS para desativar o boot por mídias externas como DVD/CD/USB e etc.
Para tal coloque uma senha de administrador no acesso da BIOS.
Não esqueça da senha no GRUB tambem, ele possui a opção de bootar com senha.
16) Desative Serviço Indesejados
Desabilitar serviços indesejados ajuda a diminuir possiveis meios de penetração de malwares e outras moléstias.Com esse comando você adiciona todos os serviços de boot do sistema para runlevel 3:
# chkconfig --list | grep '3:on'
Para desabilitar um serviço:
# service nome-do-serviço stop # chkconfig nome-do-serviço off
17) Encontre Portas Desnecessariamente Abertas da sua Rede
Use esse comando para listar todos os programas e portas associadas:
# netstat -tulpn
Ou use o comando ss:
$ ss -tulpn
Temos tambem o nmap:
$ nmap -sT -O localhost $ nmap -sT -O server.example.com
18) Delete o X.Org – Para sistemas CentOS/RHEL!
Se você utiliza um servidor que não requer interface de usuário, desabilite ela. Isso aumenta a performance geral e a segurança. Para isso edite o arquivo /etc/inittab e mude o runlevel para 3. E para remover o
# yum groupremove "X Window System"
No servidor CentOS 7/RHEL 7: # yum group remove "GNOME Desktop" # yum group remove "KDE Plasma Workspaces" # yum group remove "Server with GUI" # yum group remove "MATE Desktop"
19) Configure o iptables e o TCPWrappers
O Iptables e o TCPWrappers funcionam como firewall de redes e local, reforçando a segurança do seu sistema. Existe uma GUI pro IPTable: UFW.
20) Efetue o Hardening do Kernel editando o /etc/sysctl.conf.
O Hardening é basicamente um reforço manual de segurança do kernel.
Exemplo:
- # Habilita o execshield
kernel.exec-shield=1
kernel.randomize_va_space=1 - # Habilite o IP Spoofing
net.ipv4.conf.all.rp_filter=1 - # Disabilite a rota de fontes do IP:
net.ipv4.conf.all.accept_source_route=0 - # Ignore requisições de transmissão:
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1 - # Habilitar o log de pacotes pegos na rede próxima:
net.ipv4.conf.all.log_martians = 1
21) Separe suas Partições de Sistema
Separar suas partições reforça a segurança e permissões de acesso entre elas para/com o sistema. As principais são:
- /usr
- /home
- /var e /var/tmp
- /tmp
Separe a partição /var das demais principalmente se você possui servidores Apache e/ou FTP. Reforce a segurança editando as credenciais da montagem dessas partições em /etc/fstab:
- noexec – Proibe a execução de binários dentro da partição, mas permite scripts.
- nodev – Não permite o uso de devices próprios ou especiais, na partição, como o /dev/zero ou acesso a /dev/sda.
- nosuid – Não permite o acesso SUID/SGID á partição.
Abaixo, um exemplo de entrada que limite o acesso a usuários em /dev/sda5 (diretório root do servidor FTP):
/dev/sda5 /ftpdata ext3 defaults,nosuid,nodev,noexec 1 2
22) Cotas de Disco
Tenha certeza que os usuários possuem cotas de disco habilitadas. Isso limita o uso do HD e não deixa que o usuário extrapole o uso definido.
Cotas por arquivo podem ser definidas editando o arquivo /etc/fstab.
Remonte o sistema de arquivos
Crie a base dos arquivos e gere a tabela de uso do disco.
Alinhe as politicas de cotas.
23) Desligue o IPV6
O protocolo IPV6 trouxe uma nova camada de uso para o TCP/IP e possui muitas melhorias; mas enquanto ela não é ativamente utilizada, pode ser a porta de entrada para algum malware sob vulnerabilidades.
24) Desabilite Binarios SUID e SGID Inuteis
Se um executável sob SUID/SGID tiver um problema de segurança, ele pode ser a porta para maiores problemas. Com esses comandos você encontra esse arquivos que sejam indesejáveis:
- # Veja todos os arquivos com ID do usuário:
find / -perm +4000
- # Veja todos os arquivos com ID de grupo do usuário:
find / -perm +2000
- # OU combinando os 2 comandos em 1:
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
25) Verifique Arquivos com Acesso Total (777)
Qualquer um pode modificar esses arquivos globais e isso pode ser um problema de segurança. Use o seguinte comando para encontrar eles:
$ find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
Você deve investigar os arquivos que forem encontrados para definir o usuário e grupo corretos que terão permissão sob ele; ou exclua-o.
26) Arquivos Sem Dono
Da mesma forma que arquivos com permissão total são um perigo, arquivos sem dono ou sem grupos podem ser um problema de segurança. Encontre-os, defina um usuário/grupo ou exclua-os:
$ find /dir -xdev \( -nouser -o -nogroup \) -print
27) Use um Sistema de Autenticação Centralizado
Sem um sistema de autenticação centralizado, os arquivos de propriedade do sistema podem ficar inconsistentes e levar a credenciais obsoletas ou a contas esquecidas que deveriam ser excluídas. Não use o sistema NIS para isso, recomendo que use o OpenLDAP para sincronizar dados de clientes e servidores.
28) Kerberos
O Kerberos permite autenticar usando um serviço terceirizado com criptografia de ponta a ponta para arquivos e dados. Ele centraliza tudo que foi falado acima no quesito comunicação remota via SSL por exemplo, somando isso a um sistema de autenticação centralizado que pode ser gerido remotamente.
Possui todas as ferramentas necessárias para quem utiliza ativamente a internet e precisa de uma segurança reforçada combinada localmente com acesso remoto.
29) Login e Autenticação
Você deve configurar o log de login e auditoria para coletar dados de quaisquer tentativas de hacking ou cracking do seu sistema. Por padrão tudo fica guardado em /var/log.
Um comando interessante é o journal control:
# journalctl
Ele permite visualizar os logs do kernel e de todo o sistema; qualquer tentativa de conexão á máquina, mesmo que mal sucedida, fica registrada.
30) Monitore Mensagens de Log suspeitas com Logwatch/Logcheck
Leia os logs do sistema com o logwatch (logcheck). Essas ferramentas fazem sua leitura de log mais facil! Aqui um exemplo de saída que esses comandos proporcionam:
############ Logwatch 7.3 (03/24/06) ####################
Processing Initiated: Fri Oct 30 04:02:03 2009
Date Range Processed: yesterday
( 2009-Oct-29 )
Period is day.
Detail Level of Output: 0
Type of Output: unformatted
Logfiles for Host: www-52.nixcraft.net.in
########################## ########################## ##############
——————— Named Begin ————————
**Unmatched Entries**
general: info: zone XXXXXX.com/IN: Transfer started.: 3 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 3 Time(s)
general: info: zone XXXXXX.com/IN: Transfer started.: 4 Time(s)
general: info: zone XXXXXX.com/IN: refresh: retry limit for master ttttttttttttttttttt#53 exceeded (source ::#0): 4 Time(s)
———————- Named End ————————-
——————— iptables firewall Begin ————————
Logged 87 packets on interface eth0
From 58.y.xxx.ww – 1 packet to tcp(8080)
From 59.www.zzz.yyy – 1 packet to tcp(22)
From 60.32.nnn.yyy – 2 packets to tcp(45633)
From 222.xxx.ttt.zz – 5 packets to tcp(8000,8080,8800)
———————- iptables firewall End ————————-
——————— SSHD Begin ————————
Users logging in through sshd:
root:
123.xxx.ttt.zzz: 6 times
———————- SSHD End ————————-
——————— Disk Space Begin ————————
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 450G 185G 241G 44% /
/dev/sda1 99M 35M 60M 37% /boot
———————- Disk Space End ————————-
###################### Logwatch End #########################
31) Contas de Sistema Auditadas com “auditd”
O auditd permite auditoria de sistema. É responsável por gravar dados no disco; durante o boot, regras do /etc/audit.rules são lido por esse daemon.
Ele fornece respostas a essas questões:
- Eventos de Boot e Desligamento do Sistema
- Data e Hora do Evento
- Tentativa de acesso a determinado arquivo por determinado usuário
- Tipos de evento (edição, acesso, deleção, escrita, update e comandos)
- Evento bem sucedido e mal sucedido
- Registro dos eventos que modificam data e hora
- Quem mudou as configurações de rede
- Eventos de quem modificou determinado grupo ou usuário.
32) Assegure o Servidor OpenSSH
O protocolo SSH é recomendado para login e transferencias remotas de arquivos mas por si só é bem inseguro. Lembre-se de habilitar as chaves privadas e publicas para conexão desse protocolo.
33) Instale e use Sistema de Detecção de Intrusões
O Sistema de Detecção de Intrusão de Sistema (NIDS) é um detector de intrusão que detecta atividades maliciosas como ataques de negação de serviço (DDoS), se algo ou alguem está scaneando portas de rede ou se está só sondando a rede atrás de falhas.
Tambem é interessante rodar um software que cheque a integridade do sistema antes de conecta-lo á rede; pode estar infectado por algum problema na instalação e etc. O AIDE é um software de detecção de intrusões (HIDS) que monitora o sistema internamente (quase um antivirus).
Soma-se a isso a instalação do rkhunter, que busca rootkits (malwares) de kernel.
34) Desabilite o USB/Thunderbolt/Firewire
Se seu servidor não precisa das portas USB, rode os seguintes comandos:
# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf
O mesmo método desabilita o firewire e o thunderbolt:
# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf # echo "blacklist thunderbolt" >> /etc/modprobe.d/ thunderbolt.conf
35) Desabilite Serviços Inuteis
Se tiver conhecimento de algum serviço inutil do sistema como impressão, desabilite-o assim:
$ sudo systemctl stop service $ sudo systemctl disable service
Por exemplo, se você não usar mais o serviço nginx, rode:
$ sudo systemctl stop nginx $ sudo systemctl disable nginx
36) Use o fail2ban/denyhost como IDS (Sistema de Detecção de Intrusão).
O fail2ban ou o denyhost escaneiam os arquivos de log atrás de tentativas de login falhas; quem erra demais, está com más intenções e será banido por IP!
O denyhost é mais complicado de ser instalado e gerido; o Fail2Ban existe nativamente nos repositórios das principais distros:
$ sudo apt-get install fail2ban Ou $ sudo yum install fail2ban
Edite o arquivo de configuração do fail2ban para saciar suas necessidades:
$ sudo vi /etc/fail2ban/jail.conf
Reinicie o serviço:
$ sudo systemctl restart fail2ban.service
37) Reforce a Segurança do seu Servidor Apache/PHP/nginx
Edite o arquivo httpd.conf e adicione:
ServerTokens Prod ServerSignature Off TraceEnable Off Options all -Indexes Header always unset X-Powered-By
Reinicie o serviço apache2/httpd:
$ sudo systemctl restart apache2.service $ sudo systemctl restart httpd.service
38) Proteja Arquivos, Diretórios e Email
Os sistemas Linux possuem grandes proteções nativas para acesso não autorizado a arquivos e dados. Permissões de arquivos e permissões MAC ajudam nisso mas eles não servem pra nada se um atacante estiver localmente no PC, pegar o HD e pluga-lo em outra máquina, copiando e analisando os arquivos sensiveis.
Para reforçar sua segurança contra esse tipo de situação:
- Criptografe arquivos com uma senha usando o comando gpg
- Criptografe seu disco! Essa opção é sugerida no momento da instalação do sistema. Tenha certeza que o SWAP tambem é criptografado.
- Tenha certeza que a conta do correio do usuário root está linkada a uma conta de confiança.
- Servidores de Email IMAP, POP3, Postfix, tudo que for do seu servidor local, criptografe por SSL sempre que possível.
- Tambem habilite o SSL para criptografar emails enviados e recebidos.
39) Backups
“Quem tem 2, tem 1. Quem tem 1, não tem nenhum.”
Não preciso reforçar o quanto é importante ter backup de tudo ne?
Lembre-se de fazer o backup para um servidor NAS/FreeNAS ou mesmo AWS, desde que fique bem longe do servidor de produção.
40) Recomendações
Como quadragésima opção, deixo mais alguns detalhes interessantes:
Habilite o ExecShield Buffer Overflow Protection no seu sistema
#UrbanCompassPony
Créditos:
Alpha: islonline
Textos: Cyberciti
ComputerWorld
Autodidata, me aprofundei em sistemas operacionais baseados em UNIX®, principalmente Linux. Também procuro trazer assuntos correlacionados direta ou indiretamente, como automação, robótica e embarcados.
Muitas dicas boas! Aguardo uma postagem só de SELinux! Abraços
Parabens pelo artigo. Muito Bom. Vou utilizar suas dicas no meu Cento
Você poderia, por gentileza, enumerar quais são as vulnerabilidades apresentadas pelo X Windows System e também um comparativo sobre a performance antes e depois da referida remoção ?
Agradeço antecipadamente por sua atenção.
A publicação já está um pouco datada, pretendo refaze-la com os acréscimos contemporâneos e mais o comparativo que você sugeriu 😉