NAT 1:1 Mikrotik + firewall

Otra entrada que es un apunte.

Estos días he tenido que aplicar nat 1:1 con los routers mikrotik y proteger máquinas con el firewall del router…. a priori es sencillo, pero el tema del firewall se me atascó un poco.

Imaginamos que tenemos una conexión a internet con un NAT GLOBAL, un /29 para repartir entre nuestros servicios. Para hacerlo más sencillo, aplicaremos el nat 1:1

Nuestro proveedor nos entrega la subred 1.1.1.0/29 y como gateway, hemos de usar la 1.1.1.1…. asignaremos a nuestro server de correo la 1.1.1.2 y deberá tener permitido ICMP, WWW y HTTPS

Empezamos:

/ip address
add address=1.1.1.1/29 comment=wan interface=outside network=1.1.1.0
add address=192.168.1.254/24 interface=inside network=192.168.41.0
add address=1.1.1.2/29 comment="nat to 192.168.1.2" interface=outside network=1.1.1.0

El interfaz externo, lo llamaremos outside, el interno inside y el rango local de la lan: 192.168.1.0/24

Asignaremos la ip pública en el outside y la ip del mailserver también.

Ahora añadimos las reglas del firewall para permitir el tráfico deseado:

/ip firewall filter
add chain=forward comment="ip 2" connection-mark=ip_2 protocol=icmp
add chain=forward comment="ip 2" connection-mark=ip_2 port=25 protocol=tcp
add chain=forward comment="ip 2" connection-mark=ip_2 port=80 protocol=tcp
add chain=forward comment="ip 2" connection-mark=ip_2 port=443 protocol=tcp
add chain=forward comment="ip 2" connection-mark=ip_2 port=53 protocol=udp
add action=drop chain=forward comment="ip 2" connection-mark=ip_2

La última línea es importante… si no la incluyes y tu server es un windows, te lo dejarán como un colador xDDDD.

Seguimos con las reglas mangle para identificar las ip’s:

/ip firewall mangle
add action=mark-connection chain=prerouting comment="ip 2" dst-address=1.1.1.2 log-prefix=ip_2 new-connection-mark=ip_2 \
passthrough=no
add action=mark-connection chain=prerouting comment="ip 2" new-connection-mark=publicas passthrough=no src-address=\
192.168.1.2

Y ahora el NAT en cuestión:

/ip firewall nat
add action=dst-nat chain=dstnat comment="nat to 1.1.1.2" dst-address=1.1.1.2 in-interface=outside to-addresses=\
192.168.1.2
add action=src-nat chain=srcnat comment="nat to 1.1.1.2" out-interface=outside src-address=192.168.1.2 to-addresses=\
1.1.1.2

Y con ésto, ya tenemos todo hecho ;).

el proceso es:

– Asignamos la IP al interfaz público.
– Añadimos las reglas de firewall, marcando los paquetes.
– Aplicamos el nat.

Protegiendo nuestro gateway sip, parte 2

Como ya he comentado en otras ocasiones, la mayoría de ataques a pbx SIP abiertas a internet, están realizados por software tipo sipVicious y similares.

Si tenemos la posibilidad de usar un firewall con inspección a layer 7, podemos filtrar los User-Agent, tal y como expliqué en la entrada anterior.

Ahora, supongamos que tenemos un mikrotik, con RouterOS 6.x…


/ip firewall layer7-protocol
add name=sip regexp="^.+(sundayddr).*\$"
add name=sip1 regexp="^.+(sipsak).*\$"
add name=sip2 regexp="^.+(sipvicious).*\$"
add name=sip3 regexp="^.+(friendly-scanner).*\$"
add name=sip4 regexp="^.+(iWar).*\$"
add name=sip5 regexp="^.+(sip-scan).*\$"
add name=sip6 regexp="^.+(Ozeki).*\$"
add name=sip8 regexp="^.+(sip-cli).*\$"
add name=sip7 regexp="^.+(VaxSIPUserAgent).*\$"
add name=sip9 regexp="^.+(sipcli).*\$"

/ip firewall filter
add action=fasttrack-connection chain=forward connection-state=established,related
add chain=forward connection-state=established,related
add action=drop chain=forward connection-state=invalid
add action=drop chain=forward comment=voip_sundayddr_deny dst-address-list=AUTH layer7-protocol=sip
add action=drop chain=forward comment=voip_sipsak_deny dst-address-list=AUTH layer7-protocol=sip1
add action=drop chain=forward comment=voip_sipvicious_deny dst-address-list=AUTH layer7-protocol=sip2
add action=drop chain=forward comment=voip_friendly-scanner_deny dst-address-list=AUTH layer7-protocol=sip3
add action=drop chain=forward comment=voip_iWar_deny dst-address-list=AUTH layer7-protocol=sip4
add action=drop chain=forward comment=voip_sip-scan_deny dst-address-list=AUTH layer7-protocol=sip5
add action=drop chain=forward comment=voip_Ozeki_deny dst-address-list=AUTH layer7-protocol=sip6
add action=drop chain=forward comment=voip_VaxSIPUserAgent_deny dst-address-list=AUTH layer7-protocol=sip7
add action=drop chain=forward comment=voip_sip-cli_deny dst-address-list=AUTH layer7-protocol=sip8
add action=drop chain=forward comment=voip_sipcli_deny dst-address-list=AUTH layer7-protocol=sip9

hay que tener activado el connection Tracking activado.

enjoy 😉

Banear intentos login mikrotik

Esta entrada es otro apunte.

Me gusta dejar administrables los routers que instalo, desde las ip’s del trabajo o casa, pero a veces, por comodidad y en determinados casos, necesito poder entrar desde cualquier sitio.

El script que indico a continuación, al 5º intento de entrar por winbox o SSH, bloquea la IP por 24 horas.


/ip firewall filter
add action=drop chain=input comment="BLOQUEA DURANTE 24 horas quien haga 5 intentos seguidos de login SSH!" dst-port=22 protocol=tcp src-address-list=black_list_ssh
add action=add-src-to-address-list address-list=black_list_ssh address-list-timeout=1d chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage4
add action=add-src-to-address-list address-list=ssh_stage4 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage3
add action=add-src-to-address-list address-list=ssh_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage2
add action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp src-address-list=ssh_stage1
add action=add-src-to-address-list address-list=ssh_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=22 protocol=tcp
add action=drop chain=input comment="BLOQUEA DURANTE 24 horas quien haga 5 intentos seguidos de login winbox!" dst-port=8291 protocol=tcp src-address-list=black_list_winbox
add action=add-src-to-address-list address-list=black_list_winbox address-list-timeout=1d chain=input connection-state=new dst-port=8291 protocol=tcp src-address-list=winbox_stage4
add action=add-src-to-address-list address-list=winbox_stage4 address-list-timeout=3m chain=input connection-state=new dst-port=8291 protocol=tcp src-address-list=winbox_stage3
add action=add-src-to-address-list address-list=winbox_stage3 address-list-timeout=3m chain=input connection-state=new dst-port=8291 protocol=tcp src-address-list=winbox_stage2
add action=add-src-to-address-list address-list=winbox_stage2 address-list-timeout=3m chain=input connection-state=new dst-port=8291 protocol=tcp src-address-list=winbox_stage1
add action=add-src-to-address-list address-list=winbox_stage1 address-list-timeout=3m chain=input connection-state=new dst-port=8291 protocol=tcp

Una vez activado, veremos como la address list se nos va llenando de gente Baneada.

enjoy your rules 😉

P.D. Gracias a @gurbtec por el script

Añadir tftp option en routerOS (mikrotik)

Hace unos días, necesité configurar en el DHCP de un router mikrotik, la opción tftp-server para los teléfonos y no andar configurando uno a uno.

Suponemos que nuestro tftp-server es la ip: 192.168.1.5

Para ello, nos vamos a la consola del mikrotik y tecleamos:


/ip dhcp-server option
add code=66 name=TFTP value="s'192.168.1.5'"

lo de la ‘s’ es para indicar que es un valor string lo que queremos configurar, lo cual (como algunas otras cosas en mikrotik….) no tiene mucho sentido.

Ahora, a nuestro DHCP, hemos de indicarle que use esta opción:


/ip dhcp-server network
add address=192.168.3.0/24 dhcp-option=TFTP dhcp-option-set=tftpServer dns-server=\
192.168.1.101,8.8.8.8 domain=dominio.local gateway=192.168.3.1 netmask=24
/ip dhcp-server option sets
add name=tftpServer options=*FFFFFFFF

Si tenemos más opciones de DHCP, como la hora, rutas estáticas o algún otro parámetro que necesitemos, deberemos añadir los dhcp-option= que nos hagan falta.

Y ahora a probar…. 😉

Tunnel IPIP mikrotik + ip dinámicas

En esta ocasión, he tenido la necesidad de tumbar un tunel PPTP en una mikrotik, para hacer el cambio contra un tunnel IPIP.

Recordemos que, el tunnel PPTP, aunque sencillo de configurar, tiene los siguientes incovenientes:

– La MTU del tunnel, queda a 1460 bytes; tenemos una sobrecarga de cabeceras considerable.
– El rendimiento de tunnel en general, no es muy bueno.
– Consumo medio de recursos en los routers; requiere cifrado.

el uso de IPIP, viene justificado por:

– La mtu del tunnel, queda en 1480 bytes.
– El rendimiento del tunnel, es muy bueno, en comparación con pptp
– El consumo de cpu en el router, al no llevar cifrado, es casi nulo.

Una vez explicado, tengo el inconveniente de que, en uno de los extremos es ip dinámica…. el tunnel IPIP, recordemos que, va de extremo a extremo… fijado de ip pública a ip pública…… Mirando mikrotik, veo que soporta scripts.

Nos ponemos manos a la obra:

:global ip_nueva [:resolve midominio.dyndns.org]
:global ip_actual [ /interface ipip get 1 remote-address]
if ($ip_nueva!=$ip_actual) do={/interface ipip set 1 remote-address=$ip_nueva }

En el extremo que tenemos ip dinámica, usamos un servicio de dyndns gratuito.

Definimos variables:
1º Línea definimos variable global ip_nueva y le asignamos el valor que tiene el dyndns
2º Consultamos el valor actual de la ip en el tunnel. El número 1 significa el número de tunnel.
3º Si la ip nueva es diferente a la actual….. sorpresa… actualizamos la ip del tunnel.

Esto está muy bien, pero ahora, para ejecutarlo cada minuto…. en la consola de nuestra mikrotik:


add comment="Script ipip Dynamic" disabled=no interval=1m name=ipip1 on-event=":global ip_nueva [:resolve midominio.dyndns.org]r
n:global ip_actual [ /interface ipip get 1 remote-address]r
nif ($ip_nueva!=$ip_actual) do={/interface ipip set 1 remote-address=$ip_nueva }" policy=ftp,read,write,policy,test,winbox,api start-date=feb/13/2014
start-time=14:18:26

Enjoy you dynamic IP 😉

Cisco 18xx como cliente pptp

Otra entrada que es un apunte.

En esta ocasión, he tenido la necesidad de conectar un cisco 1841 como cliente pptp de una mikrotik, por pap.

Aparentemente, no está soportado, pero hay algún truquillo:

vpdn enable
!
vpdn-group 2
request-dialin
AQUI COLOCAR :
service internal
protocol pptp
AQUI COLOCAR <-----
service internal <------ rotary-group 2 initiate-to ip ip.del.servidor.pptp interface Dialer2 ip address negotiated ip mtu 1460 ip virtual-reassembly encapsulation ppp dialer in-band dialer idle-timeout 0 dialer string barcelona dialer vpdn dialer-group 2 dialer persistent ppp chap hostname USUARIO_PPTP ppp chap password 0 PASSWORD_PPTP ppp pap sent-username USUARIO_PPTP password 0 PASSWORD_PPTP ip route red-remota-detras-pptp mascara Dialer2

