Filtro de agujero negro activado por control remoto (RTBH) BGP para Juniper

9

Estoy tratando de encontrar la forma más elegante de implementar un filtro RTBH para las rutas recibidas de un cliente.

El filtro debe:

  1. Solo acepte los prefijos propios de los clientes de una lista de prefijos
  2. Solo acepta / 32 prefijos
  3. Solo prefijos con la comunidad blackhole
  4. Establezca el siguiente salto en el RTBH siguiente salto (192.0.2.1)

Para comenzar, miré el documento " Configuración de condiciones de coincidencia en términos de política de enrutamiento " de Juniper.

Primero pensé en combinar una prefix-list-filterpara que solo coincida con las rutas de la lista de prefijos de los clientes y una route-filterpara limitar los prefijos aceptados a / 32, así:

from {
    as-path customer;
    community blackhole;
    prefix-list-filter customer-prefixes orlonger;
    route-filter 0.0.0.0/0 prefix-length-range /32-/32;
}

Pero luego me topé con esta información en el documento:

Si configura una política que incluye alguna combinación de filtros de ruta, listas de prefijos y filtros de dirección de origen, se evalúan de acuerdo con una operación OR lógica o una búsqueda de coincidencia de ruta más larga.

Según tengo entendido (y lo encuentro un poco confuso), si lo uso prefix-list-filter, route-filtery / o source-address-filteren el mismo término, se evaluaría con un OR más largo entre todos, lo que hace que este enfoque sea inutilizable .

Lo que se me ocurrió es este el siguiente filtro. El hostroutes-onlytérmino desvía todos los prefijos más cortos que / 32 a la siguiente política. Después de eso, el prefixestérmino coincide si el / 32 está en el rango del cliente, coincide con su ruta de acceso y tiene establecida la comunidad de agujeros negros:

term hostroutes-only {
    from {
        route-filter 0.0.0.0/0 prefix-length-range /0-/31;
    }
    then next policy;
}
term prefixes {
    from {
        as-path customer;
        community blackhole;
        prefix-list-filter customer-prefixes orlonger;
    }
    then {
        next-hop 192.0.2.1;
        accept;
    }
}

Entonces, ¿es esta la forma más elegante de manejar esto? ¿Alguna otra solución?

Sebastian Wiesinger
fuente

Respuestas:

8

No hay ninguna razón para limitar al cliente solo al agujero negro / 32, permitirles bloquear cualquier cosa de ellos.

Algo como esto:

policy-statement AS42-IN {
    term blackhole {
        from {
            community BLACKHOLE;
            prefix-list-filter AS42 orlonger;
        }
        then {
            community add NO-EXPORT;
            next-hop 192.0.2.1;
            accept;
        }
    }
    term advertise {
        from {
            prefix-list AS42;
        }
        then {
            community add ADVERTISE;
            next-hop peer-address;
            accept;
        }
    }
    term reject {
        then reject;
    }
}

Recuerde configurar 'accept-remote-nexthop' en la configuración de BGP, para que el siguiente salto se pueda cambiar a algo más que la dirección del enlace.

También apoyo firmemente que los proveedores comiencen a admitir diferentes comunidades de agujeros negros que solo 'agujeros negros completos'. Especialmente si opera en más de un país, generalmente el ataque es de tránsito y, a menudo, el cliente realmente desea acceder a pares nacionales, por lo que es útil implementar varios niveles de blackhhole:

  1. Completo
  2. Fuera del país local (IXP local, clientes AS + enteros propios vistos)
  3. Fuera del área local (si corresponde, como para mí podría ser 'nórdicos')
  4. Incluir / excluir enrutador de emparejamiento específico en el agujero negro

Me complace dar un ejemplo de cómo implementar algo como esto con JNPR DCU / SCU, siempre que sus enrutadores pares sean JNPR, pero es posible con solo comunidades, un poco más incómodo.


Si desea limitar las opciones de sus clientes, puede agregar esto:

policy-statement /32 {
    term /32 {
        from {
            route-filter 0.0.0.0/0 prefix-length-range /32-/32;
        }
        then accept;
    }
    term reject {
        then reject;
    }
}

policy-statement AS42-IN {
    term blackhole {
        from {
            community BLACKHOLE;
            policy /32;
            prefix-list-filter AS42 orlonger;
        }
..
}

De esta manera debería ser lógico AND. Pero realmente no veo el valor de crear complejidad para reducir la expresividad de la configuración.

ytti
fuente
Gracias por su respuesta. No quiero que los clientes bloqueen grandes porciones de su espacio porque en su mayoría se están disparando en el pie con él. Con respecto a 'accept-remote-nexthop', cambio el siguiente salto de nuestro lado en el filtro de políticas, por lo que no necesito habilitarlo en la sesión.
Sebastian Wiesinger
No estamos "castigando" a nadie. Si quieren poner en la lista negra prefijos más grandes, sin duda pueden solicitarlo. En los últimos años nadie lo solicitó.
Sebastian Wiesinger
Estás viendo problemas adicionales, agregando complejidad, para reducir la expresividad. Si nunca ha ofrecido esto, ¿cómo sabe que sus clientes agregarían accidentalmente la comunidad de agujeros negros a redes más grandes que / 32? Casualmente, cuando alguna vez solicitamos una función a los proveedores, responden "nadie la ha pedido" y cuando hablas con la comunidad, encontrarás muchas personas que necesitan esa función. De todos modos, agregué sugerencias sobre cómo implementar este límite.
ytti
Me di cuenta de que en tu ejemplo, no aceptas los prefijos sin blackholing. Por lo tanto, es probable que tenga dos pares, uno para tráfico normal y otro para blackholing, y el blackholing probablemente sea multihop en su caso, en multihop la comprobación del siguiente salto ya está desactivada, por lo que no necesita 'accept-remote -siguiente salto'. Mi ejemplo cubre ambos pares BGP en la misma configuración, y como es PE <-> CE directo sin multihop, necesita 'accept-remote-nexthop'.
ytti
Sí, eso es cierto, lo necesitas en sesiones directas. El filtro debería funcionar en ambas situaciones, lo encadenaría con otras políticas de filtrado detrás en el escenario PE <-> CE.
Sebastian Wiesinger