Antes de Iniciar
Neste tutorial, você aprende os conceitos básicos de segurança de um servidor GNU/Linux e obtém uma
base sólida na qual construir.
Objetivos
Neste tutorial, você aprende sobre os conceitos básicos em administração de segurança, incluindo como
proteger os logins remotos Secure Shell (SSH), criar regras de firewall e logs de observação para possíveis
ataques.
Pré-requisitos
Este tutorial é escrito para o usuário do GNU/Linux iniciante. Você deve ter alguma familiaridade com as
instalações do sistema operacional e a linha de comandos. Para compreender completamente os conceitos
neste tutorial, você deve ter percorrido o tutorial acompanhante, " Protegendo o Desktop do Linux."
Requisitos do sistema
Para executar os exemplos neste tutorial, você precisa instalar o Ubuntu Server Edition em um computador
ou em uma máquina virtual, tal como Sun VirtualBox. Você também precisa de uma conexão com a Internet
para fazer download de pacotes de software específicos utilizados no tutorial.
Introdução
Para entender os conceitos básicos de proteção de um servidor executando o GNU/Linux como o sistema
operacional, você precisa estar atento ao fato de que embora muitos conceitos principais de segurança se
apliquem ao sistema operacional do desktop e ao sistema operacional do servidor, as maneiras pelas quais
eles são protegidos são completamente diferentes.
Proteger um servidor é muito diferente de proteger um computador desktop por uma variedade de motivos.
Por padrão, um sistema operacional do desktop é instalado para fornecer ao usuário um ambiente que pode
ser executado automaticamente. Os sistemas operacionais de desktop são vendidos com a premissa de que
requerem configuração mínima e vêm carregados com o máximo de aplicativos possível para que o usuário
esteja ativo e em execução. De modo inverso, um sistema operacional do servidor deve seguir o Princípio
do Privilégio Mínimo, que determina que ele deve ter apenas os serviços, o software e as permissões
necessárias para executar as tarefas pelas quais é responsável.
Primeiro, a seguinte lei é aplicável a práticas gerais de segurança: A segurança só funciona se a maneira
segura também for a maneira fácil. Esta é a lei mais importante para qualquer administrador do sistema. Se
uma política de segurança é tão firme que as pessoas não conseguem realizar suas tarefas, elas encontrarão
maneiras de evitar a segurança estabelecida, algumas vezes criando uma maior vulnerabilidade do que a
política que foi estabelecida para evitar. O melhor exemplo está relacionado às senhas. Senhas fortes devem
fazer parte de qualquer política de segurança, mas algumas vezes, as políticas vão longe demais. Exigir que
os usuários se lembrem de uma senha que tenha 15 caracteres e que consista em letras maiúsculas, letras
minúsculas, números e símbolos é pedir que uma alta porcentagem de usuários escreva sua senha em um
post-it e coloque-o em seu monitor.
Quatro das leis de Culp aplicam-se diretamente ao material coberto neste tutorial:
• Se você não se mantiver atualizado em relação às correções de segurança, sua rede não será sua
por muito tempo. Os hackers descobrem vulnerabilidades todos os dias. Como um administrador do
sistema, você precisa ter certeza de que o seu sistema está atualizado. Mas isto o leva até uma diferença
entre proteger um desktop e proteger um servidor. Em geral, as atualizações para o desktop do GNU/
Linux devem ser instaladas quando elas são publicadas. Quando você está lidando com o servidor,
deve testá-lo em um ambiente de servidor de pesquisa ou desenvolvimento, para ter certeza de que a
correção não interfira nas operações do servidor ou dos usuários.
• A vigilância eterna é o preço da segurança. Em um esforço para ter certeza de que seu servidor
GNU/Linux está seguro, você deve verificar os logs constantemente, aplicar correções de segurança e
acompanhar alertas. A vigilância é o que mantém seu sistema seguro.
• A segurança não está relacionada a evitar riscos; ela está relacionada ao gerenciamento de risco.
Fatos acontecem. Pode haver uma epidemia de malware ou seu Web site pode ser atacado. Ou pode
acontecer algo completamente fora do seu controle, tal como um desastre natural. Uma hora ou outra,
a segurança do seu sistema será testada. Certifique-se de ter feito todo o possível para proteger seu
sistema e de lidar com a ameaça de uma forma que mantenha seu servidor e recursos disponíveis para
os usuários que contam com eles.
• A tecnologia não é um remédio capaz de curar todas as doenças. Se há uma lei que todos aqueles
que trabalham com tecnologia devem conhecer, é esta. Simplesmente lançar mais tecnologia no
problema de segurança não o resolverá. A vigilância por parte do administrador do sistema, a adesão
por parte do gerenciamento e a aceitação por parte dos usuários devem ser estabelecidas para que uma
política de segurança funcione de maneira efetiva.
• Instalar software extra ou executar serviços extras significa que há mais uma porta que você precisa
trancar. Por exemplo, se você está executando o Lightweight Directory Access Protocol (LDAP) em
um servidor para serviços de diretório, precisa certificar-se de que o sistema operacional e o LDAP
estejam atualizados com suas correções e patches de segurança para que qualquer vulnerabilidade
conhecida seja coberta. Se o LAMP estivesse instalado neste servidor, ele exigiria atualizações e
atenção, mesmo que não estivesse sendo utilizado. Sua simples existência no servidor forneceria a um
hacker outra via de acesso ao seu sistema. Da mesma forma, qualquer outro software instalado neste
servidor deve ser atualizado, receber patches e ser monitorado para garantir que ele não represente uma
vulnerabilidade que um hacker possa explorar.
• Instalar software extra em um servidor significa que alguém será tentado a utilizar tal servidor para
algo que não está relacionado ao seu uso desejado. Utilizar o servidor para outras tarefas não somente
retira recursos da execução de sua tarefa principal como também expõe o servidor a ameaças que
provavelmente não o afetariam sem o software nele instalado.
Entre outras coisas, você deve decidir se vai ou não instalar uma interface gráfica com o usuário. Por
anos, os administradores do GNU/Linux mantiveram certo orgulho por poderem administrar suas redes
e servidores completamente a partir de uma interface da linha de comandos. Mas, recentemente, alguns
administradores começaram a administrar seus servidores GNU/Linux através de uma GUI. A opção de
instalar uma GUI como o Sistema Window X causou debates em diversos fóruns. De um lado, os defensores
da interface da linha de comandos alegam o fato de que a GUI pode sobrecarregar os recursos de um sistema
e, como ela é um serviço extra que não é necessário, fornece aos hackers vulnerabilidades adicionais. Este
lado também destaca que os comandos podem ser digitados rapidamente através da linha de comandos, sem
a necessidade de procurar em menus e pastas ao executar uma tarefa.
Do outro lado do debate, aqueles que apóiam um ambiente de GUI argumentam que o processo da GUI
pode ser encerrado quando não estiver mais em uso para economizar recursos e evitar que qualquer
vulnerabilidade seja explorada. Eles também argumentam que a GUI torna determinadas tarefas, tais como
trabalhar com um banco de dados, muito mais fáceis para o administrador.
Login na GUI
Algumas pessoas que contam com uma GUI como Gnome ou KDE podem estar inclinadas a instalar
um login gráfico como o GDM. Isto não é necessário porque você pode efetuar login a partir da
interface da linha de comandos tão facilmente quanto o faria através de uma tela de login baseada
em GUI. A única diferença é que você precisa utilizar o comando sudo startx se precisar administrar
servidor através de uma GUI.
Instalar uma GUI em seu servidor é uma opção totalmente pessoal. Tudo neste tutorial é feito através da
linha de comandos; mas se você desejar instalar uma GUI, as seguintes instruções mostram como instalar o
Gnome com uma GUI de desktop:
1. Após ter efetuado login em seu sistema, você deve acessar o prompt de comandos. Para instalar o
núcleo do Gnome, digite o seguinte: sudo aptitude install x-window-system-core gnome-core
2. Pressione Enter. Sua senha sudo será solicitada. Digite-a e, então, pressione Enter novamente. Você
será informado sobre o que está sendo instalado.
3. Para continuar com a instalação, digite Y e, então, pressione Enter. Fazer isso instala uma versão
reduzida do Gnome que mantém os recursos do ambiente de desktop a um mínimo e economiza os
recursos do sistema. Para instalar a versão completa do Gnome, insira sudo aptitude install x-window-system-
core gnome
4. Após pressionar Enter, você será solicitado a percorrer o mesmo processo, conforme anteriormente.
Siga até que o Gnome seja instalado em seu sistema.
5. Quando a instalação de qualquer um dos pacotes tiver sido concluída, ainda estará no prompt de
comandos. Para abrir o Gnome, digite o seguinte: sudo startx
Protegendo o SSH
O SSH fornece a o usuário uma conexão com um computador remoto. Como uma substituição ao Remote
Shell (RSH) e ao Telnet, o SSH é comumente utilizado pelos administradores de sistema para efetuar login
em seus servidores a partir de um computador remoto para executar tarefas de manutenção e administração.
Embora o SSH forneça um nível muito maior de segurança do que os protocolos que substituiu, você pode
fazer algumas coisas para torná-lo mais seguro.
Este método de proteção do SSH é o centro de vários debates em fóruns. Alterar o número da porta não
evita que a porta do SSH seja localizada por um hacker com um scanner de porta que tenha tempo de varrer
todas as portas em seu servidor; e por este motivo, muitos administradores de sistema não se dão ao trabalho
de alterar a porta. Mas esta abordagem evita que script kiddies (hackers amadores) ataquem o SSH sem
ferramentas automatizadas dedicadas a localizar portas TCP 22 abertas e hackers impacientes podem cansar
de varrer seu servidor se não localizarem o SSH em execução no primeiro intervalo de portas que varrerem.
Para alterar o endereço de porta do SSH, primeiro você precisa instalar o SSH em seu servidor. Digite
Pressione Enter e digite sua senha. Este comando instala o openssh para uso para logins remotos em seu
servidor.
Assim que você tiver um arquivo SSH para configurar, deve copiar o arquivo no caso de algo acontecer
durante a configuração. Sempre é possível reverter para o original. Siga estas etapas:
Instalar emacs
Para instalar emacs, utilize sudo aptitude install emacs Agora, você precisa localizar a parte do
arquivo onde o número da porta está configurado. Assim que tiver localizado (o padrão é a porta
22), você pode alterá-lo para um número arbitrário. Há mais de 65.000 portas; escolha algo na parte
superior da escala, mas um número do qual você se lembrará. Lembre-se, hackers qualificados sabem
com as pessoas pensam. Alterar o número da porta para 22222 ou 22022 é um erro comum—escolha
um número que não seja facilmente adivinhado.
Agora, você precisa alterar as permissões para o arquivo sshd_config de forma que possa alterá-lo:
Substitua os nomes de usuário da sua lista no lugar da palavra username. Alternativamente, você pode
permitir que grupos acessem logins do SSJ utilizando # Permitir apenas determinados grupos AllowGroups
group group Novamente, substitua por seus grupos de usuários a palavra group no exemplo.
2. Salve seu arquivo de configuração e saia do seu editor. É necessário reiniciar o SSH para que as
alterações tomem efeito. Não é necessário encerrar seu computador -- apenas digite sudo service ssh restart
3. Pressione Enter e forneça sua senha. O serviço é reiniciado e informa [OK].
Há muitas outras maneiras de proteger ainda mais o SSH que são destinadas a usuários mais avançados.
Quando você tiver adquirido mais experiência trabalhando com o GNU/Linux e o SSH, deve considerar
executar estas etapas.
Para começar a utilizar o UFW, você precisa instalá-lo. Siga estas etapas:
Você se lembra que alterou a porta do SSH anteriormente? Para abrir a porta através do UFW criando uma
regra, digite o seguinte na linha de comandos:
Este comando permite acessar sobre a porta 65000 e permite que o SSH trafegue no seu servidor.
Para permitir ou negar tráfego, especificamente na porta TCP 65000, utilize o seguinte comando:
Você também pode permitir ou negar o tráfego de acordo com o protocolo que ele utiliza. Por exemplo, para
bloquear todo o tráfego do HTTP, também é possível utilizar este comando:
Também é possível criar regras mais complicadas para negar ou permitir um serviço baseado em seu
endereço IP. Por exemplo, se o seu desktop tinha o endereço IP 192.168.1.30 e seu servidor tinha um
endereço IP 192.168.1.5, poderia possibilitar apenas ao endereço IP do seu computador a habilidade de
estabelecer uma conexão SSH:
sudo ufw allow proto tcp from 192.168.1.30 to 192.1681.5 port 65000
Para verificar quais regras estão sendo executadas atualmente com o UFW, utilize
Será apresentada uma lista de regras que você já criou para o seu firewall. Se você visualizar uma regra que
deseja excluir, digite
As seguintes seções percorrem as etapas da instalação e da configuração de dois programas que ajudam
a detectar intrusões. O Tripwire o alerta sobre atividades não-autorizadas que ocorrem com arquivos de
sistema no seu servidor e o Logwatch é uma ferramenta que pode ser utilizada para criar relatórios para você
analisar.
Tripwire
O Tripwire é um programa que configura uma linha de base de binários normais do sistema para o seu
computador. Ele, então, relata quaisquer anomalias junto a esta linha de base através de um alerta por e-mail
ou através de um log. Essencialmente, se os binários do sistema tiverem sido alterados, você saberá sobre
isso. Se uma instalação legítima causar uma alteração dessas, não há nenhum problema. Mas se os binários
forem alterados como um resultado de um cavalo de Tróia ou rootkit sendo instalado, tem um ponto inicial a
partir do qual pesquisar o ataque e corrigir os problemas.
Para instalar e configurar o Tripwire através da linha de comando, siga estas etapas:
Pressione Enter. Você também será solicitado a fornecer a passphrase local criada durante a instalação
do Tripwire. Forneça a passphrase e, novamente, pressione Enter. Agora, o Tripwire criou a captura
instantânea da linha de base do seu sistema de arquivos. Esta linha de base será utilizada para verificar se há
alterações nos arquivos críticos. Se uma alteração deste tipo for detectada, um alerta será enviado.
É possível executar uma verificação de integridade a qualquer momento seguindo estas etapas:
1. Digite
sudo tripwire --check
2. Pressione Enter. Você receberá um relatório que é salvo no diretório de relatórios. Para visualizar este
relatório, utilize o comando twprint :
sudo twprint --print-report -r\
3. Pressione Enter e digite a senha sudo . Você receberá um tipo diferente do prompt que tem a seguinte
aparência:
>
Neste prompt, digite o local e o nome do arquivo do relatório que deseja imprimir:
> /var/lib/tripwire/report/<server name>-YYYYMMDD-HHMMSS.twr| less
Se você não souber o horário exato que executou seu relatório, navegue até o diretório /var/lib/tripwire/
reports para visualizar o nome completo do arquivo.
À medida que suas habilidades se desenvolvem, você pode consultar o twadmin para aprimorar ainda mais
os recursos do Tripwire. Também é possível configurar uma tarefa cron para enviar a você uma cópia por e-
mail deste relatório a cada dia ou configurar o Tripwire para enviar a você um e-mail se uma anomalia for
relatada.
Logwatch
O Logwatch é uma excelente ferramenta para monitorar os arquivos de log do seu sistema. Este programa
requer um servidor de e-mail em funcionamento em sua rede para enviar os logs por e-mail para você. Se
desejar alterar o arquivo .conf, você precisa abrir /usr/share/logwatch/default.conf/logwatch.conf e consultar
a linha onde se lê MailTo. Altere user.name.domain.tld para o seu endereço de e-mail.
Pressionar Enter envia uma cópia do relatório para o endereço de e-mail especificado. Se você não estiver
executando um servidor de e-mail em sua rede mas ainda desejar visualizar um relatório do Logwatch, o
seguinte comando o fornece na tela:
A saída possui várias telas; pressione Shift-Page Up para mover para o início do relatório.
Usuários e Grupos
o GNU/Linux trata grupos e permissões de maneira diferente do sistema operacional Microsoft®
Windows® . Você pode organizar usuários em grupos para facilitar a administração, mas também é
necessário fornecer acesso a arquivos e pastas através de permissões. Nenhum "usuário avançado" geral
fornece aos usuários acesso a praticamente tudo em um computador ou rede. O sistema GNU/Linux foi
projetado para ser mais seguro; ele usa um sistema 3x3 para concessão de permissões:
• Permissões de arquivo -- Ler (r), gravar (w) e executar (x). Cada uma destas permissões também
recebe um número: ler = 4, gravar = 2 e executar = 1.
• Permissões no nível do diretório -- Entrar, que dá permissão para entrar no diretório; mostrar, que dá
permissão para visualizar os conteúdos dos diretórios; e gravar, que dá permissão para criar um novo
arquivo ou subdiretório.
• Como as permissões são designadas -- As permissões são designadas de três maneiras: por nível
de usuário, nível de grupo e outro nível. O nível de usuário define o usuário que criou o arquivo ou
diretório, o nível de grupo define o grupo no qual o usuário está e o outro nível é para qualquer usuário
fora do grupo do usuário.
As permissões de usuário são concedidas primeiro: por exemplo, r/w/x significa que o usuário pode ler,
gravar e executar o arquivo ou os arquivos na pasta. É possível aplicar o valor numérico a cada permissão.
Deste modo, se um usuário pode ler, gravar e executar, você inclui os números correspondentes 4, 2 e 1,
para um total de 7. A seguir, vêm as permissões de grupo. Por exemplo, os outros membros do grupo do
usuário podem ter a capacidade de ler e executar, mas não de gravar. A inclusão dos valores numéricos
correspondentes representa 5. Aqueles em outras categorias podem apenas ler os arquivos, portanto, seu
valor numérico é 4. Deste modo, as permissões para o arquivo ou pasta são 754.
Quando as permissões são configuradas como 777, todos têm a habilidade de ler, gravar e executar. O
comando chmod altera as permissões para os arquivos e diretórios. Se desejar alterar a propriedade de um
usuário, utilize o comando chown . Para alterar a propriedade do grupo sobre um arquivo ou diretório, utilize
o comando chgrp .
Criptografia
Criptografia é o processo de obter dados armazenados em um computador e misturá-los de uma forma que
os torne ilegíveis por qualquer pessoa que não possua a chave para recriar os dados em seu formato original.
Os dados que foram criptografados podem ser armazenados no computador local, armazenados em um
compartilhamento de rede ou transmitido para outros usuários e computadores.
É possível criptografar um disco rígido inteiro ou as partições do disco. Isto deve ser feito na instalação.
Também é possível proteger dados através da criptografia criando um diretório e criptografando-o. Por
exemplo, se você tiver configurado um servidor de arquivos, pode desejar criptografar um diretório que
contenha informações sensíveis.
Antes de continuar com a proteção dos seus dados, é necessário instalar eCryptfs a partir dos repositórios do
Ubuntu digitando
Criptografar um diretório
A próxima etapa é criar um diretório para criptografar. O exemplo utiliza um diretório denominado secure,
mas você pode nomeá-lo como desejar. Siga estas etapas:
Atualizações
Um servidor de produção nunca deve ter atualizações e correções instaladas sem antes terem sido testadas
em um servidor de teste ou de desenvolvimento. Como uma GUI pode não estar instalada em seu servidor,
você precisa fazer o download de quaisquer atualizações e correções através do terminal. Quando estiver
pronto para instalar as atualizações, insira o comando sudo apt-get update e, então, sudo apt-get dist-upgrade. Em
alguns casos, será necessário reiniciar o servidor.
Malware
Muitos administradores de sistema descobrem que a instalação de software antivírus em um servidor
executando o GNU/Linux é um desperdício de recursos porque nenhum vírus solto por aí pode atacar o
sistema operacional GNU/Linux. Mas qualquer administrador do GNU/Linux que esteja executando o
SAMBA para compartilhar arquivos Windows deve definitivamente garantir que um scanner antivírus como
o ClamAV esteja instalado para garantir que arquivos infectados não se espalhem pelo sistema.
Embora os vírus não representem mais do que uma ameaça ao servidor GNU/Linux, os rootkits podem lhe
causar uma dor de cabeça. Rootkits são ferramentas que os hackers utilizam para obter permissões de nível-
root a um sistema, capturar senhas, interceptar tráfego e criar outras vulnerabilidades. Para combater esta
ameaça, você deve instalar ferramentas como RKHunter e chkrootkit no servidor (consulte instruções no
tutorial " Protegendo o Desktop do Linux").
Backup e recuperação
Servidores que hospedam gigabytes de informações, Web sites corporativos ou catálogos para serviços de
diretório precisam ter uma estratégia de backup e recuperação estabelecida. A maioria das redes corporativas
pode proporcionar redundância através de vários servidores e redes menores podem ficar despreocupadas
através da virtualização e do software de backup e recuperação.
Se você está planejando executar o software de backup e recuperação a partir dos repositórios do Ubuntu, o
Sbackup é uma excelente ferramenta porque ele pode ser executado a partir de uma linha de comandos ou
de uma GUI. Ao fazer backup dos dados do servidor em uma rede corporativa, é importante que os arquivos
de backup sejam armazenados fora do servidor. Dispositivos de armazenamento portáteis fornecem grandes
quantidades de espaço de armazenamento a preços extremamente razoáveis e são excelentes opções para o
armazenamento de arquivos e diretórios de backup.
Senhas
Como o administrador do sistema, você precisa configurar senhas para a conta root do seu servidor e
possivelmente outras contas sensíveis em sua organização, tais como bancos de dados MySQL ou conexões
FTP. Você não pode obrigar senhas fortes para os seus usuários com o Ubuntu Server, mas pode certificar-se
de treinar os usuários e como criar uma senha forte.
Certifique-se de que as senhas dos usuários contenham pelo menos três das seguintes opções: uma letra
maiúscula, uma letra minúscula, um número ou um símbolo. Para fortalecer ainda mais a senha, crie uma
política para que todas as senhas tenham pelo menos oito caracteres.
Uma maneira de ensinar aos usuários a utilizar senhas fortes mas impedir que eles escrevam senhas
complexas em notas adesivas é fazer com que utilizem passphrases. Algo como Myf@voritecolorisBlue! é
muito mais fácil de lembrar do que M$iuR78$ e ambos atendem aos padrões mínimos de complexidade.
Conclusão
Ao concluir este tutorial e "Protegendo o Desktop do Linux", você deve ter uma base sólida de
conhecimento sobre o tópico de segurança sistemas. Tenha em mente que estes tutoriais são destinados a
iniciantes, para fornecer uma base para aprender mais sobre a segurança GNU/Linux.
Sobre o autor
Jeffrey Orloff
Jeffrey Orloff atua como Diretor de TI e Segurança da SafeWave, LLC. Ele também trabalha
como coordenador de tecnologia para o Departamento de Educação Alternativa/Departamento
de Justiça Juvenil do Distrito Escolar do Condado de Palm Beach.