paint-brush
Atenha-se ao homem e auto-hospede seu próprio servidor da Webpor@theselfhoster
1,571 leituras
1,571 leituras

Atenha-se ao homem e auto-hospede seu próprio servidor da Web

por George Papadakis13m2023/02/20
Read on Terminal Reader

Muito longo; Para ler

E-mail auto-hospedado para pequenas e médias empresas, empresários, organizações sem fins lucrativos e indivíduos. Não há limite real para quem pode se auto-hospedar, mas grupos preocupados com a privacidade se beneficiarão diretamente e verão resultados imediatos. As pequenas e médias empresas obterão um sistema totalmente funcional que adere a todos os protocolos atuais de criptografia e segurança, especialmente a especificação PCI.
featured image - Atenha-se ao homem e auto-hospede seu próprio servidor da Web
George Papadakis HackerNoon profile picture
0-item
1-item

Para quem é este guia?

O conteúdo da web de auto-hospedagem é relevante para pequenas e médias empresas, proprietários de empresas, organizações sem fins lucrativos e indivíduos.


Não há limite real para quem pode se auto-hospedar, mas grupos preocupados com a privacidade se beneficiarão diretamente e verão resultados imediatos. As pequenas e médias empresas obterão um sistema totalmente funcional que adere a todos os protocolos atuais de criptografia e segurança, especialmente a especificação PCI.

Por que auto-hospedagem?

Existem inúmeras razões pelas quais a auto-hospedagem é benéfica, aqui estão algumas delas:


  • Privacidade
  • Segurança melhorada
  • Costumização
  • Custos mais baixos

Hospedagem de e-mail

Este artigo é sobre hospedagem de servidor web, se você estiver interessado em hospedagem de e-mail, leia o artigo sobre como hospedar seu próprio servidor de e-mail .

Pré-requisitos

  • Um novo servidor, dedicado ou virtual, com acesso à internet
  • Uma distribuição Linux baseada em RHEL: Alma, Rocky, Oracle ou Fedora Server
  • Acesso raiz

Nome do host do servidor

Certifique-se de que seu servidor tenha um nome de domínio totalmente qualificado (FQDN) e que o arquivo /etc/hosts tenha o IP do servidor apontado para o FQDN e não para o nome abreviado. Este é um requisito para algumas ferramentas como o OpenDKIM, que não funcionará sem um FQDN.


Para testar se o seu FQDN está configurado corretamente, execute:


 # hostname -f server.example.tld


Se você vir apenas o nome do servidor e não o FQDN, use o comando systemd hostnamectl para definir seu FQDN:

 # hostnamectl set-hostname server.example.tld

Etapa 1 - Pacotes necessários

O primeiro passo é instalar alguns pacotes básicos, use seu gerenciador de pacotes:


dnf para versões mais recentes de EL8/EL9:

 # dnf install php php-cli php-pdo php-mbstring epel-release unzip wget


yum para EL7:

 # yum install php php-cli php-pdo php-mbstring epel-release unzip wget


para o Fedora, os pacotes são um pouco diferentes:

 # dnf install php php-cli php-pdo php-mbstring unzip wget

Passo 2 - Instale o Aetolos

Na segunda etapa instalaremos o painel de controle da hospedagem virtual Aetolos, que apenas gera arquivos de configuração e não faz nenhuma outra modificação no sistema:


 # wget -O /root/master.zip 'https://gitlab.com/noumenia/aetolos/-/archive/master/aetolos-master.zip' # unzip /root/master.zip -d /root/ # mv /root/aetolos-master /root/aetolos # rm -rf /root/master.zip

O código de desenvolvimento mais recente pode ser baixado do repositório git:

git clone 'https://gitlab.com/noumenia/aetolos.git'

Etapa 3 - Habilitar serviços

Agora é hora de escolher quais serviços o servidor fornecerá. Execute o Aetolos com o parâmetro status para ter uma ideia de todos os serviços disponíveis:

 # ~/aetolos/aetolos --status +---------+--------------+---------+------------+--------------+ | Enabled | Module | SystemD | Repository | Dependencies | +---------+--------------+---------+------------+--------------+ | [ ] | apache | | | | | [ ] | clamav | | epel | postfix | | [ ] | dehydrated | | | | | [ ] | dovecot | | | | | [ ] | haproxy | | | | | [ ] | mariadb | | | | | [ ] | mtasts | | | apache | | [ ] | nsd | | epel | | | [ ] | opendkim | | epel | postfix | | [ ] | opendmarc | | epel | postfix | | [✓] | php | | | | | [ ] | postfix | | | | | [ ] | postgrey | | epel | postfix | | [ ] | spamassassin | | | postfix | | [✓] | virtualhost | | | | +---------+--------------+---------+------------+--------------+

Como este será um servidor web auto-hospedado, vamos habilitar os serviços que nos fornecem um conjunto completo de recursos para hospedagem na web:


  • Apache, um servidor web para responder a solicitações ACME
  • Desidratado, um script bash para certificados Let's Encrypt
  • MariaDB, o banco de dados


Se você tiver um servidor separado para e-mail com assinaturas DKIM, também deverá ativar o OpenDKIM neste servidor. Em seguida, compartilhe a chave entre os servidores para assinatura adequada.


Vamos habilitar esses serviços com Aetolos:

 # ~/aetolos/aetolos --enable=apache # ~/aetolos/aetolos --enable=dehydrated # ~/aetolos/aetolos --enable=mariadb


Agora podemos executar novamente o Aetolos com o parâmetro de status para ver a seguinte tabela:

 +---------+--------------+---------+------------+--------------+ | Enabled | Module | SystemD | Repository | Dependencies | +---------+--------------+---------+------------+--------------+ | [✓] | apache | dead | | | | [ ] | clamav | | epel | postfix | | [✓] | dehydrated | | | | | [ ] | dovecot | | | | | [ ] | haproxy | | | | | [✓] | mariadb | dead | | | | [ ] | mtasts | | | apache | | [ ] | nsd | | epel | | | [ ] | opendkim | | epel | postfix | | [ ] | opendmarc | | epel | postfix | | [✓] | php | dead | | | | [ ] | postfix | | | | | [ ] | postgrey | | epel | postfix | | [ ] | spamassassin | | | postfix | | [✓] | virtualhost | | | | +---------+--------------+---------+------------+--------------+

Observe a coluna SystemD que mostra a maioria dos serviços como dead . Isso não é um problema, porque ainda não configuramos/iniciamos esses serviços.

Passo 4 - Configuração

Por fim, podemos executar a instalação do Aetolos para instalar os pacotes RPM necessários e gerar todos os arquivos de configuração. Preferimos ver a saída detalhada com o parâmetro --verbose extra.

