Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile
Visite também: Ipok ·  Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Lan University

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

 

 

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

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.98/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (1193 votos)

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
3ª geração do Under Servidor Cloud

Mobcamp 2014



 

As Palavras Mais Comuns da Língua Inglesa - 2ª edição