domingo, 18 de agosto de 2019

Pfsense: Instalacion de Pfsense 2.4 o 2.5 en VirtualBox

Hola, por fin me di este espacio de tiempo para poder aqui plasmarles como instalar pfsense desde VirtualBox, tener su laboratorio y poder probar este firewall chingon.

Estamos con la ultima version estable  2.4.4_p3 , ahora quiero aclararles que si desean hacerlo con la version de desarrollo 2.5_development no hay problema, tanto en VirtualBox como el Wizard de la instalacion es igual, no cambia nada, pueden probar ambas :-).

Pero vamos iniciando la pachanga, como siempre antes de me gustaria mostrar un diagrama de la red para saber la infraestructura donde se implementara, recuerden que uno siempre inicia con lo mas basico y conforme va incrementando la curva de aprendizaje va entrando a redes mas complejas, ahi que mantenerlo simple de inicio.



1) Internet
2) ISP Nuestro proveedor de Internet
3) Nuestro Firewall-->Pfsense.
4) Switch para nuestra interna.
5) Nuestros equipos dentro de nuestra LAN.
6) Punto de Acceso Inalambrico que ya es comun tener minimo 1.

Entonces vamos a usar VirtualBox para instalar PfSense y poder crear nuestro laboratorio para explorar el potencial de PfSense.

Requisitos en su equipo:

1) Procesador con soporte para maquinas virtuales llamese Intel VT-x o AMD SVM.
2) 1 Interfaz de red con conexion a Internet.
3) Espacio en disco duro para almacenar maquinas virtuales.
4) VirtualBox, estamos trajando la version 6.

Aqui va, buzos caperuzos, ustedes relajense, dejenme a mi la tarea de darles los pasos, ustedes solo pongan atencion a todo el rollo que sigue...



1) Descargar PfSense de la pagina oficial, les recuerdo que en este momento es la 2.4.4_p3, nos vamos a la pagina oficina: https://www.pfsense.org/

Fig 2.Pagina Oficial de Pfsense

Fig 3. Seleccion de la Version.

Esperamos a que se descargue, posteriormente  necesitamos descomprimir ese archivo ya que se baja en formato "GZ", en mi caso en mi maquina yo uso el programa OpenSource "7zip" (https://www.7-zip.org).

Fig 4. Descomprension de Archivo Descargado.

Una vez descomprimido entramos a el folder y ahi estara el diamante que necesitamos para la instalacion.


Fig. 5. Imagen Lista para Instalacion.

2) Creacion de Maquina Virtual dentro de VirtualBox.

Ahora le toca el turno a VirtualBox, abrimos la aplicacion y seleccionamos:

Fig 6. Creacion de Nueva Maquina Virtual.


Fig 7. Primera Seccion de Creacion.

Le ponen el nombre que gustes, lo demas tal cual dice la imagen anterior.

Memoria RAM

Fig. 8. Seleccion de la Cantidad de RAM.

Hoy en dia 1GB pueden trabajar la parte de firewall, alias, dhcp, dns, ntp. Pero si ya quieren meter servicios como squid, vpn's , snort, pfblocker, etc. si van a hacer que su equipo se acabe la memoria RAM, recuerden que al usar la SWAP ya estamos usando disco duro como memoria RAM y es mas lento el acceso, por ello les recomiendo si pueden iniciar con 2GB.

Disco Duro

Lo que sigue es crear el disco virtual donde se instalara, de fabrica VirtualBox nos deja un disco duro de 16GB, para PfSense es suficiente, ahora si van a hacer cosas avanzadas como Squid, Snort, PfBlockerNG, al final es un laboratorio para ustedes, con ese valor basta.

Fig.9. Creacion de Disco Duro.



Fig. 10. Seleccionamos Fixed size.

Fig. 11. Seleccionamos Tamano de Disco Duro.

Fig. 12. Proceso de Creacion de Disco Duro.
Al finalizar la creacion del disco duro nos regresamos a la pantalla principal de VirtualBox.

Fig. 13. Maquina Virtual Creada.
Ahora necesitamos llevar a cabo unos ajustes antes de arrancar la instalacion de PfSense.

3) Ajustes de configuracion.

Fig. 14. Ajustes en las opciones de boot.

Seleccionamos la imagen de PfSense que descargamos y descomprimimos en la Fig. 5.

Fig. 15. Buscar la imagen descargada.

Fig.16. Seleccionamos la Imagen de Instalacion.

Fig. 17. Imagen Lista.

Fig. 18. Deshabilitamos Audio, un Firewall no lo necesita.

Tarjetas de Red.
Aqui pongan atencion, como les mencione al inicio, solo requieren una interfaz conectada a Internet en su equipo(host), un firewall basico requiere:
  • WAN
  • LAN
En mi caso mi equipo esta conectado por WiFi ya que es una Laptop, datos de mi interfaz:

Fig. 19. Interfaz WiFi de Mi Host.
Esta interfaz es la que voy a usar para mi WAN de Pfsense, en modo Bridge como muestra la siguiente imagen, a excepcion de la option "Name" en su caso puede ser otra la interfaz fisica que tienen, las demas opciones deben quedar igual.

Fig. 20. Configuracion de WAN para PfSense.

En su caso posiblemente su equipo este conectado via cable de red, ustedes elijen la interfaz de su estacion(host) que esta conectada a Internet.

Para la LAN vamos hacer uso de una opcion que trae VirtualBox: Internal Networking.

Su interfaz LAN quedaria como muestra la siguiente imagen.

Fig. 21. Configuracion de LAN.

Como podran ver en la figura anterior, habilitamos la 2da interfaz, la cual viene siendo la LAN de Pfsense. Ademas de ellos seleccionamos la opcion de "Internal Network", le colocamos un nombre(Pfsense_LAN) y lo demas lo dejan como muestra la imagen.

