MANUAL TECNICO
PROYECTO 1: IMPLEMENTACIÓN DE UNA INFRAESTRUCTURA DE COMERCIO ELECTRÓNICO
KEVIN GUSTAVO CRUZ SOTOJ 7690-10-144
FRANCISCO ELISEO BACK SAMOL 7690-18-6402
ELVIS BENJAMIN MARROQUIN 7690-17-6844
CHRISTIAN PEDRO ANDRES CELIDON 7690-19-24605
MARVIN FERNANDO H. VENTURA IXCHOP 7690-16-17571
UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA
FACULTAD DE INGENIERIA EN SISTEMAS
ADMINISTRACIÓN DE TECNOLOGIAS DE LA INFORMACION
GUATEMALA, MARZO 2023
Contenido
INTRODUCCION............................................................................................................................................. 3
1. REQUERIMIENTOS TÉCNICOS................................................................................................................ 4
2. HERRAMIENTAS UTILIZADAS PARA EL DESARROLLO ............................................................................ 5
3. INSTALACION Y CONFIGURACION DE OPENVPN 2.6.1 ......................................................................... 6
3.1 INSTALACIÓN DE LOS SERVICIOS DE OPENVPN .................................................................................. 6
3.2 CONFIGURACIÓN DEL [Link] ................................................................................................... 8
4. INSTALACION Y CONFIGURACION DE VIRTUAL BOX Y UBUNTU OS ................................................... 11
5. INSTALACION Y CONFIGURACION DE VIRTUAL BOX Y UBUNTU OS ................................................... 13
INTRODUCCION
Este manual describe los pasos necesarios para cualquier persona que tenga ciertas bases de sistemas
realizar la ejecución del aplicativo creado para la implementación de una infraestructura de comercio
electrónico. Es importante tener en cuenta que en el presente manual se hace mención a las
especificaciones mínimas de hardware y software para la correcta instalación y ejecución del aplicativo.
1. REQUERIMIENTOS TÉCNICOS.
REQUERIMIENTOS MÍNIMOS DE HARDWARE
✓ Procesador: Procesador de doble núcleo de 2 GHz
✓ Memoria RAM: Mínimo: 4 GB
✓ Disco Duro: 25GB.
✓ Memoria de video: 128 MB a la máquina virtual Ubuntu
REQUERIMIENTOS MÍNIMOS DE SOFTWARE
✓ Privilegios de administrador
✓ Sistema Operativo Windows 11 64 bits
✓ Sistema Operativo Ubuntu 22.04
✓ VirtualBox 7.0.6 Software Developer Kit (SDK)
2. HERRAMIENTAS UTILIZADAS PARA EL DESARROLLO
1.1 PHP
Es un Lenguaje de Programación para trabajar páginas WEB ofreciendo la ventaja de
mezclarse con HTML. Las ejecuciones son realizadas en el Servidor y el cliente es el encargado
de recibir los resultados de la ejecución. Si el cliente realiza una petición, se ejecuta el
intérprete de PHP y se genera el contenido de manera dinámica. Permite conexión con varios
tipos de Bases de Datos como: MySQL, Oracle, Postgress, SQL Server, etc. permitiendo
aplicaciones robustas sobre la WEB.
1.2 MYSQL
Es un manejador de Bases de Datos, el cual permite múltiples hilos y múltiples usuarios, fue
desarrollado como software libre. Aunque se puede usar sobre varias plataformas es muy
utilizado sobre LINUX. Es libre para uso en Servidores WEB. Ofrece ventajas tales como fácil
adaptación a diferentes entornos de desarrollo, Interacción con Lenguajes de Programación
como PHP y Java Script.
1.3 APACHE
Es un Servidor WEB desarrollado por el grupo Apache. Su código fuente se puede distribuir y
utilizar de forma libre. Está disponible para diferentes plataformas de Sistemas Operativos
entre otros Windows, Linux, Mac y NetWare. Ofrece ventajas tales como independencia de
plataforma, haciendo posible el cambio de plataforma en cualquier momento; creación de
contenidos dinámicos, permitiendo crear sitios mediante lenguajes PHP.
3. INSTALACION Y CONFIGURACION DE OPENVPN 2.6.1
Descargar al pc el fichero de instalación Windows 64-bit MSI installer y ejecutarlo en modo
administrador, posteriormente hacer clic en el botón Install Now
Figura No 1- OpenVPN Instalación 1
3.1 INSTALACIÓN DE LOS SERVICIOS DE OPENVPN
Ejecutamos el siguiente comando
sudo apt install openvpn easy-rsa -y
Copiamos la carpeta easy-rsa a openvpn
sudo cp -r /usr/share/easy-rsa/ /etc/openvpn/
Ingresamos a openvpn
cd /etc/openvpn/easy-rsa/
Iniciamos el Scrip easy
sudo ./easyrsa init-pki
Nos devolverá la siguiente respuesta:
Iniciamos el script para build
sudo ./easyrsa build-ca
Contraseña para los administradores para crear los certificados
ServidorVpn
Nombre del servidor
Server-vpn-fb
Generar el certificador
./easyrsa gen-req Server-vpnfb nopass
En donde se crea las claves certificadoras, vamos a proceder a certificar nuestras llaves con el siguiente
comando:
./easyrsa sign-req server Server-vpnfb
Nos pregunta la contraseña del certificador
Contraseña para los administradores para crear los certificados
ServidorVpn
Ingresar la contraseña de forma manual
Copiamos los certificados a la carpeta de openvpn
cp /etc/openvpn/easy-rsa/pki/issued/[Link] /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/private/[Link] /etc/openvpn/server/
cp /etc/openvpn/easy-rsa/pki/[Link] /etc/openvpn/server/
Podemos listar todos los archivos de esta carpeta
Ls –l /etc/openvpn/server/
Creamos una nueva clave de seguridad
Ingresamos a
cd /etc/openvpn/server/
Ejecutamos el siguiente comando
openvpn --genkey secret [Link]
Y se genera un cable llamado [Link]
Después de tener ya las generadas las claves de nuestro servidor llego el momento de generar las claves
para nuestros usuarios
Creamos una carpeta el open vpn client para almacenar los certificados
mkdir /etc/openvpn/client/keys
En esta carpeta pondremos todos los certificados y vamos a quitar los privilegios del directorio client
chmod -R 700 /etc/openvpn/client/
Luego de este paso volvemos a la carpeta easy-rsa para crear los requerimientos del cliente
cd /etc/openvpn/easy-rsa/
Generamos la claves o llaves para nuestros clientes
./easyrsa gen-req Cliente1-Servervpnfb nopass
Ahora procedemos a certificar la clave publica
./easyrsa sign-req client Cliente1-Servervpnfb
Lo último es copiar todas las claves certificadas a la carpeta de keys de clientes
cp /etc/openvpn/easy-rsa/pki/issued/[Link] /etc/openvpn/client/keys/
cp /etc/openvpn/easy-rsa/pki/private/[Link] /etc/openvpn/client/keys/
cp /etc/openvpn/easy-rsa/pki/[Link] /etc/openvpn/client/keys/
cp /etc/openvpn/server/[Link] /etc/openvpn/client/keys/
Con el siguiente comando podemos listar los archivos dentro de nuestra carpeta Keys
Ls –l /etc/openvpn/client/keys
Listo todos los archivos vamos a configurar el servidor copiamos el archivo de ejemplo a nuestro server
cp /usr/share/doc/openvpn/examples/sample-config-files/[Link] /etc/openvpn/server/
Luego vamos a esta copia y editamos el documento
Nano [Link]
3.2 CONFIGURACIÓN DEL [Link]
Los copiamos de la carpeta de ejemplo a la carpeta de client
cp /usr/share/doc/openvpn/examples/sample-config-files/[Link] /etc/openvpn/client/
Vamos a la configuración de nuestro servicio de internet y abrimos el puerto 1194
Configuramos el fichero
nano /etc/[Link]
Permitir el desvío de fichero entre interfaces
echo 1 > /proc/sys/net/ipv4/ip_forward
Añadimos las reglas al cortafuego
iptables -t nat -I POSTROUTING 1 -s [Link]/24 -o eth0 -j MASQUERADE
iptables -I INPUT 1 -i tun0 -j ACCEPT
iptables -I FORWARD 1 -i eth0 -o tun0 -j ACCEPT
iptables -I INPUT 1 -i eth0 -p udp --dport 1194 -j ACCEPT
Para ver las reglas del cortafuego
Iptables –L –nv
Para ver las reglas del NAT
Iptables –t nat –L –nv
Para guardar las reglas instalamos iptables persistent
apt install iptables-persistent -y
Para guardar los cambios
netfilter-persistent save
Configuramos openvpn para iniciar el servidor
systemctl -f enable openvpn-server@[Link]
Nos da el mensaje de confirmación
Created symlink /etc/systemd/system/[Link]/openvpn-server@[Link] →
/lib/systemd/system/
[email protected].
Iniciamos el servicio
service openvpn-server@server start
Verificamos el estado
service openvpn-server@server status
Creamos el archivo .ovpn
cp /etc/openvpn/client/[Link] /etc/openvpn/client/[Link]
Y creamos un script, también crearemos una carpera para tener los ficheros
Mkdir files
Creamos un script llamado [Link]
#!/bin/bash
# First argument: Client indetifier
KEY_DIR=/etc/openvpn/client/keys
OUTPUT_DIR=/etc/openvpn/client/files
BASE_CONFIG=/etc/openvpn/client/[Link]
cat ${BASE_CONFIG}\
<(echo -e '<ca>')\
${KEY_DIR}/[Link]\
<(echo -e '</ca>\n<cert>')\
${KEY_DIR}/${1}.crt\
<(echo -e '</cert>\n<key>')\
${KEY_DIR}/${1}.key\
<(echo -e '</key>\n<tls-crypt>')\
${KEY_DIR}/[Link]\
<(echo -e '</tls-crypt>')\
> ${OUTPUT_DIR}/${1}.ovpn
Le damos permiso de ejecución
chmod 700 /etc/openvpn/client/make_config.sh
Ejecutamos make
./make_config.sh Cliente1-Servervpnfb
Luego lo copiamos a cualquier carpeta y le quitamos sus privilegios para poder copiarlos
chmod 444 [Link]
chown Servervpn:Servervpn [Link]
Para conectar en Debian o Linux necesitamos el siguiente script
4. INSTALACION Y CONFIGURACION DE VIRTUAL BOX Y UBUNTU OS
Primero, nos dirigimos a la página de VirtualBox y descargamos la versión más reciente:
Después, procedemos con la instalación en nuestro ordenador
Descargamos nuestro sistema operativo con el que trabajaremos, en este caso Ubuntu, este ISO se
puede descargar en la página oficial de Ubuntu
Realizamos la instalación en nuestra máquina virtual y lo ejecutamos
Confirmamos que todo esté en orden y listo, ya tenemos la máquina virtual con Ubuntu instalada
5. INSTALACION Y CONFIGURACION DE VIRTUAL BOX Y UBUNTU OS
Teniendo previamente instalado el VirtualBox y el sistema operativo Ubuntu realizamos las siguientes
configuraciones:
Mediante los comandos y en modo root:
apt-get install Update y apt-get install Updgrade
Ya habiendo instalado todas las actualizaciones
sudo apt update
sudo apt upgrade
Instalamos OpenVPN, quien nos servira para la conexión para descargar e instalar utilizaremos los
siguientes comandos en la terminal:
apt install openvpn.
Procedemos a esperar que termine de instalar procedemos a instalar otro paquete necesario con el
siguiente comando
apt-get install easy-rs.
Terminando de instalar procedemos a solicitar el certificado creado desde el servidor de VPN en el
Maestro.
Buscamos desde la terminal la localización del certificado y lo abriremos con el siguiente comando para
entablar la comunicación con la VPN y la IP de conexión proporcionada por el servidor
root@Maestro2:/home/maestro# cd Descargas
root@Maestro2:/home/maestro/Descargas# openvpn --config [Link]
Al validar podemos notar que nuestra IP cambio a un rango el cual proporciona siempre el servidor y esa
será nuestra IP siempre que nos conectemos a la VPN.
Ya establecida la conexión procedemos a instalar MySQL en Ubuntu, lo realizamos de la misma manera
por medio de la terminal y el comando
apt install mysql-server
root@Maestro2:/home/maestro# apt install mysql-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Nota: En este paso nos solicitará una clave la cual es importante que guardemos, en nuestro caso
colocamos ´12345´ con fines de practica lo cual no es recomendable en ambientes productivos por las
vulnerabilidades.
Validamos que ya se encuentra instalado en nuestra máquina virtual por lo que procedemos a ingresar
en SQL.
root@Maestro2:/home/maestro# mysql -u BDD_Slave -h [Link] -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 40
Server version: 8.0.32 MySQL Community Server – GPL
Acá ingresamos con los datos del user que está dentro de la Base del maestro que en este caso el creado
es BDD_Slave y también la IP del Maestro en este caso es la [Link]
Introducimos el siguiente comando para poder validar que si estamos ingresando a la base de datos
maestra y corroboramos la conexión y contenido de la misma. Usaremos el siguiente comando:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| BDD_ecommerce |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.06 sec)
Corroboramos que si estamos viendo la BD del Maestro que es la BDD_ecommerce.
Procederemos a realizar a agregar la conexión de la Maestro con nuestra esclava por lo que detenemos
nuestra Slave con el siguiente comando:
mysql> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.16 sec)
Luego agregamos los datos de nuestra conexión al maestro desde la terminal del esclavo con el
siguiente comando:
mysql> CHANGE MASTER TO MASTER_HOST='[Link]', MASTER_USER='BDD_Slave',
MASTER_PASSWORD='78945', MASTER_LOG_FILE='binlog.000015', MASTER_LOG_POS=451;
Query OK, 0 rows affected, 8 warnings (0.06 sec)
Levantamos nuevamente los servicios del Slave con el siguiente comando.
mysql> START SLAVE;
Query OK, 0 rows affected, 1 warning (0.06 sec)
Validamos el status de este y nos proporciona toda la información de la conexión:
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: [Link]
Master_User: BDD_Slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000015
Read_Master_Log_Pos: 451
Relay_Log_File: Maestro2-relay-bin.000002
Relay_Log_Pos: 323
Relay_Master_Log_File: binlog.000015
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 451
Relay_Log_Space: 536
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 5e1cda6b-c1b5-11ed-9bbf-b0c090553a0e
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set, 1 warning (0.00 sec)
Vamos a proceder a agregar un usuario con el cual se agregarán las consultas, se adjuntan comando en
terminal para realizarlo:
Luego agregamos las credenciales con los que procederá a realizar una sincronización.
Para validar los puertos abiertos en nuestra máquina virtual para que el acceso sea mucho más versátil y
que otro equipo pueda realizar las consultas instalamos nmap
root@Maestro2:/home/maestro# apt install nmap
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libblas3 liblinear4 lua-lpeg nmap-common
Suggested packages:
liblinear-tools liblinear-dev ncat ndiff zenmap
The following NEW packages will be installed:
libblas3 liblinear4 lua-lpeg nmap nmap-common
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 5,973 kB of archives.
After this operation, 26.3 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 [Link] jammy/main amd64 libblas3 amd64 3.10.0-2ubuntu1 [228
kB]
Get:2 [Link] jammy/universe amd64 liblinear4 amd64 2.3.0+dfsg-5 [41.4
kB]
Get:3 [Link] jammy/universe amd64 lua-lpeg amd64 1.0.2-1 [31.4 kB]
Get:4 [Link] jammy-updates/universe amd64 nmap-common all
7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1 [3,940 kB]
Get:5 [Link] jammy-updates/universe amd64 nmap amd64
7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1 [1,731 kB]
Fetched 5,973 kB in 6s (971 kB/s)
Selecting previously unselected package libblas3:amd64.
(Reading database ... 209897 files and directories currently installed.)
Preparing to unpack .../libblas3_3.10.0-2ubuntu1_amd64.deb ...
Unpacking libblas3:amd64 (3.10.0-2ubuntu1) ...
Selecting previously unselected package liblinear4:amd64.
Preparing to unpack .../liblinear4_2.3.0+dfsg-5_amd64.deb ...
Unpacking liblinear4:amd64 (2.3.0+dfsg-5) ...
Selecting previously unselected package lua-lpeg:amd64.
Preparing to unpack .../lua-lpeg_1.0.2-1_amd64.deb ...
Unpacking lua-lpeg:amd64 (1.0.2-1) ...
Selecting previously unselected package nmap-common.
Preparing to unpack .../nmap-common_7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1_all.d
eb ...
Unpacking nmap-common (7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1) ...
Selecting previously unselected package nmap.
Preparing to unpack .../nmap_7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1_amd64.deb ..
.
Unpacking nmap (7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1) ...
Setting up lua-lpeg:amd64 (1.0.2-1) ...
Setting up libblas3:amd64 (3.10.0-2ubuntu1) ...
update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/[Link].3 to provid
e /usr/lib/x86_64-linux-gnu/[Link].3 ([Link].3-x86_64-linux-gnu) in auto
mode
Setting up nmap-common (7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1) ...
Setting up liblinear4:amd64 (2.3.0+dfsg-5) ...
Setting up nmap (7.91+dfsg1+really7.80+dfsg1-2ubuntu0.1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.1) ...
Al recibir confirmación procedemos a realizar la configuración de la IP y asignarle el puerto de salida
3306
mysql> SHOW GLOBAL VARIABLES LIKE 'port';
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id: 14
Current database: *** NONE ***
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.05 sec)
Validamos que este asignado correctamente:
root@Maestro2:/etc/mysql/[Link].d# ls
[Link] [Link]
root@Maestro2:/etc/mysql/[Link].d# nano [Link]
root@Maestro2:/etc/mysql/[Link].d# systemctl restart mysql
root@Maestro2:/etc/mysql/[Link].d# systemctl start mysql
root@Maestro2:/etc/mysql/[Link].d# nmap [Link]
Starting Nmap 7.80 ( [Link] ) at 2023-03-15 01:05 CST
Nmap scan report for Maestro2 ([Link])
Host is up (0.000031s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
22/tcp open ssh
3306/tcp open mysql
Y con esto podemos garantizar que estamos realizando la sincronización o replicación directamente del
Maestro y que el equipo que realizará los mapeos y graficado estará consumiendo desde el Slave o
esclavo la base de datos.