Implementando um servidor LAMP seguro

7
C a d e r n o : A r t i g o s C r i a d a e m : 1 4 / 0 4 / 2 0 1 6 1 6 : 4 8 U R L : h t t p : / / a l e x o s . o r g / 2 0 1 1 / 0 1 / l a m p - i m p l e m e n t a n d o - u m - s e r v i d o r - l a m p - s e g u r o / L A M P + + I m p l e m e n t a n d o u m s e r v i d o r L A M P s e g u r o ( A t u a l i z a d o ) | L A M P + + I m p l e m e n t a n d o u m s e r v i d o r L A M P s e g u r o ( A t u a l i z a d o ) P o s t e d o n J a n 2 0 , 2 0 1 1 b y a l e x o s V o c ê s d e v e m e s t a r a c h a n d o q u e f i q u e i m a l u c o , p o r q u e p o s t a r u m a s s u n t o t ã o b a t i d o ? C a l m a ! O o b j e t i v o d e s t e p o s t é a p r e s e n t a r t o d o o p r o c e s s o d e i m p l a n t a ç ã o d e u m s e r v i d o r L A M P s e g u r o d e f o r m a r á p i d a e p r á t i c a . V e r e m o s q u a i s s ã o o s p a c o t e s n e c e s s á r i o s , c o m o f a z e r o h a r d e n i n g , t u n n i n g , m o n i t o r a m e n t o e s e g u r a n ç a . N ã o i r e i d e t a l h a r c a d a f a s e d o p r o c e s s o , q u a n d o n e c e s s á r i o i r e i a d i c i o n a r l i n k s c o m m a i o r e s i n f o r m a ç õ e s . I n s t a l a ç ã o d o s p a c o t e s a p t i t u d e i n s t a l l a p a c h e 2 a p a c h e 2 - m p m - p r e f o r k a p a c h e 2 - u t i l s a p a c h e 2 . 2 - c o m m o n b i n u t i l s b u i l d - e s s e n t i a l c a - c e r t i f i c a t e s c u r l d b c o n f i g - c o m m o n d e f o m a d p k g - d e v f o n t c o n f i g - c o n f i g g a w k j a v a s c r i p t - c o m m o n l i b a p a c h e 2 - m o d - p h p 5 l i b a p r 1 l i b a p r u t i l 1 l i b c 6 - d e v l i b c u r l 3 l i b d b d - m y s q l - p e r l l i b d b i - p e r l l i b e x p a t 1 l i b f o n t c o n f i g 1 l i b f r e e t y p e 6 l i b g d 2 - x p m l i b g m p 3 c 2 l i b g o m p 1 l i b h t m l - t e m p l a t e - p e r l l i b i o - m u l t i p l e x - p e r l l i b j p e g 6 2 l i b j s - j q u e r y l i b m p f r 1 l d b l l i b m y s q l c l i e n t 1 5 o f f l i b n e t - c i d r - p e r l l i b n e t - d a e m o n - p e r l l i b n e t - s e r v e r - p e r l l i b n e t - s n m p - p e r l l i b p l r p c - p e r l l i b p n g 1 2 - 0 l i b p q 5 l i b s s h 2 - 1 l i b s t d c + + 6 - 4 . 3 - d e v l i b t 1 - 5 l i b t a l l o c 1 l i b t e r m - r e a d k e y - p e r l l i b t i m e d a t e - p e r l l i b w b c l i e n t 0 l i b x p m 4 m u n i n - n o d e m y s q l - s e r v e r m y s q l - c o m m o n o p e n s s l o p e n s s l - b l a c k l i s t p h p 5 p h p 5 - c o m m o n p h p 5 - g d p h p 5 - m y s q l p h p 5 - s u h o s i n p s m i s c s s l - c e r t t t f - d e j a v u t t f - d e j a v u - c o r e t t f - d e j a v u - e x t r a w w w c o n f i g - c o m m o n l i b w w w - p e r l h t o p s u d o H a r d e n i n g e T u n n i n g d o A p a c h e E d i t e o s s e g u i n t e s p a r â m e t r o s d o a r q u i v o / e t c / a p a c h e 2 / c o n f . d / s e c u r i t y S e r v e r T o k e n s D e S e r v e r T o k e n s F u l l P a r a S e r v e r T o k e n s P r o d S e r v e r S i g n a t u r e

description

O objetivo deste post é apresentar todo o processo de implantação de um servidor LAMP seguro de forma rápida e prática. Veremos quais são os pacotes necessários, como fazer o hardening, tunning, monitoramento e segurança.

Transcript of Implementando um servidor LAMP seguro

Page 1: Implementando um servidor LAMP seguro

Cade rno: Artigos

Criada em: 14/04/2016 16:48

URL: http://alexos.org/2011/01/lamp-implementando-um-servidor-lamp-seguro/

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

LAMP++ – Implementando um servidorLAMP seguro ( Atualizado )Posted on

Jan 20, 2011by alexos

Vocês devem estar achando que fiquei maluco, porque postar um assunto tão batido?

Calma!

O objetivo deste post é apresentar todo o processo de implantação de um servidor LAMPseguro de forma rápida e prática. Veremos quais são os pacotes necessários, como fazer ohardening, tunning, monitoramento e segurança.

Não irei detalhar cada fase do processo, quando necessário irei adicionar links com maioresinformações.

Instalação dos pacotes

aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-common binutils build-essential ca-certificates curl dbconfig-common defoma dpkg-dev fontconfig-config gawkjavascript-common libapache2-mod-php5 libapr1 libaprutil1 libc6-dev libcurl3 libdbd-mysql-perllibdbi-perl libexpat1 libfontconfig1 libfreetype6 libgd2-xpm libgmp3c2 libgomp1 libhtml-template-perl libio-multiplex-perl libjpeg62 libjs-jquery libmpfr1ldbl libmysqlclient15off libnet-cidr-perl libnet-daemon-perl libnet-server-perl libnet-snmp-perl libplrpc-perl libpng12-0 libpq5libssh2-1 libstdc++6-4.3-dev libt1-5 libtalloc1 libterm-readkey-perl libtimedate-perl libwbclient0libxpm4 munin-node mysql-server mysql-common openssl openssl-blacklist php5 php5-commonphp5-gd php5-mysql php5-suhosin psmisc ssl-cert ttf-dejavu ttf-dejavu-core ttf-dejavu-extrawwwconfig-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

Page 2: Implementando um servidor LAMP seguro

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 linha Document/ deixando da seguinte forma:

Order Deny,Allow

Deny from AllOptions FollowSymLinksAllowOverride None

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 allAllow from localhost

Se desejar faça o baixe o arquivo server-status AQUI

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 AQUI

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 eu recomendo a seguinteconfiguração:

StartServers 5

Page 3: Implementando um servidor LAMP seguro

MinSpareServers 5MaxSpareServers 10ServerLimit 1000MaxClients 1000MaxRequestsPerChild 0

Descrição de cada diretiva:

StartServers – Configura o número de processos filhos criados na inicialização ( Recomendadodeixar o valor padrão )

MinSpareServers – Número minimo de processos que não manipulam requisições. (Recomendado deixar o valor padrão )

MaxSpareServers – Número máximo de processos que não manipulam requisições. (Recomendado deixar o valor padrão )

ServerLimit – Valor máximo da diretiva MaxClients. ( Deve ser igual ou superior ao MaxClients )

MaxClients – Número máximo de conexões simultâneas. ( Varia de acordo com os recursosdisponíveis )

MaxRequestsPerChild – Limite de requesições que um processo filho poderá manipular. ( 0siginifica ilmitado )

Dica Importante: Para testes de benchmark do Apache2 recomendo o uso do AB ( ApacheBenchmark )

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 oupressione ENTER se a senha ainda não 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 após 48 horas de uso do bancopermitindo 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 asalterações recomendadas.

Hardening do PHP

Page 4: Implementando um servidor LAMP seguro

Para ampliar a segurança do PHP recomendo o uso do Suhosin , o Debian implementa ele porpadrão. Além do suhosin é necessário desabilitar os seguintes parâmetros 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 execução de caracteres especiais digitados em campos de formulárioconvertendo-os em barra invertida. Protege contra ataques de SQL injection

magic_quotes_gpc = Off

# Impede o acesso a arquivos remotos através dos parâmetros include ou require,evitando injeção de código malicioso.

allow_url_include = Off

# Impede a exibição das informações sobre o PHP

expose_php = Off

# Impede a execução de strings maliciosas devido as falhas no desenvolvimento daaplicação.

register_globals = Off

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

PermitRootLogin no

Limite o uso do sudo somente para o grupo admin

Crie o grupo admin

addgroup admin

Page 5: Implementando um servidor LAMP seguro

Adicione seu usuário nesse grupo

adduser alexos admin

Configure o sudo adicionando a seguinte linha

%admin ALL=(ALL) ALL

Desabilite o usuário root

usermod -L root

Dica Importante: Para manter o sistema operacional e os aplicativos atualizados recomendoo uso do Cron-apt.

Monitoramento de performance

Para montitorar a performance do servidor e dos serviços 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 é necessário editar o arquivo /etc/munin/plugin-conf.d/munin-node e informaro usuário com permissão de acesso as informações do apache, no caso do Debian este usuárioé o www-data.

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 usodo Ossec Hids e de um pequeno script de firewall.

A instalação e configuração do Ossec Hids você encontrará AQUI .

OBS Importante: Durante a instalação do Ossec opte pela instalação local ao invés doserver, 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

Page 6: Implementando um servidor LAMP seguro

PATH=/bin:/usr/bin:/sbin:/usr/sbin

TCPOK=”123 80 443″

UDPOK=”53″

iptables -F INPUT

iptables -F OUTPUTiptables -F FORWARD

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPTiptables -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.0iptables -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 $TCPOKdoiptables -A INPUT -p tcp –dport $PORTA -j ACCEPTdone

# Permit access in some UDP ports

for PORTA in $UDPOKdoiptables -A INPUT -p udp –dport $PORTA -j ACCEPTdone

# Drop other entering connections checking the state

Page 7: Implementando um servidor LAMP seguro

iptables -A INPUT -m state –state ! ESTABLISHED,RELATED -j DROP

iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

Se desejar faça o download do script AQUI

Adcione esse script na inicialização do sistema

update-rc.d firewall.sh defaults

Testando a segurança do servidor

Após a conclusão de todos estes passos use as seguintes ferramentas para scanear o servidore validar todo o trabalho realizado:

Hntool

W3af

Nikto

Netsparker

Conclusão

No que tange a segurança dos servidores LAMP venho tendo bastante sucesso seguindo estespassos. Sei que existem outras implementações tão melhores quanto essa, porém aqui sigoboas práticas e faço uso de poucas ferramentas tornando sua aplicabilidade rápida, simples ede fácil gerência.