<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nginx Archives - Blog do Gesiel Bernardes</title>
	<atom:link href="https://gesielbernardes.eti.br/tag/nginx/feed" rel="self" type="application/rss+xml" />
	<link>https://gesielbernardes.eti.br/tag/nginx</link>
	<description>Blog sobre Tecnologia e Segurança da Informação</description>
	<lastBuildDate>Tue, 23 Sep 2014 13:37:48 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Configurando Servidor Web Seguro com suporte a Php e Mysql utilizando Nginx + Naxsi + php-fpm</title>
		<link>https://gesielbernardes.eti.br/configurando-servidor-web-seguro.html</link>
		
		<dc:creator><![CDATA[gbernardes]]></dc:creator>
		<pubDate>Wed, 02 Apr 2014 14:51:09 +0000</pubDate>
				<category><![CDATA[Segurança da Informação]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[naxsi]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[segurança da informação]]></category>
		<category><![CDATA[servidor web]]></category>
		<guid isPermaLink="false">http://143.106.30.117/?p=56</guid>

					<description><![CDATA[<p>Manter um Servidor Web tem se tornado uma tarefa cada vez mais complexa. A medida em que tudo se converge para a &#8220;nuvem&#8221;,  surgem cada vez mais aplicativos e serviços que utilizam HTTP para enviar/receber dados. E proporcionalmente a esse crescimento, surgem os problemas de Segurança. Este artigo  mostra uma forma de configurar um Servidor… <span class="read-more"><a href="https://gesielbernardes.eti.br/configurando-servidor-web-seguro.html">Read More &#187;</a></span></p>
<p>The post <a href="https://gesielbernardes.eti.br/configurando-servidor-web-seguro.html">Configurando Servidor Web Seguro com suporte a Php e Mysql utilizando Nginx + Naxsi + php-fpm</a> appeared first on <a href="https://gesielbernardes.eti.br">Blog do Gesiel Bernardes</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Manter um Servidor Web tem se tornado uma tarefa cada vez mais complexa. A medida em que tudo se converge para a &#8220;nuvem&#8221;,  surgem cada vez mais aplicativos e serviços que utilizam HTTP para enviar/receber dados. E proporcionalmente a esse crescimento, surgem os problemas de Segurança.<br />
Este artigo  mostra uma forma de configurar um Servidor Web Seguro com suporte á PHP e Mysql,  utilizando Nginx, Naxsi e php-fpm. Vamos entender qual a função de cada um:</p>
<ul>
<li>Nginx: Servidor HTTP de alta performance,  muito conhecido pela sua estabilidade  e facilidade de configuração.</li>
<li>Naxsi: Firewall de aplicação Web de alta performance e baixa manutenção, para uso com Nginx.</li>
<li>Php-fpm: (FastCGI Process Manager) é uma alternativa para a implementação PHP FastCGI com alguns recursos adicionais (principalmente) usado em sites pessados.¹</li>
</ul>
<p>Este tutorial foi feito utilizando CentOS 6.5.</p>
<h3>1 &#8211;  Suprir dependências</h3>
<p># yum install git mysql mysql-server openssl openssl-devel wget make gcc<br />
Obs: Um passo recomendado é utilizar o mysql_secure_installation:</p>
<p># service mysqld start<br />
# mysql_secure_installation</p>
<h3>2 &#8211; Instalando Nginx e Nasxi</h3>
<p>Muito embora o Nginx possa ser instalado via Yum, teremos que compilar ele manualmente. Isto porquê o nasxi deve ser compilado junto com o Nginx.<br />
Obs: Substituir o &#8220;x&#8221; pela versão (utilizar sempre a ultima stable).</p>
<p># wget http://nginx.org/download/nginx-1.x.x.tar.gz<br />
# git clone https://github.com/nbs-system/naxsi<br />
# tar zvfx nginx-1.x.x.tar.gz<br />
# cd nginx-1.x.x<br />
#./configure &#8211;conf-path=/etc/nginx/nginx.conf &#8211;add-module=../naxsi/naxsi_src/ &#8211;error-log-path=/var/log/nginx/error.log &#8211;http-client-body-temp-path=/var/lib/nginx/body &#8211;http-fastcgi-temp-path=/var/lib/nginx/fastcgi &#8211;http-log-path=/var/log/nginx/access.log &#8211;http-proxy-temp-path=/var/lib/nginx/proxy &#8211;lock-path=/var/lock/nginx.lock &#8211;pid-path=/var/run/nginx.pid &#8211;without-http_uwsgi_module &#8211;without-http_scgi_module &#8211;with-http_ssl_module  &#8211;with-ipv6 &#8211;prefix=/usr<br />
# make &amp;&amp; make install<br />
# mkdir /var/lib/nginx<br />
# useradd -s /bin/false -M -d /var/www  nginx<br />
<span style="line-height: 1.5em;">  </span></p>
<p><span style="line-height: 1.5em;">Caso esteja utilizando CentOS, utilizar o script de inicialização contido </span><a style="line-height: 1.5em;" href="http://wiki.nginx.org/RedHatNginxInitScript">aqui</a><span style="line-height: 1.5em;"> .</span></p>
<p><span style="text-decoration: underline;">Instalando php-fpm</span></p>
<p># yum install php php-devel php-common php-gd php-mysql php-fpm</p>
<h3>3 &#8211; Configurando ambiente</h3>
<p><span style="text-decoration: underline;">Configurando Nginx e Naxsi</span></p>
<p>Visando simplificar a configuração, iremos criar um nginx.conf &#8220;genérico&#8221;, e as configurações de cada site irão ficar em /etc/nginx/conf.d . As &#8220;rules&#8221; do naxsi de cada site irão ficar em /etc/nginx/rules.d/. Você pode <a href="https://gesielbernardes.eti.br/wp-content/uploads/2014/04/nginx.conf_.txt">clicar aqui </a>para baixar o nginx.conf ou executar o comando abaixo:</p>
<p># wget -O /etc/nginx/nginx.conf https://gesielbernardes.eti.br/wp-content/uploads/2014/04/nginx.conf_.txt</p>
<p>Vamos criar agora a estrutura do naxsi:</p>
<p># cd ../naxsi<br />
# cp naxsi_config/naxsi_core.rules /etc/nginx/naxsi_core.rules<br />
# cd nx_util<br />
# python setup.py build<br />
# python setup.py install<br />
# mkdir /etc/nginx/conf.d<br />
# mkdir /etc/nginx/rules.d</p>
<p><span style="color: #444444;"> </span><span style="font-weight: 600; color: #444444;">[AdSense-A]</span></p>
<h3>4 &#8211; Adicionando Sites</h3>
<p>Para cada site adicionado, o ideal é que seja criado um arquivo no nginx, um arquivo de regras do naxsi e um arquivo de configurações do php-fpm. Isso faz com que seja possível &#8220;isolar&#8221; os ambientes, fazendo com que a segurança seja um pouco mais reforçada. Para este tutorial, iremos adicionar um site chamado &#8220;meusite.com&#8221;. A página inicial consultara a data e hora no banco e exibirá juntamente com a pagina phpinfo. O código dela está abaixo:</p>
<p># cat /var/www/html/index.php<br />
<span style="color: #0000ff;">&lt;?php</span></p>
<p><span style="color: #0000ff;">$db = mysqli_connect(&#8220;localhost&#8221;,&#8221;meuuser&#8221;,&#8221;minhasenha&#8221;,&#8221;mysql&#8221;);</span><br />
<span style="color: #0000ff;"> $consulta = &#8220;SELECT NOW()&#8221;;</span><br />
<span style="color: #0000ff;"> $result = mysqli_query($db,$consulta);</span><br />
<span style="color: #0000ff;"> $data = mysqli_fetch_row($result);</span><br />
<span style="color: #0000ff;"> echo $data[0];</span><br />
<span style="color: #0000ff;"> phpinfo();</span></p>
<p><span style="color: #0000ff;">?&gt;</span></p>
<p>Agora vamos adicionar o site no Nginx:</p>
<p># vi /etc/nginx/conf.d/meusite.conf<br />
####################################<br />
<span style="color: #ff0000;">server {</span><br />
<span style="color: #ff0000;"> listen 80;</span><br />
<span style="line-height: 1.5em; color: #ff0000;">         server_name meusite.com.br;</span></p>
<p><span style="color: #ff0000;">location / {</span><br />
<span style="color: #ff0000;"> root /var/www/meusite/;</span><br />
<span style="color: #ff0000;"> index index.php index.html ;</span><br />
<span style="color: #ff0000;"> include /etc/nginx/rules.d/meusite.rules;</span></p>
<p><span style="color: #ff0000;">}</span></p>
<p><span style="color: #ff0000;">location ~ \.(php|html)$ {</span><br />
<span style="color: #ff0000;"> root /var/www/meusite ;</span><br />
<span style="color: #ff0000;"> include /etc/nginx/fastcgi_params;</span><br />
<span style="color: #ff0000;"> fastcgi_pass 127.0.0.1:9000;</span><br />
<span style="color: #ff0000;"> fastcgi_index index.html;</span><br />
<span style="color: #ff0000;"> fastcgi_param SCRIPT_FILENAME /var/www/meusite/$fastcgi_script_name;</span><br />
<span style="color: #ff0000;"> include fastcgi_params;</span><br />
<span style="color: #ff0000;"> include /etc/nginx/rules.d/meusite.rules;</span><br />
<span style="color: #ff0000;"> access_log /var/log/nginx/access_meusite.log;</span><br />
<span style="color: #ff0000;"> error_log /var/log/nginx/error_meusite.log;</span><br />
<span style="color: #ff0000;"> }</span></p>
<p><span style="color: #ff0000;">}</span><br />
#######################################</p>
<p>Nesse exemplo acima, as extensões &#8220;.html&#8221; e &#8220;.php&#8221; serão passadas ao php-fpm, enquanto o restante do conteúdo será processado pelo nginx. Agora será necessário criar o arquivo de regras do naxsi para este site. O padrão é o conteúdo abaixo:</p>
<p># vi /etc/nginx/rules.d/meusite.rules<br />
#####################<br />
<span style="color: #ff0000;">LearningMode; #Enables learning mode</span><br />
<span style="color: #ff0000;"> SecRulesEnabled;</span><br />
<span style="color: #ff0000;"> #SecRulesDisabled;</span><br />
<span style="color: #ff0000;"> DeniedUrl &#8220;/RequestDenied&#8221;;</span><br />
<span style="color: #ff0000;"> ## check rules</span><br />
<span style="color: #ff0000;"> CheckRule &#8220;$SQL &gt;= 8&#8221; BLOCK;</span><br />
<span style="color: #ff0000;"> CheckRule &#8220;$RFI &gt;= 8&#8221; BLOCK;</span><br />
<span style="color: #ff0000;"> CheckRule &#8220;$TRAVERSAL &gt;= 4&#8221; BLOCK;</span><br />
<span style="color: #ff0000;"> CheckRule &#8220;$EVADE &gt;= 4&#8221; BLOCK;</span><br />
<span style="color: #ff0000;"> CheckRule &#8220;$XSS &gt;= 8&#8221; BLOCK;</span><br />
########################</p>
<p>A opção &#8220;LearningMode&#8221; refere-se ao modo de aprendizagem. O naxsi é um WAF baseado em detecção de anomalias, portanto, para que ele possa identificar o que é &#8220;anormal&#8221;, é necessário gerar uma whitelist. Posteriormente, iremos ver como gerar essa whitelist.</p>
<p>Resta agora configurar o php-fpm. Iremos utilizar o arquivo default para esse exemplo, mas é recomendável criar um arquivo para cada site. <strong>Mantenha o conteúdo</strong> do arquivo e modifique <strong>APENAS</strong> as opções abaixo:</p>
<p># vi /etc/php-fpm.d/www.conf<br />
<span style="color: #ff0000;">user = nginx</span><br />
<span style="color: #ff0000;"> group = nginx</span><br />
<span style="color: #ff0000;"> chdir = /var/www/meusite/</span></p>
<p>Basta agora apenas iniciar os serviços:</p>
<p># service mysqld start<br />
# service php-fpm start<br />
# service nginx start</p>
<p>E pronto. O Servidor já está funcionando com suporte á PHP e Mysql</p>
<p><a href="https://gesielbernardes.eti.br/wp-content/uploads/2014/04/print.png"><img fetchpriority="high" decoding="async" class="alignnone size-medium wp-image-65" src="https://gesielbernardes.eti.br/wp-content/uploads/2014/04/print-300x192.png" alt="print" width="300" height="192" srcset="https://gesielbernardes.eti.br/wp-content/uploads/2014/04/print-300x192.png 300w, https://gesielbernardes.eti.br/wp-content/uploads/2014/04/print-660x424.png 660w, https://gesielbernardes.eti.br/wp-content/uploads/2014/04/print.png 856w" sizes="(max-width: 300px) 100vw, 300px" /></a></p>
<p>&nbsp;</p>
<p>Por fim, resta apenas gerar a whitelist do naxsi. Com os site em funcionamento, navegue por ele, simulando um acesso. Teste de diversos navegadores, se possível em sistemas operacionais diferentes. Agora vamos gerar o relatório a partir dos logs:</p>
<p># nx_util.py -l /var/log/nginx/error_meusite.log -o</p>
<p>Ele vai processar os arquivos e apresentar sugestões de regras, algo com abaixo:</p>
<p>BasicRule wl:1011 &#8220;mz:$HEADERS_VAR:cookie&#8221;;<br />
BasicRule wl:1010 &#8220;mz:$HEADERS_VAR:cookie&#8221;;</p>
<p>Essas sugestões você adiciona no seu arquivo de rules do site, neste caso em /etc/nginx/rules.d/meusite.rules. No mundo ideal, isso seria o suficiente. Todavia, a amostragem (acessos de teste) nem sempre são suficientes para gerar a whitelist. Ideal é se ele ficasse no modo de aprendizagem um determinado tempo, algo como uma semana, para que seja gerada uma whitelist ampla. Vale ressaltar que, neste caso, deve-se tomar cuidado para não incluir um ataque em uma whitelist.</p>
<p>Posteriormente, veremos  como utilizar SSL , e também outros ajustes que podem tornar o ambiente ainda mais seguro.</p>
<p>&nbsp;</p>
<h3>Referências:</h3>
<p>¹ http://www.php.net/manual/pt_BR/install.fpm.php<br />
<a href="https://github.com/nbs-system/naxsi/wiki">Naxsi Wiki</a></p>
<p>&nbsp;</p>
<p><span style="color: #444444;"> </span><span style="font-weight: 600; color: #444444;">[AdSense-A]</span></p>
<p>The post <a href="https://gesielbernardes.eti.br/configurando-servidor-web-seguro.html">Configurando Servidor Web Seguro com suporte a Php e Mysql utilizando Nginx + Naxsi + php-fpm</a> appeared first on <a href="https://gesielbernardes.eti.br">Blog do Gesiel Bernardes</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