Como funciona una 'Internal Network", como veran el nombre que le dimos fue "Pfsense_LAN", todas las maquinas virtuales que creemos dentro de este host con VirtualBox y que tengan como Internal Network el mismo nombre, VirtualBox crea un switch interno y permite comunicarse entre ellas.

Asi que no requerimos otra interfaz fisica para asignarla a Pfsense como LAN. Estamos usando las herrramientas que el mismo VirtualBox nos ofrece.

Continuamos los ajustes.

Fig. 22. No Necesitamos USB hasta el momento.
Por ultimo como dice la imagen anterior, ahora si presionamos el boton OK.

Nuestra maquina virtual para PfSense quedaria asi:

Fig.23. Maquina Virtual para PfSenses Lista.
Arrancamos la Instalacion de PfSense.

Ahora si, seleccionamos la VM que acabamos de configurar para pfsense y le damos click al boton 'Start'.

Fig. 24. Arrancamos la Maquina Virtual de PfSenses.
Voy a escalar la imagen de la maquina virtual para que se vea en toda la pantalla.

Fig. 25. Arranque de Pfsense.
Si ustedes se sieten comodos con su actual tamano de pantalla no problema, yo la escalo para verla en toda la pantalla de mi equipo, el wizard es muy sencillo de seguir.

Fig. 26. Inicia el Wizard.





Fig. 27. Reboot.

Es rapidisima la instalacion, una vez que reiniciamos arrancara el disco duro primero y tenemos nuestra pfsense listo para trabajar.

Fig. 28. Pfsense Listo para Trabajar.


Por ultimo, vamos asignarle la red que mostramos en el diagrama de la red(Fig 1.) que mostramos al principio del post:

Red LAN: 192.168.100.0/24
Pfsense LAN IP: 192.168.100.1
DHCP: 192.168.100.100-192.168.100.150

Con esta info arrancamos la configuracion de PfSense desde la terminal.

Fig. 29. Pasos para asignacion de IP a la LAN.




Fig. 30. LAN con nueva IP.


El DHCP se puede ajustar ya operando el sistema si lo creen conveniente. Aqui ya podemos prender alguna de nuestras maquinas virtuales, solo recordar que su red debe pertener a la misma que configuramos para Pfsense en la seccion Interfaces de Red, ver siguiente imagen.

Fig. 31 . Internal Network (Pfsense_LAN).
Si alguna de estos 2 equipos tienen sus interfaces en modo DHPC debe tomar IP de Pfsense, vamos a prender a Ubuntu y comprobar que hay comunicacion.

Fig. 32. Ubuntu tomando IP atraves de Pfsense.

Listo, como pueden ver ubuntu virtual tomo IP de Pfsense :-).

Hasta que ya mostramos los pasos que se requieren para instalar PfSense bajo VirtualBox, en el siguiente post vamos a entrar en la configuracion inicial de PfSense para ahora si ponernos a trabajar y aprender mas y sacarle mas jugo o bien mi primer video es de la configuracion de PfSense por si quieren hecharle un ojo... https://www.youtube.com/watch?v=DDdQXhVZToQ

Cualquier duda o error de este post con toda confianza pueden hacer sus preguntas abajo de este post, hasta la proxima banda!!!

NOTA: Si no vienen de mi canal se los recomiendo, tengo muchos videos de Pfsense y Linux que pueden interesarles, https://www.youtube.com/channel/UCrRxfZbTzNwlWpKTjqtDANA

miércoles, 7 de agosto de 2019

Linux: Replica de Base de Datos(Maestro-Esclavo) con PostgreSQL y Bucardo en Ubuntu 18.x

Hola que tal, requieren llevar a cabo una replica de base de datos de PostgreSQL tipo Maestro-Esclavo? Aqui te vamos a demostrar como se puede hacer haciendo uso de un programa llamado Bucardo.


En mi canal de youtube esta el video, aqui van los mismos pasos y sobre todo los comandos para que te sean de apoyo junto con el video, si no vez el video no hay problema, todas las instrucciones aqui valen, el servidor MAESTRO ya esta operando, lo que vamos hacer es replicar 2 bases de datos 'dvdrental' y 'ejemplo' en el servidor ESCLAVO.

Esto es lo vamos a llevar a cabo para tener una mejor panorama de donde estamos parados.

Diagrama de la Implentacion.


Requisitos:

Tanto el OS en este ejemplo es Ubuntu 18.x y la BD es PostgreSQL 10.x en ambos servidores es la misma version, es un requisito de Bucardo, si ustedes desean usar una version anterior por ejemplo ubuntu 14, 16, etc, no hay problema, siempre y cuando sea la misma version en ambos servidores.

El servidor Maestro ya tiene instalado y en ejecucion:

-PostgreSQL
-Apache
-PHP
-Phppgadmin

El Servidor Esclavo no tiene nada instalado, vamos instalar todo lo necesario, aqui se los voy a mostrar.

===Configuracion de Servidor Maestro===

Pasos a seguir:

1) Servidor actualizado.

2) Instalar Utilerias para PostgreSQL.

apt-get install postgresql-plperl -y

3) Agregar el lenguage PLPERL en la base de datos.

su - postgres
psql postgres
CREATE LANGUAGE plperl;
\q
exit

4) Instalacion de Librerias para Bucardo.

apt-get install make libdbix-safe-perl libdbd-pg-perl libencode-locale-perl libboolean-perl  unzip -y

5) Configuracion inicial de bucardo en postgresql, debemos accesar postgresql, crear el usuariode nombre  'bucardo' y la base de datos 'bucardo' y su propietario debe ser el usuario 'bucardo', valgame la redundancia.

su - postgres
psql postgres

CREATE USER bucardo SUPERUSER;
ALTER USER bucardo WITH PASSWORD 'clavedificil';
CREATE DATABASE bucardo OWNER=bucardo;
\q
exit

6) Agregar permiso a usuario bucardo dentro de postgresql, abrimos el siguiente archivo con su editor favorito.

/etc/postgresql/10/main/pg_hba.conf

Deben dejarlo asi:

