|
|
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)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/65774970de4f.html, оценка из 5, голосов 10
|