Você notará um aviso sobre o script desidratado, que nos diz para especificar o endereço de e-mail de registro para o Let's Encrypt


 # ~/aetolos/aetolos --verbose --setup [DEBUG] Check running system [DEBUG] Detected: AlmaLinux 8.7 (Stone Smilodon) [DEBUG] Check system memory [DEBUG] Detected: 460MiB [DEBUG] Check CPU cores [DEBUG] Detected: 2 [DEBUG] Check proxy [DEBUG] Loading Aetolos configuration [DEBUG] Starting operating system setup [DEBUG] Checking repository dependencies [DEBUG] Checking package dependencies [DEBUG] Installing package: php-fpm [DEBUG] Checking SELinux requirements [DEBUG] SELinux: enable httpd_can_network_connect [DEBUG] SELinux: enable httpd_can_sendmail [DEBUG] SELinux: enable httpd_read_user_content [DEBUG] SELinux: enable httpd_enable_homedirs [DEBUG] SELinux: enable httpd_home_tmp_aetolos.pp [DEBUG] Checking certificate requirements [DEBUG] Generating a self-signed certificate [DEBUG] Certificate: /etc/pki/tls/certs/localhost.crt [DEBUG] Fullchain: /etc/pki/tls/certs/localhost.fullchain [DEBUG] Key: /etc/pki/tls/private/localhost.key [DEBUG] Checking ACME client [DEBUG] Downloading ACME client: dehydrated 0.7.1 [DEBUG] Installing ACME client under: /root/dehydrated/ [WARNING] ACME registration email set to: postmaster [WARNING] Please change the ACME registration email by executing: '/root/aetolos/aetolos --verbose --module=dehydrated --registration-email=new-email' [DEBUG] Checking module dependencies [DEBUG] Save configuration: apache [DEBUG] Writing to file: /etc/httpd/conf/httpd.conf [DEBUG] Writing to file: /etc/httpd/conf.d/ssl.conf [DEBUG] Writing to file: /etc/sysconfig/htcacheclean [INFO] System memory: 460MB [INFO] Allocate 50% of system memory to MariaDB: 230MB [INFO] 70% of the above usage goes to total thread memory: 161MB [INFO] The rest 30% goes to server buffers: 69MB [INFO] MariaDB memory per connection: 18MB [INFO] MariaDB max connections: 10 [INFO] MariaDB temporary table size: 16MB [INFO] MariaDB query cache: 16MB [INFO] Allocate 40% of system memory to Apache/PHP-FPM: 184MB [INFO] Estimated average number of connections per CPU core: 9 [INFO] Apache StartServers: 1 [INFO] Apache ServerLimit: 2 [INFO] Apache ThreadsPerChild: 18 [INFO] Apache MinSpareThreads: 18 [INFO] Apache ThreadLimit: 22 [INFO] Apache MaxRequestWorkers: 36 [INFO] Apache maximum number of concurrent connections: 108 [DEBUG] Writing to file: /etc/logrotate.d/httpd [DEBUG] Save configuration: dehydrated [DEBUG] Writing to file: /root/dehydrated/config [DEBUG] Writing to file: /root/dehydrated/hook.sh [DEBUG] Writing to file: /etc/pki/letsencrypt/domains.txt [DEBUG] Writing to file: /etc/cron.daily/dehydrated.cron [DEBUG] Save configuration: mariadb [DEBUG] Writing to file: /etc/systemd/system/mariadb.service.d/limitnofile.conf [DEBUG] Writing to file: /etc/my.cnf.d/mariadb-server.cnf [DEBUG] Save configuration: php [DEBUG] Writing to file: /etc/php.ini [DEBUG] Writing to file: /etc/php.d/10-opcache.ini [DEBUG] Save configuration: virtualhost [DEBUG] Writing to file: /etc/tmpfiles.d/hometmp.conf [DEBUG] Reloading systemd


De acordo com o aviso, adicionamos um endereço de e-mail para Let's Encrypt:

 # ~/aetolos/aetolos --verbose --module=dehydrated [email protected]

Iniciar MariaDB

Ao contrário de outros serviços, o MariaDB precisa estar iniciado e funcionando, para que o Aetolos adicione hosts virtuais e as permissões de banco de dados correspondentes. Então vamos habilitar e iniciar o MariaDB:

 # systemctl --now enable mariadb


Neste ponto, podemos proteger a instância do MariaDB executando:

 /usr/bin/mysql_secure_installation


Isso requer que você também crie o arquivo /root/.my.cnf com os detalhes de login para root:

 [client] default-character-set="utf8mb4" user="root" password='the_password_set_in_the_previous_step'

Adicionar hosts virtuais

Agora estamos prontos para adicionar quantos hosts virtuais quisermos (ou quantos o servidor puder suportar).


Antes de executar qualquer comando, podemos levar um segundo para pensar quais hosts virtuais terão um subdomínio de prefixo, às vezes podemos ter um domínio como exemplo.tld com um subdomínio www (www.example.tld), outras vezes podemos não querer use um prefixo porque queremos nossos endereços de e-mail apenas no domínio superior ([email protected] e não [email protected]).