local   all             postgres                                peer
local   all             bucardo                                 trust
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             bucardo         127.0.0.1/32            trust
host    all             all             127.0.0.1/32            md5

Salvar archivo y reiniciar postgresql

systemctl restart postgresql

Probar acceso de usuario bucardo desde phppgadmin(pgadmin)


7) Instalar bucardo.

7.a Descargar el codigo en la ruta /opt/

cd /opt/
wget https://bucardo.org/downloads/Bucardo-5.5.0.tar.gz

NOTA: Revisar la pagina oficial de bucardo por si hay nueva version por si este link no funciona.

7.b Descomprimir e instalar bucardo.

tar -xzf Bucardo-5.5.0.tar.gz
cd Bucardo

perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite CGI 0 not found.
Generating a Unix-style Makefile
Writing Makefile for Bucardo
Writing MYMETA.yml and MYMETA.json

NOTA: Si les marca error, revisen si todas las librerias del paso #4.

root@server1:/opt/Bucardo-5.5.0# make
cp bucardo.schema blib/share/bucardo.schema
cp Bucardo.pm blib/lib/Bucardo.pm
cp bucardo blib/script/bucardo
"/usr/bin/perl" -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/bucardo
Manifying 1 pod document
Manifying 1 pod document

make install
Manifying 1 pod document
Manifying 1 pod document
Installing /usr/local/share/perl/5.26.1/Bucardo.pm
Installing /usr/local/man/man1/bucardo.1pm
Installing /usr/local/man/man3/Bucardo.3pm
Installing /usr/local/bin/bucardo
Installing /usr/local/share/bucardo/bucardo.schema
Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.26.1/perllocal.pod

7.c Crear directorios de operacion.

mkdir /var/run/bucardo
mkdir /var/log/bucardo

NOTA: Estos nos los crea bucardo, ahi que hacerlo a mano, nada es perfecto :-).

7.d Instalacion de Bucardo, les quiero mencionar que la aplicacion usara el usuario 'bucardo' que creamos en el paso #8 dentro de PostgreSQL.

bucardo install
This will install the bucardo database into an existing Postgres cluster.
Postgres must have been compiled with Perl support,
and you must connect as a superuser

Current connection settings:
1. Host:           <none>
2. Port:           5432
3. User:           bucardo
4. Database:       bucardo
5. PID directory:  /var/run/bucardo
Enter a number to change it, P to proceed, or Q to quit: 1

Change the host to: 127.0.0.1

Changed host to: 127.0.0.1
Current connection settings:
1. Host:           127.0.0.1
2. Port:           5432
3. User:           bucardo
4. Database:       bucardo
5. PID directory:  /var/run/bucardo
Enter a number to change it, P to proceed, or Q to quit: P

Attempting to create and populate the bucardo database and schema
Database creation is complete

Updated configuration setting "piddir"
Installation is now complete.
If you see errors or need help, please email bucardo-general@bucardo.org

You may want to check over the configuration variables next, by running:
bucardo show all
Change any setting by using: bucardo set foo=bar

NOTA: Hasta aqui hemos ya instalado los binarios de bucardo en el servidor maestro quien se encargara de sincronizar las bases de datos entre ambos.

8) Sacar respaldo de las bases de datos para enviarlas a el servidor esclavo, recuerden que antes de arrancar la replica ambos servidores deben tener las bases de datos a replicar con la misma cantidad de registros.

8.a Respaldo de ambas bases de datos.

su - postgres
pg_dump -E UTF-8 -p 5432 -U postgres -F p -b -f dvdrental.sql dvdrental
pg_dump -E UTF-8 -p 5432 -U postgres -F p -b -f ejemplo.sql ejemplo

8.b Enviar a servidor esclavo los respaldos.

scp dvdrental.sql xuser@192.168.80.11:/home/xuser/
scp ejemplo.sql  xuser@192.168.80.11:/home/xuser/

Hasta aqui ya tenemos listo el servidor MAESTRO para replicar, ahora sigue configurar el servidor ESCLAVO para que acepte los comandos de bucardo y podamos pasar a las pruebas de replicacion.

=== Configuracion de Servidor Esclavo ===

1) Servidor Actualizado.

2) Instalar PostgreSQL.

apt-get install postgresql  -y

3) Configurar PostgreSQL para que escuche peticiones en cualquier interface de red, para ellos editamos el archivo con su programa favorito, yo uso vi, soy de la vieja escuela :-).

/etc/postgresql/10/main/postgresql.conf

Quitamos el '#' al inicio del parametro y lo dejamos como sigues.

listen_addresses = '*'

Salvamos y reiniciamos postgresql.

systemctl restart postgresql

4) Instalacion y Configuracion de apache, php y phppgadmin.

4.a Instalamos los paquetes necesario.

apt-get install apache2 php php-pgsql -y

4.b Cambiamos en php.ini, editamos los siguientes archivos:

/etc/php/7.2/cli/php.ini
/etc/php/7.2/apache2/php.ini

Buscamos la siguiente linea y la dejamos asi en ambos archivos:

short_open_tag = On

4.c Arrancamos apache

systemctl start apache2

 4.d Probamos su funcion en el navegador


4.e Probamos php.

cd /var/www/html

Creamos un archivo de nombre 'test.php'.

Y le agregamos esta funcion:

<?php phpinfo(); ?>

Salvamos archivo.

4.f Abrimos archivo en  el  navegador, nos debe arrojar la version de php como muestra la siguiente imagen.



NOTA: Si no ven la info de php en su navegador, regresense desde el paso #4  y revisen los comandos, alguno les ha de ver fallado o me equivoque yo :-o.

5) Instalacion de phppgadmin.

5.a Descargamos la ultima version del portal http://phppgadmin.sourceforge.net y la salvamos en la ruta de apache: /var/www/html/

cd /var/www/html/
wget https://github.com/phppgadmin/phppgadmin/archive/REL_5-6-0.tar.gz
tar -xzf REL_5-6-0.tar.gz
mv phppgadmin-REL_5-6-0/ pgadmin

