miércoles, 4 de diciembre de 2024

Instalación y Configuración de un DNS Público en Debian 12

Configuración de un DNS Público en Debian 12
=====================================
Registrar un dominio público en Goddady, Namecheap  ó punto.pe.
Configura en tu proveedor de dominio los glue records apuntando a las direcciones IP de tu servidor vps
ns1 -> 158.10.11.12
ns2 -> 158.10.11.12
Agregar los nameservers personalizados
Nameserver 1:   ns1.tudominio.com
Nameserver 2:   ns2.tudominio.com 

Actualizar repositorios de Debian
sudo apt update
sudo apt upgrade

Acceder al servidor con el usuario root
Crear el usuario y agregarlo al grupo SUDO
sudo adduser jperez
sudo usermod -aG sudo jperez

Verificar si el usuario pertenece al grupo sudo
groups jperez
exit

Ingresar con el nuevo usuario:
ssh jperez@158.10.11.12

Configuración de SSH
Configurar SSH para Deshabilitar Root:
sudo vim /etc/ssh/sshd_config
:33     PermitRootLogin no
:124   AllowUsers jperez  -> añadir al final del archivo

Reiniciar el Servicio SSH
sudo systemctl restart sshd

Instalar UFW:
sudo apt install ufw

Habilitar UFW:
sudo ufw enable

Habilitar el servicio ssh
sudo ufw allow ssh
sudo systemctl status ssh

Configurar Nombre de Host
Cambiar el hostname del servidor vps
$> sudo hostnamectl set-hostname webserver.midominio.dev
$> exit
Volver a loguearse
$> hostnamectl

Configurar la ip del host, agregar la ip interna del vps
sudo vim /etc/hosts
127.0.0.1     localhost.localdomain localhost
192.168.2.5    webserver.dominio.dev webserver

Instalación de DNS Server Interno Bind
sudo apt install bind9 bind9utils dnsutils

Configurar Bind
sudo vim /etc/bind/named.conf.options
-----------------------------------------------------------------------------------------------------------------------------
options {
        listen-on port 53 { ip_publica; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/cache/bind";
        dump-file       "/var/cache/bind/cache_dump.db";
        statistics-file "/var/cache/bind/named_stats.txt";
        memstatistics-file "/var/cache/bind/named_mem_stats.txt";
        allow-query     { localhost;any; };
        forwarders   { 8.8.8.8;1.1.1.1; };
        forward first;
        allow-transfer   { "none"; };
        recursion           no;
        dnssec-validation no;
};
-----------------------------------------------------------------------------------------------------------------------------
Configurar archivo de Zona Directa
Editar el archivo /etc/bind/named.conf.local para definir las zonas:
sudo vim /etc/bind/named.conf.local
-----------------------------------------------------------------------------------------------------------------------------
zone "midominio.dev" {
    type master;
    file "/etc/bind/zones/db.midominio.dev";
    allow-update { none; };
};
-----------------------------------------------------------------------------------------------------------------------------
Crear el directorio donde estarán alojados los archivos de zona
sudo mkdir /etc/bind/zones

Crear el archivo de zona
sudo touch /etc/bind/zones/db.midominio.dev

Configurar los permisos:
sudo chown -R bind:bind /etc/bind/zones
sudo chmod -R 750 /etc/bind/zones
sudo ls -l /etc/bind/zones

Configurar el Archivo de Zona Directa
sudo vim /etc/bind/zones/db.midominio.dev
----------------------------------------------------------------------------------------------------------------------------
$TTL 86400 @ IN SOA @ root ( 2024010101 ; serial 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum dominio.dev. IN NS ns1.dominio.dev.
dominio.dev. IN NS ns2.dominio.dev.
dominio.dev. IN A 158.10.11.12 ns1 IN A 158.10.11.12
ns2 IN A 158.10.11.12 www IN A 158.10.11.12
----------------------------------------------------------------------------------------------------------------------------
Verificar la configuración de BIND:
sudo named-checkconf

Configurar DNS de tarjeta de red:
sudo vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 1.1.1.1

Reiniciar los servicios:
sudo systemctl enable named
sudo systemctl restart named
sudo systemctl status named

Habilitar el servicio DNS
sudo ufw allow dns
sudo ufw status
sudo ss -tuln | grep ":53"

Comprobar el DNS público
dig NS midominio.dev

Configurar el PTR en el proveedor del VPS

Probar la resolución inversa:
dig -x 158.10.11.12

Comprobar el estado de propagación del DNS
https://www.whatsmydns.net/
Ingresar el dominio y el tipo de registro:
midominio.dev      NS











Instalar NGINX y MySQL Community Server en Debian 12

Instalar NGINX y MySQL Community Server en Debian 12
=============================================
Actualizar repositorios de Debian
sudo apt update
sudo apt upgrade

Configurar zona horaria de servidor
sudo timedatectl set-timezone America/Lima
timedatectl
-----------------------------------------------------------------------------------------------------------------------------
Instalar Mysql Community Server
Descargar e instalar el paquete de repositorios de MySQL:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
sudo apt update

Instalar MySQL
sudo apt install mysql-server

Verificar la instalación:
mysql --version

Habilitar MySQL
sudo systemctl enable mysql
sudo systemctl status mysql

Habilitar firewall para MySQL
sudo ufw allow mysql
sudo ufw status

Acceder a MySQL como root:
sudo mysql -u root -p

Cambiar Contraseña de root y Crear nuevo usuario 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> CREATE USER 'usuario'@'ipPublicaHome' IDENTIFIED BY '654321';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'ipPublicaHome';
mysql> FLUSH PRIVILEGES;
mysql> exit

Asegurar la instalación de MySQL
sudo mysql_secure_installation

Enter password for user root: 123456
Validate Password: No
Change the password for root? [Y/n]  No
Do you wish to continue with the password provided? Y
Remove anonymous users? [Y/n]   Y
Disallow root login remotely? [Y/n]  Y
Remove test database and access to it? [Y/n]  Y
Reload privilege tables now? [Y/n]   Y

Eliminar el archivo de instalación de MySQL
rm mysql-apt-config_0.8.33-1_all.deb
-----------------------------------------------------------------------------------------------------------------------------
Instalar Nginx
sudo apt install nginx -y

Habilitar el servicio Nginx
sudo systemctl enable nginx
sudo systemctl status nginx

Agregar el usuario jperez al grupo www-data
sudo usermod -aG www-data jperez

Verificar si el usuario pertenece al grupo
groups jperez
exit
Volver a loguearse

Crear un Directorio para el dominio principal:
Crea el directorio donde estarán alojados los archivos del dominio:
sudo mkdir -p /var/www/dominio.dev

Configurar una página de prueba
Crear un archivo HTML de prueba en el directorio raíz de Nginx:
echo '<h1>¡Bienvenido a midominio.dev!</h1>' | sudo tee /var/www/dominio.dev/index.html

Configurar los permisos
sudo chown -R www-data:www-data /var/www/dominio.dev
sudo chmod -R 770 /var/www/dominio.dev
sudo ls -l /var/www/dominio.dev

Crear un archivo de configuración para el dominio principal
sudo vim /etc/nginx/sites-available/dominio.dev.conf
----------------------------------------------------------------------------------------
server {
        listen 80;
        listen [::]:80;

        root /var/www/dominio.dev;

        index index.html index.htm;

        server_name dominio.dev www.dominio.dev;

        location / {
                try_files $uri $uri/ =404;
        }
}
----------------------------------------------------------------------------------------
Crear un Enlace Simbólico para habilitar la configuración del dominio:
sudo ln -s /etc/nginx/sites-available/dominio.dev.conf /etc/nginx/sites-enabled/

Eliminar el archivo de configuración predeterminado de Nginx
sudo rm -r /etc/nginx/sites-enabled/default
sudo rm -r /var/www/html

Verificar la configuración de Nginx:
sudo nginx -t

Reiniciar Nginx
sudo systemctl reload nginx

Habilitar Firewall para Nginx
sudo ufw allow 'Nginx Full'

Verificar si el servidor responde correctamente con curl
curl -I http://dominio.dev

Instalar Certificado Digital de Let's Encrypt
===================================
Instalar Certbot y el Plugin de Nginx:
sudo apt install certbot python3-certbot-nginx

Generar el certificado para el dominio:
sudo certbot --nginx -d midominio.dev -d www.midominio.dev

Verificar la Renovación Automática:
sudo systemctl status certbot.timer

Acceder a la página de prueba
https://dominio.dev

Eliminar el Archivo de Prueba Después de Usarlo
sudo rm -r /var/www/dominio.dev/index.html
-----------------------------------------------------------------------------------------------------------------------------
Instalar PHP y los Módulos Necesarios
sudo apt install php-fpm php-cli php-mbstring php-xml php-curl php-mysql -y

Verificar la versión de php
php --version

Copiar los archivos del proyecto al servidor Web:
Ejecutar la terminal como Administrador:
scp -r $HOME/Desktop/Carpeta/* jperez@158.10.11.12:/var/www/dominio.dev

Configurar los permisos
sudo chown -R www-data:www-data /var/www/dominio.dev
sudo chmod -R 770 /var/www/dominio.dev
sudo ls -l /var/www/dominio.dev

Configurar Nginx para Procesar Archivos PHP
Abrir y editar el archivo:
sudo vim /etc/nginx/sites-available/dominio.dev.conf
------------------------------------------------------------------------------------------
server {
        root /var/www/dominio.dev;

        index index.php index.html index.htm;

        server_name dominio.dev www.dominio.dev;

        location / {
                try_files $uri $uri/ =404;
        }

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.X-fpm.sock;
}

location ~ /\.ht {
deny all;
}

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/dominio.dev/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/dominio.dev/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = www.dominio.dev) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = dominio.dev) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        listen 80;
        listen [::]:80;

        server_name dominio.dev www.dominio.dev;
    return 404; # managed by Certbot
}
------------------------------------------------------------------------------------------
Verificar que la configuración de Nginx sea correcta:
sudo nginx -t

Reiniciar los Servicios
sudo systemctl reload nginx
sudo systemctl restart php8.X-fpm

Acceder a la Página de Prueba
https://dominio.dev/info.php

Eliminar el Archivo de Prueba Después de Usarlo
sudo rm -r /var/www/dominio.dev/*
-----------------------------------------------------------------------------------------------------------------------------
Configurar subdominios en Nginx
Configurar el DNS
En el servidor de DNS, crear un registro A para el subdominio y que apunte a la dirección IP pública de tu servidor.

Crear el Directorio de Raíz para el Subdominio:
Crea el directorio donde estarán los archivos del subdominio:
sudo mkdir -p /var/www/blog.dominio.dev

Copiar los archivos del proyecto al servidor Web en la carpeta blog
Ejecutar la terminal como Administrador
scp -r $HOME/Desktop/Carpeta/* jperez@158.10.11.12:/var/www/blog.dominio.dev

Configurar los permisos
sudo chown -R www-data:www-data /var/www/blog.dominio.dev
sudo chmod -R 770 /var/www/blog.dominio.dev
sudo ls -l /var/www/blog.dominio.dev

Crear el Archivo de Configuración para el Subdominio:
sudo vim /etc/nginx/sites-available/blog.dominio.dev.conf
-------------------------------------------------------------------------------------------
server {
        listen 80;
        listen [::]:80;

        root /var/www/blog.dominio.dev;

        index index.php index.html index.htm;

        server_name blog.dominio.dev;

        location / {
                try_files $uri $uri/ =404;
        }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.X-fpm.sock;
}

location ~ /\.ht {
deny all;
}
}
----------------------------------------------------------------------------------------
Crear un Enlace Simbólico para habilitar la configuración del subdominio:
sudo ln -s /etc/nginx/sites-available/blog.dominio.dev.conf /etc/nginx/sites-enabled/

Probar la Configuración de Nginx:
sudo nginx -t

Reiniciar los Servicios
sudo systemctl reload nginx
sudo systemctl restart php8.X-fpm

Agregar el Certificado para el Subdominio:
sudo certbot --nginx -d blog.dominio.dev

Verificar el Certificado SSL:
curl -I https://blog.dominio.dev

Acceder al Subdominio:
https://blog.dominio.dev
-----------------------------------------------------------------------------------------------------------------------------



Instalación y Configuración de un DNS Público en Debian 12

Configuración de un DNS Público en Debian 12 ===================================== Registrar un dominio público en Goddady, Namecheap  ó pun...