Zeque.com.ar | Linux, Mikrotik, Noticias…

Temas que me salvaron alguna vez, los comparto acá

Zeque.com.ar | Linux, Mikrotik, Noticias… - Temas que me salvaron alguna vez, los comparto acá

Restringir sitios en MikroTik con DNS y Firewall

Hace unos meses surgió la necesidad de habilitar ciertos sitios y bloquear el resto en equipos remotos con tráfico satelital medido  (algunos con solo 40MB mensuales).
El problema que tuve es que las consultas DNS terminaban consumiendo el tráfico mensual en un par de semanas.
Para solucionar esto en el DNS del mikrotk agregué de manera estática los dominios que quería tener habilitados, entonces el script lo que hace es recorrer cada sitio del DNS, actualizar su IP y agregarla en un address-list en el firewall para que permita su tráfico.

Requiere RouterOS 6.2+ debido a que antes no estaba la opción on-error para tomar acción ante un error.

:foreach a in=[/ip dns static find] do={
        :global nombre
        :set nombre [/ip dns static get $a name]
        :global ip
        :global resuelto
        :set ip [/ip dns static get $a address  ]
        :global iporig
        :set iporig [:put [/ip dns  static get [/ip dns static find name=$nombre] value-name=address ]]
        /ip dns static remove $a
        :if ( [:do {[:set resuelto [:put [ :resolve $nombre server=8.8.8.8 ]]]} on-error={:set resuelto [put $iporig]}] != "") do={
                /ip dns static add address=$resuelto name=$nombre
        } else={
                /ip dns static add address=$iporig name=$nombre
}
        :put $nombre
}

:foreach a in=[/ip dns static  find  ] do={
:do { /ip firewall address-list add list=habilitadas address=[ :put [/ip dns static  get $a address   ] ] comment=[:put [/ip dns static get $a name]] } on-error {:log info "ya existe"}
} 

Luego hay que hacer las reglas en el firewall para que permita el tráfico forward del address-list habilitadas, forzar a que cualquier consulta DNS sea redirigida al mikrotik y no olvidarse de agregar una tarea programada para que corra el script.
Reglas NAT:

/ip firewall nat
add action=masquerade chain=srcnat src-address=192.168.0.0/24
add action=redirect chain=dstnat dst-port=53 protocol=tcp to-ports=53
add action=redirect chain=dstnat dst-port=53 protocol=udp to-ports=53

Reglas firewall:

/ip firewall filter
add action=reject chain=forward dst-address-list=!habilitadas dst-port=80 \
    protocol=tcp reject-with=tcp-reset
add action=reject chain=forward dst-address-list=!habilitadas dst-port=443 \
    protocol=tcp reject-with=tcp-reset

Nota: A partir de RouterOS 6.36+ ya se pueden generar address-list por nombre

Rate this post
Category: Avanzado, MikroTik

Your email address will not be published. Required fields are marked *

*