Como exemplo, adicionaremos três hosts virtuais, dois deles sem subdomínio:

 # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example1.tld --no-prefix [DEBUG] Verify domain: example1.tld [DEBUG] Add virtual host: example1.tld # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example2.tld --no-prefix [DEBUG] Verify domain: example2.tld [DEBUG] Add virtual host: example2.tld # ~/aetolos/aetolos --verbose --module=virtualhost --add-virtualhost=example3.tld [DEBUG] Verify domain: example3.tld [DEBUG] Add virtual host: example3.tld


Agora podemos listar todos os hosts virtuais:

 # ~/aetolos/aetolos --module=virtualhost --list-virtualhosts +----+---------------------+--------------+-------------+----------------+--------+--------------+ | ID | Timestamp | Virtual host | System user | MariaDB prefix | Parked | Prefix alias | +----+---------------------+--------------+-------------+----------------+--------+--------------+ | 1 | 2023-01-10 08:51:36 | example1.tld | example1tld | example1 | [ ] | | | 2 | 2023-01-10 08:51:40 | example2.tld | example2tld | example2 | [ ] | | | 3 | 2023-01-10 08:51:45 | example3.tld | example3tld | example3 | [ ] | www | +----+---------------------+--------------+-------------+----------------+--------+--------------+


Cada host virtual “viverá” isolado dentro de seu próprio diretório pessoal, com sua própria propriedade de usuário/grupo, então vamos dar uma olhada em nosso /home:

 # ls -la /home total 0 drwxr-xr-x. 5 root root 63 Jan 20 10:51 . dr-xr-xr-x. 17 root root 224 Dec 21 2021 .. drwx--x--x. 8 example1tld example1tld 159 Jan 10 08:51 example1tld drwx--x--x. 8 example2tld example2tld 159 Jan 10 08:51 example2tld drwx--x--x. 8 example3tld example3tld 159 Jan 10 08:51 example3tld

Configurar

Depois de feitas as modificações com o comando Aetolos, precisamos gerar novos arquivos de configuração para todos os serviços relevantes (Apache, PHP-FPM, Dehydrated, etc). Assim, executamos a configuração do Aetolos uma última vez.


 # ~/aetolos/aetolos --setup

certificados TLS

Neste ponto, todos os serviços usarão o mesmo certificado autoassinado, portanto, agora é um bom momento para executar desidratado manualmente para reunir todos os certificados de host virtual. Como a Aetolos usa o protocolo ACME com validação de domínio via porta HTTP 80, primeiro iniciamos nosso servidor Apache para atender a essas solicitações.


 # systemctl start httpd # ~/dehydrated/dehydrated --cron --config /root/dehydrated/config --keep-going # systemctl stop httpd # ~/aetolos/aetolos --setup

Serviços

Agora podemos habilitar e iniciar todos os serviços.


 # systemctl --now enable httpd [email protected] [email protected] [email protected] mariadb php-fpm Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected]. Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected]. Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /usr/lib/systemd/system/[email protected].


Você notará que cada host virtual tem seu próprio serviço Apache, este é um recurso fornecido pelo systemd e nos permite definir os hosts virtuais em serviços systemd separados. O parâmetro --now iniciará todos os serviços.

A arquitetura

Deve haver menção especial sobre a arquitetura usada para hospedar sites. Por motivos de segurança, cada host virtual é isolado em contas unix armazenadas em seu próprio diretório /home . O conteúdo da Web público deve ser armazenado no diretório public_html .


 /home/example1tld -> virtual host home /home/example1tld/etc -> email accounts /home/example1tld/mail -> email storage /home/example1tld/public_html -> web content /home/example1tld/www -> symbolic link to public_html /home/example1tld/tmp -> temp directory

Aetolos

Neste ponto, a Aetolos configurou o servidor sem nenhuma modificação personalizada, todas as alterações são feitas nos arquivos de configuração padrão. Podemos excluir o Aetolos do servidor e continuar as modificações manualmente ou podemos manter o Aetolos caso desejemos adicionar mais hosts virtuais no futuro.

Créditos

Foto do artigo por Manuel Geissinger de pexels