Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Gleb Smirnoff                        2:5020/400     10 Mar 2004  22:47:21
 To : All
 Subject : ng_netflow + natd
 -------------------------------------------------------------------------------- 
 
  Как собирать netflow статистику на маскарадящем роутере таким
 образом, что бы в netflow попадали внутренние IP:
 
 Hа divert/8668 висит обычный natd. Считаем что внутренняя сеть
 это ${localnet}, внешний интерфейс ${natif}.
 
 Делаем примерно вот такой firewall:
 
 00010  allow ip from any to any via lo0
 00020  log ip from any to 127.0.0.1
 00020  deny log ip from 127.0.0.1 to any
 00200  divert 8668 ip from any to any in via ${natif}
 00300  check-state
 00500  skipto 600 udp from me to any out via ${natif} keep-state
 00500  skipto 600 udp from ${localnet} to any out via ${natif} keep-state
 00599  deny log udp from any to any
 00600  divert 8668 ip from any to any out via ${natif}
 00650  allow udp from any to any
 00700  allow icmp from any to any
 00800  allow tcp from any to any established
 00850  allow tcp from me to any
 00860  allow tcp from ${localnet} to any
 04999  deny log ip from any to any
 
 Главное отличие от стандартого "divert all from any to any via ${natif}",
 заключается в том, что отдельно "divert бла-бла in via ${natif}" и 
 отдельно "divert бла-бла out via ${natif}". В промежутке между этими
 двумя правилами мы работаем с не маскараженными IP. Подробнее о
 таком подходе здесь:
 http://unixfaq.ru/index.pl?req=qs&id=286
 (кстати, автор - найдись, я забыл твое имя)
 
 Теперь строим следующую netgraphину, которая будет ловить пакеты
 в промежутке где видны локальные IP (index=6 это чисто моя
 специфика, у меня ${nat_if} имеет индекс 6):
 
 /usr/sbin/ngctl -f- <<-SEQ
 
         mkpeer tee dummy right2left
         name .:dummy divert_tee_in
         mkpeer divert_tee_in: echo right echo
         mkpeer divert_tee_in: ksocket left inet/raw/divert
         name divert_tee_in:left divert_sock_in
         msg divert_sock_in: bind inet/0.0.0.0:8669
 
         disconnect dummy
 
         mkpeer divert_tee_in: netflow left2right iface0
         name divert_tee_in:left2right netflow
 
         msg netflow: setdlt { iface=0 dlt=12 }
         msg netflow: setifindex { iface=0 index=6 }
 
         mkpeer netflow: ksocket export inet/dgram/udp
         msg netflow:export connect inet/127.0.0.1:4444
 
 SEQ
 
 Визуально это так:
       ng_netflow
      /
 ng_ksocket -- ng_tee -- ng_echo
 
 ksocket представляет собой divert socket.
 
 Теперь остается добавить "201 divert 8669 ip from any to any in via ${nat_if}"
 и готово.
 
 Работает:
 root@morannon:/tmp:|>flowctl netflow show
 SrcIf         SrcIPaddress    DstIf         DstIPaddress    Pr SrcP DstP  Pkts
 ng1           217.72.144.68   lo0           217.72.144.190   6 0016 c001  1159
 ng1           217.72.144.1    bge0          192.168.0.2     17 0035 c008     1
 ng1           194.87.0.50     bge0          192.168.0.2      1 0000 0000     3
 
 Тот, кто понял идею сможет снимать netflow и с нескольких интерфейсов и сможет
 аналогичным образом использовать ng_ipacct.
 
 -- 
 Totus tuus, Glebius.
 GLEBIUS-RIPN GLEB-RIPE
 --- ifmail v.2.15dev5.3
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 ng_netflow + natd   Gleb Smirnoff   10 Mar 2004 22:47:21 
Архивное /ru.unix.bsd/65774970de4f.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional