Arquivo da tag: OpenSSL

Como instalar e configurar o módulo nginx-upload-module no Nginx – Parte 1

Olá pessoal,

Estou procurando algumas formas de como resolver um problema de upload de arquivos grandes (+1GB) em uma aplicação escrita em Python utilizando o Microframework Flask. Neste post vou explicar como instalar o módulo nginx-upload-module no Nginx para que o upload dos arquivos seja trato pelo Nginx não mais pela aplicação.

ATENÇÃO: Antes de começar, este post é apenas para fins didáticos, não recomendo executar este procedimento em ambiente de produção a não ser que você tenha certeza do que você esta fazendo.

O Nginx quando instalado via gerenciado de pacotes vem com vários módulos, então para ter uma instalação funcional para vários propósitos também vou instalar os mesmos módulos que são instalados via gerenciador de pacotes.

Para este teste estou utilizando o Ubuntu 18.04 Server, acredito que seja possível reproduzir em outras distribuições baseadas no Debian

sudo apt update && apt upgrade
sudo apt install build-essential -y

Para compilação é necessários o código fonte de outras duas bibliotecas, o PCRE que é uma dependência do módulo de reescrita e OpenSSL que é uma dependência do módulo de ssl

PCRE

cd /tmp/
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz && tar -xf pcre-8.44.tar.gz

OpenSSL

cd /tmp/
wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz && tar -xf openssl-1.1.1h.tar.gz

No momento que escrevo este post, a versão estável do Nginx é a 1.18:

cd /tmp/
wget https://nginx.org/download/nginx-1.18.0.tar.gz && tar -xf nginx-1.18.0.tar.gz

O módulo nginx-upload-module precisa ser abaixado a partir do github do projeto

cd /tmp/
wget https://github.com/vkholodkov/nginx-upload-module/archive/master.zip && zip -d master.zip

Execute o ./configure com os módulos padrões, os caminhos das bibliotecas dependentes e do módulo nginx-upload-module

cd /tmp/nginx-1.18.0
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.1h  --add-module=/root/nginx-upload-module-master --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

Se tudo deu certo execute o comando abaixo para executar a instalação

sudo make 
sudo make install

Para facilitar a operação do serviço vou configurara o systemd para conseguir iniciar e parar o serviço utilizando o systemctl

sudo vim /etc/systemd/system/nginx.service

Copie e cole o trecho abaixo

[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

Para testar pare e inicie o serviço utilizando o Nginx

systemctl stop nginx
systemctl start nginx

Para verificar a instação dos módulos, execute o comando

nginx -V

A resposta esperada é

nginx -V

Vou terminar por aqui esta primeira parte, em breve publico outro post explicando como configurar o Nginx para tratar o upload dos arquivos.

Brecha de segurança no OpenSSL (CVE-2014-0160)

Nas últimas duas semanas tivemos uma grande movimentação devido a uma brecha de segurança no OpenSSL (CVE-2014-0160), dizem que esta ai deste de 2011 e ninguém havia detectado até agora. Provavelmente você já deve ter lido diversos outros artigos tratando desta vulnerabilidade já que ela foi amplamente coberta por diversos blogs e sites de tecnologia do mundo inteiro. Continue lendo