Mikrotik - Firewall restrictivo

Iniciado por xyz, Octubre 05, 2017, 05:41:09 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Buenas a todos.

En este pequeño artículo veremos sobre el trabajo del Firewall particularmente la cadena Filter de Mikrotik.

Entendiendo un poco el concepto del firewall sobre mikrotik, que no deja de ser un firewall basado en iptables.

El firewall implementa filtrado de paquetes por tanto provee funciones de seguridad que son utilizadas en el manejo del flujo de datos, desde y hacia el router. Junto con NAT sirve como herramienta para prevenir acceso no autorizado.

Entonces veremos la siguiente imagen para comprender visualmente como es el flujo de paquetes en mikrotik.



Particularmente, iniciaremos el trabajo sobre la cadena de filter, la cual comprende:

  • Input: Lo que ingresa al router
  • Output: Lo que sale por el router
  • Forward: Lo que atraviesa el router

Aclaración: cuanto más granular sea la configuración, tendremos más control del firewall.

Como primer paso, recomendable, tener anotado el objetivo del firewall; que puertos estarán abiertos, que puertos serán redirigidos, si se cambiarán direcciones ip.

Aquí veremos, un firewall restrictivo; habrá que indicar lo que está permitido.

Comenzando, vamos a trabajar sobre Filter - Input.
Podremos hacerlo de dos formas, mediante la interfaz gráfica o mediante línea de comandos.

Entonces empecemos, lo que realizaremos será:

  • Agregar una lista que será la red LAN: por ejemplo, 192.168.1.0/24 o también se pueden utilizar listas con direcciones Ip's
  • Aceptar conexiones con estado Related
  • Aceptar conexiones con estado Established
  • Dropear conexiones con estado Invalid
  • Aceptar a nuestra red LAN
  • Dropear todo el resto

El código será el siguiente:

Código: php
/ip firewall add address="segmento de red" comment=LAN list=LAN 
/ip firewall filter add chain=input comment="INPUT ESTABLECIDAS" connection-state=established
/ip firewall filter add chain=input comment="INPUT RELACIONADAS" connection-state=related
/ip firewall filter add action=drop chain=input comment="INPUT DROP INVALIDAS" connection-state=invalid
/ip firewall filter add chain=input comment="ACEPTAR LAN" src-address-list=LAN
/ip firewall filter add action=drop chain=input comment="DROP RESTO" log=yes log-prefix="Input:Drop -> "


Hacemos lo mismo para Filter - Forward


  • Aceptar conexiones con estado Related
  • Aceptar conexiones con estado Established
  • Dropear conexiones con estado Invalid
  • Aceptar a nuestra red LAN
  • Dropear todo el resto

Siendo el código:
Código: php
/ip firewall filter add chain=forward comment="FORWARD ESTABLECIDAS" connection-state=established
/ip firewall filter add chain=forward comment="FORWARD RELACIONADAS" connection-state=related
/ip firewall filter add action=drop chain=forward comment="DROP INVALIDAS" connection-state=invalid
/ip firewall filter add chain=forward comment="FORWARD LAN" src-address-list=LAN
/ip firewall filter add action=drop chain=forward comment="DROP RESTO FORWARD"




Si verificamos con alguna herramienta de escaneo, veremos que no hay suficiente información.

Por ejemplo, utilizando ShieldsUP No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




Ahora, si en el router tenemos un servidor PPtP, donde irían esas reglas ? Bueno, las mismas, deben ir antes de los DROP generales; ya que al ser secuencial, verifica en órden.

Quedando el órden de reglas:

Código: php
/ip firewall add address="segmento de red" comment=LAN list=LAN 
/ip firewall filter add chain=input comment="INPUT ESTABLECIDAS" connection-state=established
/ip firewall filter add chain=input comment="INPUT RELACIONADAS" connection-state=related
/ip firewall filter add action=drop chain=input comment="INPUT DROP INVALIDAS" connection-state=invalid
/ip firewall filter add chain=input comment="ACEPTAR LAN" src-address-list=LAN
/ip firewall filter add chain=input comment="ACEPTAR PPTP" protocol=gre
/ip firewall filter add chain=input comment="ACEPTAR PPTP" dst-port=1723 protocol=tcp
/ip firewall filter add chain=input comment="VPN" src-mac-address=E8:11:32:XX:XX:XX
/ip firewall filter add action=drop chain=input comment="DROP RESTO" log=yes log-prefix="Input:Drop -> "


Si queremos agregar unas blacklists basado en puertos y protocolos, como lo hacemos ? Pues bueno, solo tendremos que añadir las reglas antes de los DROP generales en INPUT (ya que forward por lo general es lo que genera la red interna.)