6.b Configuramos phppgadmin

cd pgadmin/conf/
cp config.inc.php-dist config.inc.php

6.c Editamos archivo config.inc.php, buscamos la siguiente linea la dejamos asi:

$conf['servers'][0]['desc'] = 'PSQL Esclavo';
   
La que sigue queda asi.

 $conf['servers'][0]['host'] = '127.0.0.1';

Por ultimo la que siguiente queda asi.

$conf['extra_login_security'] = false;

Salvamos y salimos.

6.d Probamos phppgadmin en el navegador. http://192.168.80.11/pgadmin



7) Configuracion de bucardo en postgresql, debemos accesar postgresql, crear el usuario de nombre  'bucardo' y la base de datos 'bucardo' y su propietario debe ser el usuario 'bucardo', valgame la redundancia.

su - postgres
psql postgres

CREATE USER bucardo SUPERUSER;
ALTER USER bucardo WITH PASSWORD 'clavedificil';
CREATE DATABASE bucardo OWNER=bucardo;
\q
exit

8) Agregar permiso a usuario bucardo dentro de postgresql, abrimos el siguiente archivo con su editor favorito.

/etc/postgresql/10/main/pg_hba.conf

Deben dejarlo asi:

local   all             postgres                                peer
local   all             bucardo                                 trust
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             bucardo         127.0.0.1/32            trust
host    all             all             127.0.0.1/32            md5

Salvar archivo y reiniciar postgresql

systemctl restart postgresql

Probar acceso de usuario bucardo desde phppgadmin(pgadmin)


9) Crear base de datos dvdrentalreportes y ejemploreportes en postgresql. Aqui vamos a restarurar las bases de datos que enviamos desde en el servidor Maestro.

su - postgres
psql postgres
CREATE DATABASE dvdrentalreportes;
CREATE DATABASE ejemploreportes;
\q
exit

10) Restaurar las bases de datos.

mv /home/xuser/dvdrental.sql /var/lib/postgresql
mv /home/xuser/ejemplo.sql /var/lib/postgresql

su - postgres

psql dvdrentalreportes < dvdrental.sql -U postgres
psql ejemploreportes < ejemplo.sql -U postgres

11) Revisar el contenido de ambas bases de datos en pgadmin, deben tener el mismo numero de registros.

Servidor Maestro BD: dvdrental

Servidor Esclavo BD:dvdrentalreportes

Servidor Maestro BD: ejemplo

Servidor Maestro BD: ejemploreportes

NOTA: Recuerden que las bases de datos a replicar deben iniciar con el mismo numero de registros en ambos servidores.

12) Agregar permiso para que el usuario bucardo pueda conectarse remotamente desde el maestro
a el esclavo, es vital este paso para que bucardo pueda llevar a cabo su trabajo de replica.

12.a Editar archivo /etc/postgresql/10/main/pg_hba.conf y dejarlo asi en el servidor esclavo.


Solo le estamos pertiendo a el servidor maestro accesar con el usuario bucardo, a nadie mas.

salvar archivo y salir.

12.b Reiniciar postgresql

systemctl restart postgresql

12.c Probar acceso remoto desde servidor maestro a servidor esclavo via psql.


Ya estamos listos para iniciar la replica.

== Configuracion de Replica Maestro-Esclavo #1 dvdrental ==> dvdrentalreportes.

Todo esto se ejecuta desde el servidor Maestro que es donde instalamos Bucardo.
'
Iniciamos...

bucardo add database MAESTRO1  dbname=dvdrental
Added database "MAESTRO1"

bucardo add database ESCLAVO1  dbname=dvdrentalreportes host=192.168.80.11
Added database "ESCLAVO1"

bucardo add all tables db=MAESTRO1 --herd=HERD1
Creating relgroup: HERD1
Added table public.actor to relgroup HERD1
Added table public.address to relgroup HERD1
Added table public.category to relgroup HERD1
Added table public.city to relgroup HERD1
Added table public.country to relgroup HERD1
Added table public.customer to relgroup HERD1
Added table public.film to relgroup HERD1
Added table public.film_actor to relgroup HERD1
Added table public.film_category to relgroup HERD1
Added table public.inventory to relgroup HERD1
Added table public.language to relgroup HERD1
Added table public.payment to relgroup HERD1
Added table public.rental to relgroup HERD1
Added table public.staff to relgroup HERD1
Added table public.store to relgroup HERD1
New tables added: 15

bucardo add sync MAESTROESCLAVO1 dbs=MAESTRO1,ESCLAVO1 relgroup=HERD1  pushdelta
Added sync "MAESTROESCLAVO1"
Created a new dbgroup named "MAESTROESCLAVO1"

bucardo update sync MAESTROESCLAVO1 set strict_checking=0

bucardo start
Checking for existing processes
Starting Bucardo

bucardo status
PID of Bucardo MCP: 12022
 Name              State    Last good    Time    Last I/D    Last bad    Time
=================+========+============+=======+===========+===========+
 MAESTROESCLAVO1 | Good   | 18:28:36   | 21s   | 0/0       | none      |


Por ultimo revisamos el log de bucardo para ver si todo se ejecuto sin problemas.

