You are on page 1of 7

LAMP++ Implementando um servidor LAMP seguro ( Atualizado ) |

Artigos
Cad e rn o :
Criad a e m: 14/04/2016 16:48
http://alexos.org/2011/01/lamp-implementando-um-servidor-lamp-seguro/
U RL:

LAMP++ Implementando um servidor


LAMP seguro ( Atualizado )
Posted on
Jan 20, 2011
by alexos
Vocs devem estar achando que fiquei maluco, porque postar um assunto to batido?
Calma!
O objetivo deste post apresentar todo o processo de implantao de um servidor LAMP
seguro de forma rpida e prtica. Veremos quais so os pacotes necessrios, como fazer o
hardening, tunning, monitoramento e segurana.
No irei detalhar cada fase do processo, quando necessrio irei adicionar links com maiores
informaes.
Instalao dos pacotes
aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-common binutils buildessential ca-certificates curl dbconfig-common defoma dpkg-dev fontconfig-config gawk
javascript-common libapache2-mod-php5 libapr1 libaprutil1 libc6-dev libcurl3 libdbd-mysql-perl
libdbi-perl libexpat1 libfontconfig1 libfreetype6 libgd2-xpm libgmp3c2 libgomp1 libhtmltemplate-perl libio-multiplex-perl libjpeg62 libjs-jquery libmpfr1ldbl libmysqlclient15off libnetcidr-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 parmetros 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 configurao em /etc/apache2/sites-available/ edite a linha Document
/ deixando da seguinte forma:
Order Deny,Allow
Deny from All
Options FollowSymLinks
AllowOverride None
Habilite o server-status para adquirir estatsticas do Apache2
Crie o arquivo server-status em /etc/apache2/conf.d/ com o seguinte contedo:
SetHandler server-status
Deny from all
Allow from localhost
Se desejar faa o baixe o arquivo server-status AQUI
Adicione a seguinte linha no final do arquivo /etc/apache2/apache2.conf
ExtendedStatus On
Habilite o mdulo info
a2enmod info
Habilite o SSL
Para habilitar o SSL acesse AQUI
Tunning do Apache
As configuraes de tunning do Apache2 esto totalmente ligadas a quantidade de recursos (
CPU, memria e banda ) disponveis:
Por exemplo para um servidor QuadCore com 8 GB e um link de 5Mb eu recomendo a seguinte
configurao:
StartServers 5

MinSpareServers 5
MaxSpareServers 10
ServerLimit 1000
MaxClients 1000
MaxRequestsPerChild 0
Descrio de cada diretiva:
StartServers Configura o nmero de processos filhos criados na inicializao ( Recomendado
deixar o valor padro )
MinSpareServers Nmero minimo de processos que no manipulam requisies. (
Recomendado deixar o valor padro )
MaxSpareServers Nmero mximo de processos que no manipulam requisies. (
Recomendado deixar o valor padro )
ServerLimit Valor mximo da diretiva MaxClients. ( Deve ser igual ou superior ao MaxClients )
MaxClients Nmero mximo de conexes simultneas. ( Varia de acordo com os recursos
disponveis )
MaxRequestsPerChild Limite de requesies que um processo filho poder manipular. ( 0
siginifica ilmitado )
Dica Importante: Para testes de benchmark do Apache2 recomendo 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 no foi configurada


Change the root password? [Y/n] Pressine 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 recomendo o uso do MySQL Performance Tuning Primer Script .
Dica Importante: O uso desta ferrramenta recomendado aps 48 horas de uso do banco
permitindo que o script detecte os valores corretos para o tunning do banco.
Este script validar os parmetros do arquivo my.cnf e criar um novo arquivo com as
alteraes recomendadas.
Hardening do PHP

Para ampliar a segurana do PHP recomendo o uso do Suhosin , o Debian implementa ele por
padro. Alm do suhosin necessrio desabilitar os seguintes parmetros do arquivo
/etc/php5/apache2/php.ini:

# Impede ataques de RFI e LFI ( Remote and Local File Inclusion )


allow_url_fopen = Off

# Impede que mensagens de erros sejam exibidas


display_errors = Off
# Impede a execuo de caracteres especiais digitados em campos de formulrio

convertendo-os em barra invertida. Protege contra ataques de SQL injection


magic_quotes_gpc = Off

# Impede o acesso a arquivos remotos atravs dos parmetros include ou require,


evitando injeo de cdigo malicioso.
allow_url_include = Off

# Impede a exibio das informaes sobre o PHP


expose_php = Off

# Impede a execuo de strings maliciosas devido as falhas no desenvolvimento da


aplicao.
register_globals = Off
Segurana e Manuteno 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
PermitRootLogin no
Limite o uso do sudo somente para o grupo admin
Crie o grupo admin
addgroup admin

Adicione seu usurio nesse grupo


adduser alexos admin
Configure o sudo adicionando a seguinte linha
%admin ALL=(ALL) ALL
Desabilite o usurio root
usermod -L root
Dica Importante: Para manter o sistema operacional e os aplicativos atualizados recomendo
o uso do Cron-apt.
Monitoramento de performance
Para montitorar a performance do servidor e dos servios recomendo o uso do Munin , voc
encontrar como instalar e configurar o Munin AQUI.
Agora vou apresentar como configurar o 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 necessrio editar o arquivo /etc/munin/plugin-conf.d/munin-node e informar
o usurio com permisso de acesso as informaes do apache, no caso do Debian este usurio
o www-data.
vim /etc/munin/plugin-conf.d/munin-node
[apache2]
user www-data
E para finalizar implemente uma camada a mais de segurana. Recomendo fortemente o uso
do Ossec Hids e de um pequeno script de firewall.
A instalao e configurao do Ossec Hids voc encontrar AQUI .
OBS Importante: Durante a instalao do Ossec opte pela instalao local ao invs do
server, assim a instalao ser standalone.
Script de Firewall
Crie um arquivo /etc/init.d/firewall.sh com o seguinte contedo:
#!/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
Se desejar faa o download do script AQUI
Adcione esse script na inicializao do sistema
update-rc.d firewall.sh defaults
Testando a segurana do servidor
Aps a concluso de todos estes passos use as seguintes ferramentas para scanear o servidor
e validar todo o trabalho realizado:
Hntool
W3af
Nikto
Netsparker
Concluso
No que tange a segurana dos servidores LAMP venho tendo bastante sucesso seguindo estes
passos. Sei que existem outras implementaes to melhores quanto essa, porm aqui sigo
boas prticas e fao uso de poucas ferramentas tornando sua aplicabilidade rpida, simples e
de fcil gerncia.

You might also like