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 по подсчёту и сбору статистики по трафику как входящему так и исходящему по всем интерфейсам? |


Log in to reply