root@srvmaestro:~# tail -n 20 /var/log/bucardo/log.bucardo
(12022) [Sat Aug 10 18:28:36 2019] MCP   Inspecting source table "public.film" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP    Inspecting target table "public.film" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP   Inspecting source table "public.address" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP    Inspecting target table "public.address" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP   Inspecting source table "public.film_actor" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP    Inspecting target table "public.film_actor" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP   Inspecting source table "public.customer" on database "MAESTRO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP    Inspecting target table "public.customer" on database "ESCLAVO1"
(12022) [Sat Aug 10 18:28:36 2019] MCP Active syncs: 1
(12022) [Sat Aug 10 18:28:36 2019] MCP Entering main loop
(12026) [Sat Aug 10 18:28:36 2019] VAC New VAC daemon. PID=12026
(12026) [Sat Aug 10 18:28:36 2019] VAC Connected to database "MAESTRO1" with backend PID of 12028
(12022) [Sat Aug 10 18:28:36 2019] MCP Created VAC 12026
(12029) [Sat Aug 10 18:28:36 2019] CTL New controller for sync "MAESTROESCLAVO1". Relgroup is "HERD1", dbs is "MAESTROESCLAVO1". PID=12029
(12029) [Sat Aug 10 18:28:36 2019] CTL   stayalive: 1 checksecs: 0 kicked: 1
(12029) [Sat Aug 10 18:28:36 2019] CTL   kidsalive: 1 onetimecopy: 0 lifetimesecs: 0 (NULL) maxkicks: 0
(12022) [Sat Aug 10 18:28:36 2019] MCP Created controller 12029 for sync "MAESTROESCLAVO1". Kick is 1
(12029) [Sat Aug 10 18:28:36 2019] CTL Database "ESCLAVO1" backend PID: 12543
(12029) [Sat Aug 10 18:28:36 2019] CTL Database "MAESTRO1" backend PID: 12031
(12032) [Sat Aug 10 18:28:36 2019] KID (MAESTROESCLAVO1) New kid, sync "MAESTROESCLAVO1" alive=1 Parent=12029 PID=12032 kicked=1


Parece que todo en orden, no veo errores, iniciamos las pruebas de la replica.

Prueba #1: Update BD: dvdrental.

Servidor Maestro.

Agregando Registro.

Nuevo Registro.

Servidor esclavo sincronizado.

Como pueden darse cuenta, el cambio que se llevo a cabo en el servidor maestro en la tabla 'public.actor', se replico en el servidor esclavo, y fue en segundos.

== Configuracion de Replica Maestro-Esclavo #2  BD:ejemplo ==> BD:ejemploreportes.

Ahora viene crear la 2da replica pero ahora con la base de datos ejemplo(maestro) y ejemploreportes(esclavo), recuerden que todo estos pasos se debe realizar en el servidor Maestro, quien este ejecutando bucardo.

root@srvmaestro:/var/run# bucardo add database MAESTRO2  dbname=ejemplo
Added database "MAESTRO2"
root@srvmaestro:/var/run# bucardo add database ESCLAVO2  dbname=ejemploreportes host=192.168.80.11
Added database "ESCLAVO2"
root@srvmaestro:/var/run# bucardo add all tables db=MAESTRO2 herd=HR2 --verbose
Creating relgroup: HR2
Added table public.pgbench_history to relgroup HR2
Added table public.pgbench_tellers to relgroup HR2
Added table public.pgbench_branches to relgroup HR2
Added table public.pgbench_accounts to relgroup HR2
New tables:
  public.pgbench_accounts
  public.pgbench_branches
  public.pgbench_history
  public.pgbench_tellers
New tables added: 4
root@srvmaestro:/var/run# bucardo add sync  MAESTROESCLAVO2 dbs=MAESTRO2,ESCLAVO2 relgroup=HR2 pushdelta
Added sync "MAESTROESCLAVO2"
Created a new dbgroup named "MAESTROESCLAVO2"
root@srvmaestro:/var/run# bucardo restart
Creating /var/run/bucardo/fullstopbucardo ... Done
Checking for existing processes
Removing file "/var/run/bucardo/fullstopbucardo"
Starting Bucardo


Prueba #2: Borrado  BD: Ejemplo, Tabla: pgbench_accounts.

Verificacion de Registros antes de borrar en cada tabla:

Servidor Maestro

Servidor Esclavo

Ambos tienen la misma cantidad de registros.

Vamos a borrar 5 registros de la tabla: pgbench_accounts.

Atraves de phppgadmin borramos 5 registros y revisamos el total de registros en ambos servidores, debe coincidir.

Servidor Maestro

Servidor Esclavo

Como se podran dar cuenta, al borrar los registros en la tabla indicada desde el servidor Maestro bucardo se encargo de enviar la misma instruccion a el servidor esclavo y se sincronizaron las tablas.

Prueba #3: Insert.

Vamos a agregar en la base de datos dvdrental, tabla: category este registro:

category_1d=17
name: Baja Open Solutions

Servidor Maestro

Registro Agregado en el Maestro.

Servidor Esclavo Sincronizado


Ahora bucardo se encargo de sincronizar las bases de datos en segundos, ustedes pueden hacer mas pruebas para que vean el potencial de bucardo y no consume mucho recursos.

Ultima prueba, que pasa si bucardo no esta en ejecucion.

Vamos a detener bucardo y vamos a modificar un registro en el maestro, bd: stuff.

Antes de revisamos las tablas:
Servidor Maestro.

Servidor Esclavo.

-Detenemos bucardo.

bucardo stop
Creating /var/run/bucardo/fullstopbucardo ... Done

Ahora procedemos con el cambio desde el GUI.

Update Registro

Registro Actualizado

Como bucardo esta detenido, el esclavo no ha sido afectado, pueden revisar su tabla y seguira con los mismo datos:


Iniciando bucardo de nuevo:

root@srvmaestro:/var/run# bucardo start
Checking for existing processes
Removing file "/var/run/bucardo/fullstopbucardo"
Starting Bucardo
root@srvmaestro:/var/run#

