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.

No hay comentarios:

Publicar un comentario