você está aqui: Home  → Arquivo de Mensagens

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



 

 

Veja a relação completa dos artigos de Alexandro Silva

Opinião dos Leitores

José Messias Alves da Silva
07 Mar 2012, 14:02
Muito bom artigo Alexandre! Parabéns!!
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script