By julio coutinho on Saturday, 01 September 2012
Category: September

Montando o servidor web para seu site em Joomla!

Muitas pessoas questionam a segurança do CMS Joomla, por desconhecerem que a maioria dos ataques bem sucedidos, ocorrem a nível de servidor.

Obviamente algumas ações são necessárias para potencializar a segurança do CMS e destaco:

1) utilizar sempre a última versão stable;
2) encapsular o diretório de administração (/administrator);
3) diretórios devem ter permissão 755; 
4) arquivos dever possuir permissão 644;e
5) nunca use templates comerciais, pirateados.

Abaixo listo as boas práticas para montagem de um servidor web seguro, voltado a aplicações PHP, particularmente Joomla, baseado em tecnologia Linux-Apache-MySQL-PHP.

Instalação dos pacotes

aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-commonbinutils build-essential ca-certificates curl dbconfig-common defoma
dpkg-dev fontconfig-config gawk javascript-common libapache2-mod-php5libapr1 libaprutil1 libc6-dev libcurl3 libdbd-mysql-perl libdbi-perl libexpat1
libfontconfig1 libfreetype6 libgd2-xpm libgmp3c2 libgomp1 libhtml-templateperl libio-multiplex-perl libjpeg62 libjs-jquery libmpfr1ldbl libmysqlclient15off
libnet-cidr-perl libnet-daemon-perl libnet-server-perl libnet-snmp-perl libplrpc-perl libpng12-0 libpq5 libssh2-1 libstdc++6-4.3-dev libt1-5
libtalloc1 libterm-readkey-perl libtimedate-perl libwbclient0 libxpm4 munin-node mysql-server mysql-common openssl openssl-blacklist php5 php5-
common php5-gd php5-mysql php5-suhosin psmisc ssl-cert ttf-dejavu ttf-dejavu-core ttf-dejavu-extra wwwconfig-common libwww-perl htop sudo

Hardening e Tunning do Apache

Edite os seguintes parâmetros do arquivo |/etc/apache2/conf.d/security|

(*) Nos arquivos de configuração em |/etc/apache2/sites-available/| edite a diretiva <Document />* deixando da seguinte forma:

<Document />
Order Deny,Allow
Deny from All
Options FollowSymLinks
AllowOverride None
</Document>

Habilite o *server-status* para adquirir estatísticas do Apache2

Crie o arquivo *server-status* em |/etc/apache2/conf.d/| com o seguinte conteúdo:
SetHandler server-status
Deny from all
Allow from localhost

Adicione a seguinte linha no final do arquivo |/etc/apache2/apache2.conf|

ExtendedStatus On
Habilite o módulo *info*
a2enmod info

Habilite o SSL

Para habilitar o SSL acesse http://blog.alexos.com.br/?p=371

Tunning do Apache

As configurações de tunning do Apache2 estão totalmente ligadas a quantidade de recursos (CPU, memória e banda) disponíveis:
Por exemplo para um servidor QuadCore com 8 GB e um link de 5Mb é recomendado a seguinte configuração:
StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 0

Descrição de cada diretiva

* StartServers (Recomendado deixar o valor padrão)
Configura o número de processos filhos criados na inicialização - http://httpd.apache.org/docs/2.0/mod/mpm_common.html#startservers

* MinSpareServers (Recomendado deixar o valor padrão)
Número minimo de processos que não manipulam requisições - http://httpd.apache.org/docs/2.0/mod/prefork.html#minspareservers

* MaxSpareServers (Recomendado deixar o valor padrão)
Número máximo de processos que não manipulam requisições - http://httpd.apache.org/docs/2.0/mod/prefork.html#maxspareservers

* ServerLimit (Deve ser igual ou superior ao MaxClients)
Valor máximo da diretiva MaxClients - http://httpd.apache.org/docs/2.0/mod/mpm_common.html#serverlimit

* MaxClients (Varia de acordo com os recursos disponíveis)
Número máximo de conexões simultâneas - http://httpd.apache.org/docs/2.0/mod/mpm_common.html#maxclients

* MaxRequestsPerChild (0 siginifica ilmitado)
Limite de requesições que um processo filho poderá manipular - http://httpd.apache.org/docs/2.0/mod/mpm_common.html#maxrequestsperchild

(*) Dica Importante: Para testes de benchmark do Apache2 é recomendado o uso do AB (Apache Benchmark)

Hardening e Tuninng do MySQL

Execute o seguinte comando e siga os passos recomendados:

/usr/bin/mysql_secure_installation

MySQL Tunning

Para o tunning é recomendado o uso do MySQL Performance Tuning Primer Script.
(*) Dica Importante: O uso desta ferrramenta é recomendado após 48 horas de uso do banco permitindo que o script detecte os valores corretos para o tunning do banco. Este script validará os parâmetros do arquivo *my.cnf* e criará um novo arquivo com as alterações recomendadas.

Hardening do PHP

Para ampliar a segurança do PHP é recomendado o uso do Suhosin. O Debian o implementa por padrão.

Além do suhosin é necessário desabilitar os seguintes parâmetros do arquivo |/etc/php5/apache2/php.ini|:

allow_url_fopen = Off (*)
display_errors = Off
magic_quotes_gpc = Off (**)

(*)   é obrigatória a sua habilitação para a atualização automática do Joomla, porém é potencialmente perigosa.
(**) é obrigatória a sua habiltação para o funcionamento do Joomla! 3.0 Alpha

Segurança e Manutenção do S.O.

Para manter o sistema operacional e os aplicativos atualizados recomendo o uso do Cron-apt.

Monitoramento de performance

Para monitorar a performance do servidor e dos serviços recomendo o uso do Munin  , aqui você encontra como instalar e configurar o Munin.

Agora vamos apresentar a configuração do Munin para monitorar o Apache.

Com o`` server-status`` funcionando habilite os plugins do Apache:

Feito isso é necessário editar o arquivo |/etc/munin/plugin-conf.d/munin-node| e informar o usuário com permissão de acesso as informações do apache. No caso do Debian este usuário é o *wwwdata*.

vim /etc/munin/plugin-conf.d/munin-node

[apache2]

user www-data

E para finalizar implemente uma camada a mais de segurança. Recomendo fortemente o uso do Ossec Hids e de um pequeno script de firewall.
Aprenda a instalar e configurar o Ossec Hids.

(*) Durante a instalação do Ossec opte pela instalação *local* ao invés do *server*, assim a instalação será standalone.

Script de Firewall

Crie um arquivo |/etc/init.d/firewall.sh| com o seguinte conteúdo:

Download do script - Adcione esse script na inicialização do sistema

Após a conclusão de todos estes passos use as seguintes ferramentas para scanear o servidor e validar todo o trabalho
* W3af
* Nikto  - Tutorial de utilização do Nikto
* Netsparker

Fonte:  http://blog.alexos.com.br/ (Alexandre Antonio Antunes de Almeida)
Leave Comments