Instalación y configuración rsync

Vamos a proceder con la instalación y configuración en un equipo linux, en mi caso ubuntu del servicio rsync para poder recibir, en este caso copias mediante delta copy, esta parte se verá en otra entrada, desde un server windows.

  • Instalar servicio rsync.

sudo apt-get install rsync

  • Configurar rsync

sudo nano /etc/rsyncd.conf ==> Es posible que no exista el archivo, por lo tanto hay que crearlo.

Dentro de este archivo configuramos desde el uid y el gid hasta la ubicación en local de la carpeta de destino de la copia, un ejemplo sería:

uid=usuario

gid=usuario

user chroot = yes

pid file = /var/run/rsyncd.pid

log file = /var/log/rsyncd.log

[nombre_carpeta_remota]

path = /home/usuario/carpeta_remota

comment = Backup carpeta_remota

read only = false

  • En el archivo /etc/defaults/rsync

Colocar RSYNC_ENABLE=false a true ==> En caso de que con la configuración anterior no funcione

  • Para comprobar que el demonio está en ejecución

sudo service rsync status

Y con estos simples pasos tenemos nuestro servidor ubuntu preparado para recibir copias mediante rsync desde cualquier otra máquina.

Instalación y configuración de MODSECURITY

Después de algún tiempo con el blog abandonado, voy a tratar de seguir metiendo diferentes tutoriales.

Hoy voy a hablar de modsecurity, un firewall implementado en apache para monitorización y bloqueo de diferentes tipos de ataques.

1. Instalar el módulo ModSecurity
sudo apt-get install libapache2-modsecurity

Si al iniciar apache da el siguiente error
(EAI 5)No address associated with hostname: mod_unique_id: unable to find IPv4 address of
Esto se debe a que ModSecurity requiere del módulo mod_unique_id, para evitar este error habrá que tener habilitado este servicio, para ello habrá que introducir en el host en localhost el nombre del dominio que no resuelve apache, por ejemplo sudo nano /etc/hosts ==> 127.0.0.1 localhos dominio_a_resolver
Ahora reiniciamos el servicio ==> sudo service apache2 restart

2. Dentro del directorio modsecurity /etc/mosecurity renombrar o copiar el archivo cambiando la extensión cp modsecurity.conf-recommended modsecurity.conf.
Este es el archivo de configuración, si queremos que bloquee los ataques habrá que modificar el parámetro SecRuleEngine On.

3. Las reglas genéricas se encuentran en /usr/share/modsecurity-crs/, para activarlas hay que proceder con apache creando enlaces simbólicos entre el directorio donde esté la regla a activar y ativated-rules.
Ejemplo: Dentro del directorio /usr/share/modsecurity-crs/activated_rules, sudo ln -s ../base_rules/modsecurity_crs_41_sql_injection_attacks.conf.
De esta forma la regla estará preparada para actuar pero hay que activar modsecurity en apache.

4. Para activar modsecurity en apache vamos a /etc/apache2/sites-enabled y editamos el archivo 000-default.conf, añadiendo a la definición del VirtualHost las siguientes líneas:
<IfModule security2_module> 
SecRuleEngine On 
#SecRuleEngine DetectionOnly 
Include "/usr/share/modsecurity-crs/*.conf" 
include "/usr/share/modsecurity-crs/activated_rules/*.conf 
#Include "/usr/share/modsecurity-crs/activated_rules-testing/*.conf" 
</IfModule> 
De tal forma que indicamos que SecRuleEngine esté activo, donde están todas las reglas que tiene que tener en cuenta y donde están las reglas que están activas.

Otra opción que es la que vamos a usar. Creamos un archivo con nombre sec.conf dentro de la ruta /etc/apache2, en dicho archivo colocamos la configuración anterior:
<IfModule security2_module> 
SecRuleEngine On 
#SecRuleEngine DetectionOnly 
Include "/usr/share/modsecurity-crs/*.conf" 
include "/usr/share/modsecurity-crs/activated_rules/*.conf 
#Include "/usr/share/modsecurity-crs/activated_rules-testing/*.conf" 
</IfModule> 

