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.
|