De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Alexandro Silva
Data de Publicação: 24 de janeiro de 2011
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 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.
Não irei detalhar cada fase do processo, quando necessário irei adicionar links com maiores informações.
aptitude install apache2 apache2-mpm-prefork apache2-utils apache2.2-common binutils build-essential 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 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 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
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
Para habilitar o SSL acesse http://blog.alexos.com.br/?p=371
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 seguinte configuração:
StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 1000 MaxClients 1000 MaxRequestsPerChild 0
Dica Importante: Para testes de benchmark do Apache2 recomendo o uso do AB (Apache Benchmark)
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
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 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.
Para ampliar a segurança do PHP recomendo 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
Desabilite o exim4
invoke-rc.d exim4 stop update-rc.d exim4 remove
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 alexos 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.
Para monitorar a performance do servidor e dos serviços recomendo o uso do Munin , você encontra como instalar e configurar o Munin em http://blog.alexos.com.br/?p=950.
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 informar o 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 uso do Ossec Hids e de um pequeno script de firewall.
A instalação e configuração do Ossec Hids você encontrará em http://blog.alexos.com.br/?p=869.
OBS Importante: Durante a instalação do Ossec opte pela instalação local ao invés do server, assim a instalação será standalone.
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
Se desejar faça o download do script (Cópia Local).
Adcione esse script na inicialização do sistema
update-rc.d firewall.sh defaults
Após a conclusão de todos estes passos use as seguintes ferramentas para scanear o servidor e validar todo o trabalho
No que tange a segurança dos servidores LAMP venho tendo bastante sucesso seguindo estes passos. Sei que existem outras implementações tão melhores quanto essa, porém aqui sigo boas práticas e faço uso de poucas ferramentas tornando sua aplicabilidade rápida, simples e de fácil gerência.
Fonte: http://blog.alexos.com.br/?p=2200&lang=pt-br
Blog do autor: http://www.alexos.orgError: No domain found