Configurando Proxy Reverso no Apache

Existem diversas situações que podem requerer a configuração de um proxy reverso. As mais comuns que encontramos no nosso dia-a-dia são para criar uma camada adicional de proteção para um servidor que pode estar rodando um software mais antigo e não apresentar nível de segurança suficiente para ficar exposto na internet.

Outra situação é configurar um balanceamento de carga entre servidores de aplicação, ficando o proxy reverso na função de centralizar as conexões e distribuí-las para os servidores de aplicação disponíveis.

A configuração mais simples é a que possui apenas um servidor de aplicação como backend sendo acessado pelo proxy reverso. Sua configuração requer apenas as instruções abaixo.

ProxyPass "/" "http://localhost:8080/"
ProxyPassReverse "/" "http://localhost:8080/"

Essas instruções devem, preferencialmente, estar dentro de um VirtualHost, para evitar confusões com outros sites que o Apache possa estar servindo. Mas caso seja um servidor usado apenas para o proxy reverso de um site apenas, é possível colocar na sessão principal do httpd.conf.

O que essa instrução faz é passar todas as requisições para o backend. No entanto, é possível fazer proxy apenas de determinadas pastas.

ProxyPass "/imagens/" "http://localhost:8080/imagens/"
ProxyPassReverse "/imagens/" "http://localhost:8080/imagens/"

Nesse exemplo acima, no caso de uma requisição para http://www.exemplo.com.br/imagens/logo.png seria feito o proxy para o serviço rodando na porta 8080, mas uma requisição para http://www.exemplo.com.br/index.php seria servido pelo próprio Apache local.

Uma questão importante é que os diretórios do proxy e do backend não precisam ser sempre iguais.

ProxyPass "/" "http://localhost:8080/site/"
ProxyPassReverse "/" "http://localhost:8080/site/"

Nas instruções acima, um acesso ao endereço http://www.exemplo.com.br/index.php seria direcionado para o backend no caminho http://localhost:8080/site/index.php

Isso é bastante útil e permite inclusive que caminhos diferentes da URL sejam servidos por servidores backend diferentes.

Atualizando Hosts Standalone do VMware ESXi

Quando se está utilizando o VMware ESXi como virtualizador sem o auxilio do vCenter para fazer a gestão, o processo de atualização e aplicação de patches pode ser um pouco complicada. Nesse post vou mostrar duas formas de fazer essa atualização.

As duas formas precisam ser executadas via linha de comando no host, portanto habilite o acesso SSH no ESXi antes de iniciar.

Também é necessário que o host esteja em modo de manutenção e todas as VMs desligadas.

A primeira forma, que teoricamente é a mais simples, envolve atualizar automaticamente baseado no profile do host.

Identifique a versão atual do VMware ESXi:

# esxcli system version get

Depois verifique qual o Image Profile do Host:

# esxcli software profile get

Habilite o acesso internet a partir do host ESXi, liberando nas regras de firewall local. Caso necessário, libere também o acesso no seu firewall de borda.

# esxcli network firewall ruleset set -e true -r httpClient

Para atualizar o ESXi a partir do repositório online, utilize o comando abaixo:

# esxcli software profile update -d https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml -p ESXi-6.7.0-20190402001-standard

Onde o parâmetro “-p” especifica o Image Profile que foi identificado no passo anterior.

O segundo modo é semelhante, mas ao invés de fazer a atualização a partir do repositório remoto, deve-se primeiro baixar o arquivo (bundle) de atualização e aplicá-lo.

Depois de baixar, coloque o arquivo .zip do bundle de atualização em um datastore do host e utilize o comando de “vib update” passando no parâmetro “-d” o caminho do arquivo de bundle.

# esxcli software vib update -d /vmfs/volumes/5cb37c65-0d32cf9e-7ed2-984be1791ea8/VIB/ESXi670-202004002.zip

Depois da atualização deverá ser realizado um reboot no host.

Configurar RedHat 5 para utilizar o repositório do CentOS 5 no Vault

Antes de mais nada é preciso dizer que não é recomendado utilizar uma versões tão antiga do RedHat/CentOS, principalmente se ela estiver acessível publicamente na Internet, visto que são versões já sem suporte à algum tempo e que não estão recebendo atualizações de segurança que podem ser críticas.

Mas se por qualquer necessidade você precisa utilizar essa versão, este procedimento pode ser útil. Principalmente se você utiliza o RedHat e não possui uma subscription ativa.

Aviso: Não execute esse procedimento em instalações RedHat que estejam em produção. Apesar do CentOS ser teoricamente uma ‘cópia’ do RedHat, compilado a partir dos mesmos códigos fonte, ainda assim é possível que em nível binário existam diferenças que quebrem a aplicação que está rodando no servidor.

Limpando cache local do yum:

# yum clean all

Baixando pacotes mais recentes do release do CentOS 5, do YUM e da lista de mirrors:

# wget http://vault.centos.org/5.11/os/x86_64/RPM-GPG-KEY-CentOS-5
# wget http://vault.centos.org/5.11/os/x86_64/CentOS/centos-release-5-11.el5.centos.x86_64.rpm
# wget http://vault.centos.org/5.11/os/x86_64/CentOS/centos-release-notes-5.11-0.x86_64.rpm
# wget http://vault.centos.org/5.11/os/x86_64/CentOS/yum-3.2.22-40.el5.centos.noarch.rpm 
# wget http://vault.centos.org/5.11/os/x86_64/CentOS/yum-updatesd-0.9-6.el5_10.noarch.rpm
# wget http://vault.centos.org/5.11/os/x86_64/CentOS/yum-fastestmirror-1.1.16-21.el5.centos.noarch.rpm

Importando a chave GPG do CentOS:

# rpm --import RPM-GPG-KEY-CentOS-5

Removendo o pacote de release dele do RedHat, pois será substituído pelo do CentOS:

# rpm -e --nodeps redhat-release

Instalar os pacotes baixados:

# rpm -Uvh --force yum*.rpm centos*.rpm

Atualizando o arquivo de repositório Base com as informações do repositório do Vault.

# head -37 /etc/yum.repos.d/CentOS-Vault.repo > /etc/yum.repos.d/CentOS-Base.repo
# sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/CentOS-Base.repo

Removendo arquivo desnecessário com as informações do Vault para evitar conflitos:

# rm -f /etc/yum.repos.d/CentOS-Vault.repo

Em seguida já pode rodar o yum para instalar os pacotes necessários, como por exemplo:

# yum install net-snmp

Converter um certificado PFX para o formato PEM

Podemos converter um arquivo de certificado PFX em dois tipo de arquivos PEM: deixando o certificado e a chave privada no mesmo arquivo, conhecido como PEM combinado, ou separando o certificado e a chave privada em arquivos separados. Nos dois casos iremos utilizar o utilitário OpenSSL que possui compilações tanto para Linux quando para Windows.

Para converter um certificado PFX em um arquivo PEM combinado, utilize o comando abaixo.

# openssl pkcs12 -in certificado.pfx -out certificado.pem -nodes

Onde:
– certificado.pfx: o arquivo de entrada no formato PFX.
– certificado.pem: o arquivo PEM que será gerado, contendo tanto o certificado quando a chave privada.

Para converter o certificado PFX para arquivos PEM separados (certificado + chave privada), utilize os comandos abaixo.

Extraindo a chave privada:

# openssl pkcs12 -in certificado.pfx -nocerts -out certificado.key -nodes

Onde:
– certificado.pfx: o arquivo de entrada no formato PFX.
– certificado.key: o arquivo gerado com a chave privada do certificado.

Extraindo o certificado:

# openssl pkcs12 -in certificado.pfx -clcerts -nokeys -out certificado.pem

Onde:
– certificado.pfx: o arquivo de entrada no formato PFX.
– certificado.pem: o arquivo que será gerado com o certificado no formato PEM.

Obs.: Importante ressaltar que os arquivos PEM gerados com a chave privada não estarão protegidos por senha devido ao uso do parâmetro “-nodes”.

Linux: Alterando discos e partições sem reiniciar

Caso tenha alterado o tamanho de um disco, por exemplo, aumentando o tamanho de um disco já existente em uma VM, use o comando abaixo para forçar o kernel do linux a reler as informações do disco.

# echo 1 > /sys/class/block/sdd/device/rescan

Sendo que “sdd” no comando acima é o dispositivo do disco que teve o tamanho alterado.

Caso tenha incluído ou removido um ou mais discos do servidor, utilize o comando abaixo para forcar uma releitura nos barramentos das controladoras por alterações de dispositivos. É importante ressaltar que o comando abaixo não tem nenhum efeito no caso de alteração de tamanho para um disco já reconhecido previamente pelo sistema.

# for host in /sys/class/scsi_host/*; do echo "- - -" | tee $host/scan; lsblk -S ; done

Após utilizar os comandos acima e os discos estarem devidamente reconhecidos com os tamanhos corretos, é possível seguir com a criação e/ou redimensionamento do sistema de arquivos.

Redimensionando partições de disco no Linux

Recomendo usar o utilitário “parted”, pois o “fdisk” precisa remover e recriar a partição. O risco é muito maior de dar problema.

No exemplo abaixo vamos redimencionar a partição 2 do disco /dev/sda para ocupar todo o espaço livre existente no disco. Esse espaço foi gerado quando o disco foi aumentado no VMware (ou outro virtualizador qualquer) ou quando fez um clone para um disco maior.

# parted /dev/sda
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 268GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary ext4 boot
2 1075MB 172GB 171GB primary lvm

(parted) resizepart 2 100%
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 268GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 1075MB 1074MB primary ext4 boot
2 1075MB 268GB 267GB primary lvm

(parted) quit
Information: You may need to update /etc/fstab.

Depois disso, sendo a partição um LVM, basta expandir o PV:

# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized

Depois disso o procedimento para expandir o volume logico LV é o mesmo de quando é feita adição de novos discos.

# lvextend -r -l +100%FREE /dev/cl_aplprd01dc/root
Size of logical volume cl_aplprd01dc/root changed from <151.00 GiB (38655 extents) to <241.00 GiB (61695 extents).
Logical volume cl_aplprd01dc/root successfully resized.
meta-data=/dev/mapper/cl_aplprd01dc-root isize=512 agcount=4, agsize=9895680 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=39582720, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=19327, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 39582720 to 63175680