Y con estos comandos, ya tenemos levantado el tunnel pptp contra nuestra mikrotik

Policy Based Routing Cisco y Mikrotik, tunnel IPIP y NAT (3)

Ahora, vamos a NATear las ip’s de nuestro proveedor a las máquinas de la red local.

Quiero que mi servidor Debian, con la 192.168.2.1, tenga como ip pública la 1.1.1.4. Para ello, usaremos 2 reglas en nuestra mikrotik; una src-nat y otra dst-nat, usando como interface público el tunnel PPTP:


/ip firewall nat
add action=src-nat chain=srcnat disabled=no out-interface=pptp_provider
src-address=192.168.2.1 to-addresses=1.1.1.4
add action=dst-nat chain=dstnat disabled=no dst-address=1.1.1.4
in-interface=pptp_provider to-addresses=192.168.2.1
add action=masquerade chain=srcnat disabled=no out-interface=pptp_provider
add action=masquerade chain=srcnat disabled=no out-interface=outside

Y recordamos que tenemos que tener una entrada de masquerade para el tunnel pptp y que estas reglas deben de estar antes.

La primera es para indicar que los paquetes entrantes desde internet, que vengan por el tunnel pptp (de entrada), a la ip pública 1.1.1.4, lo traduzca a la 192.168.2.1 de nuestra red.

La segunda regla, es para indicar que, la salida de nuestra máquina 192.168.2.1, la NATee directamente a la 1.1.1.4, por el interface pptp_provider.

Policy Based Routing Cisco y Mikrotik, tunnel IPIP y NAT (2)

En esta ocasión, vamos a configurar la mikrotik RouterOS, como cliente, mediante un tunnel PPTP.

Necesito que mi Debian Server, con la IP 192.168.2.1, salga a través del tunnel PPTP y el resto de equipos de la red, por mi conexión normal, para no malgastar recursos de mi buen proveedor.


/ppp profile
set 0 change-tcp-mss=yes name=default only-one=default use-compression=
default use-encryption=default use-ipv6=yes use-mpls=default
use-vj-compression=default
set 1 change-tcp-mss=yes name=default-encryption only-one=default
remote-ipv6-prefix-pool=none use-compression=default use-encryption=yes
use-ipv6=yes use-mpls=default use-vj-compression=default
/interface pptp-client
add add-default-route=no allow=pap,chap,mschap1,mschap2 connect-to=
3.3.3.3 dial-on-demand=no disabled=no max-mru=1460 max-mtu=1460 mrru=
disabled name=pptp_provider password=password profile=default-encryption
user=usuarioPPTP

Y ahora las reglas de NAT y el pre-routing para marcar los paquetes:


/ip firewall mangle
add action=mark-routing chain=prerouting disabled=no new-routing-mark=
tunnel_provider passthrough=no src-address=192.168.2.1
/ip firewall nat
add action=masquerade chain=srcnat disabled=no out-interface=pptp_provider
add action=masquerade chain=srcnat disabled=no out-interface=outside

La primera regla sirve para marcar los paquetes que queramos que salgan por el tunnel PPTP.

Y ahora las rutas:


/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=pptp_provider
routing-mark=tunnel_provider scope=30 target-scope=10
add comment=red_guifi disabled=no distance=1 dst-address=10.0.0.0/8 gateway=
172.26.2.251 scope=30 target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=172.26.2.20 scope=30
target-scope=10

La primera ruta, indica que los paquetes marcados con el pre-routing / tunnel_provider, saldrán por aquí.

La segunda ruta, para indicar que todos los paquetes para la red 10.0.0.0/8 de Guifi.net, saldrán por mi antenita. 🙂

La tercera, para el resto.

En el siguiente POST, explicaremos el tema del NAT, para asignar las ip’s locales a públicas.

Policy Based Routing Cisco y Mikrotik, tunnel IPIP y NAT (1)

Esta entrada, con diferencia, es una de las configuraciones que más me ha hecho sudar la gota gorda…. intervienen varios factores:

