Otimizando a Segurança em Servidores Web de Domínios Virtuais com Apache e PHP

Proteger servidores de hospedagem que gerenciam múltiplos domínios virtuais é uma preocupação constante para administradores de sistemas. Um ambiente web seguro não só protege os dados dos usuários, mas também garante a integridade e disponibilidade do serviço. Este artigo aborda práticas recomendadas e ajustes que você pode implementar em servidores web Apache com PHP para melhorar a segurança dos seus domínios virtuais. As configurações propostas incluem ajustes no Apache, no arquivo php.ini, e permissões de comandos críticos no sistema operacional.

Configuração de Domínios Virtuais no Apache

Os domínios virtuais permitem que um único servidor web Apache hospede diferentes sites, cada um com seu próprio nome de domínio. Para aumentar a segurança, é importante configurar adequadamente os arquivos de configuração do Apache para cada domínio. Abaixo está um exemplo de configuração de um domínio virtual típico:

<VirtualHost *:80>
ServerAdmin root@dominio.com.br
DocumentRoot /var/www/dominios/dominio.com.br
ServerName www.dominio.com.br
ServerAlias dominio.com.br
CustomLog /var/log/apache/dominio.com.br/access_log common
ErrorLog /var/log/apache/dominio.com.br/error_log

<Directory "/var/www/dominios/dominio.com.br">
Options Indexes Includes FollowSymLinks
Order allow,deny
Allow from all
</Directory>

<Location />
php_admin_value open_basedir /var/www/dominios/dominio.com.br/:/usr/lib/php/
php_value include_path /var/www/dominios/dominio.com.br:/usr/lib/php
php_admin_flag safe_mode on
php_admin_value safe_mode_include_dir /var/www/dominios/dominio.com.br:/usr/lib/php
</Location>

RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</VirtualHost>

Nesta configuração:

  • DocumentRoot: Define o diretório raiz do domínio. É crucial que esse caminho seja bem delimitado para evitar acessos não autorizados a outras partes do sistema.
  • CustomLog e ErrorLog: Especificam onde os logs de acesso e erro serão armazenados. Ter logs separados para cada domínio ajuda a identificar problemas específicos mais rapidamente.
  • <Directory> e <Location>: Estes blocos controlam as permissões e comportamentos dentro de determinados diretórios e locais da aplicação. Por exemplo, o php_admin_value open_basedir restringe o acesso do PHP a diretórios específicos, prevenindo que scripts comprometam outras partes do servidor.
  • Rewrite Engine: O uso de RewriteCond e RewriteRule bloqueia métodos HTTP inseguros, como TRACE e TRACK, que poderiam ser usados em ataques de cross-site scripting (XSS).

Ajustes no Arquivo php.ini para Segurança

O arquivo php.ini é a principal configuração do PHP e suas opções podem afetar significativamente a segurança da aplicação. Abaixo estão alguns ajustes recomendados para melhorar a segurança:

safe_mode = On
safe_mode_include_dir = /usr/lib/php:/var/www/htdocs
include_path = ".:/usr/lib/php:/var/www/htdocs"
expose_php = Off
memory_limit = 32M
error_reporting = E_ALL & ~E_NOTICE
display_errors = Off
log_errors = On
register_globals = Off
register_argc_argv = Off
post_max_size = 32M
upload_max_filesize = 32M
mysql.allow_persistent = Off
msql.allow_persistent = Off
pgsql.allow_persistent = Off
sybase.allow_persistent = Off
sybct.allow_persistent = Off
ifx.allow_persistent = Off
mssql.allow_persistent = Off
ingres.allow_persistent = Off
odbc.allow_persistent = Off
  • safe_mode: Esta diretiva, embora descontinuada nas versões mais recentes do PHP, ainda é relevante em versões antigas. Ela cria um ambiente restrito onde o PHP opera com permissões limitadas.
  • expose_php: Desativar esta opção evita que a versão do PHP seja exposta nos cabeçalhos HTTP, o que poderia fornecer informações úteis para invasores.
  • memory_limit e error_reporting: Definir um limite de memória adequado ajuda a prevenir ataques de negação de serviço (DoS). Configurar o error_reporting para não exibir notificações na página, mas registrá-las em logs, impede que potenciais vulnerabilidades sejam exibidas publicamente.
  • register_globals: Desativar essa diretiva previne que variáveis de usuário substituam variáveis do sistema, o que pode ser explorado em alguns tipos de ataques.

Permissões de Sistema Operacional

Além das configurações do Apache e PHP, é importante ajustar as permissões dos comandos no sistema operacional, especialmente em distribuições Linux como Slackware. A seguir, são apresentados alguns exemplos de comandos que devem ter suas permissões alteradas para aumentar a segurança:

# Diretório /bin
$ chmod 750 /bin/ftp
$ chmod 750 /bin/netstat
$ chmod 750 /bin/ps
$ chmod 750 /bin/uname

# Diretório /sbin
$ chmod 750 /sbin/fdisk

# Diretório /usr/bin
$ chmod 750 /usr/bin/curl
$ chmod 750 /usr/bin/find
$ chmod 750 /usr/bin/ncftp
$ chmod 750 /usr/bin/nmap
$ chmod 750 /usr/bin/wget

# Diretório /usr/sbin
$ chmod 750 /usr/sbin/sendmail
$ chmod 750 /usr/sbin/cfdisk
  • Comandos críticos: Ajustar as permissões para 750 significa que apenas o proprietário e o grupo podem executar esses comandos, enquanto outros usuários não têm acesso. Isso ajuda a prevenir o uso indevido de comandos que poderiam comprometer a segurança do sistema.

Considerações Finais

Aplicar essas configurações e permissões é um passo importante para melhorar a segurança dos seus servidores de domínios virtuais. No entanto, a segurança não é estática, e é essencial manter-se atualizado com as melhores práticas e vulnerabilidades recentes. Além disso, é recomendável evitar a hospedagem de scripts CGI, pois eles frequentemente requerem permissões elevadas, representando um risco significativo ao sistema operacional.

Implementar essas medidas contribuirá para um ambiente de hospedagem mais seguro, protegendo seus servidores e, consequentemente, os dados dos usuários.

Se você tiver mais perguntas sobre servidores web, sinta-se à vontade para entrar em contato.

Referências

Rolar para cima