Фильтр черной дыры (RTBH) BGP для Juniper


9

Я пытаюсь найти самый элегантный способ реализовать фильтр RTBH для маршрутов, полученных от клиента.

Фильтр должен:

  1. Принимайте только собственные префиксы клиентов из списка префиксов
  2. Только принимать / 32 префикса
  3. Только префиксы с сообществом blackhole
  4. Установите следующий переход к следующему переходу RTBH (192.0.2.1)

Для начала я посмотрел документ « Настройка условий совпадения в условиях политики маршрутизации » от Juniper.

Сначала я подумал о комбинировании a prefix-list-filterдля сопоставления только маршрутов из списка префиксов клиентов и a route-filterдля ограничения принятых префиксов до / 32, например, так:

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

Но потом я наткнулся на эту информацию в документе:

Если вы настраиваете политику, которая включает некоторую комбинацию фильтров маршрутов, списков префиксов и фильтров адресов источника, они оцениваются в соответствии с логической операцией ИЛИ или поиском совпадения с самым длинным маршрутом.

Как я понимаю , это (и я считаю , это немного неясно), если я использую prefix-list-filter, route-filterи / или source-address-filterв тот же срок он будет оцениваться с длинной-матч или между всеми ними, что делает этот подход непригодным для использования .

Я придумал следующий фильтр. Этот hostroutes-onlyтермин переводит все префиксы короче / 32 на следующую политику. После этого prefixesтермин совпадает, если / 32 находится в диапазоне клиента, совпадает с его as-path и имеет установленное сообщество черной дыры:

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;
    }
}

Итак, это самый элегантный способ справиться с этим? Любые другие решения?

Ответы:


8

Нет никаких оснований ограничивать клиента только черной дырой / 32, разрешать ему черную дыру что-либо из них.

Что-то вроде этого:

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;
    }
}

Не забудьте установить 'accept-remote-nexthop' в настройках BGP, чтобы следующий переход мог быть изменен на что-то другое, чем адрес ссылки.

Я также решительно поддерживаю, что провайдеры начинают поддерживать разные сообщества черных дыр, а не просто «полную черную дыру». Особенно, если вы работаете в более чем одной стране, обычно атака осуществляется транзитом, и часто клиент фактически хочет получить доступ к пирингам внутри страны, поэтому полезно реализовать несколько уровней черной дыры:

  1. Полный
  2. За пределами местной страны (местный IXP, видны целые клиенты AS +)
  3. Вне локального района (если применимо, как для меня это может быть 'Nordics')
  4. Включить / исключить определенный пиринг-маршрутизатор в черной дыре

Я рад привести пример того, как реализовать нечто подобное с помощью JNPR DCU / SCU, при условии, что ваши пиринговые маршрутизаторы являются JNPR, но это возможно только с сообществами, просто немного более неловко.


Если вы абсолютно хотите ограничить возможности вашего клиента, вы можете добавить это:

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;
        }
..
}

Таким образом, это должно быть логическим И. Но я действительно не вижу смысла в создании сложности для уменьшения выразительности конфигурации.


Спасибо за ваш ответ. Я не хочу, чтобы клиенты замаскировали большие части своего пространства, потому что в основном они стреляют себе в ногу этим. Что касается 'accept-remote-nexthop', я изменил следующий переход на нашей стороне в фильтре политики, поэтому мне не нужно включать его в сеансе.
— Себастьян Визингер

Мы никого не "наказываем". Если они хотят занести в черный список большие префиксы, они, безусловно, могут попросить об этом. В последние несколько лет никто не просил об этом.
— Себастьян Визингер

Вы видите дополнительные проблемы, добавляя сложности, чтобы уменьшить выразительность. Если вы никогда не предлагали этого, как вы узнали, что ваши клиенты случайно добавят сообщество «черные дыры» в более крупные сети, чем / 32? По случайному совпадению, когда мы спрашиваем какую-либо функцию у поставщиков, они отвечают «никто никогда не просил об этом», а когда вы общаетесь с сообществом, вы обнаружите, что многие люди нуждаются в такой функции. Во всяком случае я добавил предложение о том, как реализовать этот предел.
— 13:00

Я понял, что в вашем примере вы не принимаете префиксы вообще без чёрного холдинга. Таким образом, вы, вероятно, имеете два одноранговых узла, один для обычного трафика и один для черного хранилища, и в вашем случае, скорее всего, черный магазин является мультишопом, в мультишопе проверка следующего перехода уже отключена, поэтому вам не нужен 'accept-remote' -следующий прыжок'. Мой пример охватывает оба одноранговых соединения BGP в одном и том же конфиге, и, поскольку это прямой PE <-> CE без multihop, для него требуется 'accept-remote-nexthop'.
— Ytti

Да, это правда, вам это нужно на прямых сессиях. Фильтр должен работать в обеих ситуациях, вы должны связать его с другими политиками фильтрации в сценарии PE <-> CE.
— Себастьян Визингер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.