paint-brush
Adhiérase a The Man y autohospede su propio servidor webpor@theselfhoster
1,571 lecturas
1,571 lecturas

Adhiérase a The Man y autohospede su propio servidor web

por George Papadakis13m2023/02/20
Read on Terminal Reader

Demasiado Largo; Para Leer

Correo electrónico de alojamiento propio para pequeñas y medianas empresas, propietarios de negocios, organizaciones sin fines de lucro e individuos. No hay un límite real para quién puede hospedarse por sí mismo, pero los grupos conscientes de la privacidad se beneficiarán directamente y verán resultados inmediatos. Las pequeñas y medianas empresas obtendrán un sistema en pleno funcionamiento que se adhiere a todos los protocolos de seguridad y cifrado actuales, especialmente la especificación PCI.
featured image - Adhiérase a The Man y autohospede su propio servidor web
George Papadakis HackerNoon profile picture
0-item
1-item

¿Para quién es esta guía?

El contenido web de alojamiento propio es relevante para pequeñas y medianas empresas, propietarios de negocios, organizaciones sin fines de lucro e individuos.


No hay un límite real para quién puede hospedarse por sí mismo, pero los grupos conscientes de la privacidad se beneficiarán directamente y verán resultados inmediatos. Las pequeñas y medianas empresas obtendrán un sistema en pleno funcionamiento que se adhiere a todos los protocolos de seguridad y cifrado actuales, especialmente la especificación PCI.

¿Por qué autohospedaje?

Hay un montón de razones por las que el alojamiento propio es beneficioso, estas son algunas de ellas:


  • Privacidad
  • Seguridad mejorada
  • personalización
  • Costos mas bajos

Alojamiento de correo electrónico

Este artículo trata sobre el alojamiento de servidores web. Si está interesado en el alojamiento de correo electrónico, lea el artículo sobre el alojamiento propio de su propio servidor de correo electrónico .

requisitos previos

  • Un nuevo servidor, dedicado o virtual, con acceso a internet
  • Una distribución de Linux basada en RHEL: Alma, Rocky, Oracle o Fedora Server
  • Acceso raíz

nombre de host del servidor

Asegúrese de que su servidor tenga un nombre de dominio completo (FQDN) y que el archivo /etc/hosts tenga la IP del servidor apuntando al FQDN y no al nombre corto. Este es un requisito para algunas herramientas como OpenDKIM, que no funcionará sin un FQDN.


Para probar si su FQDN está configurado correctamente, ejecute:


 # hostname -f server.example.tld


Si solo ve el nombre del servidor y no el FQDN, use el comando systemd hostnamectl para configurar su FQDN:

 # hostnamectl set-hostname server.example.tld

Paso 1 - Paquetes requeridos

El primer paso es instalar algunos paquetes básicos, use su administrador de paquetes:


dnf para versiones más nuevas de EL8/EL9:

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


mmm para EL7:

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


para Fedora, los paquetes son ligeramente diferentes:

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

Paso 2 - Instalar Aetolos

En el segundo paso, instalaremos el panel de control de alojamiento virtual de Aetolos, que solo genera archivos de configuración y no realiza ninguna otra modificación en el 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

El código de desarrollo más reciente se puede descargar desde el repositorio de git:

clon de git 'https://gitlab.com/noumenia/aetolos.git'

Paso 3: habilite los servicios

Ahora es el momento de elegir qué servicios proporcionará el servidor. Ejecute Aetolos con el parámetro de estado para tener una idea de todos los servicios disponibles:

 # ~/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 va a ser un servidor web autohospedado, vamos a habilitar los servicios que nos brindan un conjunto completo de características para el alojamiento web:


  • Apache, un servidor web para responder a las solicitudes ACME
  • Deshidratado, un script bash para certificados Let's Encrypt
  • MariaDB, la base de datos


Si tiene un servidor separado para correo electrónico con firmas DKIM, también debe habilitar OpenDKIM en este servidor. Luego comparta la clave entre los servidores para una firma adecuada.


