Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Nginx - Implantação e hardening do nginx no Debian
Colaboração: Alexandro Silva
Data de Publicação: 07 de março de 2012
O Nginx (pronuncia-se "engine-x") é um webserver e proxy reverso para os protocolos http, smtp, pop3 e imap focado em alta performance. Sua utilização vêm crescendo bastante rapidamente, numa pesquisa realizada em janeiro deste ano pela Netcraft ele ocupa o 2o. lugar entre os servidores webs ativos na internet.
Neste post apresentarei como configurar o Nginx com suporte ao PHP e todos os ajustes de segurança necessários.
NOTA: Informações importantes encontram-se nos comentários dos arquivos de configuração.
Para obter as versões mais recente usaremos os pacotes disponíveis no repositório squeeze-backports
deb http://backports.debian.org/debian-backports squeeze-backports main
aptitude install -t squeeze-backports nginx spawn-fcgi ṕhp5-cgi
Configurando o vhost
vim /etc/nginx/sites-available/www.acme.com
#O dominio acme.com é um alias para www.acme.com
server {
server_name www.acme.com acme.com;
access_log /var/log/nginx/www.acme.com.access.log;
error_log /var/log/nginx/www.acme.com.error.log;
root /var/www/acme/;
location / {
index index.php;
}
#Restrigindo o acesso ao ambiente administrativo
location /admin {
root /var/www/acme/;
index index.php;
allow 200.222.222.222;
deny all;
}
#Negando o acesso a alguns arquivos
location =/*.txt {
deny all;
log_not_found off;
access_log off;
}
location =/xmlrpc.php{
deny all;
log_not_found off;
access_log off;
}
location =/readme.html {
deny all;
log_not_found off;
access_log off;
}
#Habilitando o suporte ao PHP
location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/acme$fastcgi_script_name;
}
}
Hardening do Nginx
user www-data;
#Total de threads. Configure de acordo com a quantidade de CPU existente, acima de 2 CPUs = 4.
worker_processes 4;
pid /var/run/nginx.pid;
events {
#Juntamente com o work_processes permite calcular o máx. de clientes (max clients = worker_processes * worker_connections)
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
sendfile on;
tcp_nodelay on;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
# Protecao contra DoS
client_body_buffer_size 1K;
client_header_buffer_size 1k;
client_max_body_size 2M;
large_client_header_buffers 2 1k;
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 5 5;
send_timeout 10;
# Oculta banner
server_tokens off;
}
# Linita o maximo de conexões concorrentes por IP
limit_conn_zone $binary_remote_addr zone=addr:10m;
limit_conn addr 10;
Script de inicialização do PHP-Fastcgi
vim /etc/init.d/php-fastcgi
RETVAL=0
case "$1" in
start)
$PHP_SCRIPT
RETVAL=$?
;;
stop)
killall php5-cgi
RETVAL=$?
;;
restart)
killall php5-cgi
$PHP_SCRIPT
RETVAL=$?
;;
*)
echo "Usage: php-fastcgi {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
Adicionando nos Runlevels
update-rc.d php-fastcgi defaults
Habilitando o vhost e iniciando os serviços
cd /etc/nginx/sites-enabled ln -s ../sites-available/www.acme.com
invoke-rc.d nginx start && invoke-rc.d php-fastcgi start
Considerações finais
As melhores práticas de segurança do PHP já foram abordadas nos posts anteriores [1] [2]
Como pudemos constatar sua implementação é aparente fácil, o site do [projeto http://nginx.org/] é bastante rico em documentação.
O Nginx é muito utilizado como proxy reverso tornando-se um frontend para balaceamento de carga suportando diversos protocolos, existe também um módulo de WAF chamado Naxsi, esta e outras soluções serão tratadas nos próximos posts.
Referências
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
07 Mar 2012, 14:02




