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)
By accepting you will be accessing a service provided by a third-party external to https://magazine.joomla.org/
Comments