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:
Publicar un comentario