В вопросах именно сетевой безопасности функционально выделяются два компонента: IDS - Intrusion Detection System, система обнаружения вторжений, компонент, который обнаруживает сам факт злонамеренного сетевого вторжения. Это может быть выделенная система типа DPI (Deep Packet Inspection), пропускающая через себя трафик, анализатор статистики NetFlow или же эта функция может быть встроена в приложение, ну или реализована как анализатор логов (fail2ban). IPS - Intrusion Prevention System, система предотвращения вторжений, компонент, блокирующий злоумышленнику сетевой доступ к атакуемому приложения. Реализована эта система может быть как встроенная в приложение функция, настраиваемый пакетный фильтр на хосте, как фаерволл на периметре защищаемого сегмента сети или же обычный сетевой маршрутизатор с BGP. Вот про этот вариант сегодня и поговорим. Все маршрутизаторы имеют возможность устанавливать пакетные фильтры - наборы правил, в соответствии с которыми фильтруется проходящий трафик. Эти наборы правил обычно приходится вносить в конфигурацию маршрутизатора в виде ACL (access control list), а затем применять на интерфейсах, что не очень оперативно на самом деле и не очень хорошо поддается автоматизации. Нужно же эти списки распространить по всей сети. Так же следует учитывать, что размеры ACL обычно ограничены возможностями маршрутизатора. Эти проблемы давно известны, и на самом деле в жизни для оперативного предотвращения вторжений используется чуть-чуть другой подход - блекхолинг (интересно, можно ли сейчас на англоязычных ресурсах применять этот термин?). Для всей провайдерской сети выбирается один "проклятый" адрес, из числа немаршрутизируемых сетей, например, из сети 198.18.0.0/15 или даже 192.0.0.0/24 - 192.0.0.0/32. Далее на каждом роутере в сети маршрут на этот хост заворачивается в Null, а затем маршруты на адреса злоумышленников объявляются в сеть с nexthop как раз 192.0.0.0 ну и, разумеется, с community no-export. Маршруты распространяются по всей сети по протоколу BGP - и готово, трафик НА адреса злоумышленников будет уничтожен на первом же маршрутизаторе. И вот тут Вы имеете полное право воскликнуть "Ну а что толку? Мне же нужно заблокировать трафик ОТ злоумышленника!". Но толк будет. Даже если не применять опцию unicast reverse path forwarding check, которая "занулит" так же и трафик ОТ злоумышленника, "ломатель" не сможет получать ответы от жертв, что не позволит провести сложные типы атак. Он перестанет быть "ломателем", а будет в лучшем случае DOS-ером. Если же у Вас стоят маршрутизаторы с поддержкой BGP address family flow, то все концептуально упрощается - эта address family как раз и предназначена для распространения ACL по сети. А в этих ACL можно запретить трафик ОТ адреса злоумышленника и все будет работать самым правильным образом. Но увы, не все это умеют. Таким образом, для обеспечения IPS нужно просто обеспечить передачу адресов злодеев в виде ACL (или маршрутов) по сети. Это делается легко и непринужденно, если у Вас на сети развернуто решение наподобие Arbor Peakflow SP, и тогда дальше можно не читать. А вот если нет, если хочется обеспечить такой IPS на основе информации из логов сетевых устройств, nginx, sshd, snort, suricata и т.п., то думаю тут может помочь ban2bgp. Это приложение продолжает тему полезных мелочей для админа с BGP на Rust (BGPExplorer). ban2bgp позволяет обеспечить временный бан указанных через http rest api адресов в виде анонсов по BGP flow acl и/или blackhole routes. В контрибе есть пример настройки для fail2ban - злодей после попытки взлома Вашего сервера или попыток логинов на сетевые устройства может быть отключен на часик не только от одного устройства, но и от всей Вашей сети. Для установки проще взять исходники с гитхаба, предполагается что уже есть git и rust.     Настроим BGP route-reflector (считаем что RR имеет адрес 10.0.0.1, наша AS 65535, машина с ban2bgp имеет адрес 10.1.1.1): Создадим ini с настройками ban2bgp: И запустим Теперь попробуем забанить 198.18.0.1 на час: Проверяем на RR: По истечении времени бана маршрут будет отозван автоматически. Для отдачи команд ban2bgp с других хостов его http rest api разумеется нужно спроксировать или запустить не на 127.0.0.1. Параметры ban2bgp.ini: httplisten - адрес и порт для запуска http rest api, по умолчанию 0.0.0.0:8080 listen - необязательный адрес с портом для прослушивания для входящих подключений BGP. По умолчанию 0.0.0.0:179. Разумеется, если порт <1024, то нужно быть рутом. nexthop - ipv4 nexthop для блокирующих маршрутов. На всех роутерах нужно статически завернуть в Null. nexthop6 - ipv6 nexthop для блокирующих маршрутов. На всех роутерах нужно статически завернуть в Null. communities - разделенный пробелами список community для маршрутов. peers - разделенный запятыми список пиров BGP, формат пира <ip> AS<n>. duration - длительность бана по умолчанию в секундах. skiplist - разделенный запятыми список сетей, которые банить нельзя, защита от ошибок. Список эндпоинтов http rest api: /api/add?net=198.18.0.0/32&dur=3600 добавить бан, net - ipv4/ipv6 маршрут для добавления, dur - время бана в секундах /api/remove?net=198.18.0.0/32 удалить бан /api/json блочная операция, в POST нужно отправить JSON со списком операций, например: {"add":{"duration":86400,"nets":["33.3.3.3"]},"remove":["11.1.1.1","22.2.2.2"]} /api/ping Проверка доступности, отвечает "pong" /api/dumprib Возвращает список блокируемых адресов