viernes, 30 de septiembre de 2016

Seguridad básica de un servidor en Internet: Acceso y Firewall

Típico post que acabas leyendo cuando las cosas malas ya han pasado, lo sé. De todos modos, más vale tarde que nunca, ¿no?
Este post se adapta a cualquier sistema operativo, aunque algunos comandos pueden variar.

Acceso al servidor (Las cosas por defecto, caca)


Estas medidas pueden ser tomadas en su totalidad o solo algunas de ellas, pero os recomendaría no dejar nada.

Usuarios 


Cambiamos la contraseña de root:

passwd

Y las de cualquier usuario que nos hayan dado por defecto o, directamente, los eliminamos y creamos uno nuevo que será con el que trabajemos:

userdel usuariopordefecto
useradd miusuario
passwd miusuario

Posteriormente vamos a deshabilitar el acceso como root por ssh al servidor y accederemos como miusuario, así que, para evitarnos trabajo, vamos a dejar que miusuario tenga privilegios para hacer lo que le plazca:

nano /etc/sudoers


Buscamos root ALL=(ALL:ALL) ALL y añadimos debajo:

miusuario ALL=(ALL:ALL) ALL



Credenciales


Por muy larga y compleja que sea nuestra contraseña, siempre es más fácil, rápido y seguro tener un par de claves para acceder, así que vamos a generarlas. Suponiendo que tenemos Linux como sistema operativo en nuestro PC, el procedimiento es el siguiente:

ssh-keygen

Una vez generadas, tendremos un fichero con la clave privada, por defecto  ~/.ssh/id_rsa y otro con la clave pública, que por defecto es  ~/.ssh/id_rsa.pub
Pasamos la clave pública al servidor:


ssh-copy-id miusuario@miserver

En el caso de estar en Windows, podemos utilizar PuTTYgen, que nos creará una pareja de claves, la privada  nos la quedamos nosotros y la pública la pasamos al servidor copiándola en el fichero   /home/miusuario/.ssh/authorized_keys.



SSH


Vamos a:
  • Cambiar el puerto de conexión del 22 a uno cualquiera no utilizado(Por ejemplo: 597).
  • Deshabilitar el acceso root.
  • Deshabilitar el acceso por contraseñas.
nano /etc/ssh/sshd_config

Port 597
PermitRootLogin no
PasswordAuthentication no

Reiniciamos el servicio:

systemctl restart sshd

Ahora, antes de nada, es importante comprobar que todo funciona como debiera para no llevarnos sustos. Intentamos conectarnos al servidor iniciando otra conexión (SIN CERRAR la actual) y comprobamos que todo vaya bien. Qué tiene que pasar:
  • No nos dejará conectarnos por el puerto 22.
  • Se establece la conexión por el puerto 597.
  • Una vez introducido el usuario, entramos directamente sin necesidad de introducir contraseña.
  • Al mover nuestra clave privada de lugar e intentar conectarnos, no nos deja.

Firewall

En este apartado hay varias alternativas que se pueden tomar, pero en mi caso recomiendo utilizar APF(Advanced Policy Firewall) ya que tiene una enorme cantidad de opciones que puede que lleguemos a utilizar algún día.

1. Instalamos APF:

cd /usr/local/src
wget http://www.rfxn.com/downloads/apf-current.tar.gz
tar -xzvf apf-current.tar.gz
cd apf-*
./install.sh

2. Una vez la instalación se haya completado, tenemos que editar el fichero de configuración de APF para abrir los puertos que necesitamos (pongamos que necesitamos abrir, además del 597 para ssh, el 80 para una web):

nano /etc/apf/conf.apf

DEVEL_MODE="0"
IG_TCP_CPORTS="80,597"

3. Iniciamos el firewall:

apf -s

Además de esto, APF cuenta también con unos ficheros en los que podemos añadir IPs o rangos de IPs denegadas/permitidas. Estos ficheros son /etc/apf/allow_hosts.rules/etc/apf/deny_hosts.rules.

miércoles, 28 de septiembre de 2016

Zabbix 3.2: Instalación y configuración [CentOS 7.2]

zabbix instalacion

Zabbix se presenta como una gran herramienta de código abierto orientada a la monitorización de grandes cantidades de dispositivos, y tras darle bastante caña, puedo asegurar que cumple muy bien con lo prometido, así que hoy veremos como hacer una instalación bastante simple entre un server y un agent.

Conceptos importantes

  • Server: encargado de recopilar la información de los agents, almacenarla, procesarla y mostrarla en el interfaz web.
  • Agent: máquina monitorizada. Un server puedes ser a su vez un agent.
  • Proxy: encargado de recopilar la información de los agents, almacenarla y reenviarla al server. No es esencial para el funcionamiento de Zabbix sin embargo, sí es muy recomendable y hablaremos de él en el futuro.
  • Gráfica: representación visual de los datos. Por ejemplo: tráfico en eth0
  • Screen: agrupación de gráficas.

Instalación

- Server

Aunque existen tres maneras diferentes de hacer la instalación, nosotros la vamos a hacer desde los paquetes del repo de Zabbix.

1. Instalamos el paquete de configuración del repositorio:

rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

2. Instalamos los paquetes necesarios para el server:

yum install zabbix-server-mysql zabbix-web-mysql -y

Configuración base de datos 

En nuestro caso estamos utilizando MariaDB, pero otros  gestores de bases de datos están soportados.
Una vez la instalación se haya completado, deberemos configurar una base de datos por medio de los scripts que la propia instalación nos proporciona. 
mysql -uroot -pcontraseñaroot
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'contraseña';
mysql> quit;
cd /usr/share/doc/zabbix-server-mysql-3.2.3/
gunzip create.sql.gz
mysql -uzabbix -pcontraseña  zabbix < create.sql

Configuración y arranque servicios del server

1. Modificamos el fichero de configuración:

vi /etc/zabbix/zabbix_server.conf

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=contraseña

2. Arrancamos el servicio:

systemctl start zabbix-server

Configuración de PHP

1. En el fichero /etc/httpd/conf.d/zabbix.conf podemos modificar el comportamiento de nuestro frontend, pero por lo de ahora solo vamos a descomentar y editar la opción date.timezone:


php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value always_populate_raw_post_data -1
php_value date.timezone Europe/Madrid

Para saber cual es tú timezone, aquí tienes una lista con todas las posibles.

2. Reiniciamos apache:

systemctl restart httpd

Una vez llegados a este punto, ya podemos acceder al interfaz web, desde el que añadiremos hosts, configuraremos que datos queremos monitorizar y demás, pero vamos primeramente a hacer la instalación de un agent

- Agent


1. Instalamos el paquete de configuración del repositorio:

rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

2. Instalamos zabbix-agent:

yum install zabbix-agent -y

3. Editamos el fichero de configuración

vi /etc/zabbix/zabbix_agentd.conf

Server=zabbix.server         # Ip del server
ServerActive=zabbix.server   # Ip del server
Hostname=el_agent            # Nombre que le daremos posteriormente a este host para su monitorización

4. Reiniciamos el servicio:

systemctl restart zabbix-agent


Interfaz web

A partir de aquí, ya solo queda añadir el host agent que hemos configurado al server. Esto se lleva a cabo desde el interfaz web y se plantea mucho más intuitivo que todo lo que llevamos hecho.
Si la instalación se realizó correctamente, al acceder a http://localhost/zabbix desde nuestro server deberíamos ver algo como esto:

Login

Con el usuario Admin y la contraseña zabbix entramos con privilegios de superusuario y lo siguiente a hacer es crear otra cuenta, darle privilegios de superusuario, ponerle una contraseña seria y deshabilitar la cuenta por defecto, Admin. Es algo bastante fácil de hacer, por lo que no voy a hablar de ello pero si tenéis alguna duda, aquí os dejo la documentación oficial hablando al respecto.

Creación de un nuevo host

1. Creamos un nuevo host
Configuration > Hosts > Create host

1.1 Pestaña Host:


1.2 Pestaña Templates:

Select > Seleccionamos los que queramos (en este caso "Template OS Linux") > Add

1.3 Añadimos el nuevo host desde el botón "Add" que aparece en cualquiera de las pestañas:


¡Listo!