<Directory /var/www/html/test>
  ==> Aquí hay que colocar la ruta que no queremos que se apliquen las reglas de modsecurity
        SecRuleEngine Off

</Directory>

Una vez hecho esto editamos el archivo /etc/apache2/sites-enabled/000-default.conf y colocamos al final dentro del VirtualHost la siguiente línea ==> includ "/etc/apache2/sec.conf"
También vamos a copiar el archivo sec.conf en otro archivo que se llame sec_back.conf para que en el caso de tener que quitar las reglas de seguridad por algún tipo de conflicto en un momento dado, solo tengamos que hacer echo '' > sec.conf, de tal forma que limpiemos todas las reglas y tengamos una copia de dichas reglas en sec.bak.conf

Ahora recargamos o reiniciamos el servicio de apache, sudo service apache2 restart

Se puede comprobar si el funcionamiento es correcto, revisando el log tail -f /var/log/apache2/modsec_audit.log

REGLAS MODSECURITY

– crs_20_protocol_violations.conf: Detección de violaciones de los protocolos HTTP.

– crs_21_protocol_anomalies.conf: Regla contra anomalias en el proceso de información.

– crs_23_request_limits.conf: Limitar los procesoso y los ataques DDOS

– crs_30_http_policy.conf: Politicas para el tratamiento de http.

– crs_35_bad_robots.conf: Protección contra robots.

– crs_40_generic_attacks.conf: Protección contra ataques generales.

– crs_41_sql_injection_attacks.conf: Protección contra inyección de código SQL.

– crs_41_xss_attacks.conf: Protección contra inyección de código JAVASCRIPT.

– crs_42_tight_security.conf: Seguridad estricta.

– crs_45_trojans.conf: Protección contra troyanos.

– crs_47_common_exceptions.conf: Regla para evitar falsos positivos como callbacks o Google Analytics.

– crs_60_correlation.conf: Regla que facilita la recolección de datos sobre ataques exitosos y fallidos en le servidor.

Y hasta aquí la instalación y configuración de modsecurity

Instalación MySQL 8.0

En esta entrada voy a explicar como instalar MySQL 8.0, ya que aunque la versión 5 sigue funcionando solo es cuestión de tiempo que haya que actualizarse.

Supongamos que tenemos instalada otra versión anterior de este gestor de base de datos. El primer paso será proceder a su desinstalación, para eso vamos a seguir los siguientes pasos:

  • sudo apt-get –purge remove mysql-client mysql-server mysql-common
  • sudo apt-get autoremove
  • Y podemos borrar el directorio: sudo rm -rf /etc/mysql/

Una ver realizada la desinstalación de todos los archivos vamos a proceder a instalar la nueva versión, para ello seguimos los siguientes pasos:

Y con esto ya tenemos instalada la versión 8.0 de MySQL. Como se puede observar es un procedimiento bastante sencillo

Instalación Mongodb en ubuntu

Por problemas de agenda no he podido actualizar el blog todo lo que quiero, así que intentaré ir metiendo cositas poco a poco y cuando el trabajo y la vida en general me lo permita.

Hoy vamos a ver como instalar Mongodb. Previamente voy a explicar que es Mongodb para quien no lo sepa.

Como bien dice su definición en la Wikipedia ( no voy a engañar a nadie), Mongodb es un gestor de base de datos de código abierto y orientado a documentos, esto que quiere decir, que en vez de guardar tablas y datos como hacen todos los gestores de base de datos relacionales como son MySQL, Oracle, etc lo hace guardando la estructura de los datos con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida.

Hace unos días me vi obligado a tener que instalarlo para una aplicación que guarda los datos en este sistema y perdí muchas horas en la instalación hasta que di al final con la tecla, así que para evitar que le pase a mas gente lo mismo, voy a explicar su instalación-

