lunes, 12 de octubre de 2020

Asegurando el servidor

El servidor que migré ayer a Devuan va a estar abierto a Internet, ese lugar tan grande. Así que no puede ser fácilmente accesible.

Lo primero será que no se pueda entrar como root mediante ssh (el acceso por consola debe seguir siendo posible, para un posible rescate). Así que eliminamos esa opción:

PasswordAuthentication no
PermitRootLogin without-password

Claro que antes nos hemos asegurado el acceso mediante clave pública ssh, metiéndola en /root/.ssh/authorized_keys.

El siguiente paso es poner un sistema que nos asegure que los niñatillos que se dedican a probar accesos se queden fuera. Para esto, yo suelo elegir fail2ban. Basta con instalarlo y, muy importante, copiar el fichero /etc/fail2ban/jail.conf como /etc/fail2ban/jail.local.

Inicialmente activaré solo la regla relativa a SSH, ya que es el único servicio que estará activo en la máquina. Para ello, en /etc/fail2ban/jail.local añadiremos

enabled=true

en la sección [sshd] de/etc/fail2ban/jail.local.

Tras ello, las reglas de cortafuegos.

Realmente, ¿qué tráfico necesita tu máquina? Es algo que tienes que pensar dos veces, y luego prohibe todo lo demás.

Los paquetes que correspondan a conexiones de salida ya establecidas, conexiones abiertas por nosotros, hay que permitirlos, o no habrá comunicación:

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

El tráfico de entrada SSH evidentemente hay que permitirlo:

-A INPUT -p tcp --dport ssh -m state --state NEW,ESTABLISHED -j ACCEPT

Y queremos que funcione el ping:

-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
-A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

¿Algo más? De momento no. todo lo demás, prohibido.

-P INPUT DROP

El tráfico de salida también hay que permitirlo, pero solo para lo que lo necesitemos. En primer lugar, el tráfico de salida correspondiente a conexiones de entrada ya establecidas:

-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

En nuestro caso, queremos las actualizaciones de paquetes y otras consultas de ese estilo a sitios web:

-A OUTPUT -p tcp --dport http -j ACCEPT
-A OUTPUT -p tcp --dport https -j ACCEPT

Evidentemente tiene que funcionar el DNS, o no hacemos nada:

-A OUTPUT -p tcp --dport domain -j ACCEPT
-A OUTPUT -p udp --dport domain -j ACCEPT

Y también queremos que funcione el ping:

-A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
-A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Todo lo demás, incluso de salida, prohibido.

-P OUTPUT DROP

La tabla FORWARD no la utilizaremos, ya que este sistema no es un enrutador:

-P FORWARD DROP

Con esto nos aseguramos un cortafuegos bastante restrictivo, y sin embargo utilizable.

No hay comentarios: