Si en nuestros routers utilizamos la estrategia de denegar todo por defecto y permitir expresamente lo que deseamos, en el caso de que estos equipos tengan configurado que aprendan sus rutas con OSPF, debemos habilitar dicho protocolo. Para ello, debemos tener en cuenta que OSPF
- se encapsula en datagramas IP con el número 89 de protocolo (esto implica que NO utiliza UDP ni TCP ni, por tanto, tiene puertos),
- usa tanto paquetes multicast (los grupos 224.0.0.5 y 224.0.0.6 y lo que nos obliga a configurar, usar y habilitar en nuestros filtros IGMP*) como unicast,
- el TTL de sus paquetes es 1, por lo que no atravesarán un cortafuegos, salvo que configuremos un túnel (http://www.cisco.com/en/US/tech/tk583/tk372/technologies_configuration_example09186a00800a43f6.shtml),
- y por último, dispone de un identificador de tipo de paquete (nos permite mejorar las reglas, aunque dependemos del software de filtrado).
Con iptables, la forma más fácil es ejecutar las siguientes ordenes**:
iptables -A INPUT -p 89 -j ACCEPT iptables -A OUTPUT -p 89 -j ACCEPT
Si queremos ser más «finos», debemos indicar las IPs de origen, destino y, si lo permite el software de filtrado, el tipo de paquete de OSPF. Las reglas en este caso***:
#hello ospf between rt_ext and rt_int iptables -A INPUT -s rt_ext -d 224.0.0.5 -p 89 -j ACCEPT iptables -A OUTPUT -s rt_int -d 224.0.0.5 -p 89 -j ACCEPT #database description, link state request, asking for information about a particular link and request/update link state iptables -A INPUT -s rt_ext -d rt_int -p 89 -j ACCEPT iptables -A OUTPUT -d rt_int -s rt_int -p 89 -j ACCEPT #link state update, flooding all link states from rt_ext router iptables -A INPUT -s rt_ext -d 224.0.0.5 -p 89 -j ACCEPT iptables -A OUTPUT -s rt_int -d 224.0.0.6 -p 89 -j ACCEPT iptables -A INPUT -s rt_ext -d 224.0.0.6 -p 89 -j ACCEPT iptables -A OUTPUT -s rt_int -d 224.0.0.5 -p 89 -j ACCEPT #rt_int router link state update from rt_ext router iptables -A OUTPUT -s rt_int -d 224.0.0.5 -p 89 -j ACCEPT iptables -A INPUT -s rt_ext -d 224.0.0.6 -p 89 -j ACCEPT iptables -A OUTPUT -s rt_int -d 224.0.0.6 -p 89 -j ACCEPT iptables -A INPUT -s rt_ext -d 224.0.0.5 -p 89 -j ACCEPT
Referencias
- Building Internet Firewalls, de Elizabeth D. Zwicky, Simon Cooper y D. Brent Chapman
* Es muy sencillo, pero lo dejo para otra entrada 😉
**Estamos considerando que NO queremos reenviar (forward). Si quisiéramos hacerlo, ver el punto 3 de las consideraciones de OSPF que he escrito en la entrada. Además, estas reglas deben ejecutarse en los routers designados.
***Las reglas se deben de ejecutar en los router afectados (en rt_ext cuando ‘-s rt_ext’ o en rt_int si ‘-s rt_int’), salvo que dispongamos de un cortafuegos específico y, en ese caso, se ejecutan todas en él. Recordad que debe disponer de un túnel (ver **)