Instalação do Apache no Amazon Linux 2023 + Let’s Encrypt

Instalando o Apache

Atualizando os programas instalados

sudo dnf update -y

Instalando o Apache e módulos necessários.

sudo dnf install -y httpd mod_ssl

Caso seja necessário, o comando abaixo cria o arquivo que carrega o mod_ssl.so

sudo echo “LoadModule ssl_module modules/mod_ssl.so” > /etc/httpd/conf.modules.d/00-ssl.conf

Configurando o Apache a iniciar com o sistema operacional

sudo systemctl enable httpd

Verificando se realmente ele está executando

sudo systemctl is-enabled httpd

Nesse momento o Apache já está funcionando.
Acessando http://localhost ou http://seudominio.com  deve aparecer a mensagem “It works!”.

Estrutura de arquivos do Apache

Documento root: /var/www/html
Arquivos de configuração: /etc/httpd
Arquivo de configuração do Apache: /etc/httpd/conf/httpd.conf
Arquivo de configuração do virtualhost (seu site). Se ele não existir, você deve criá-lo:
/etc/httpd/conf.d/seusite.conf

Conteúdo inicial do arquivo seusite.conf:

<VirtualHost *:80>

</VirtualHost>

Atenção

Se você for utilizar o Let’s Encrypt, não adicione configurações de redirecionamento no arquivo acima. O Certbot, no processo de instalação do certificado pode causar erro, argumentando que ele poderia gerar loops de redirect. Isso acontece porque ele em seu processo cria a configuração de redirecionamento de HTTP para HTTPS.

Instalando o Certbot para geração de certificado digital

A Let’s Encrypt utiliza a ferramenta Certbot para automatizar a geração do certificado. Logo, precisamos instalar o Certbot no Amazon Linux. A instalação fica mais fácil utilizando o Pip, o gerenciador de pacote do Python.

Para instalar o Pip, o Certbot e gerar o certificado, basta seguir o passo a passo da documentação: https://certbot.eff.org/instructions?ws=apache&os=pip

Configurando o redirecionamento de www.dominio.com para dominio.com

Essa configuração está considerando que o seu domínio utiliza https://

Zona de DNS

Criar no zona de DNS um registro CNAME apontando o www.dominio.com para dominio.com. Exemplo no Route 53 da AWS: 

Módulo Rewrite do Apache

O rewrite_module já vem habilitado no arquivo /etc/httpd/conf.modules.d/00-base.conf .
Caso não esteja, você só precisa adicionar ao arquivo 00-base.conf, a linha abaixo:

LoadModule rewrite_module modules/mod_rewrite.so

Adicionar configuração no arquivo meudominio-le-ssl.conf, dentro da seção
<VirtualHost *:443>[..]</VirtualHost> :

<Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride All
    Order Allow,Deny
    Allow from all
</Directory>

Criando o redirecionamento

Criando o arquivo .htaccess

sudo vim /var/www/html/.htaccess

Conteúdo do arquivo .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

Referências

PostgreSQL em produção

Esse tutorial busca abordar o básico do básico das configurações de um banco de dados em produção. Utilizaremos como exemplo a versão 15 do PostgreSQL e a ferramenta psql para manipular o bd.

Mudar a senha do usuário ‘postgres’

Quando o PostgreSQL é instalado, é criado o usuário ‘postgres’ sem senha. Você precisa configurar uma senha para não ser invadido.

Dica de segurança

O usuário ‘postgres’ só deve ser utilizado para configurar o SGDB, nunca utilize-o como usuário para conectar no BD de produção.

Abra o terminal e altere para  o usuário postgres

sudo su - postgres

Entrar no terminal do PostgreSQL via psql

psql -U postgres

Alterar a senha do usuário ‘postgres’

\password postgres

Será solicitado duas vezes a senha. Insira uma senha forte, com mais de 14 caracteres, misturando letras, números e caracteres especiais. Uma senha diferente desse padrão pode ser quebrada em pouco tempo utilizando força bruta.

Criando o user/role

No PostgreSQL o conceito de usuário está contido em ROLES. O comando CREATE USER na verdade é uma alias para o CREATE ROLE.

Dica de segurança

Você deve criar um usuário exclusivo para utilização da aplicação. Ele deve ter pouquíssimas permissões nesse banco.

Entrando no BD

psql -d meuBD

Criando uma role

CREATE ROLE umUsuarioNaoObvio
WITH LOGIN ENCRYPTED PASSWORD 'UmaSenhaComMaisDe14Caracteres';

Listando as roles

\du

Deletando uma role

DROP ROLE umUsuarioNaoObvio;

Dando permissões a uma rule

Utilizando o GRANT, devemos limitar o que cada usuário pode fazer. Exemplo:

GRANT SELECT, INSERT, UPDATE, DELETE ON users TO umUsuarioNaoObvio;

O usuário “umUsuarioNaoObvio” só pode executar as operações básicas de CRUD na tabela ‘users’.

Dica de segurança

Um usuário de produção não deve ter permissão de alterar ou criar estruturas no BD.

Permitindo conexão de outros hosts

Até o momento o cluster do PostgreSQL só permite conexões vindas do localhost, agora vamos permitir que conexões TCP/IP sejam aceitas. 

Abra o arquivo postgresql.conf

vim /etc/postgresql/15/main/postgresql.conf

Vamos permitir somente conexões que chegam por uma interface específica. Adicione o IP da interface de rede onde o PostgreSQL está sendo executado.

listen_addresses = '192.168.0.82'

Reinicie o serviço do PostgreSQL

service postgresql restart

Gerenciando as conexões com o PostgreSQL

No arquivo pg_hba.conf (Host-Based Authentication) é feito o gerenciamento de quem e como pode se conectar no cluster do Postgres. Na documentação há diversos exemplos de como fazer isso, mas levando em consideração que queremos o mais seguro possível, podemos usar o exemplo abaixo como ponto de partida:


Abrindo o arquivo pg_hba.conf

vim /etc/postgresql/15/main/pg_hba.conf

Configuração de exemplo

# TYPE   DATABASE  USER             ADDRESS      	METHOD
hostssl  meuBD     usuarioNaoObvio  172.85.86.101/19  scram-sha-256

TYPE = hostssl

Permite conexão via TCP/IP criptografadas com SSL/TLS

DATABASE = meuBD

Especificando qual banco pode ser acessado.

USER = usuarioNaoObvio

Especificando qual usuário pode conectar no banco.

ADDRESS = 172.85.86.101/19

Especificando qual IP pode se conectar.

METHOD = scram-sha-256

Especificando qual método de autenticação será utilizado.

Reinicie o serviço do PostgreSQL

service postgresql restart

Referências