Uncomplicated Firewall para protejer nuestro server
03.01.2018 Linux Hosting Mini Posts UFW Firewall iptablesLinux trae una gran herramienta para prevenir accesos no deseados: iptables. El problema con iptables es que no es tan sencilla de configurar (alguna vez me dejé sin acceso a mi propio server, jeje).
Por suerte existe uncomplicated firewall, o simplemente UFW, para que asegurar nuestro servidor sea realmente sencillo. Vamos al paso a paso:
Instalación
UFW está en los repos de casi todas las distros, como siempre en este blog voy con la instalación para Ubuntu, adecuen para su server.
Por lo general ya viene instalado en Ubuntu, pueden chequear haciendo ufw status y deberían obtener algo asi:
# ufw status
Status: inactive
En caso de no estar instalado, simplemente se instala con apt:
apt install ufw
Concluido este paso, vamos a configurarlo.
Configuración
Lo que usualmente queremos para un server es que pueda acceder a cualquier lugar de la red, pero que nadie pueda acceder a él, excepto por los puertos que nosotros digamos. Por esto, el primer paso es setear los default para incoming y outgoing:
ufw default deny incoming
ufw default allow outgoing
A nuestro server nos conectamos por SSH, por lo que deberíamos habilitar el puerto 22 (Atentos a este punto si cambiaron el puerto!) y también el puerto 80 y 443 (http y https, respectivamente). UFW tiene alias para estas 3 configuraciones:
ufw allow ssh
ufw allow http
ufw allow https
Y listo, podemos ejecutar ufw show added que nos debería devolver algo asi:
# ufw show added
Added user rules (see 'ufw status' for running firewall):
ufw allow 22
ufw allow 80
ufw allow 443
Una vez estamos seguros, simplemente ejecutamos ufw enable y nuestro server pasa a estar activado, lo cual vamos a validar con un ufw status verbose:
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22 ALLOW IN Anywhere
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
Configuración avanzada
A veces necesitamos que solo alguna IP se pueda conectar (ejemplo un server de DB solo recibiendo conexiones del server web), para esto deberíamos hacer algo asi:
ufw allow from 15.15.15.51
O si queremos que esa IP solo se conecte a un puerto especifico:
ufw allow from 15.15.15.51 to any port 22
Para denegar acceso a una IP:
ufw deny from 15.15.15.51
Eliminar Reglas
Eliminar reglas es muy sencillo, debemos primero ejecutar ufw status numbered que nos devuelve algo asi:
# ufw status numbered
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 80 ALLOW IN Anywhere
[ 3] 443 ALLOW IN Anywhere
[ 4] 22 (v6) ALLOW IN Anywhere (v6)
[ 5] 80 (v6) ALLOW IN Anywhere (v6)
[ 6] 443 (v6) ALLOW IN Anywhere (v6)
Y luego eliminar la regla con el numero asignado. Ejemplo si no vamos a aceptar más conexiones en el puerto 80 hacemos ufw delete 2