1º) Tengo un proveedor de servicio que me proporciona 8 ip’s públicas
2º) Tengo que llegar con mi conexión al proveedor
3º) Hago un tunel IPIP entre la Mikrotik y mi router cisco
4º) Hay que usar nat

El motivo es que, necesito usar esas 8 ip’s y sólo determinados equipos, saldrán por el tunnel IP / ip’s públicas; el resto de máquinas de mi casa, saldrá por la conexión normal que tengo.

Primero de todo, haré la config y el esquema con cisco como cliente y mikrotik como servidor:
ipip1

Empezamos por la configuración de la mikrotik:

/interface ipip
add disabled=no dscp=0 local-address=3.3.3.3 mtu=1480 name=ipip_craem remote-address=2.2.2.2
/ip address
add address=192.168.194.1/30 disabled=no interface=ipip_craem network=192.168.194.0

add disabled=no distance=1 dst-address=1.1.1.1/32 gateway=192.168.194.2 scope=30 target-scope=10
add disabled=no distance=1 dst-address=1.1.1.2/32 gateway=192.168.194.2 scope=30 target-scope=10
add disabled=no distance=1 dst-address=1.1.1.3/32 gateway=192.168.194.2 scope=30 target-scope=10
add disabled=no distance=1 dst-address=1.1.1.4/32 gateway=192.168.194.2 scope=30 target-scope=10
add disabled=no distance=1 dst-address=1.1.1.5/32 gateway=192.168.194.2 scope=30 target-scope=10
add disabled=no distance=1 dst-address=1.1.1.6/32 gateway=192.168.194.2 scope=30 target-scope=10

Primero creamos el tunnel, le damos la ip y, para no perder la de red y broadcast, negociamos con el proveedor que nos la enrute una a una, tras pagarle unas cervezas al técnico 😉

Y ahora el lado Cisco; empezamos por el tunnel:

interface Tunnel7
description TUNNEL proveedor /29
ip address 192.168.194.2 255.255.255.252 --> ip privada del tunnel
ip mtu 1480 --> ajustamos el mtu
ip nat outside --> mis máquinas están detrás del firewall, con NAT
ip virtual-reassembly
ip policy route-map prov_lan --> policy route aplicado
qos pre-classify --> aplico QoS antes de meter en el tunnel
tunnel source 2.2.2.2 --> ip pública mia
tunnel destination 3.3.3.3 --> ip destino
tunnel mode ipip --> modo del tunnel

Creamos la política:

ip local policy route-map prov_map

Metemos en un access-list las ip’s que tendrán salida por el tunnel:

access-list 112 remark -> ACL NAT prov IPS PUBLICAS
access-list 112 permit ip host 172.26.2.9 any
access-list 112 permit ip host 172.26.2.11 any
access-list 112 permit ip host 172.26.2.5 any
access-list 112 permit ip host 172.26.2.6 any
access-list 112 permit ip host 172.26.2.12 any

Hacemos el route-map para identificar los paquetes:

route-map prov_lan permit 10
match ip address 112
set interface Tunnel7

Y ahora, nacemos el nat de las privadas a las públicas de nuestro proveedor:

ip nat inside source static 172.26.2.9 1.1.1.1
ip nat inside source static 172.26.2.11 1.1.1.2
ip nat inside source static 172.26.2.5 1.1.1.3
ip nat inside source static 172.26.2.6 1.1.1.4
ip nat inside source static 172.26.2.12 1.1.1.5

Si no ponemos el nat en el tunnel; no habrá traducción y no podremos usar las ip’s.

Ahora hemos de aplicar el policy-map a los interfaces:

interface FastEthernet0/0
bandwidth 6096
ip address dhcp
ip flow ingress
ip nat outside
ip virtual-reassembly
ip policy route-map rlan_map

interface GigabitEthernet0/1/0
ip address 172.26.2.20 255.255.255.0
ip flow ingress
ip nat inside
ip virtual-reassembly
ip policy route-map rlan_map
negotiation auto