root@srvmaestro:/var/run# tail -n 25 /var/log/bucardo/log.bucardo
(2818) [Mon Aug 12 04:50:41 2019] MCP    Inspecting target table "public.pgbench_tellers" on database "ESCLAVO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP   Inspecting source table "public.pgbench_branches" on database "MAESTRO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP    Inspecting target table "public.pgbench_branches" on database "ESCLAVO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP   Inspecting source table "public.pgbench_accounts" on database "MAESTRO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP    Inspecting target table "public.pgbench_accounts" on database "ESCLAVO2"
(2818) [Mon Aug 12 04:50:41 2019] MCP Active syncs: 2
(2818) [Mon Aug 12 04:50:41 2019] MCP Entering main loop
(2824) [Mon Aug 12 04:50:41 2019] VAC New VAC daemon. PID=2824
(2824) [Mon Aug 12 04:50:41 2019] VAC Connected to database "MAESTRO1" with backend PID of 2826
(2824) [Mon Aug 12 04:50:41 2019] VAC Connected to database "MAESTRO2" with backend PID of 2827
(2818) [Mon Aug 12 04:50:41 2019] MCP Created VAC 2824
(2828) [Mon Aug 12 04:50:41 2019] CTL New controller for sync "MAESTROESCLAVO1". Relgroup is "HERD1", dbs is "MAESTROESCLAVO1". PID=2828
(2828) [Mon Aug 12 04:50:41 2019] CTL   stayalive: 1 checksecs: 0 kicked: 1
(2828) [Mon Aug 12 04:50:41 2019] CTL   kidsalive: 1 onetimecopy: 0 lifetimesecs: 0 (NULL) maxkicks: 0
(2818) [Mon Aug 12 04:50:41 2019] MCP Created controller 2828 for sync "MAESTROESCLAVO1". Kick is 1
(2830) [Mon Aug 12 04:50:41 2019] CTL New controller for sync "MAESTROESCLAVO2". Relgroup is "HR2", dbs is "MAESTROESCLAVO2". PID=2830
(2830) [Mon Aug 12 04:50:41 2019] CTL   stayalive: 1 checksecs: 0 kicked: 1
(2830) [Mon Aug 12 04:50:41 2019] CTL   kidsalive: 1 onetimecopy: 0 lifetimesecs: 0 (NULL) maxkicks: 0
(2828) [Mon Aug 12 04:50:41 2019] CTL Database "ESCLAVO1" backend PID: 2290
(2828) [Mon Aug 12 04:50:41 2019] CTL Database "MAESTRO1" backend PID: 2832
(2830) [Mon Aug 12 04:50:41 2019] CTL Database "ESCLAVO2" backend PID: 2291
(2818) [Mon Aug 12 04:50:41 2019] MCP Created controller 2830 for sync "MAESTROESCLAVO2". Kick is 1
(2830) [Mon Aug 12 04:50:41 2019] CTL Database "MAESTRO2" backend PID: 2833
(2834) [Mon Aug 12 04:50:41 2019] KID (MAESTROESCLAVO1) New kid, sync "MAESTROESCLAVO1" alive=1 Parent=2828 PID=2834 kicked=1
(2835) [Mon Aug 12 04:50:41 2019] KID (MAESTROESCLAVO2) New kid, sync "MAESTROESCLAVO2" alive=1 Parent=2830 PID=2835 kicked=1

Bucardo de nuevo en operacion

Servidor Esclavo Sincronizado.

Como se podran dar cuenta, bucardo se casa con las bases de datos que esta sincronizado y todos los cambios que se llevan a cabo en esas bases de datos los registra en su propia base datos, por ello creamos una base de datos llamada 'bucardo' en el servidor Maestro es la que utiliza para todo esto.

Una vez que se pone en ejecucion revisa sus registros  y en cuanto ve en linea los servidores esclavos empieza a enviarles todos los cambios detectados hasta que vuelven a sincronizarse.

Asi de inteligente es bucardo.


Bien hasta aqui termino este pequeno tutorial de bucardo, pasemos al resumen.

Resumen:

Bucardo es un sistema asincrono basado en Perl, consume muy pocos recursos y como observaron puede sicronizar multiples bases de datos de manera simultanea, yo tengo unos corriendo con mas de 200 tablas.

Podemos llevara cabo configuraciones:

Maestro-Esclavo
Maestro-Maestro
Maestro-Esclavos

Requisitos de bucardo.

-Las bases de datos deben iniciar con la misma cantidad de registros, por ello una vez que sacamos el respaldo de las bases de datos a sincronizar, la base de datos no debe ser modificada hasta que bucardo se ponga en ejecucion.

Si llegaran a suceder que ambas bases de datos no tienen lo mismos registros, solo vuelven a sacar el respaldo y lo restauran en el servidor esclavo para que inicien de nuevo la sincronizacion.

-OS y PostgreSQL deben ser la misma version en ambos servidores.

Limitantes de bucardo.

-Solo replica INSERT, UPDATE y DELETE.
-No replica CREATE.
-No replica la modificacion de las tablas.

Si llegara a suceder esto, tiene comandos para actualizar las bases de datos que esta sincronizando y continuar.

Por ultimo, si ustedes necesitaran iniciar de 0, pueden eliminar la bases de datos llamada "bucardo" del servidor Maestro, la vuelven a crear como en el paso #5 de la configuracion del servidor Maestro y repiten los pasos de nuevo.

Ya que bucardo toda su configuracion la almacena en esa bases de datos.

Para que me serviria llevar a cabo esto?

1) Muchas veces  tenemos servidores tipo ERP o MRP como ODOO que hace uso de PostgreSQL y es recomendable tener un segundo servidor para los reportes, dejando al 1ro para llevar a cabo el A(Alta)B(Bajas)C(Cambios) de la bases de datos y la replica para llevar a cabo lo reportes, ya que muchas veces hay reportes que consumen mucho recurso y es preferible que ese procesamiento lo lleve el segundo servidor para no cargarle la mano a el maestro.

2)  Replica para alta tolerancia, otras ocasiones es necesario tener el segundo servidor replicado por si el primero llegara a fallar, el esclavo puede pasar a ser el primario(ya me toco vivirlo) y el tiempo caido seria bajo.

Espero este tutorial les sea de utilidad para seguir aprendiendo mas de Linux, PostgreSQL y bucardo, nos vemos hasta el siguiente tutorial, saludos.

NOTA: La base de datos dvdrental la bajamos de este link:

http://www.postgresqltutorial.com/wp-content/uploads/2019/05/dvdrental.zip

Una vez descomprimida la restauramos con este comando:

pg_restore dvdrental.tar -d dvdrental -U postgres

La base de datos ejemplo la creamos con pgbench asi:

pgbench  -i -s 20 ejemplo


miércoles, 26 de junio de 2019

Video 24: OCS Inventory NG en Linux Centos 7

Hola, llegastes aqui para buscar todo el script del video 24 de mi canal, estas en el lugar correcto.

Por si llegastes aqui sin pasar por mi canal, el video de este post esta en el siguiente URL.



Instalacion de Servidor OCS Inventory NG

NOTA: Aqui yo arranco con una instalacion inicial de Centos 7 Minimal.

==Centos 7==

1; Deshabilitar selinux

2; Deshabilitar servicios innecesarios

systemctl disable firewalld
systemctl disable postfix.service
systemctl disable auditd.service
systemctl disable remote-fs.target
systemctl disable dbus-org.freedesktop.NetworkManager.service

3; configurar hostname y reiniciar servidor.

El hostname le asignan el que ustedes gusten, en mi caso yo use este nombre:

ocsserver.bos.local

--abrir archivo de hostname y agregar el nombre que gusten.

 vi /etc/hostname

--reiniciamos Centos.

shutdown -r now

4; Actualizar el sistema y reiniciar el sistema al terminar.

yum update -y && shutdown -r now

5; Instalacion de utilerias.

yum install wget yum-utils -y

6; Instalacion de Repositorios epel y remi

yum install epel-release -y

NOTA: Todas las descargas hechas las almacene en la ruta /opt/

7; Descargar e instalar el repo de remi.

--Descargamos el repo de la pagina oficial

Aqui nos vamos a la pagina oficial de Remi.

https://rpms.remirepo.net/

Y descargamos el repo para centos 7


wget url_del_repo_para_centos_7

--Instalacion del repo

rpm -ivh remi-release-7.rpm

8; Instalamos la base de datos MariaDB.

--instalacion
yum install mariadb-server -y

--arranque automatico
systemctl enable mariadb

--iniciamos servicio
systemctl start mariadb

--Ejecutamos script de seguridad.
mysql_secure_installation

NOTA: Seguir los pasos del video.

9; Instalacion de apache

--instalacion
yum install httpd -y

--arranque automatico
systemctl enable httpd

--iniciamos servicio.
systemctl start httpd

--abrimos navegador para ver el servicio en ejecucion.

10; Instalacion de php y librerias necesarias

--intercambiar php base x remi

yum-config-manager --enable remi-php72

--instalamos esto paquetes
yum install php php-mbstring php-soap php-xml php-gd php-zip php-mysqli -y

--editamos php.ini con su editor favorito y modificamos estas variables.

short_open_tag => de Off pasa a On
post_max_size ==> 8M pasa a 1024M
upload_max_filesize ==> 2M pasa a 256M

Al terminar salvar el archivo.

-reiniciamos apache
systemctl restart httpd

-probamos que php funcione creando un archivo de prueba llamado:

test.php

Este archivo lo salvamos en la ruta general de apache para su ejecucion atraves del navegador.

/var/www/html/

y le agregamos la siguiente funcion a el archivo test.php:

<?php phpinfo(); ?>

Salvamos el archivo, abrimos nuestro navegador para ejecutar el script test.php nos debe arroja la pagina con la info de php como la imagen siguiente:


NOTA: Si no ven esta pantalla con la info de php, no continuen, regresen a el inicio del video e intenten todo de nuevo, ya que escencial que puedan ver la pantalla de php en su navegador.

11; Instalamos las librerias de Perl requeridas.

1er bloque
perl-XML-Simple
perl-Compress-Zlib
perl-DBI 
perl-DBD-MySQL
perl-Archive-Zip
perl-Switch

yum install -y perl-XML-Simple perl-Compress-Zlib perl-DBI perl-DBD-MySQL perl-Archive-Zip perl-Switch

2do bloque

perl-Net-IP
perl-SOAP-Lite
perl-Mojolicious
perl-Plack
perl-XML-Entities

yum install -y perl-Net-IP perl-SOAP-Lite perl-Mojolicious perl-Plack perl-XML-Entities

12; Configuracion de la Base de Datos.

--accesamos mariadb atraves de su consola.
mysql -u root -p

--creamos la base de datos ocsweb
CREATE DATABASE ocsweb;

--creamos el usuario ocs
CREATE USER 'ocs'@'localhost' IDENTIFIED BY 'ocs';

--asignamos el usuario creado a la base de datos ocsweb
GRANT ALL PRIVILEGES ON ocsweb.* TO 'ocs'@'localhost' WITH GRANT OPTION;

--refrescamos la base de datos
FLUSH PRIVILEGES;

--salimos de la consola de mariadb.

13; Nos registramos en la pagina oficial de Ocs Inventory NG para descargar todos los paquetes.

NOTA: Hoy miercoles 27 de Junio del 2019 a las 9:47PM tiempo de mi Tijuana, Baja, Mexico. El sitio de OCS Inventory ya reparo el sitio, aqui les coloco los pasos a seguir para descargar los paquetes.

Accesamos el portal OCS Inventory NG

Damos click en cualquier enlace

Ingresamos nuestos datos y click al boton.

Listo, ya podemos descargar los paquetes.

14; Instalamos el  Ocs Inventory NG Server.

--Descargamos el Ocs Inventory Server REPO.
cd /opt/
wget https://rpm.ocsinventory-ng.org/ocsinventory-release-latest.el7.ocs.noarch.rpm

--instalamos rpm.
rpm -ivh ocsinventory-release-latest.el7.ocs.noarch.rpm

--instalamos el servidor'
yum install ocsinventory-server -y

15; Instalamos el Ocs Inventory NG Management Server

--Descargamos el paquete del sitio oficial.
wget https://github.com/OCSInventory-NG/OCSInventory-ocsreports/releases/download/2.6/OCSNG_UNIX_SERVER_2.6.tar.gz

