NG_NETFLOW + pfSense + анализатор netflow
-
pfSense v. 1.2.3RC1, VMWare Workstation v. 6.5.2, Netflow Analyzer v. 7.0.0.2, PRTG Network Monitor v. 7
Собственно сам NG_NETFLOW уже вкомпилен как я понял осталось только заюзать его.
Нарыл несколько простейших скриптов, поюзал - вроде работают. В примере локалный внутренний интерфейс, считается входящий и исходящий трафик. Каждый скриптик представляет из себя определенную схему соединения элементов NETGRAPH.|
|
#!/bin/sh ngctl -f- <<-SEQ mkpeer em1: tee lower left name em1:lower tee0 connect em1: em1:lower upper right mkpeer tee0: one2many left2right many0 name tee0:left2right one2many0 connect tee0: one2many0: right2left many1 mkpeer one2many0: netflow one iface0 name one2many0:one netflow mkpeer netflow: ksocket export inet/dgram/udp msg netflow: setifindex { iface=1 index=2 } msg netflow:export connect inet/1.1.1.1:9999 SEQ
|
#!/bin/sh ngctl -f- <<-SEQ mkpeer em1: hub lower hook0 name em1:lower hub connect hub: em1: hook1 upper mkpeer hub: netflow hook2 iface0 name hub:hook2 netflow mkpeer netflow: ksocket export inet/dgram/udp name netflow:export ksocket msg ksocket: connect inet/1.1.1.1:9999 msg netflow: setifindex { iface=1 index=2 } SEQ
|
#!/bin/sh /usr/sbin/ngctl -f- <<-SEQ mkpeer em1: split lower mixed name em1:lower splitlow mkpeer splitlow: netflow out iface1 name splitlow:out netflow mkpeer netflow: split out1 in name netflow:out1 splitup connect splitup: em1: mixed upper connect splitup: netflow: out iface0 connect splitlow: netflow: in out0 msg netflow: setifindex { iface=1 index=2 } msg netflow: setifindex { iface=0 index=2 } msg netflow: settimeouts { inactive=10 active=15 } mkpeer netflow: ksocket export inet/dgram/udp msg netflow:export connect inet/1.1.1.1:9999 SEQ
|
#!/bin/sh ngctl -f- <<-SEQ mkpeer em1: netflow lower iface0 name em1:lower netflow connect netflow: em1: iface1 upper connect netflow: netflow: out0 out1 mkpeer netflow: ksocket export inet/dgram/udp msg netflow: setifindex { iface=0 index=2 } msg netflow: setifindex { iface=1 index=2 } msg netflow:export connect inet/1.1.1.1:9999 SEQ
|
index=2 - порядковый номер интерфейса:
ifconfig -l
em0 em1 em2 plip0 lo0 enc0 pflog0 pfsync0 ng0 ng1 ng2 ng3
Нарыл ещё один:
#!/bin/sh . /etc/rc.subr flow_if="vlan12" flow_if_idx="4" # man ng_netflow / time in seconds active_timeout="60" inactive_timeout="15" name="ngnetflow" rcvar=`set_rcvar` start_cmd="ngnetflow_start" stop_cmd="ngnetflow_stop" load_rc_config $name eval "${rcvar}=\${${rcvar}:-'NO'}" ng_export=${ngnetflow_export:-"192.168.100.6:9996"} ngnetflow_start() { echo "Setup ng_netflow" /usr/sbin/ngctl -f- <<-SEQ mkpeer ${flow_if}: split lower mixed name ${flow_if}:lower ${flow_if}_splitlow mkpeer ${flow_if}_splitlow: netflow out iface1 name ${flow_if}_splitlow:out netflow mkpeer netflow: split out1 in name netflow:out1 splitup connect splitup: ${flow_if}: mixed upper connect splitup: netflow: out iface0 connect ${flow_if}_splitlow: netflow: in out0 msg netflow: setifindex { iface=1 index=${flow_if_idx} } msg netflow: setifindex { iface=0 index=${flow_if_idx} } msg netflow: settimeouts { inactive = ${inactive_timeout} active = ${active_timeout} } mkpeer netflow: ksocket export inet/dgram/udp # msg netflow:export bind inet/${ng_export} msg netflow:export connect inet/${ng_export} SEQ } ngnetflow_stop() { /usr/sbin/ngctl -f- <<-SEQ shutdown netflow: SEQ } run_rc_command "$1"
В принципе та же ботва, с использованием SPLIT, вместо VLAN12 и IDX="4" подставляете своё, только почемуто он не запускается и не работает выдаёт ошибку:
/usr/local/etc/rc.d/flowem1: 55: Syntax error: end of file unexpected (expecting "}")
подскажите почему, может чего-то где-то не хватает (в скриптах и freebsd я даун честно признаюсь) или может у когони-будь есть более изящные решения с использованием NG_NETFLOW по подсчёту и сбору статистики по трафику как входящему так и исходящему по всем интерфейсам? |