Piter Punk's HomePage - Artigos
 
English version
Dicas de seguranca

Autor: Ernani Jose Camargo Azevedo

Consideracoes gerais:

Caso procure uma seguranca boa para seu servidor, aconselho sempre a assinar a lista de anuncio de softwares utilizados. Normalmente todos softwares bem estaveis possuem uma lista de anuncio de bugs.

Outra consideracao que deve ser tomada e' a de utilizar sempre versoes estaveis, e caso possua mais de uma versao estavel (exemplo: bind8 e bind9), procure utilizar a versao estavel anterior, pois normalmente o seu desenvolvimento esta' estagnado, e a probabilidade de apresentar novos bugs sao menores. Utilize a ultima versao apenas quando voce necessitar de alguma funcao que nao exista na anterior.

Algumas regras de daemons:

Utilize SEMPRE as funcoes de chroot jail dos daemons.

Leia sempre a documentacao dos daemons, segue um exemplo de pontos que podem ser utilizados para seguranca dos daemons mais comuns:

bind:

  • Desabilite o request de versao. Veja o comando "version" na secao "options";
  • Utilize sempre que possivel chaves de criptografia para fazer zone transfer entre servidores primarios e secundarios;
  • Bloqueie o zone transfer em todas zonas, habilite somente para os servidores secundarios;
  • Quando utilizado dynamic update de zonas, utilize necessariamente chaves de criptografia.
wu-ftpd:
  • Para usuarios que necessitem acesso a raiz web, por exemplo, devem estar em um grupo "guestgroup", para ficarem com chroot jail;
  • Adicionar um arquivo .forward e .rhosts com tamanho zero, owner e grupo root e nenhuma permissao, para evitar que um usuario crie um pipe para shell no sendmail para obter acesso a shell;
  • Nunca utilize o passwd e group reais do servidor em chroot jails. Crie um passwd e group ficticios somente com os usuarios e grupos utilizados, sem descrever nomes, shell e home;
  • Se nao desejar possuir acesso anonimo, bloqueio o usuario adicionando o usuario "ftp" no arquivo /etc/ftpusers;
  • Caso possua usuario anonimo habilitado, verifique as permissoes do diretorio incoming.
sendmail:
  • Habilite relay apenas para o barramento local da rede, nunca habilite para toda internet;
  • Desabilite os comandos expn e vrfy;
  • Limite o numero de destinatarios em uma unica mensagem de 10 a 30 para evitar spam;
  • Troque as permissoes do arquivo /etc/mail/helpfile para 0, para desabilitar o comando HELP.
telnet:
  • NUNCA utilize o daemon de telnet. Use alternativas como o OpenSSH.
openssh:
  • Desabilite login de root via SSH;
  • Bloqueie os IP's que podem acessar o servico na configuracao do mesmo ou utilizando filtro em firewall;
  • Procure utilizar quando possivel a funcao sftp do openssh para transferir arquivos.
apache:
  • Desabilite o reporte de versao do daemon;
  • Procure fazer paginas de erros personalizadas;
  • Desabilite o recurso de "DirectoryIndex". Habilite somente nos diretorios que necessitarem;
  • Habilite somente as funcoes que necessitar, desabilite sempre as funcoes que nao estao em uso;
  • Procure executar o daemon com um usuario "http" e grupo "http". Nao utilize o usuario e grupo "daemon".

Regras para usuarios shell:

Algumas regras devem ser levadas em consideracao quanto a usuarios com acesso a shell:

  • Usuarios com acesso a shell nao devem possuir acesso a email e ftp, caso necessitem transferir arquivos, utilize o sftp, e inclua o usuario na lista de usuarios bloqueados de ftp;
  • Usuarios de email devem possuir o home como "/dev/null", e o shell como "/dev/null". Crie um grupo para usuarios de mail, normalmente utilizo o grupo "mailonly";
  • Caso queira utilizar email para usuarios com acesso a shell com o mesmo nome, crie uma conta de email apenas e redirecione no /etc/mail/aliases a conta de shell para a conta de email.

Estas medidas sao importantes pois os servicos de FTP e POP normalmente nao possuem nenhuma criptografia para passar a senha. Se a senha for a mesma do acesso a shell, um usuario que tenha monitorado uma conexao tera' acesso a maquina.

Regras para acesso a root:

Os usuarios que podem obter acesso a root devem ser configurados da seguinte forma:

  • Nunca utilize uid e/ou gid 0 em usuarios, apenas o root deve possuir este uid/gid;
  • Edite o arquivo /etc/login.defs e altere a opcao SU_WHEEL_ONLY para "yes", e adicione no grupo root no arquivo /etc/group apenas os usuarios que podem requisitar privilegios de root;
  • Edite o arquivo /etc/securetty e desabilite o login de root em quaisquer terminal, exceto o "console". Utilize sempre um usuario comum e o comando "su" (para executar o profile do usuario requisitado, utilize: "su -");

Estas regras servem em primeiro lugar para trazer uma seguranca extra a maquina, pois somente usuarios que estiverem no grupo de root terao permissao para requisitar seus privilegios. O bloqueio de login direto a root no servidor evita que mesmo uma pessoa sabendo a senha de root tenha acesso a maquina. A utilizacao do usuario comum para requisitar privilegios de root ainda trazem vantagens em caso de auditoria, pois sempre ficara' registrado as requisicoes e o usuario que originou a requisicao.

Regras de firewall:

Procure sempre utilizar um filtro de pacotes no servidor. Segue as regras basicas de configuracao que todos servidores devem possuir:

  • Filtre enderecos base e broadcast da rede para evitar ataques de smurf e fraggle;
  • Filtre pacotes com origem 127.0.0.0/8 que nao seja na interface lo (loopback);
  • Filtre pacotes de ranges invalidas. Sao elas: 192.168.0.0/16, 10.0.0.0/8 e 172.16.0.0/12;
  • Caso utilize DNS, filtre a porta 53/TCP e habilite somente para os servidores de DNS secundarios. Esta porta e' utilizada apenas para zone trasnfers;
  • Caso utilize servidor SQL e o mesmo receba requisicoes somente do servidor local, filtre as portas do mesmo.
  • Verifique as portas abertas no servidor, elimine quaisquer servicos que nao estejam sendo utilizados, por exemplo: daytime, chargen, time, telnet, rshell, rlogin, talk, ntalk, finger, systat, netstat e auth. Voce pode verificar as portas que estao sendo utilizadas com o comando: "netstat -nap | grep 0\.0\.0\.0:\*";
  • Desabilite sempre que possivel os servicos RPC, inclusive o portmap;
  • Inicialize as regras de firewall sempre antes de levantar as interfaces de rede.

Caso necessite saber qual daemon roda em uma determinada porta/protocolo, verifique em /etc/services.

Seguranca adicional no kernel:

Caso procure mais seguranca ainda, voce pode utilizar patch's para o kernel que dificultam "buffer overflow", "GCC trampolines", restricao de links no /tmp, restricao de fifos no /tmp, restricao de acesso ao /proc (usuarios normais somente enchergam seus processos), restricao de chroot, restricao de ptrace, log e bloqueio extras de rede, etc.

Os dois patch's que recomendo sao:

  • Linux kernel patch from Openwall Project: http://www.openwall.com/linux/;
  • HAP-Linux patch: http://www.theaimsgroup.com/~hlein/hap-linux/.

Estes dois patchs sao aconselhaveis apenas quando utilizado kernel 2.2.x. Recomendo que utilize SEMPRE kernel 2.2.x em servidores, pois possui mais opcoes de seguranca, alem de ser menor. Deixe a versao 2.4.x para estacoes de trabalho.

Consideracoes gerais:

Leia sempre a documentacao dos daemons que serao utilizados, pesquise na documentacao a sessao de seguranca. Sempre que possivel, utilize criptografia. Desabilite quaisquer servico que nao seja vital ou nao esteja em uso.

Caso deseje, sinta-se a vontade para enviar duvidas, questoes e dicas para mim pelo email: azevedo@tchelinux.com.br.


Este documento é distribuido nos termos da licenca GNU GPL.

Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 01 Feb 2004