Настройка экспорта сетевых потоков
Документ описывает ряд необходимых процедур, которые нужно выполнить на устройстве «С-Терра Шлюз», чтобы реализовать возможность экспорта сетевых потоков при помощи протокола NetFlow v9, либо IPFIX.
1. Выборка трафика, который нужно экспортировать на коллектор, производится при помощи утилиты iptables.
2. Входящий IPsec трафик не может быть экспортирован никаким образом. Исходящий IPsec трафик может быть экспортирован только в том случае, если включена перемаршрутизация зашифрованного трафика (опция re-route on в соответствующей крипто-карте). Включение перемаршрутизации будет приводить к снижению производительности.
3. Рекомендуется экспортировать информацию о потоках только транзитного трафика, который либо будет шифроваться, либо уже расшифрован или должен пройти в открытом виде. Для этого в iptables, при выборе трафика, нужно использовать цепочку FORWARD.[u2]
Инженер, планирующий использовать данную инструкцию, должен:
1. Свободно ориентироваться в настройке базовых сценариев продукта «С-Терра Шлюз» (например, site-to-site IPsec), а также должен знать и понимать следующие технологии и протоколы: PKI, IPsec, NAT, Firewall, NetFlow, IPFIX.
2. Ознакомиться с документом «Использование утилиты “iptables”».
Перед настройкой устройство «С-Терра Шлюз» должно быть инициализировано (подробнее, на http://doc.s-terra.ru раздел «С-Терра Шлюз» -> «С-Терра Шлюз 4.3» -> «Подключение ПАК и инициализация «С-Терра Шлюз» на вычислительных системах архитектуры Intel x86/x86-64»).
Выполните описанные ниже шаги.
1. Подключитесь к локальной консоли устройства «С-Терра Шлюз» и пройдите процедуру аутентификации (по умолчанию administrator/s-terra).
2. Войдите в консоль linux bash:
administrator@sterragate] system
Entering system shell...
3. Создайте и отредактируйте конфигурационный файл /etc/modprobe.d/ipt_netflow.conf модуля экспорта потоков (ipt_NETFLOW), например:
root@sterragate:~# vim.tiny /etc/modprobe.d/ipt_netflow.conf
options ipt_NETFLOW destination=10.0.105.149:2056@10.0.238.241 protocol=9
где:
· options ipt_NETFLOW - параметр указывает, что настойки будут применяться к модулю ядра ipt_NETFLOW;
· destination=10.0.105.149:2056@10.0.238.241 - параметр задает настройки подключения к коллектору в формате collector_ip:collector_port@local_src_ip. То есть destination=10.0.105.149:2056@10.0.238.241 настраивает экспорт потоков на коллектор с IP адресом 10.0.105.149 и портом 2056, а в качестве IP адреса источника для пакетов будет использован IP адрес 10.0.238.241;
· protocol=9 - параметр задает протокол экспорта потоков, 9 - NetFlow v9, 10 - IPFIX.
С дополнительными параметрами модуля экспорта потоков можно ознакомиться по ссылке https://github.com/aabc/ipt-netflow.
4. При помощи утилиты iptables выберите трафик, информацию о потоках которого нужно экспортировать на коллектор для анализа, например:
root@sterragate:~# iptables -I FORWARD -j NETFLOW
В данном примере будет экспортироваться весь транзитный трафик криптошлюза, если нужно указать конкретны трафик - необходимо использовать стандартные селекторы iptables, например:
root@sterragate:~# iptables -I FORWARD -s 192.168.100.0/24 -d 192.168.1.0/24 -j NETFLOW
Действие -j NETFLOW указывается для всех версий протокола NetFlow и IPFIX.
5. Сохраните добавленные iptables правила (правила сохраняются в файл /etc/iptables/rules.v4):
root@sterragate:~# netfilter-persistent save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
6. Добавьте сервис netfilter-persistent.service в автозапуск, чтобы правила iptables применялись во время старта криптошлюза:
root@sterragate:~# systemctl enable netfilter-persistent.service
Synchronizing state of netfilter-persistent.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable netfilter-persistent
7. Для просмотра текущих правил iptables воспользуйтесь командой:
root@sterragate:~# iptables -L -n -v
Chain INPUT (policy ACCEPT 299K packets, 51M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 205M packets, 586G bytes)
pkts bytes target prot opt in out source destination
205M 586G NETFLOW all -- * * 0.0.0.0/0 0.0.0.0/0 NETFLOW
Chain OUTPUT (policy ACCEPT 30028 packets, 2665K bytes)
pkts bytes target prot opt in out source destination
8. Для просмотра информации о работе модуля экспорта потоков воспользуйтесь следующими командами:
· общая информация:
root@sterragate:~# cat /proc/net/stat/ipt_netflow
ipt_NETFLOW 2.4, srcversion BCB078ED79D406F25B07696; dir llist
Protocol version 9 (netflow), refresh-rate 20, timeout-rate 30, (templates 5, active 5).
Timeouts: active 1800s, inactive 15s. Maxflows 2000000
Flows: active 2 (peak 5 reached 0d19h23m ago), mem 987K, worker delay 25/250 [1..25] (40 ms, 0 us, 2:0 0 [cpu0]).
Hash: size 126372 (mem 987K), metric 1.00 [1.00, 1.00, 1.00]. InHash: 2113733 pkt, 3382979 K, InPDU 0, 0.
Rate: 52386424 bits/sec, 2418 packets/sec; Avg 1 min: 52220195 bps, 2414 pps; 5 min: 52211297 bps, 2397 pps
cpu# pps; <search found new [metric], trunc frag alloc maxflows>, traffic: <pkt, bytes>, drop: <pkt, bytes>
Total 2418; 0 206906501 796 [1.00], 0 0 0 0, traffic: 206907297, 563189 MB, drop: 0, 0 K
Export: Rate 0 bytes/s; Total 1835 pkts, 0 MB, 794 flows; Errors 1 pkts; Traffic lost 0 pkts, 0 Kbytes, 0 flows.
sock0: 10.0.105.149:2056@10.0.238.241, sndbuf 229376, filled 1, peak 2305; err: sndbuf reached 0, connect 2, cberr 0, other 0
Подробное описание счетчиков можно получить по ссылке: https://github.com/aabc/ipt-netflow.
· информация о потоках:
root@sterragate:~# cat /proc/net/stat/ipt_netflow_flows
# hash a dev:i,o proto src:ip,port dst:ip,port nexthop tos,tcpflags,options,tcpoptions packets bytes ts:first,last
1 1ce00 0 2,3 6 192.168.1.100,5201 192.168.100.100,35270 0.0.0.0 0,10,0,89000000 2215787 115225028 250427,0
2 19646 0 3,2 6 192.168.100.100,35270 192.168.1.100,5201 172.16.100.1 0,18,0,81000000 92499 3873782648 154740,2
· информация в dmesq:
root@sterragate:~# dmesg | grep ipt_NETFLOW
[ 3.265337] ipt_NETFLOW: loading out-of-tree module taints kernel.
[ 3.265513] ipt_NETFLOW version 2.4, srcversion BCB078ED79D406F25B07696
[ 3.265517] ipt_NETFLOW: hashsize 126372 (987K)
[ 3.265612] ipt_NETFLOW: error binding socket 99
[ 3.265678] ipt_NETFLOW: added destination 10.0.105.149:2056@10.0.238.241 (unconnected)
[ 3.265680] ipt_NETFLOW protocol version 9 (NetFlow) enabled.
[ 3.265683] ipt_NETFLOW is loaded.
[ 3.368763] ipt_NETFLOW: error binding socket 99
[ 63.456776] ipt_NETFLOW: connected 10.0.105.149:2056
Если есть информация об подключении connected 10.0.105.149:2056, то на ошибки error binding socket 99 не нужно обращать внимания.
Если требуется изменить какие-либо параметры в файле /etc/modprobe.d/ipt_netflow.conf, в тот момент, когда экспорт уже был настроен, то выполните следующие действия:
1. Удалите все правила из iptables с действием NETFLOW, например:
root@sterragate:~# iptables -D FORWARD -j NETFLOW
2. Измените файл /etc/modprobe.d/ipt_netflow.conf;
3. Выгрузите и загрузите модуль ipt_NETFLOW заново:
root@sterragate:~# modprobe -r -f ipt_NETFLOW
root@sterragate:~# modprobe ipt_NETFLOW
1. В выводе cat /proc/net/stat/ipt_netflow значение reached параметра sndbuf возрастает (например, при большом количестве потоков трафика):
root@sterragate:~# cat /proc/net/stat/ipt_netflow
ipt_NETFLOW 2.4, srcversion BCB078ED79D406F25B07696; dir llist
Protocol version 9 (netflow, refresh-rate 20, timeout-rate 30, (templates 6, active 6).
Timeouts: active 1800s, inactive 15s. Maxflows 2000000
Flows: active 130006 (peak 130006 reached 0d0h18m ago), mem 23402K, worker delay 25/250 [1..25] (28 ms, 0 us, 256:0 0 [cpu0]).
Hash: size 655360 (mem 5120K), metric 1.09 [1.03, 1.00, 1.00]. InHash: 9062507 pkt, 3474434 K, InPDU 0, 0.
Rate: 1638757392 bits/sec, 522645 packets/sec; Avg 1 min: 976093635 bps, 308886 pps; 5 min: 969238653 bps, 201557 pps
cpu# pps; <search found new [metric], trunc frag alloc maxflows>, traffic: <pkt, bytes>, drop: <pkt, bytes>
Total 522642; 45044570 8339890726 7063744 [2.07], 0 0 0 0, traffic: 8346954470, 3819350 MB, drop: 0, 0 K
cpu0 261330; 31329638 6341113018 4867094 [1.08], 0 0 0 0, traffic: 6345980112, 2960618 MB, drop: 0, 0 K
cpu1 54802; 3130328 335344760 452403 [1.03], 0 0 0 0, traffic: 335797163, 151251 MB, drop: 0, 0 K
cpu2 49113; 2347359 435473671 415318 [1.03], 0 0 0 0, traffic: 435888989, 183837 MB, drop: 0, 0 K
cpu3 9088; 460123 186300621 69918 [1.07], 0 0 0 0, traffic: 186370539, 82648 MB, drop: 0, 0 K
cpu4 29650; 990092 125803801 169945 [1.05], 0 0 0 0, traffic: 125973746, 43494 MB, drop: 0, 0 K
cpu5 68267; 3746975 338930352 592205 [1.03], 0 0 0 0, traffic: 339522557, 157398 MB, drop: 0, 0 K
cpu6 50392; 2894540 419378555 473662 [1.04], 0 0 0 0, traffic: 419852217, 169108 MB, drop: 0, 0 K
cpu7 0; 145515 157545948 23199 [1.00], 0 0 0 0, traffic: 157569147, 70991 MB, drop: 0, 0 K
Export: Rate 0 bytes/s; Total 241679 pkts, 322 MB, 6931542 flows; Errors 76 pkts; Traffic lost 5258828 pkts, 1584205 Kbytes, 2196 flows.
sock0: 192.168.2.100:2055, sndbuf 229376, filled 1, peak 230401; err: sndbuf reached 76, connect 0, cberr 0, other 0
Для решения этой проблемы в параметрах модуля ipt_NETFLOW (файл /etc/modprobe.d/ipt_netflow.conf) необходимо увеличить величину буфера на отправку пакетов в коллектор (значение по умолчанию 229376) и перезапустить модуль ipt_NETFLOW:
options ipt_NETFLOW destination=10.0.105.149:2056@10.0.238.241 protocol=9 sndbuf=50000000