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:
Isto quer dizer:
Options None
Order deny,allow
Deny from all
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:
Se você carregou algum módulo dinâmico compartilhado no apache, ele estará presente dentro do httpd.conf dentro de "LoadModule".
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
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.confSegue abaixo alguns possíveis valores:
ServerTokens Prod
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