{toc}
Наиболее правильным способом обеспечить надёжность фильтрации при больших объёмах трафика является комбинирование асинхронной маршрутизации с обработкой зеркала трафика.
h2. Словарь
Несколько синонимов для лучшего понимания:
* разрыв - активная схема включения DPI
* зеркало - пассивная схема включения DPI
* NAS - network access server, маршрутизатор, агрегирующий подключения абонентов
* Border - пограничный маршрутизатор провайдера, подключающийся к аплинкам
h2. Схема сети
!scheme_2_reductor_mirror_and_gap.png|border=1!
h2. Описание
В данной схеме используется два сервера Carbon Reductor 8.
h3. Используемые подсети:
* абонент-NAS \-
* NAS-Reductor (разрыв)
* NAS, Reductor (разрыв) и Reductor (зеркало) - Border
Данная схема минимальна - она реализуется с учётом того, что ни одна из этих подсетей не пересекается. Также в этой схеме не используются VLAN. Это не означает то, что сети не должны пересекаться, что в ней не должно быть VLAN или чего-то ещё - просто это на текущий момент не протестировано и потенциальные возникающие при этом проблемы ещё не описаны в этой статье.
*Reductor (зеркало)* анализирует весь исходящий трафик, зеркалируемый с Border'а.
*Reductor (разрыв)* анонсирует известные ему IP адреса запрещённых ресурсов на NAS с помощью BGP. При этом фильтрации по самим IP адресам в большей части случаев не происходит, на *Reductor (разрыв)* производится анализ пакетов и решение принимается на основе их содержимого. Такая схема повышает надёжность фильтрации, устраняя небольшую вероятность потерь исходящих от абонентов пакетов зеркалирующим оборудованием и потерь отправленных редиректов. В этой схеме не решается проблема с ресурсами, часто изменяющими свой IP адрес - они анализируются в зеркале трафика. Основная проблема, которую решает эта схема - сделать надёжным анализ 90-98% ресурсов, IP адреса которых известны.
Какие адреса анонсирует *reductor (разрыв):*
* ip_block_subnet - список IP адресов подсетей, которые должны быть заблокированы по всем портам и протоколам.
* ip_forward - список IP адресов, которые должны отправляться в разрыв через reductor.
** на текущий момент этот список формируется из списков ip_http_plus, ip_https и ip_https_plus.
Адреса подсетей в этих двух списках не должны пересекаться. Это обеспечивается системой обработки списков Carbon Reductor 8, приоритет отдаётся ip_block_subnet.
Обработка пересечений учитывает вхождение небольших подсетей в более крупные подсети.
h2. Настройки
h3. Carbon Reductor (разрыв)
h4. Сеть
Необходимо также настроить обратные маршруты до сетей абонентов на *reductor (разрыв)*. Это можно сделать настроив связку с NAS-серверами по OSPF, либо прописав статические маршруты (что удобнее - зависит от того как устроена сеть). Например NAS сервера доступны на Carbon Reductor через интерфейс eth2. Тогда его настройки приёма трафика будут выглядеть следующим образом.
/app/reductor/cfg/userinfo/mirror.conf
{code}
eth2 - 10.30.20.1/24 forward
{code}
forward - новое поле в конфигурации приёма трафика, означает "роль" интерфейса. Возможные значения:
* "forward" указывает, что трафик, пришедший на этот интерфейс в итоге должен быть смаршрутизирован после анализа.
* "mirror" указывает, что трафик, пришедший на этот интерфейс должен быть отброшен после анализа.
* Если роль не указана, считается что роль интерфейса - "mirror".
Из этой строчки будет сгенерирован конфиг /etc/sysconfig/network-scripts/ifcfg-eth2 вида:
{code}
IPADDR=10.30.20.1
PREFIX=24
DEFROUTE=no
ONBOOT=yes
BOOTPROTO=static
NM_CONTROLLED=no
{code}
В /etc/sysconfig/network-scripts/route-eth2 нужно вручную прописать маршруты вида:
* 10.30.33.0/24 - сеть абонентов
* 10.30.32.0.24 - сеть абонентов
* 10.30.20.2 - NAS, через который она доступна
конфиг будет выглядеть так:
{code}
10.30.32.0/24 via 10.30.20.2
10.30.33.0/24 via 10.30.20.2
{code}
h4. app reductor
# Включите сбор IP адресов ресурсов, блокируемых по HTTP.
# Включите использование подсетей для синхронизации с маршрутизатором.
h4. app bgp_blackhole
# Включите BGP Blackhole
# Настройте связку с BGP-"соседями"
# Убедитесь, что корректно работает отправка blackhole-маршрутов, только после этого переходите к следующему пункту
# Включите опцию "Асинхронная маршрутизация в разрыв"
# Если необходимо, переопределите IP адрес шлюза для маршрутизируемого трафика (может пригодиться в очень сложной нестандартной схеме сети). По умолчанию он определяется автоматически.
h4. Применение настроек
На сервере по SSH выполните:
{code}
# сетевые настройки
/etc/init.d/network restart
# разбор реестра с новыми опциями для получения всех нужных IP адресов и их обработка
chroot /app/reductor /usr/local/Reductor/bin/update.sh
# перестроения firewall, запуск BGP/Zebra
/etc/init.d/apps restart
{code}
h3. Carbon Reductor (зеркало)
Обычная типовая настройка Carbon Reductor 8, описанная в этой документации. Ничего особенного делать не нужно.
h3. NAS
h4. Связка по BGP
На NAS нужно настроить связку по BGP с *reductor (разрыв).*
В случае с Linux - как это сделать описано в нашей [статье о настройке Remote Triggered Blackhole|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=69926929#IPфильтрация%28BGPRemoteTriggeredBlackHole%29-ПримернастройкисоседаReductorапоBGP].
h4. Отключение rp_filter
Также возможно потребуется отключение reverse path filtering (rp_filter), так как запросы на IP адреса запрещённых ресурсов будут уходить с одного интерфейса, а ответы на них будут приходить на другой. Сделать это можно следующим образом. Отключить на ходу:
{code}
for i in $(grep '' /proc/sys/net/ipv4/conf/*/rp_filter | awk -F: '{print $1}'); do
echo 2 > $i
done
{code}
и чтобы опция оставалась выключенной после перезагрузки, в /etc/sysctl.conf правим строчку:
{code}
net.ipv4.conf.default.rp_filter = 2
{code}
h3. Border
h4. Настройка зеркала
На Border нужно настроить отправку зеркала трафика для *reductor (зеркало).*
Это необязательно должно быть именно на бордере, но этой самый простой для реализации пример.
h4. Улучшение эффективности
Наиболее надёжной и эффективной работы *reductor (зеркало)* можно добиться тремя способами:
# Сложный, но более эффективный - *reductor (зеркало)* должен быть включен в абонентские сети и отсылать редиректы напрямую, например с помощью статических маршрутов.
# Проще, но менее эффективно - *reductor (зеркало)* должен иметь OSPF-сессии со всеми NAS-серверами и отправлять редиректы абонентам через тот NAS-сервер к которому абонент подключен.
# Значительно проще, но наименее эффективно - *reductor (зеркало)* перекладывает задачу маршрутизации редиректа к абоненту на плечи Border.
В любой из этих схем основным фактором, влияющим на эффективность является число промежуточных машин (хопов), которые занимаются доставкой пакета с редиректом абоненту. Чем их меньше - тем быстрее будет реагировать reductor, тем надёжнее будет работать фильтрация.
h2. Вариации этой схемы
h3. Использование одного сервера Carbon Reductor
В принципе Reductor (зеркало) и Reductor (разрыв) можно совместить на одном сервере, но в таком случае возрастают требования к аппаратной части этого сервера.
*Ограничение* \- не получится отправлять в один интерфейс и зеркало трафика и трафик в разрыв.
Обойти его можно с помощью VLAN, но лучше использовать отдельную сетевую карту или отдельный порт сетевой карты.
h3. Несколько NAS-серверов
NAS-серверов может быть несколько и со всеми будет устанавливаться BGP сессия.
Просто укажите через пробел несколько NAS серверов в настройке "Список маршрутизаторов" при настройке BGP Blackhole.
Формат:
{code}
<IP адрес>:<номер AS> [<IP адрес>:<номер AS>] ...
{code}
Пример:
{code}
10.30.22.2:65002 10.30.22.3:65002
{code}
h3. Фильтрация публичных DNS
Можно отправлять в списке анонсируемых также IP адреса популярных публичных DNS серверов.
Для этого необходимо добавить их в /app/reductor/var/lib/reductor/lists/provider/our.ip_http_plus для повышения надёжности фильтрации DNS трафика
h2. Примечания
Скорее всего доля трафика, анализируемого в разрыв будет довольно мала.
Точных замеров мы пока не проводили, но есть предположение, что если, например, для захвата зеркала трафика вам была необходима хорошая 10Гбит/сек сетевая карта, то для маршрутизируемого трафика хватит двух 1Гбит/сек карт.
Также возрастают требования к сетевой карте, обеспечивающей выход в интернет - желательна поддержка нескольких очередей и правильно настроенное распределение прерываний.
h2. Пример сети для тестирования в виртуальной среде
Пример, на котором успешно собиралась и тестировалась данная схема в виртуальной среде.
{code:xhtml}
vm_server:
networks:
management: 10.35.0.0/16 # сеть управления, например для подключения по SSH
abonent: 10.30.20.0/24 # абонентская сеть
reductor_route: 10.30.21.0/24 # сеть между NAS и Reductor, через которую он шлёт трафик для анализа в разрыв
border: 10.30.22.0/24 # подключение к Border, выход в интернет для всех серверов сети (NAS, Reductor)
vms:
abonent: # тестовый абонент, с него можно совершать запросы и смотреть tcpdump'ом как он идёт по сети
network:
abonent: # default route, выходим в интернет через NAS
eth0: 10.30.20.2/24 via 10.30.20.1
management: # нужен чтобы подключаться к тестовой машине по SSH
eth1: 10.35.15.18/16
gate: # NAS-сервер
network:
border: # default route, выходим в инет через бордер
eth1: 10.30.22.2/24 via 10.30.22.1
abonent: # агрегация абонентов
eth2: 10.30.20.1/24
reductor_route: # линк к Carbon Reductor, здесь живёт BGP-сессия с ним
eth3: 10.30.21.2/24
management: # подключение к виртуалке по SSH с ноутбука
eth0: 10.35.140.213/16
border: # бордер, центральный маршрутизатор, точка подключения к аплинку(ам)
network:
management: # defroute, по совместительству подключение к виртуалке по SSH
eth0: 10.35.140.211/16 via 10.35.0.4
border: # подключение NAS-серверов к нему, должны быть обратные маршруты до сетей абонентов
- eth1
- 10.30.22.1/24
- 10.30.20.0/24 via 10.30.22.2
reductor: # Carbon Reductor 8
network:
border: # default route, выход в интернет
eth1: 10.30.22.3/24 via 10.30.22.1
reductor_route:
eth2: # линк к NAS-серверу(ам), здесь живёт BGP-сессия с ним(и), + короткий обратный маршрут к абонентам
- 10.30.21.1/24
- 10.30.20.0/24 via 10.30.21.2
management: # нужен чтобы подключаться к тестовой машине по SSH
eth0: 10.35.140.215
{code}
Наиболее правильным способом обеспечить надёжность фильтрации при больших объёмах трафика является комбинирование асинхронной маршрутизации с обработкой зеркала трафика.
h2. Словарь
Несколько синонимов для лучшего понимания:
* разрыв - активная схема включения DPI
* зеркало - пассивная схема включения DPI
* NAS - network access server, маршрутизатор, агрегирующий подключения абонентов
* Border - пограничный маршрутизатор провайдера, подключающийся к аплинкам
h2. Схема сети
!scheme_2_reductor_mirror_and_gap.png|border=1!
h2. Описание
В данной схеме используется два сервера Carbon Reductor 8.
h3. Используемые подсети:
* абонент-NAS \-
* NAS-Reductor (разрыв)
* NAS, Reductor (разрыв) и Reductor (зеркало) - Border
Данная схема минимальна - она реализуется с учётом того, что ни одна из этих подсетей не пересекается. Также в этой схеме не используются VLAN. Это не означает то, что сети не должны пересекаться, что в ней не должно быть VLAN или чего-то ещё - просто это на текущий момент не протестировано и потенциальные возникающие при этом проблемы ещё не описаны в этой статье.
*Reductor (зеркало)* анализирует весь исходящий трафик, зеркалируемый с Border'а.
*Reductor (разрыв)* анонсирует известные ему IP адреса запрещённых ресурсов на NAS с помощью BGP. При этом фильтрации по самим IP адресам в большей части случаев не происходит, на *Reductor (разрыв)* производится анализ пакетов и решение принимается на основе их содержимого. Такая схема повышает надёжность фильтрации, устраняя небольшую вероятность потерь исходящих от абонентов пакетов зеркалирующим оборудованием и потерь отправленных редиректов. В этой схеме не решается проблема с ресурсами, часто изменяющими свой IP адрес - они анализируются в зеркале трафика. Основная проблема, которую решает эта схема - сделать надёжным анализ 90-98% ресурсов, IP адреса которых известны.
Какие адреса анонсирует *reductor (разрыв):*
* ip_block_subnet - список IP адресов подсетей, которые должны быть заблокированы по всем портам и протоколам.
* ip_forward - список IP адресов, которые должны отправляться в разрыв через reductor.
** на текущий момент этот список формируется из списков ip_http_plus, ip_https и ip_https_plus.
Адреса подсетей в этих двух списках не должны пересекаться. Это обеспечивается системой обработки списков Carbon Reductor 8, приоритет отдаётся ip_block_subnet.
Обработка пересечений учитывает вхождение небольших подсетей в более крупные подсети.
h2. Настройки
h3. Carbon Reductor (разрыв)
h4. Сеть
Необходимо также настроить обратные маршруты до сетей абонентов на *reductor (разрыв)*. Это можно сделать настроив связку с NAS-серверами по OSPF, либо прописав статические маршруты (что удобнее - зависит от того как устроена сеть). Например NAS сервера доступны на Carbon Reductor через интерфейс eth2. Тогда его настройки приёма трафика будут выглядеть следующим образом.
/app/reductor/cfg/userinfo/mirror.conf
{code}
eth2 - 10.30.20.1/24 forward
{code}
forward - новое поле в конфигурации приёма трафика, означает "роль" интерфейса. Возможные значения:
* "forward" указывает, что трафик, пришедший на этот интерфейс в итоге должен быть смаршрутизирован после анализа.
* "mirror" указывает, что трафик, пришедший на этот интерфейс должен быть отброшен после анализа.
* Если роль не указана, считается что роль интерфейса - "mirror".
Из этой строчки будет сгенерирован конфиг /etc/sysconfig/network-scripts/ifcfg-eth2 вида:
{code}
IPADDR=10.30.20.1
PREFIX=24
DEFROUTE=no
ONBOOT=yes
BOOTPROTO=static
NM_CONTROLLED=no
{code}
В /etc/sysconfig/network-scripts/route-eth2 нужно вручную прописать маршруты вида:
* 10.30.33.0/24 - сеть абонентов
* 10.30.32.0.24 - сеть абонентов
* 10.30.20.2 - NAS, через который она доступна
конфиг будет выглядеть так:
{code}
10.30.32.0/24 via 10.30.20.2
10.30.33.0/24 via 10.30.20.2
{code}
h4. app reductor
# Включите сбор IP адресов ресурсов, блокируемых по HTTP.
# Включите использование подсетей для синхронизации с маршрутизатором.
h4. app bgp_blackhole
# Включите BGP Blackhole
# Настройте связку с BGP-"соседями"
# Убедитесь, что корректно работает отправка blackhole-маршрутов, только после этого переходите к следующему пункту
# Включите опцию "Асинхронная маршрутизация в разрыв"
# Если необходимо, переопределите IP адрес шлюза для маршрутизируемого трафика (может пригодиться в очень сложной нестандартной схеме сети). По умолчанию он определяется автоматически.
h4. Применение настроек
На сервере по SSH выполните:
{code}
# сетевые настройки
/etc/init.d/network restart
# разбор реестра с новыми опциями для получения всех нужных IP адресов и их обработка
chroot /app/reductor /usr/local/Reductor/bin/update.sh
# перестроения firewall, запуск BGP/Zebra
/etc/init.d/apps restart
{code}
h3. Carbon Reductor (зеркало)
Обычная типовая настройка Carbon Reductor 8, описанная в этой документации. Ничего особенного делать не нужно.
h3. NAS
h4. Связка по BGP
На NAS нужно настроить связку по BGP с *reductor (разрыв).*
В случае с Linux - как это сделать описано в нашей [статье о настройке Remote Triggered Blackhole|http://docs.carbonsoft.ru/pages/viewpage.action?pageId=69926929#IPфильтрация%28BGPRemoteTriggeredBlackHole%29-ПримернастройкисоседаReductorапоBGP].
h4. Отключение rp_filter
Также возможно потребуется отключение reverse path filtering (rp_filter), так как запросы на IP адреса запрещённых ресурсов будут уходить с одного интерфейса, а ответы на них будут приходить на другой. Сделать это можно следующим образом. Отключить на ходу:
{code}
for i in $(grep '' /proc/sys/net/ipv4/conf/*/rp_filter | awk -F: '{print $1}'); do
echo 2 > $i
done
{code}
и чтобы опция оставалась выключенной после перезагрузки, в /etc/sysctl.conf правим строчку:
{code}
net.ipv4.conf.default.rp_filter = 2
{code}
h3. Border
h4. Настройка зеркала
На Border нужно настроить отправку зеркала трафика для *reductor (зеркало).*
Это необязательно должно быть именно на бордере, но этой самый простой для реализации пример.
h4. Улучшение эффективности
Наиболее надёжной и эффективной работы *reductor (зеркало)* можно добиться тремя способами:
# Сложный, но более эффективный - *reductor (зеркало)* должен быть включен в абонентские сети и отсылать редиректы напрямую, например с помощью статических маршрутов.
# Проще, но менее эффективно - *reductor (зеркало)* должен иметь OSPF-сессии со всеми NAS-серверами и отправлять редиректы абонентам через тот NAS-сервер к которому абонент подключен.
# Значительно проще, но наименее эффективно - *reductor (зеркало)* перекладывает задачу маршрутизации редиректа к абоненту на плечи Border.
В любой из этих схем основным фактором, влияющим на эффективность является число промежуточных машин (хопов), которые занимаются доставкой пакета с редиректом абоненту. Чем их меньше - тем быстрее будет реагировать reductor, тем надёжнее будет работать фильтрация.
h2. Вариации этой схемы
h3. Использование одного сервера Carbon Reductor
В принципе Reductor (зеркало) и Reductor (разрыв) можно совместить на одном сервере, но в таком случае возрастают требования к аппаратной части этого сервера.
*Ограничение* \- не получится отправлять в один интерфейс и зеркало трафика и трафик в разрыв.
Обойти его можно с помощью VLAN, но лучше использовать отдельную сетевую карту или отдельный порт сетевой карты.
h3. Несколько NAS-серверов
NAS-серверов может быть несколько и со всеми будет устанавливаться BGP сессия.
Просто укажите через пробел несколько NAS серверов в настройке "Список маршрутизаторов" при настройке BGP Blackhole.
Формат:
{code}
<IP адрес>:<номер AS> [<IP адрес>:<номер AS>] ...
{code}
Пример:
{code}
10.30.22.2:65002 10.30.22.3:65002
{code}
h3. Фильтрация публичных DNS
Можно отправлять в списке анонсируемых также IP адреса популярных публичных DNS серверов.
Для этого необходимо добавить их в /app/reductor/var/lib/reductor/lists/provider/our.ip_http_plus для повышения надёжности фильтрации DNS трафика
h2. Примечания
Скорее всего доля трафика, анализируемого в разрыв будет довольно мала.
Точных замеров мы пока не проводили, но есть предположение, что если, например, для захвата зеркала трафика вам была необходима хорошая 10Гбит/сек сетевая карта, то для маршрутизируемого трафика хватит двух 1Гбит/сек карт.
Также возрастают требования к сетевой карте, обеспечивающей выход в интернет - желательна поддержка нескольких очередей и правильно настроенное распределение прерываний.
h2. Пример сети для тестирования в виртуальной среде
Пример, на котором успешно собиралась и тестировалась данная схема в виртуальной среде.
{code:xhtml}
vm_server:
networks:
management: 10.35.0.0/16 # сеть управления, например для подключения по SSH
abonent: 10.30.20.0/24 # абонентская сеть
reductor_route: 10.30.21.0/24 # сеть между NAS и Reductor, через которую он шлёт трафик для анализа в разрыв
border: 10.30.22.0/24 # подключение к Border, выход в интернет для всех серверов сети (NAS, Reductor)
vms:
abonent: # тестовый абонент, с него можно совершать запросы и смотреть tcpdump'ом как он идёт по сети
network:
abonent: # default route, выходим в интернет через NAS
eth0: 10.30.20.2/24 via 10.30.20.1
management: # нужен чтобы подключаться к тестовой машине по SSH
eth1: 10.35.15.18/16
gate: # NAS-сервер
network:
border: # default route, выходим в инет через бордер
eth1: 10.30.22.2/24 via 10.30.22.1
abonent: # агрегация абонентов
eth2: 10.30.20.1/24
reductor_route: # линк к Carbon Reductor, здесь живёт BGP-сессия с ним
eth3: 10.30.21.2/24
management: # подключение к виртуалке по SSH с ноутбука
eth0: 10.35.140.213/16
border: # бордер, центральный маршрутизатор, точка подключения к аплинку(ам)
network:
management: # defroute, по совместительству подключение к виртуалке по SSH
eth0: 10.35.140.211/16 via 10.35.0.4
border: # подключение NAS-серверов к нему, должны быть обратные маршруты до сетей абонентов
- eth1
- 10.30.22.1/24
- 10.30.20.0/24 via 10.30.22.2
reductor: # Carbon Reductor 8
network:
border: # default route, выход в интернет
eth1: 10.30.22.3/24 via 10.30.22.1
reductor_route:
eth2: # линк к NAS-серверу(ам), здесь живёт BGP-сессия с ним(и), + короткий обратный маршрут к абонентам
- 10.30.21.1/24
- 10.30.20.0/24 via 10.30.21.2
management: # нужен чтобы подключаться к тестовой машине по SSH
eth0: 10.35.140.215
{code}