--descomprimimos el paquete
tar -xzf OCSNG_UNIX_SERVER_2.6.tar.gz

--accesamos el directorio.
cd OCSNG_UNIX_SERVER_2.6

--ejecutamos el script de instalacion e iniciar las preguntas y respuestas...
NOTA: Recordar que nos debe dar caritas ";-)" revisar estos detallitos...
./setup.sh

NOTA: Aqui sigan el video con los pasos de favor.

-debemos recibir un mensaje como este
+----------------------------------------------------------------------+
|        OK, Administration server installation finished ;-)           |
|                                                                      |
| Please, review /etc/httpd/conf.d/ocsinventory-reports.conf
|          to ensure all is good and restart Apache daemon.            |
|                                                                      |
| Then, point your browser to http://server//ocsreports
|        to configure database server and create/update schema.        |
+----------------------------------------------------------------------+

16; Reiniciamos apache y accesamos Ocs Inventory NG.

--reiniciamos apache
systemctl restart httpd

NOTA: Seguir el video en este punto para los siguientes pasos.

--en el navegador apuntamos a el url: http://ip-servidor/ocsreports

--ingresamos los parametros de la bd:

mysql login: ocs
mysql password: ocs
name of the database: ocsweb
mysql hostname: localhost

--autorizar a el GUI actualizar la bd.

--seguir las instruccion del GUI de eliminar "install.php"

--seguir las instruccion del GUI para cambiar la clave del usuario ocs en la base de datos
set password for 'ocs'@'localhost'=password('mipassword');
flush privileges;

--actualizar los siguientes archivos de Ocs Inventory NG para cambiar la clave.
/etc/httpd/conf.d/z-ocsinventory-server.conf
parametro: PerlSetVar OCS_DB_PWD mipassword
/usr/share/ocsinventory-reports/ocsreports/dbconfig.inc.php
define("PSWD_BASE","ocs"); pasa a ==> define("PSWD_BASE","mipassword");

--reiniciar apache
systemctl restart httpd

--revisamos el GUI

17; Fin de instalacion del servidor Ocs Inventory NG en Centos 7.


Instalacion de los Agentes en Linux/Unix.

NOTA: Ubuntu 18LTS.

Ahora viene la descripcion de los pasos usados para la instalacion de los Agentes(clientes) en Linux/Unix.

=====Agente para Ubuntu 18=====

1; Actualizar sistema

apt-get update && apt-get upgrade

--reiniciar sistema

shutdown -r now

2; Instalar las siguientes librerias:

--necesitamos todos estos paquetes:

libmodule-install-perl 
libxml-simple-perl  
libnet-ip-perl 
libwww-perl  
libdata-uuid-perl 
libcrypt-ssleay-perl 
libnet-snmp-perl 
libproc-pid-file-perl 
libproc-daemon-perl 
smartmontools 
read-edid 
nmap 
libnet-netmask-perl
make

apt-get install libmodule-install-perl libxml-simple-perl  libnet-ip-perl libwww-perl libdigest-md5-perl libdata-uuid-perl libcrypt-ssleay-perl libnet-snmp-perl libproc-pid-file-perl libproc-daemon-perl libsys-syslog-perl smartmontools read-edid nmap libnet-netmask-perl make

3; Descargar el agente para Unix desde la pagina oficial

--Nos movemos a el directorio /opt
cd /opt/

--descargar agente para Unix de la pagina oficial.
wget https://github.com/OCSInventory-NG/UnixAgent/releases/download/v2.4.2/Ocsinventory-Unix-Agent-2.4.2.tar.gz

--descomprimimos el paquete y accesamos el directorio.
tar -xzf Ocsinventory-Unix-Agent-2.4.2.tar.gz
cd Ocsinventory-Unix-Agent-2.4.2

--iniciamos al instalacion
perl Makefile.PL
make
make install

--al terminar el ultimo paso inicia la instalacion en el sistema, preguntas y respuestas
NOTA: Aqui seguir el video con los pasos

--al final si todo sale bien y enviamos la info de este agente a Ocs Server obtenemos un mensaje similar a este:

New settings written! Thank you for using OCS Inventory

4; Accesar el GUI Ocs Inventory NG y revisar si ya aparece este cliente(agente)

5; Fin

======Agente para Centos 7======

NOTA: Aqui segui los pasos que use a el inicio del post referentes a el servidor OCS Inventory NG para Centos7 hasta el paso 3, a excepcion que aqui el hostname es otro claro :-).

1; Actualizar el sistema y reiniciar el sistema al terminar.

yum update -y
shutdown -r now

2; Instalacion de utilerias.
yum install wget -y

3; Instalacion de Repositorios epel

yum install epel-release -y

4; Instalar las siguientes librerias

--instalamos librerias basica 

yum install -y perl-XML-Simple perl-devel perl-Compress-Zlib perl-Net-IP perl-Digest-MD5 perl-Net-SSLeay perl-Data-UUID
yum install -y perl-Crypt-SSLeay perl-Net-SNMP perl-Proc-Daemon perl-Proc-PID-File perl-Sys-Syslog pciutils smartmontools
5; Instalar agente para Unix.

--descargamos el mismo agente que usamos para Ubuntu 18.

wget https://github.com/OCSInventory-NG/UnixAgent/releases/download/v2.4.2/Ocsinventory-Unix-Agent-2.4.2.tar.gz

--descomprimimos el archivo
tar -xzf Ocsinventory-Unix-Agent-2.4.2.tar.gz

--entramos a el directorio
cd Ocsinventory-Unix-Agent-2.4.2

--iniciamos la instalacion
perl Makefile.PL
make 
make install

Cualquier duda sugerencia o error bienvenidos ya sea aqui o en la seccion de comentarios del canal de Youtube, espero les sea de utilidad tanto como me ha servido a mi, nos vemos hasta el siguiente capitulo saludos.