domingo, 9 de junho de 2013

Se por acaso você tiver um servidor web confira aqui 10 dicas para deixar seu servidor mais seguro.

1. Desative módulos desnecessários


Se você está instalando o apache pelo seu código fonte você deve desativar alguns módulos. Se você usar o ./configure —help você verá todos os módulos que podem ser ativados ou desativados. Antes de desativar confira se não vai necessitar de um desses módulosOs principais são:

userdir – Mapeamento de diretórios específicos de usuários
autoindex – Lista os diretórios quando o index.html não estiver presente
status - Mostra o status do servidor
env - Limpar e configurar variáveis de ambiente
setenvif - Colocar variáveis de ambiente nos cabeçalhos
cgi - Scripts CGI
actions - Ações disparadas em certas requisições
negotiation - Negociação de conteúdo
alias - Mapeamento de requisições para diferentes sistemas de arquivos
include - Declarações server side
filter - Filtro de requisições
versão - Manipulação de informações de versão e arquivos conf
as-is - arquivos as-is

Desabilite isso tudo na hora do comando ./configure, conforme exemplo:

./configure \
--enable-ssl \
--enable-so \
--disable-userdir \
--disable-autoindex \
--disable-status \
--disable-env \
--disable-setenvif \
--disable-cgi \
--disable-actions \
--disable-negotiation \
--disable-alias \
--disable-include \
--disable-filter \
--disable-version \
--disable-asis

Se você habilitar o ssl, terá de habilitar o mod_setenv, se não receberá o erro:

Error: Syntax error on line 223 of /usr/local/apache2/conf/extra/httpd-ssl.conf: Invalid command ‘BrowserMatch’, perhaps misspelled or defined by a module not included in the server configuration

Após a instalação, você pode ver o que está instalado com o comando httpd -l:

/usr/local/apache2/bin/httpd -l
Compiled in modules:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_log_config.c
mod_ssl.c
prefork.c
http_core.c
mod_mime.c
mod_dir.c
mod_so.c

Neste caso, temos os seguintes módulos instalados:

core.c – Módulos principais do apache
mod_auth* – Módulos para autenticação
mod_log_config.c – Módulo para tratamento de logs
mod_ssl.c – Para SSL
prefork.c – Para MPM
httpd_core.c – Módulos principais do apache
mod_mime.c – Configurações do MIME
mod_dir.c – Módulo para redirecionamentos de diretórios para a index.html
mod_so.c – Para iniciar módulos no início e reinício

2. Rode o apache em um usuário e grupo separado do resto

Por padrão, o apache roda como nobody ou daemon. É bom rodar o apache com seu próprio usuário sem privilégios. Por exemplo um usuário chamado apache.

Vamos então criar o usuário e o grupo e configurar para ser o padrão do apache

groupadd apache
useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
vi httpd.conf
User apache
Group apache
Após isso, reinicie o apache, e com o comando ps -ef você verá que o apache está rodando no usuário apache.

3. Restrinja o acesso aos diretórios (com deny, allow)

Para isso, defina isso no arquivo httpd.conf:

Options None
Order deny,allow
Deny from all
Isto quer dizer:

Options None – Marcando isto como None vai evitar que alguma opção a mais seja habilitada
Order deny,allow – Isso é como as ações deveram ser seguidas. Usando deny,allow, todas as funções deny serão executadas por primeiro.
Deny from all – Isso remove o acesso a todos dos diretórios raiz. Como não tem nenhuma opção allow todos permanecem sem acesso a raiz.

4. Defina permissões apropriadas para os diretórios conf e bin

Estes diretórios devem ser acessados apenas por usuários autorizados. É uma boa idéia criar um grupo e adicionar todos os usuários que devem acessar e bloquear para todo o resto. Vamos chamar esse grupo de apacheadmin.

groupadd apacheadmin
chown -R root:apacheadmin /usr/local/apache2/bin
chmod -R 770 /usr/local/apache2/bin
chown -R root:apacheadmin /usr/local/apache2/conf
chmod -R 770 /usr/local/apache2/conf
vi /etc/group
apacheadmin:x:1121:user1,user2

5. Remova navegação por diretórios 

Se você não fizer isso, todos os usuários poderão ver todos os arquivos e diretórios, desde a raiz.


Para isso apenas precisamos colocar o None ou -Indexes como parâmetro nos arquivos de configuração:


Options None Order allow,deny Allow from all

ou


Options -Indexes
Order allow,deny
Allow from all

6. Não libere o .htaccess 

Usando o .htaccess dentro de um diretório, os usuários podem reescrever todas as diretivas do apache. Em algumas situações isso é bom, mas este arquivo deve ser evitado.

Precisamos usar a opção "AllowOverride None" para remover o .htaccess:

Options None
AllowOverride None
Order allow,deny
Allow from all

7. Desabilite outras opções



Segue algumas outras opções:


Options All – Todas as opções são habilitadas (exceto MultiViews). Se você não especificar nada, este é o estado padrão.
Options ExecCGI – Executa os scripts CGI (uses mod_cgi)
Options FollowSymLinks – Se você tiver links simbólicos eles serão seguidos
Options Includes – Permite includes server side (usando mod_include)
Options IncludesNOEXEC – Permite includes server side sem a possibilidade de rodar comandos ou scripts
Options Indexes – Remove a listagem de diretórios
Options MultiViews - Permite content negotiated multiviews (usando mod_negotiation)
Options SymLinksIfOwnerMatch – Similar ao FollowSymLinks. Mas, apenas se o dono do link e do diretório que aponta são os mesmos

Nunca especifique ‘Options All’. Sempre use uma ou mais das opções acima (você pode usar várias em conjunto).

Veja alguns exemplos:


Options Includes Indexes
AllowOverride None
Order allow,deny
Allow from all


Options -Includes +FollowSymLink
AllowOverride None
Order allow,deny
Allow from all

8. Remova os módulos DSO desnecessários

Se você carregou algum módulo dinâmico compartilhado no apache, ele estará presente dentro do httpd.conf dentro de "LoadModule".


Comente todas as linhas desnecessárias.

9. Remova o acesso a uma rede específica

Se você quer que seu site seja visto apenas por um range de ip específico ou por uma rede use o seguinte: 


Options None
AllowOverride None
Order deny,allow
Deny from all
Allow from 10.10.0.0/24

Ou


Options None
AllowOverride None
Order deny,allow
Deny from all
Allow from 10.10.1.21

10. Não mostre e nem envie informações com a versão do apache

Por padrão, um servidor HTTP responde nos cabeçalhos a versão do apache e do php. Isso a princípio é inofensivo, mas se pudermos remover essa informação de um possível atacante podemos melhorar nossa segurança.

vi httpd.conf
ServerTokens Prod
Segue abaixo alguns possíveis valores:
ServerTokens Prod displays “Server: Apache”
ServerTokens Major displays “Server: Apache/2″
ServerTokens Minor displays “Server: Apache/2.2″
ServerTokens Min displays “Server: Apache/2.2.17″
ServerTokens OS displays “Server: Apache/2.2.17 (Unix)”
ServerTokens Full displays “Server: Apache/2.2.17 (Unix) PHP/5.3.5″ (Se você não especificar nenhum ServerTokens este será o valor padrão)

Fonte: r00tsec

0 comentários:

Postar um comentário

Subscribe to RSS Feed Follow me on Twitter!