Introdução
A cada dia novos usuários de Linux surgem todos os dias, e graças à facilidade de acesso à Internet nos dias atuais a maior parte deles conecta suas máquinas pessoais a redes abertas sem maiores dificuldades.
Sabendo que o Linux é um sistema capaz de ser administrado remotamente, e que muitas configurações default de distribuições habilitam muitos processos servidores para iniciar automaticamente após a instalação, estes novos usuários acabam se transformando em uma ameaça a si próprios, pois expõem à Internet uma máquina aberta, devido à sua falta de conhecimento técnico.
Para piorar a situação, há abundância de textos sobre "segurança" disponíveis na internet, "ensinando" que para garantir uma configuração segura da sua máquina, tudo o que você tem a fazer é "comentar as linhas do inetd.conf", um conselho enganoso.
Primeiros passos
A segurança começa pela instalação do seu sistema Linux. Se você tem uma máquina sem configurações especiais de segurança e quer torná-la segura, uma opção interessante é reinstalá-la completamente, suprimindo assim qualquer erro que tenha sido cometido no passado; lembre-se que uma máquina invadida e onde estranhos obtiveram privilégios de superusuário jamais poderá ser considerada segura novamente, exceto se totalmente reinstalada a partir de uma mídia original (e se você corrigir as falhas que permitiram a invasão original).
Ao instalar o sistema, lembre-se dos seguintes itens:
*Só exponha o sistema à Internet após completar todos os procedimentos de segurança. Há muitos relatos de máquinas invadidas durante o processo de configuração inicial, graças a administradores que preferem confiar na sorte;
*Se a sua distribuição permitir, opte por uma instalação personalizada, e escolha apenas os pacotes que você sabe que irá usar. É muito fácil adicionar pacotes posteriormente, e será sempre um alívio quando você receber e-mail do seu fornecedor recomendando um upgrade urgente de segurança do servidor de Real Audio, e em seguida perceber que não precisa fazer nada a respeito pois não o instalou;
*Monte seu esquema de partições adequadamente. Se você for rodar algum serviço que gere armazenamento de dados em disco (uma proxy web, um servidor de mail, um servidor de news...), certifique-se de criar uma partição separada para o /var, evitando assim que os arquivos dos seus processos servidores possam lotar o espaço de armazenamento da máquina, tirando-a de operação (coisa que normalmente só pode ocorrer em caso de má configuração dos servidores, mas não há por que não levar a sério esta possibilidade);
*Após instalar todos os pacotes, instale todas as atualizações de segurança disponíveis no web site do seu fornecedor. Assine a lista de divulgação de novas atualizações, se disponível;
*Habitue-se a visitar sites de segurança para saber as novas vulnerabilidades a que você pode estar exposto.
Serviços desnecessários
Uma instalação padronizada de sistema operacional costuma habilitar uma série de serviços dos quais você não precisa, e que podem vir a servir como ponto de acesso para um invasor. Removê-los é relativamente fácil, e um passo essencial.
Editar corretamente o arquivo /etc/inetd.conf é básico. Este arquivo define quais os serviços básicos de internet estarão habilitados na sua máquina, e portanto acessíveis a partir de outras máquinas. Verifique atentamente quais destes serviços estão habilitados, e retire os que você não tiver uma boa justificativa para manter. Na dúvida, retire!
Retirar um serviço do inetd.conf é simples, basta acrescentar um caracter # no início da linha, transformando-a em um comentário. Se posteriormente você precisar habilitar novamente o serviço, basta retirar o #.
Máquinas domésticas em geral não precisam de nenhum serviço habilitado no inetd.conf, e podem até mesmo deixar de carregar o serviço inetd (inetd) na inicialização. Usuários de serviços online (como o irc) podem querer habilitar apenas o serviço auth. Não se deixe enganar pela ilusão de rodar servidores telnet, ftp e finger na sua máquina doméstica, exceto se você realmente tiver uma boa justificativa.
Após definir a sua configuração do inetd.conf, reinicie o processo do inetd, comandando killall -HUP inetd
Em seguida, você precisa verificar os serviços de rede standalone, que não são gerenciados pelo inetd.conf, mas sim pelos init scripts, de modo geral localizados abaixo do diretório /etc/rc.d. Cada distribuição de Linux lida com estes scripts de uma maneira um pouco diferente, então você terá que ler um pouco da documentação da sua preferida. Ferramentas como o ntsysv, o ksysv e o tksysv podem ajudar, e a sua distribuição pode ter oferecido algum outro pacote adicional que permita selecionar os scripts facilmente.
De modo geral, os init scripts definem quais serviços serão inicializados no momento do boot. Alguns serviços são aparentemente inócuos do ponto de vista de uma possível invasão (e.g. sound, random, apmd), enquanto outros claramente oferecem algum raio de ação para o potencial invasor (e.g. portmap, xntpd, netfs, rstatd, rusersd, rwalld, rwhod, bootparamd, squid, yppasswd, ypserv, dhcpd, snmpd, named, routed, lpd, gated, httpd, xfs, linuxconf e muitos outros).
Ao definir quais scripts você executará no boot, use o mesmo critério da seleção dos serviços do inetd; na dúvida, retire - se mais tarde você precisar, adicione novamente (após avaliar o impacto sobre a segurança). Particularmente evite rodar o servidor do linuxconf, rstatd, rusersd, rwalld, rwhod, os serviços do NIS (yp*) e os daemons de roteamento (como o gated). Se você for rodar um servidor web para uso interno, ou para testes, certifique-se de configurá-lo para aceitar requests apenas da sua rede interna, ou de sua máquina pessoal - segurança de servidores não será coberta neste texto.
Cuidado ao mexer nos scripts de inicialização
Leia sempre a documentação antes, e tenha à mão um disquete de inicialização completa, como o tomsrtbt para emergências, já que provavelmente o disquete de boot gerado durante a sua instalação do Linux não resolverá o problema. Outra boa dica é aprender a iniciar o sistema em modo monousuário quando tudo falhar.
Detalhes
*Desenvolva uma estratégia de backups confiável;
*Instale ferramentas de análise e rotação de logs;
*Instale ferramentas de garantia de integridade, como o tripwire (principalmente nos servidores);
*Certifique-se de estar usando shadow passwords (nada de senhas criptografadas visíveis no /etc/passwd - este recurso já vem habilitado como default em algumas das distribuições);
*Se você estiver com o servidor de ftp habilitado, configure-o adequadamente; não permita o acesso de root, restrinja a árvore de diretórios, reveja os direitos de acesso anônimos, considere a possibilidade de as senhas de acesso estarem sendo monitoradas em sua rede local;
*Desabilite o telnet e o ftp. Se você precisar deste tipo de serviço, use o ssh (tanto para login quanto para transferência de arquivos);
*Habilite os tcp wrappers (tcpd) e configure adequadamente os arquivos de restrição e permissão de acesso (em geral, /etc/hosts.deny e /etc/hosts.allow);
*Habilite filtros de pacotes (usando ipfwadm, ipchains ou a ferramenta que estiver disponível na sua versão);
*Não permita que outras máquinas iniciem conexões com a sua, exceto para as portas que você explicitamente definir;
*Bloqueie o acesso às portas dos seus serviços locais (xfs, X, servidor web utilizado para testes...).