Скрипт использует подсистему netgraph FreeBSD для экспорта данных о трафике с определенного интерфейса в формате netflow. Для работы скрипта в rc.conf нужно добавить следующее:
netflow_enable="YES"
netflow_iface="em0" # Интерфейс, данные с которого нужно экспортировать
netflow_collector="127.0.0.1:9996" # Адрес netflow-коллектора
При разработке использовал статью
http://nexus.org.ua/weblog/message/406/
#!/bin/sh
# PROVIDE: netflow
# REQUIRE: NETWORKING
# BEFORE:
# KEYWORD:
. /etc/rc.subr
name="netflow"
rcvar=`set_rcvar`
start_cmd="netflow_start"
stop_cmd="netflow_stop"
ngctl="/usr/sbin/ngctl"
load_rc_config $name
eval "${rcvar}=\${${rcvar}:-'NO'}"
netflow_collector=${netflow_collector:-"localhost:9996"}
netflow_iface=${netflow_iface:-"lo0"}
netflow_start()
{
echo "Starting netflow export on $netflow_iface to $netflow_collector"
$ngctl mkpeer $netflow_iface: tee lower left
$ngctl name $netflow_iface:lower tee0
$ngctl connect $netflow_iface: tee0: upper right
$ngctl mkpeer tee0: one2many left2right many0
$ngctl name tee0:left2right one2many0
$ngctl connect tee0: one2many0: right2left many1
$ngctl mkpeer one2many0: netflow one iface0
$ngctl name one2many0:one netflow
$ngctl mkpeer netflow: ksocket export inet/dgram/udp
$ngctl name netflow:export ksocket0
$ngctl msg netflow: setifindex { iface=0 index=4 }
$ngctl msg netflow:export connect inet/$netflow_collector
}
netflow_stop()
{
$ngctl shutdown ksocket0:
$ngctl shutdown netflow:
$ngctl shutdown one2many0:
$ngctl shutdown $netflow_iface:upper
$ngctl shutdown $netflow_iface:lower
#$ngctl shutdown $netflow_iface:upper:
}
run_rc_command $1