6 minutes reading time (1202 words)

Montando o servidor web para seu site em Joomla!

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|

  • Server Tokens
    De
    ServerTokens Full
    Para
    ServerTokens Prod
  • ServerSignature
    De
    ServerSignature On
    Para
    ServerSignature Off
  • TraceEnable
    De
    TraceEnable On
    Para
    TraceEnable Off

(*) 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

  • Enter current password for root (enter for none):
    Informe a senha do root do mysql ou pressione ENTER se a senha ainda não foi configurada
  • Change the root password? [Y/n]
    Pressione ENTER para criar uma nova senha
  • Remove anonymous users? [Y/n]
    Pressione ENTER
  • Disallow root login remotely? [Y/n]
    Pressione ENTER
  • Remove test database and access to it? [Y/n]
    Pressione ENTER
  • Reload privilege tables now? [Y/n]
    Pressione ENTER

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.

  • Desabilite o exim4
    invoke-rc.d exim4 stop
    update-rc.d exim4 remove
  • Hardening do SSH
    Modifique as seguintes linhas do arquivo |/etc/ssh/sshd_config|:
    Port 22 para, por exemplo Port 3000
    PermitRootLogin yes para PermitRootLogin no
  • Limite o uso do sudo somente para o grupo admin
    Crie o grupo admin - addgroup admin
    Adicione seu usuário nesse grupo adduser seuuser admin
    Configure o sudo adicionando a seguinte linha: %admin ALL=(ALL) ALL
    Desabilite o usuário root - usermod -L root

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:

  • cd /etc/munin/plugins
  • ln -s /usr/share/munin/plugins/apache_processes apache_processes
  • ln -s /usr/share/munin/plugins/apache_accesses apache_accesses

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:

  • #!/bin/bash
  • # Server firewall
  • # Alexandro Silva
  • # April 27th '2010
  • PATH=/bin:/usr/bin:/sbin:/usr/sbin
  • TCPOK="123 80 443"
  • UDPOK="53"
  • iptables -F INPUT
  • iptables -F OUTPUT
  • iptables -F FORWARD
  • iptables -P INPUT ACCEPT
  • iptables -P OUTPUT ACCEPT
  • iptables -P FORWARD DROP
  • #Drop incoming malformed NULL packets
  • iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
  • #Drop incoming malformed XMAS packets
  • iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
  • #Syn flood protection
  • iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
  • #Drop incoming ping request
  • iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
  • iptables -A INPUT -j ACCEPT -i lo
  • iptables -A INPUT -j LOG -i ! lo -s 127.0.0.1/255.0.0.0
  • iptables -A INPUT -j DROP -i ! lo -s 127.0.0.1/255.0.0.0
  • iptables -A OUTPUT -j ACCEPT -o lo
  • # Permit SSH in the 3000 port
  • iptables -A INPUT -s 0.0.0.0 -p tcp --dport 3000 -j ACCEPT
  • # Permit access in some TCP ports
  • for PORTA in $TCPOK
  • do
  • iptables -A INPUT -p tcp --dport $PORTA -j ACCEPT
  • done
  • # Permit access in some UDP ports
  • for PORTA in $UDPOK
  • do
  • iptables -A INPUT -p udp --dport $PORTA -j ACCEPT
  • done
  • # Drop other entering connections checking the state
  • iptables -A INPUT -m state --state ! ESTABLISHED,RELATED -j DROP
  • iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

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

  • update-rc.d firewall.sh defaultsTestando a segurança do servidor

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)

Some articles published on the Joomla Community Magazine represent the personal opinion or experience of the Author on the specific topic and might not be aligned to the official position of the Joomla Project

0
Post your Haikus for September
 

Comments

Already Registered? Login Here
No comments made yet. Be the first to submit a comment

By accepting you will be accessing a service provided by a third-party external to https://magazine.joomla.org/