Implementando um servidor LAMP seguro
-
Upload
danilo-carreira -
Category
Documents
-
view
4 -
download
1
description
Transcript of 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
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
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
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
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
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
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.