Código: php
/ip firewall add address="segmento de red" comment=LAN list=LAN 
/ip firewall filter add chain=input comment="INPUT ESTABLECIDAS" connection-state=established
/ip firewall filter add chain=input comment="INPUT RELACIONADAS" connection-state=related
/ip firewall filter add action=drop chain=input comment="INPUT DROP INVALIDAS" connection-state=invalid
/ip firewall filter add chain=input comment="ACEPTAR LAN" src-address-list=LAN
/ip firewall filter add chain=input comment="ACEPTAR PPTP" protocol=gre
/ip firewall filter add chain=input comment="ACEPTAR PPTP" dst-port=1723 protocol=tcp
/ip firewall filter add chain=input comment="VPN" src-mac-address=E8:11:32:C6:10:8A
/ip firewall filter add action=add-src-to-address-list address-list=blacklist-TCP address-list-timeout=1d chain=input comment="TCP -> BLACKLIST" dst-port=\
    21,22,23,80,8080,666,999,445 in-interface=Ether1 protocol=tcp
/ip firewall filter add action=drop chain=input log=yes log-prefix="INPUT-> blacklist" src-address-list=blacklist
/ip firewall filter add action=add-src-to-address-list address-list=blacklist-udp address-list-timeout=1d chain=input comment="UDP -> BLACKLIST" dst-port=135,5678 \
    in-interface=Ether1 protocol=udp
/ip firewall filter add action=drop chain=input log=yes log-prefix="INPUT -> blacklistUDP" src-address-list=blacklist-udp
/ip firewall filter add action=drop chain=input comment="DROP RESTO" log=yes log-prefix="Input:Drop -> "


Con la ultima secuencia de reglas, tendremos un firewall bastante restrictivo e inclusive, generará de forma dinámica las blacklist, en base a los parametros pasados, ejemplificando:
* Si se intenta una conexión o map, por TCP a alguno de los puertos 21,22,23,80,8080,666,999,445 añadirá a una BLACKLIST llamada "BLACKLIST-TCP" que tendrá un BAN por 24horas.


Lo mismo pasa con el protocolo UDP.




Ahora, si necesitamos redirigir puertos, hay que hacerlo de dos formas, primero en FORWARD y luego en NAT.

Encontes, las reglas quedarán:

Código: php
/ip firewall filter add chain=forward comment="FORWARD ESTABLECIDAS" connection-state=established
/ip firewall filter add chain=forward comment="FORWARD RELACIONADAS" connection-state=related
/ip firewall filter add action=drop chain=forward comment="DROP INVALIDAS" connection-state=invalid
/ip firewall filter add chain=forward comment="FORWARD LAN" src-address-list=LAN
/ip firewall filter add chain=forward comment="ACEPTAR RDP" dst-port=3389 in-interface=Ether1 log=yes log-prefix="Forward: RDP ->" protocol=tcp
/ip firewall filter add chain=forward comment="ACEPTAR FTP" dst-port=21 in-interface=Ether1 log=yes log-prefix="Forward: FTP ->" protocol=tcp \
    src-address=x.y.z.z/n
/ip firewall filter add action=drop chain=forward comment="DROP RESTO FORWARD"


Explicando que realizamos, indicamos al firewall que al ingresar una conexion que necesite ser redirigida hacia la red interna NAT, la acepte bajo las condiciones:

  • Que el puerto de destino sea 3389 y protocolo TCP (conocido como RDP)
  • Que el puerto de destino sea 21 y protocolo TCP (conocido como FTP)
  • En el FTP encontramos la opción src-address, donde indicamos cual será la única dirección IP que accederá al FTP

Una vez concluido los pasos anteriores, debemos ir a Firewall - NAT y agregar:

Código: php
/ip firewall nat add action=dst-nat chain=dstnat comment=rdp dst-port=3389 in-interface=Ether1 protocol=tcp to-addresses=x.y.z.z
/ip firewall nat add action=dst-nat chain=dstnat comment=FTP dst-port=21,40000-40005 in-interface=Ether1 protocol=tcp src-address=x.y.z.z to-addresses=x.y.z.z


Donde:


  • Indicamos la redirección RDP / FTP, a una dirección IP específica dentro de la red LAN.
  • to-addresses es la dirección ip donde será rediriga la peticion, el formato es por ejemplo: 192.168.1.10
  • src-address del FTP coincide con la redirección realizada en FORWARD
  • to-addresses del FTP corresponde al equipo donde será redirigida la petición, por ejemplo: 192.168.1.11




Y viendo un poco los LOGS de las blacklist, tendremos lo siguiente:



Y el log general, será el siguiente:





Aclaración general, en las lineas de reglas del firewall, deben cambiar In-Interface por la que estén utilizando para acceder a internet o la que sea de DMZ.

Como resumen, vemos que el log, permite identificar las peticiones falsas, mediante ello, tomar acciones, filtros, blacklists y acciones a tomar en el manejo de una red.

Cualquier duda, déjenlas que en la medida de lo posible, iré respondiendo.

Gracias por leer !!!