Habilitemos estos servicios con Aetolos:

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


Ahora podemos volver a ejecutar Aetolos con el parámetro de estado para ver la siguiente tabla:

 +---------+--------------+---------+------------+--------------+ | 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 | | | | +---------+--------------+---------+------------+--------------+

Tenga en cuenta la columna SystemD que muestra la mayoría de los servicios como dead . Esto no es un problema, porque aún no hemos configurado/iniciado esos servicios.

Paso 4 - Configuración

Finalmente, podemos ejecutar la configuración de Aetolos para instalar los paquetes RPM necesarios y generar todos los archivos de configuración. Preferimos ver la salida detallada con el parámetro extra --verbose .

Notará una advertencia sobre el script deshidratado, que nos indica que especifiquemos la dirección de correo electrónico de registro para 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


Según la advertencia, agregamos una dirección de correo electrónico para Let's Encrypt:

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

Iniciar MariaDB

A diferencia de otros servicios, MariaDB debe iniciarse y funcionar para que Aetolos agregue hosts virtuales y los permisos de base de datos correspondientes. Así que habilitemos e iniciemos MariaDB:

 # systemctl --now enable mariadb


En este punto, podemos asegurar la instancia de MariaDB ejecutando:

 /usr/bin/mysql_secure_installation


Esto requiere que también cree el archivo /root/.my.cnf con los detalles de inicio de sesión para root:

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

Agregar hosts virtuales

Ahora estamos listos para agregar tantos hosts virtuales como queramos (o tantos como el servidor pueda manejar).


Antes de ejecutar cualquier comando, podemos tomarnos un segundo para pensar qué hosts virtuales tendrán un subdominio de prefijo, a veces podemos tener un dominio como ejemplo.tld con un subdominio www (www.ejemplo.tld), otras veces es posible que no queramos use un prefijo porque queremos nuestras direcciones de correo electrónico solo en el dominio superior ([email protected] y no [email protected]).


Como ejemplo, agregaremos tres hosts virtuales, dos de ellos sin subdominio:

 # ~/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


Ahora podemos enumerar todos los hosts virtuales:

 # ~/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 "vivirá" aislado dentro de su propio directorio de inicio, con su propia propiedad de usuario/grupo, así que echemos un vistazo a nuestro /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

Configuración

Después de realizar modificaciones con el comando Aetolos, necesitamos generar nuevos archivos de configuración para todos los servicios relevantes (Apache, PHP-FPM, Deshidratado, etc.). Por lo tanto, ejecutamos la configuración de Aetolos por última vez.


 # ~/aetolos/aetolos --setup

Certificados TLS

En este punto, todos los servicios utilizarán el mismo certificado autofirmado, por lo que ahora es un buen momento para ejecutar deshidratado manualmente para recopilar todos los certificados de host virtual. Dado que Aetolos usa el protocolo ACME con validación de dominio a través del puerto HTTP 80, primero iniciamos nuestro servidor Apache para atender esas solicitudes.


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

Servicios

Ahora podemos habilitar e iniciar todos los servicios.


 # 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].


Notará que cada host virtual tiene su propio servicio Apache, esta es una función proporcionada por systemd y nos permite definir los hosts virtuales en servicios systemd separados. El parámetro --now iniciará todos los servicios.

La arquitectura

Cabe hacer una mención especial a la arquitectura utilizada para el alojamiento de sitios web. Por razones de seguridad, cada host virtual está aislado dentro de las cuentas de Unix almacenadas en su propio directorio /home . El contenido web público debe almacenarse en el directorio 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

Etolos

En este punto, Aetolos ha configurado el servidor sin modificaciones personalizadas, todos los cambios se realizan en los archivos de configuración predeterminados. Podemos eliminar Aetolos del servidor y continuar con las modificaciones manualmente o podemos conservar Aetolos en caso de que queramos agregar más servidores virtuales en el futuro.

Créditos

Foto del artículo de Manuel Geissinger de pexels