INSTALACION:

  • Descargar el repositorio desde el cual vamos a realizar la instalación, esto se debe a que como en muchas otras aplicaciones los repositorios de ubuntu no están todo lo actualizados que deberia.
  • sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv 0C49F3730359A14518585931BC711F9BA15703C6
  • echo «deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu «$(lsb_release -sc)»/mongodb-org/3.4 multiverse» | sudo tee /etc/apt/sources.list.d/mongodb-3.4.list
  • sudo apt-get update
  • apt-get install mongodb-org=3.4.9 mongodb-org-server=3.4.9 mongodb-org-shell=3.4.9 mongodb-org-mongos=3.4.9 mongodb-org-tools=3.4.10

Una vez instalado, aquí viene la parte que tantas vuelta le dí. Hay que levantar el servicio y para ello a diferencia de otros programas que con su instalación se instala el demonio que se encarga de levantar y para el servicio, con Mongodb no se instala y hay que crearlos a mano.

Obtener estadísticas de nuestra página con GOACCESS

¿Que es goaccess?

Es un software de código abierto que nos permite analizar los diferentes logs de nuestros servicios de tal forma que podemos obtener toda la información de acceso a nuestras páginas modo gráfico.

Empecemos con la instalación en un ubuntu 16.04:

Entramos en nuestro terminal y ponemos:

  1. sudo apt-get -y install libncursesw5-dev gcc make
  2. sudo apt-get -y install libgeoip-dev libtokyocabinet-dev

A continuación nos descartamos goaccess:

Ahora lo descomprimimos:

  • tar -xzvf goaccess.1.2.tar.gz

A continuación procedemos a compilarlo:

  1. cd goaccess-1.2
  2. sudo make
  3. sudo make install
  4. sudo ln -s /usr/local/bin/goaccess /usr/bin/goaccess

Una vez instalado metemos en la carpeta /var/log/apache2 los log que nos interesan para sacar las estadísticas o simplemente consultar de modo gráfico y ejecutamos el siguiente comando

sudo goaccess /var/log/apache2/access.log –log-format=COMBINED -a -o /var/www/html/report.html

Esto nos generará un archivo report.html en el directorio /var/www/html y podremos consultarlo desde nuestro navegador web introducioendo la siguiente dirección: htpp://localhost/report.html

Y con esto hemos terminado por hoy

IPTABLES guardar las reglas de forma permanente

¿Que es IPTABLES? Iptables es una de las herramientas más avanzada de linux para el filtrado de paquetes que entran o salen de un servidor o de un pc. Iptables se encarga de analizar cada uno de los paquetes de tráfico red y decide que hace con él, si lo deja pasar o no en función de unas reglas que hemos definido previamente.

Cual es uno de problema al que nos enfrentamos con iptables, en mi caso cuando decido bloquear el acceso a un ip determinada, ya que dicha ip por cualquier motivo ha realizado un comportamiento que no considero el adecuado, esta ip se queda guardada en un registro, el cual se pierde al reiniciar el ordenador. En principio los servidores no están diseñados para reiniciarse y se pueden tirar mucho tiempo encendidos de forma continua, pero si por cualquier motivo reiniciamos, perdemos ese listado de ips bloqueadas. Para evitar eso tenemos la opción de instalar un paquete de iptables y guardar dichas ips en un archivo en texto plano, de tal forma que no se pierdan al reiniciar.

  1. Instalar dicho paquete.
    • sudo aptitude install iptables-persistent
  2. Dar permisos al siguiente directorio:
    • sudo chmod -R 755 /etc/iptables/
  3. En este archivo se guardan las reglas que tenga iptables, pero para ello tenemos que ejecutar los siguientes comandos:
    • iptables-save > /etc/iptables/rules.v4 ==> Para la ip versión 4
    • iptables-save > /etc/iptables/rules.v6 ==> Para la ip versión 6
  4. Ahora hay que colocar en el crontab de root las siguientes líneas:
    • 00 00 * * * /sbin/iptables-save > /etc/iptables/rules.v4
    • 00 00 * * * /sbin/iptables-save > /etc/iptables/rules.v6

Estas líneas del crontab se colocan forzar a que cada día a las 12 de la noche se guarden las reglas con las ips bloqueadas que están en los archivos /sbin/iptables-save en los archivos que hemos creado previamente.

El archivo rules.v4 deberá tener un contenido similar a:

-A INPUT -s xxx.xxx.xxx.xxx -p tcp -m tcp –dport xx -j DROP

Quiero hacer mención que dichas ips se añaden en mi caso de forma automática cuando realizan tres intentos de inyectar código SQL.

Instalando y configurando APACHE2 por puertos

Aprovechando que por un problema con los drivers de mi tarjeta gráfica me he visto obligado a reinstalar el sistema operativo con todo lo que ello conlleva, voy a explicar como instalar y configurar apache2 para que redireccione a distintos directorios en función del puerto por el que accedamos, yo suelo hacerlo así por su simplicidad de configuración y ademas me permite en mi router abrir y redireccionar puertos de tal forma que si abro por ejemplo el 5000 redireciono hacia el 8080 por ejemplo y eso me lleva a una aplicación, en cambio si entro por el 6000 por ejemplo este me lleva a mi puerto interno 10000 que me lleva a otro directorio y a otra aplicación, con el ejemplo se verá mejor.

1- El primer paso es instalar apache2, para ello usamos el siguiente comando. sudo apt-get install apache2

2- Una vez instalado vamos a su directorio, el cual está en /etc/apache2, una vez dentro vemos la siguiente estructura:

Como podemos ver en la imagen, hay una serie de archivos y de directorios, voy a explicar solo los que nos interesan, porque como ya he dicho esta configuración lo mejor que tiene es su sencillez y apache es un servidor web muy potente y cuanto mas profundizamos en su configuración como es normal mas se complica.

  • apache2.conf, es el archivo general de configuración de apache2
  • sites-available, sitios habilitados, en este directorio meteremos la configuración de los servidores virtuales que redireccionan por puertos.
  • sites-enabled, sitios disponibles, aquí activaremos los servidores virtuales que hemos creado en sites-available.
  • ports.conf, en este archivo vamos a activar los puertos que vamos a usar.

Empezamos con el archivo apache2.conf, en el cual vamos a definir las rutas de los directorios a los que queremos redirigir nuestro acceso vía web, para ello editamos el archivo, recordemos que su ruta es /etc/apache/apache2.conf, y buscamos la línea <Directory /var/www>……</Directory> y a continuación hacemos nuestras modificaciones. Una posible configuración sería la que aparece en la imagen a continuación.

Este es un ejemplo para que se vea la configuración y donde se colocaría.

A continuación nos vamos al directorio sites-available y nos debe aparecer un contenido similar al siguiente.

Accedemos a 000-default.conf y realizamos la configuración siguiente:

Como podemos observar configuramos un servidor virtual o VirtualHost por cada puerto y ha dicho servidor virtual le indicamos la ruta a la que va a apuntar o redireccionar, de tal forma que cuando entremos mediante un navegador por ejemplo a localhost:10000, este nos muestre el contenido del directorio /home/damian/Datos/desarrollo y cuando lo hagamos a través de localhost:8080 el navegador nos muestre el contenido del directorio /home/damian/Datos/apache/web.

Por último configuramos el archivo ports.conf añadiendo los puertos que vamos a usar y utilizando para ello la sentencia Listen «puerto», como se ve en la imagen a continuación:

Y una vez terminada la configuración reiniciamos apache2, sudo service apache2 restart, sino hay ningún error, apache2 ya estará funcionando y para acceder a nuestro directorios que acabamos de configurar solo habrá que abrir un servidor y colocar las siguientes rutas:

  • localhost:8080 y nos redirigirá a una de ellas.
  • localhost:10000 y nos redirigirá a otra de ellas.

Es una configuración muy simple como se puede ver y como adelantaba al principio de la entrada en nuestro router podemos abrir puertos externos y redirigirlos a estos internos y poder acceder a nuestras aplicaciones, aunque esto último no es lo mas seguro, sería mucho mas seguro acceder a través de una VPN a nuestro servidor y desde ahí ya nos podríamos mover mediante el navegador web como si estuviéramos conectados en local, pero eso es tema para otra entrada.

Vagrant descarga y ejecución de una máquina virtual

Vagrant, para quién no lo conozca, es una herramienta para crear entornos de desarrollo basados en máquinas virtuales, o en otras palabras poder crear una máquina virtual desde cero en pocos minutos. Una de sus grandes ventajas es que con un par de comandos levantas un sistema operativo independiente del anfitrión y totalmente configurado en muy poco tiempo.

¿Como se instala una máquina virtual con Vagrant? Hay varios sistemas, para realizar esta instalación, yo voy a poner el que más he usado.

En el siguiente enlace está la guía oficial en inglés pero es muy simple de seguir: https://www.vagrantup.com/docs/boxes.html

Requisitos previos

Tener instalado un software gestor de máquinas virtuales, en este caso VirtualBox.

Guía de instalación

  1. Lo primero sino tenemos claro que máquina vamos a instalar, debemos irnos a la página oficial con el listado de todas las máquinas que vagrant nos ofrece a día de hoy, dicha página es: http://www.vagrantbox.es/
  2. Dentro del amplio catálogo de máquinas elegimos la que mas se adapte a nuestras necesidades. Yo voy a instalar un Ubuntu 16.04 daily
  3. Ahora procedemos a instalar vagrant en nuestro sistema operativo, en mi caso lo voy a instalar en un ubuntu 16.04, tecleo:
    • sudo apt install vagrant
  4. Una vez que tenemos instalado vagrant y sabemos que máquina vamos a instalar empezamos con la instalación:
    • Descargamos la máquina, para ello nos colocamos en el directorio donde queremos descargarla y ponemos el siguiente comando: vagrant box add {nombre de la maquina} {url}. La url de la máquina la sacamos del listado anterior, en mi caso: vagrant box add ubuntu_server https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box
    • Cuando termine la descarga procedemos a iniciar la máquina virtual con el comando vagrant init {nombre de la máquina}, este comando nos crea el archivo de configuración Vagrantfile. Este archivo es enormemente importante, ya que todo tipo de personalización que queramos hacer para futuras instalaciones tenemos que hacerlas en él. Eso será motivo de una nueva entrada mas adelante.
    • Por último una vez que ya tenemos el archivo Vagrantfile creado solo nos queda levantar nuestra nueva máquina virtual y para ello ejecutamos el siguiente comando, vagrant up y con esto ya tenemos la máquina virtual funcionando.
    • Para acceder a esta máquina virtual solo tenemos que teclear vagrant ssh y accederemos por terminal a la nueva máquina virtual

Como se puede observar hemos tardado unos 15 minutos a lo sumo de no tener ninguna maquina virtual operativa a tener funcionando una máquina nueva. Para otra entrada veremos como configurar algo más esta máquina para que cuando ejecutemos vagrant up, dicha máquina virtual esté totalmente configurada para nuestras necesidades.

Un saludo

MySQL y MONGODB en Nagios

Hoy iba a ser una entrada corta, pero me he venido arriba y he unido la entrada de MySQL con la de MONGODB, creo que controlar los sistemas de gestión de bases de datos es un punto importante a tener en cuenta, ya que considero que es muy importante verificar que un servicio como MySQL o MONGODB están funcionando correctamente para que en caso de caída poder restaurar el servicio a la mayor brevedad posible.

Como va a ser una entrada algo larga vamos a empezar ya y lo vamos a hacer con MySQL:

1- En el archivo /usr/local/nagios/etc/objects/commands.cfg, definimos el servicio a controlar colocando el siguiente comando, de tal forma que Nagios reconozca y sepa interpretar la información que le va a llegar:

2- Accedemos al MySQL que queremos monitorizar y creamos el usuario nagios y le damos permisos, en el ejemplo está sobre toda la base de datos ya que necesita poder entrar al gestor de base de datos que va a controlar, en este caso MySQL, esta parte quizás sea la mas delicada, ya que estamos dando acceso a un usuario a toda la base de datos, de ahí lo importante de la seguridad de la contraseña del usuario Nagios al crearlo:


3- Comprobar que hay conexión desde el servidor nagios a la base de datos a monitorizar utilizando el siguiente comando:

sudo -s -u nagios /usr/lib/nagios/plugins/check_mysql -H xxx.xxx.xxx.xxx. -u nagios -p password

Sustituir las xxx.xxx.xxx.xxx por la ip del equipo que contiene el gestor de base de datos MySQL

4- En el servidor nagios en el archivo /usr/local/nagios/etc/servers/clients.cfg vamos a definir el servicio MySQL indicando en el apartado de host_name el nombre del servidor que contiene el gestor de base de datos.

5- Por último reiniciamos nagios, mediante su comando de reinicio.

sudo service nagios restart

Y con esto ya tendríamos configurado y funcionando la monitorización de MySQL en nuestro servidor Nagios

Ahora vamos con MONGODB

1- El primer paso es descargarnos los plugins de mongodb, lo que haremos desde una cuenta de github y posteriormente los instalamos, a continuación indico todos los pasos:

Y a continuación descargamos e intalamos los drivers:

Una vez bajados e instalados los drivers que acabo de indicar tenemos que definir los nuevos servicios de MONGODB, en el servidor Nagios, en el archivo /usr/local/nagios/etc/objects/commands.cfg, colocamos los siguientes comandos, de la misma forma que hemos hecho con el servicio MySQL:

Una vez hecho todo esto, ya solo nos queda descargar el archivo nagios-plugin-mongodb-master y el archivo que hay en su interior llamado check_mongodb.py colocarlo en el directorio /usr/local/nagios/libexec/nagios-plugin-mongodb, del servidor Nagios, pero como este último directorio no estará creado previamente lo crearemos.

La parte de instalación de mongodb está sacada de la página de http://www.juanluramirez.com, para su instalación en Nagios 3 y nosotros estamos con Nagios 4, por lo tanto he tenido que adaptarlo para nuestra versión.

Una vez realizados todos estos pasos, ya debemos de tener en el panel de control una línea con la monitorización de MONGODB.

Bueno y con esto en principio termino con Nagios y su configuración, pero por la red podeis encontrar mucha información, como personalizar el panel de control, crear mapas con la ubicación de los servidores, monitorizar diferentes servicios aparte de los de aquí indicados, etc…

Nagios: Monitorizar ram

Siguiendo con el tema Nagios, voy a explicar como monitorizar la memoria ram de un servidor que previamente ya tenemos configurado como cliente Nagios.

Nos ponemos en el caso de que hemos leído las entradas anteriores y ya tenemos un servidor Nagios montado y configurado y uno o varios clientes que están configurados y vemos sus parámetros en el interfaz de Nagios

Pues ahora vamos a configurar tanto el servidor con el cliente para monitorizar el estado de la memoria ram de los clientes.

El primer paso es descargarnos el plugin que hay que colocar en los equipos de los cuales queremos saber el estado de su ram, tenéis que buscarlo como check_mem para nagios

Este archivo una vez descargado, hay que colocarlo en todos los equipos que necesitamos controlar el estado de su memoria ram, la ruta es la siguiente: /usr/libnagios/plugins, aseguraros que los permisos son los correctos. Nos vamos al servidor Nagios y tenemos que agregar en el mismo archivo que configuramos los servicios que íbamos a controlar de cada uno de los servidores monitorizados, la siguientes líneas:

define service {
use generic-service
host_name cliente
service_description Check RAM
check_command check_nrpe! check_mem
}

Una vez hecho esto recordemos que en el servidor Nagios en su archivo /etc/nagios/nrpe.cfg colocamos los comandos de los servicios a controlar y allí fue donde colocamos los diferentes niveles de warning y una de estas línea era:

command[check_mem]=/usr/lib/nagios/plugins/check_mem -f -w 10 -c 5

Así que sin saberlo todavía ya teníamos el servidor preparado para monitorizar la ram de cualquier otro servidor, a falta del plugin y de definir el servicio que es lo que acabamos de hacer.

Ahora reiniciamos el servidor con: sudo service nagios restart

Y listo ram monitorizándose. En siguientes entradas haremos lo mismo con el servicio mysql y con mongodb, dos gestores de bases de datos que siempre nos interesa saber que están en ejecución.