De aquí a unos segundos, se empezarán a crear las gráficas para nuestro nuevo host y podremos ir viendo todo lo que va pasando. De aquí en adelante, al ser todo a base de interfaz web (a no ser que os interese utilizar la API para la gestión en masa) solo os queda cacharrear y descubrir todo lo que Zabbix nos ofrece.

Para más información, os dejo la documentación por aquí.

lunes, 26 de septiembre de 2016

NFS: Instalación, configuración y reglas firewall [Ubuntu y CentOS]

Las pelis y series ocupan demasiado espacio y somos demasiado vagos como para ponernos a mover hardware de un lado para el otro, así que aprovecharemos que Linux nos ofrece NFS para compartir espacio de almacenamiento y nos ahorramos el esfuerzo.

NFS funciona con un modelo cliente-servidor, por lo que vamos a hacer la instalación uno por uno.

Server side (Ubuntu 14.04.4)



1. Como siempre, antes de instalar nada, actualizamos:

apt-get update -y

2. Instalamos los paquetes necesarios para el server:

apt-get install nfs-common nfs-kernel-server -y

3. Editamos /etc/exports para que se ajuste a nuestras necesidades, en nuestro caso:

#Ubicación a compartir      IP/máscara cliente               Opciones                 
/home/almacen      192.168.0.10/255.255.255.0(rw,sync,no_subtree_check)

  •  En este caso, la IP con la que vamos a compartir hace referencia a una sola máquina, aunque también es posible hacerlo con todas las máquinas de una red. Por ejemplo, si quisiéramos que todas las máquinas de esta red tuvieran acceso a los datos del servidor, escribiríamos 192.168.0.0/255.255.255.0
  • Opciones posibles:
    • ro: solo lectura 
    • rw: lectura y escritura
    • no_root_squash: permite al usuario root remoto tener los mismos privilegios que el root local. 
    • subtree_check: especifica que, al ser exportado un directorio en vez de un sistema de ficheros completo, es necesario que el host compruebe la ubicación de los archivos y directorios en el sistema de ficheros host. Esta opción, orientada a evitar la escalabilidad de privilegios, suele causar muchos problemas en la mayoría de sistemas, por lo que es mejor tomar otra serie de medidas en caso de que exista tal riesgo.
    • no_subtree_check: el host no comprueba la localización en el sistema de ficheros host.
    • sync: mantiene sincronizados los ficheros compartidos.
    • async: ignora las sincronizaciones para favorecer la velocidad.

4. Para que nuestro servidor NFS funcione, necesitamos tener en funcionamiento dos servicios, rpcbind y nfs-kernel-server, así que los iniciaríamos. Al estar en Ubuntu, ambos están ya corriendo, así que los reiniciamos:

service rcpbind restart


service nfs-kernel restart


# # # # # # # # # # # # # # # # # #

Pudiera ser que cuando estéis leyendo esto, el nombre de los paquetes haya cambiado, así que si los que yo he utilizado no os aparecen, podéis hacer la siguiente consulta y buscarlos:

apt-cache search nfs


# # # # # # # # # # # # # # # # # #



Client Side (CentOS 7.2.1511)


Por la parte del cliente, la cosa se pone todavía más fácil...

1. Actualizamos:

yum update -y

2.. Instalamos nfs-utils:

yum install nfs-utils -y


3. Montamos:

mount 192.168.0.10:/home/almacen /mas_pelis


¡Listo! En dos minutos ya tenemos más espacio para almacenar sin límites (más o menos) toda nuestra basura. A partir de ahora, todo lo que guardemos en /mas_pelis se almacenará en nuestro servidor y lo tendremos accesible desde ambos equipos.
A todas estas alegrías, sin embargo, hay que ponerle una pega (la de siempre) los permisos. Para poder darle uso al directorio que hemos montado, deberemos tener un usuario con el mismo UID y GID en ambas máquinas. Esto es necesario porque no le estamos dando privilegios al root del equipo cliente para actuar como tal sobre este directorio, así que si preferís que sea al contrario, cambiad las opciones en el /etc/exports y listo.



Configuración del firewall


En el caso de tener que lidiar con un firewall, necesitaréis abrir los puertos 2049 y 111, ambos en TCP y UDP.
De todos modos, os recomiendo también echarle una lectura a este artículo en el que se explica mucho más en detalle todo lo relevante a este tema y la seguridad en NFS.