Ñáîð äàííûõ ÷åðåç NETGRAPH
Íà÷èíàÿ ñ âåðñèè NETAMS-CURRENT build 2340 (03 ìàðòà 2005 ã.) ðàáîòàåò ìåòîä ñáîðà ñòàòèñòèêè è ôèëüòðàöèÿ òðàôèêà ÷åðåç ìîäóëü NETGRAPH.
Òåõíîëîãèÿ NETGRAPH äîñòóïíà äëÿ îïåðàöèîííîé ñèñòåìû
FreeBSD âåðñèé 4.õõ è 5.õõ. Âõîäÿùèé â ïîñòàâêó ìîäóëü ñîâìåñòèì ñ âåòêîé 5.õõ. NETGRAPH ïðåäñòàâëÿåò ñîáîé ìåõàíèçì îáúåäèíåíèÿ ðàçëè÷íûõ ñåòåâûõ ìîäóëåé ÿäðà FreeBSD â ïðîèçâîëüíûå ñòðóêòóðû (îáðàçóþùèå ãðàô), äëÿ ïîñëåäîâàòåëüíîé îáðàáîòêè ïàêåòîâ äàííûõ. Òàêèì îáðàçîì, ïðåäñòàâëÿåòñÿ âîçìîæíûì íàïèñàòü è èñïîëüçîâàòü äîñòàòî÷íî ïðîèçâîëüíóþ ñõåìó îáðàáîòêè äàííûõ â ÿäðå ÎÑ, ïîëüçóÿñü ñòàíäàðòíûì èíòåðôåéñîì ïðîãðàììèðîâàíèÿ. Áîëåå òîãî, ëåãêî îñóùåñòâèòü ñâÿçü ìîäóëÿ ÿäðà ñ user-level ïðîãðàììîé. ×åðåç NETGRAPH ðàáîòàþò, íàïðèìåð, ng_netflow, user-level ppp, ðàçëè÷íûå ìåõàíèçìû èíêàïñóëÿöèè ïàêåòîâ, è ìíîãîå äðóãîå. Äëÿ áîëåå ãëóáîêîãî îçíàêîìëåíèÿ ìîæíî ïîðåêîìåíäîâàòü ñëåäóþùèå èñòî÷íèêè:
http://www.daemonnews.org/200003/netgraph.html è
man 4 netgraph
Ïîëüçîâàòåëåé äðóãèõ îïåðàöèîííûõ ñèñòåì âûíóæäåíû îãîð÷èòü: íè÷åãî ïîäîáíîãî ó âàñ íåò. Òåì æå, êîìó ïîâåçëî, ìîãóò ÷èòàòü äàëüøå:
- Ïðèíöèïû ðàáîòû
- Êàê íàñòðîèòü
- Êàê ïðîâåðèòü
- Ðåçóëüòàòû èñïûòàíèé
- Çàêëþ÷åíèå
Ðàáîòà netams â ñëó÷àå èñïîëüçîâàíèÿ ìîäóëÿ NETGRAPH (äàëåå-ìîäóëü) çàêëþ÷àåòñÿ â óñòàíîâêå ìîäóëÿ â ÿäðî (è ïîäêëþ÷åíèÿ åãî ê èíòåðôåéñó, ÷åðåç êîòîðûé èäåò òðàôèê), è íàñòðîéêå ïðîãðàììû netams (äàëåå-äåìîíà) äëÿ êîððåêòíîãî ñîåäèíåíèÿ ñ ìîäóëåì.
Ìîäóëü è äåìîí ìîãóò ðàáîòàòü â äâóõ ðåæèìàõ (îíè äîëæíû áûòü îäèíàêîâû â íàñòðîéêàõ!):
tee è
divert.

 ðåæèìå
tee ìîäóëü ÿäðà ïîëó÷àåò ïàêåòû ñ èñïîëüçîâàíèåì "äóáëèêàòîðà" ng_tee, êîòîðûé îòñûëàåò íà îáðàáîòêó "êîïèþ" ïðîõîäÿùåãî ÷åðåç èíòåðôåéñ ïàêåòà. Ïîíÿòíîå äåëî, â òàêîì ñëó÷àå ôèëüòðàöèÿ òðàôèêà íåâîçìîæíà. Ïðîõîäÿùèå ÷åðåç ìîäóëü ïàêåòû ïîäâåðãàþòñÿ àíàëèçó çàãîëîâêîâ, ôîðìèðóþòñÿ çàïèñè â õýø-òàáëèöå, êîòîðûå ïåðèîäè÷åñêè "óñòàðåâàþò" è îòïðàâëÿþòñÿ íà îáðàáîòêó äåìîíó. Îí ïîëó÷àåò ïàêåòû ñ äàííûìè î òðàôèêå è îáðàáàòûâàåò èõ ïðèìåðíî òàê æå, êàê ïðîèñõîäèò ñ ïîòîêàìè netflow (ðàáîòàþò ó÷åò è ìîíèòîðèíã).
 ðåæèìå
divert ìîäóëü ÿäðà ïîäêëþ÷àåòñÿ íåïîñðåäñòâåííî ê ethernet-èíòåðôåéñó. Âåñü òðàôèê ïðîõîäèò ÷åðåç îáðàáîòêó, îäíàêî ÍÅ IP òðàôèê ïðîïóñêàåòñÿ ïðîçðà÷íî áåç ó÷åòà. Êàæäûé ïàêåò òàêæå ïðîõîäèò ïðîâåðêó íà ñîîòâåòñòâèå ñ óæå èìåþùèìñÿ â ñèñòåìå ïîòîêîì äàííûõ, è:
- åñëè ñîîòâåòñòâóþùåãî ïîòîêà íå íàéäåíî, ò.å. ðàññìàòðèâàåìûé ïàêåò-ïåðâûé â ïîòîêå äàííûõ (íà÷àëî ñîåäèíåíèÿ), òî äëÿ äàííîãî ïîòîêà ñîçäàåòñÿ î÷åðåäü. ïàêåò ïîìåùàåòñÿ â êîíåö î÷åðåäè. ñîçäàåòñÿ çàïðîñ âèäà FWREQUEST, ñîäåðæàùèé çàãîëîâêè ïàêåòà, è ïåðåäàåòñÿ ÷åðåç êîíòðîëüíûé ñîêåò äåìîíó netams. çàìåòèì, ÷òî â ýòîò ìîìåíò îðèãèíàëüíûé IP ïàêåò íèêóäà íå ïåðåäàåòñÿ, îí "çàñòðåâàåò" â ìîäóëå. ïîòîêó ïðèñâàèâàåòñÿ ñòàòóñ QUEUED.
- åñëè ïîòîê íàéäåí, òî ïðîâåðÿåòñÿ åãî ñòàòóñ:
- QUEUED - ðàññìàòðèâàåìûé ïàêåò äîáàâëÿåòñÿ â êîíåö öåïî÷êè ïàêåòîâ äàííîãî ïîòîêà. ïðè ýòîì äåëàþòñÿ ïðîâåðêè íà ðÿä îãðàíè÷åíèé ïî êîëè÷åñòâó ïîòîêîâ/ïàêåòîâ/áàéò/î÷åðåäåé, äëÿ ïðåäîòâðàùåíèÿ àòàêè DoS
- PASS - ïàêåò ïåðåäàåòñÿ äàëüøå
- DROP - ïàêåò óíè÷òîæàåòñÿ
Âîçíèêàåò âîïðîñ, ÷òî æå ïðîèñõîäèò ñ ïàêåòàìè â î÷åðåäè, è îòêóäà áåðóòñÿ ñòàòóñû
PASS è
DROP?
Ñòàòóñ
DROP ÿâëÿåòñÿ åäèíñòâåííî âîçìîæíûì äëÿ ðåæèìà ðàáîòû
TEE.
Êîãäà äåìîí ïîëó÷àåò çàïðîñ
FWREQUEST èç ìîäóëÿ ÿäðà, ïðîèñõîäèò ðàçáîð çàãîëîâêîâ è ïîëíûé àíàëèç âîçìîæíîñòè áëîêèðîâêè ïàêåòà ñ èñïîëüçîâàíèåì òàáëèö þíèòîâ, ïîëèòèê, ñèñòåìíûõ ïîëèòèê, ñëîâîì âñåãî îáû÷íîãî íàáîðà äåéñòâèé. Ïî îêîí÷àíèè ïðîâåðêè, ôîðìèðóåòñÿ ðåøåíèå ïî äàííîìó ïîòîêó: PASS èëè DROP, è îíî ïåðåäàåòñÿ îáðàòíî â ÿäðî ÷åðåç ñîîáùåíèå
FWREPLY. Çà âðåìÿ òàêîé îáðàáîòêè â ÿäðå óæå ìîæåò íàêîïèòüñÿ íåñêîëüêî ïàêåòîâ â î÷åðåäè äëÿ äàííîãî ïîòîêà. Ïî ïîëó÷åíèè îòâåòà îò äåìîíà, ìîäóëü ÿäðà âî-ïåðâûõ ñòàâèò ñîîòâåòñòâóþùèé ôëàã äëÿ äàííîãî ïîòîêà, à çàòåì ïûòàåòñÿ èëè îòïðàâèòü âñå ïàêåòû èç î÷åðåäè, èëè î÷èñòèòü î÷åðåäü.
Åñëè ïî êàêèì-òî ïðè÷èíàì äåìîí íåäîñòóïåí, òî ïî èñòå÷åíèè íåêîòîðîãî òàéìàóòà (ñåé÷àñ ýòî NG_NETAMS_DEFAULT_TIMEOUT ðàâíûé 2 ñåêóíäàì) ïðîèçâîäèòñÿ ïðèíóäèòåëüíàÿ î÷èñòêà î÷åðåäè äëÿ ïîòîêà è ïðèíÿòèå "ðåøåíèÿ ïî óìîë÷àíèþ" (ñåé÷àñ: ïðîïóñêàòü). Òàêèì îáðàçîì ïðåäîòâðàùàåòñÿ çàëèïàíèå ïîòîêà è âûåäàíèå ïàìÿòè ó ÿäðà (÷òî ìîæåò áûòü î÷åíü îïàñíûì!)
 ðåæèìå divert, êàê è â tee, ïðîâîäèòñÿ ïåðèîäè÷åñêîå óñòàðåâàíèå ïîòîêîâ è îòïðàâêà èõ íà ó÷åò "íàâåðõ", äåìîíó.
Ðàññìîòðåííûé ìåõàíèçì ðàáîòàåò, ïî ñóòè, àíàëîãè÷íî
Multilayer Switching, ðåàëèçîâàííîìó â Cisco Catalyst 6000 è ïîäîáíûõ ÿùèêàõ. Òàì "áûñòðûé" Switch Engine íàïðàâëÿåò ïåðâûé ïàêåò ïîòîêà "ìåäëåííîìó" Route Processor, êîòîðûé îïðåäåëÿåò, êóäà ìàðøðóòèçèðîâàòü ïàêåò, è ïðîâîäèò ïðîâåðêó ïðàâèë äîñòóïà (access lists). Âñå ïîñëåäóþùèå ïîñëå îòâåòà ïàêåòû èäóò ÷åðåç SE íàïðÿìóþ, è òîëüêî ÷åðåç íåêîòîðîå âðåìÿ "íàâåðõ" ïåðåäàåòñÿ ñòàòèñòèêà î ïðîøåäøåì ïîòîêå.  íàøåì ñëó÷àå ðåøåíèÿ î ìàðøðóòèçàöèè ïðèíèìàòü íå íóæíî, â ðîëè "áûñòðîãî" äâèæêà âûñòóïàåò ÿäðî ñ åãî ìåõàíèçìîì ôîðâàðäèíãà ïàêåòîâ, â ðîëè "ìåäëåííîãî" ðåøàòåëÿ - äåìîí NeTAMS.
Äëÿ íà÷àëà, âàì íàäî ñêîìïèëèðîâàòü netams, êàê îáû÷íî. Ïîëó÷èâøèéñÿ ìîäóëü
src/ng_netams.ko íåîáõîäèìî ïåðåïèñàòü â
/boot/kernel/
 äèñòðèáóòèâå åñòü ñêðèïò
addon/netams-netgraph.sh, êîòîðûé óñòàíàâëèâàåò â ÿäðî ñàì ìîäóëü
ng_netams.ko, óñòàíàâëèâàåò åãî ðåæèì ðàáîòû (TEE èëè DIVERT), âûâîä îòëàäî÷íîé èíôîðìàöèè, ïðîèçâîäèò ïîäêëþ÷åíèÿ ê äðóãèì íîäàì NETGRAPH (èíòåðôåéñó è ng_tee, åñëè íàäî)
Çàïóñêàåòñÿ ýòîò ñêðèïò ÷åðåç
./netams-netgraph.sh start
îñòàíàâëèâàåòñÿ ÷åðåç
./netams-netgraph.sh stop
Äëÿ íàñòðîéêè ñàìîãî
NeTAMS íåîáõîäèìî äîáàâèòü ñîîòâåòñòâóþùèé ñåðâèñ â
/usr/local/etc/netams.cfg:
service data-source 1
type netgraph
source netams: divert
Ïðè ýòîì '
netams:' - ýòî èìÿ ìîäóëÿ NETGRAPH, ñîâïàäàþùåå ñ òåì, ÷òî íàïèñàíî â ñêðèïòå
netams-netgraph.sh. Íå çàáûâàåì ïðî äâîåòî÷èå!
Ìîäóëü ÿäðà äîëæåí áûòü çàïóùåí ÄÎ äåìîíà.  ïðîòèâíîì ñëó÷àå äåìîí íå çàðàáîòàåò, êàê ñëåäóåò. Îäíàêî, â ïðîöåññå ðàáîòû äîïóñêàåòñÿ îñòàíàâëèâàòü è çàïóñêàòü äåìîí NeTAMS, ðàâíî êàê è âûãðóæàòü è çàãðóæàòü ñíîâà ìîäóëü ÿäðà (ïðè ýòîì áóäåò 20-ñåêóíäíàÿ çàäåðæêà â ïðèåìå ñòàòèñòèêè).
Åñëè ÷òî-òî áóäåò èäòè ñîâñåì íå òàê, óïàäåò ÿäðî :) èëè áëîêèðóåòñÿ âåñü òðàôèê!
Ðàáîòó äåìîíà netams ìîæíî ïðîâåðèòü ÷åðåç ïðîñìîòð ñîñòîÿíèÿ ñåðâèñà data-source:
netamsctl show ds
Data-source ID=1 type NETGRAPH source netams::9 loop 0 average 0 mcsec
Perf: average skew delay 0 mcsec, PPS: 0, BPS: 0
IP tree: 7 nodes [12] + 4 dlinks [1024] + 4 unodes [24] = 4276 bytes
Flows: 0/0 act/inact entries (0 bytes), 3 flows sent
HASH: size=65536, 0 flows hashed, 0 nodes used, max chain= 0
FIFO: 0/2 used/ready messages, each 108, total 216 bytes
ds_netgraph data messages: 3
netams: mode=2, pkt_rx=201, pkt_tx=169
flows: active(now)=3, queued(now)=0, blocked(total)=0, total=4
Ðàáîòà ìîäóëÿ ÿäðà âèäíà ÷åðåç ngctl:
ngctl msg netams: info
Rec'd response "info" (1) from "[3bb]:":
Args: { packets/in=254 packets/out=202 mode=2 debug=1
active_flows=3 total_flows=9 default_policy=2 }
Ïðè âêëþ÷åííîé îòëàäêå ìîäóëÿ (÷åðåç
ngctl msg netams: debug 1) íà êîíñîëè è â dmesg âèäíî ìíîãî ïîäîáíûõ ñòðîê:
info/1109893460: sent to daemon [961] with error=0
callout/1109893461+ active 1, checked 1, queued=0, flushed 0
callout/1109893462+ active 1, checked 1, queued=0, flushed 0
callout/1109893463+ active 1, checked 1, queued=0, flushed 0
callout/1109893464+ active 1, checked 1, queued=0, flushed 0
callout/1109893465+ active 1, checked 1, queued=0, flushed 0
callout/1109893466+ active 1, checked 1, queued=0, flushed 0
callout/1109893467+ active 1, checked 1, queued=0, flushed 0
callout/1109893468+ active 1, checked 1, queued=0, flushed 0
callout/1109893469+ active 1, checked 1, queued=0, flushed 0
netams: created flow record id=14, hash=00766, time=1109893469, proto=6
netams: created queue 0xc1a15250 for id=14, hash=00766
netams fwreply for entry id=14, flags=0, queue 1/102
netams: flush queue for entry id=14, hash=766, size=1, action=1
netams: created flow record id=15, hash=00254, time=1109893469, proto=6
netams: created queue 0xc1355240 for id=15, hash=00254
netams fwreply for entry id=15, flags=0, queue 1/102
netams: flush queue for entry id=15, hash=254, size=1, action=1
Çà÷åì âñå ýòî íóæíî? ×òîáû áûñòðåå ðàáîòàëî! Íèæå ïðèâåäåíû ðåçóëüòàòû íåáîëüøèõ ñòåíäîâûõ èñïûòàíèé.
Âñå ðàáîòû ïðîâîäèëèñü ñ ÎÑ FreeBSD 5.3-RELEASE, êîòîðàÿ ðàáîòàëà âíóòðè âèðòóàëüíîé ìàøèíû VmWare 4.5.2. Ñàìà âèðòóàëüíàÿ ìàøèíà ðàáîòàëà íà êîìïüþòåðå DUAL P4 Xeon 3.4GHz, 4Gb RAM ïîä óïðàâëåíèåì Windows Server 2003. Âèðòóàëüíàÿ ìàøèíà è õîñò-ìàøèíà ñâÿçàíû ÷åðåç âèðòóàëüíûé àäàïòåð vnmat (õîòÿ â òåñòàõ òðàíñëÿöèè àäðåñîâ íå áûëî).
Ñêîðîñòü ïåðåäà÷è äàííûõ èçìåðÿëàñü ïðè ïîìîùè
iperf 1.7.0
Íà ñàìîé ìàøèíå ñ Windows Server 2003 çàïóùåí ñåðâåð
iperf, òàì æå çàïóñêàåì êëèåíòà:
C:\>iperf.exe -c 192.168.56.1 -t 10 -i 1
------------------------------------------------------------
Client connecting to 192.168.56.1, TCP port 5001
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1948] local 192.168.56.1 port 3027 connected with 192.168.56.1 port 5001
[ ID] Interval Transfer Bandwidth
[1948] 0.0- 1.0 sec 97.8 MBytes 821 Mbits/sec
[1948] 1.0- 2.0 sec 96.1 MBytes 807 Mbits/sec
[1948] 2.0- 3.0 sec 97.7 MBytes 820 Mbits/sec
[1948] 3.0- 4.0 sec 93.0 MBytes 780 Mbits/sec
[1948] 4.0- 5.0 sec 93.2 MBytes 782 Mbits/sec
[1948] 5.0- 6.0 sec 96.9 MBytes 813 Mbits/sec
[1948] 6.0- 7.0 sec 98.4 MBytes 825 Mbits/sec
[1948] 7.0- 8.0 sec 97.4 MBytes 817 Mbits/sec
[1948] 8.0- 9.0 sec 96.0 MBytes 806 Mbits/sec
[1948] 9.0-10.0 sec 98.2 MBytes 824 Mbits/sec
[1948] 0.0-10.0 sec 965 MBytes 808 Mbits/sec
Êàê âèäèì, ñêîðîñòü ïåðåäà÷è äàííûõ ÷åðåç ëîêàëüíûé âèðòóàëüíûé èíòåðôåéñ ïðîñòî ãèãàíòñêàÿ. Ïðîáóåì, êàê ïåðåäàþòñÿ äàííûå ìåæäó Windows è óñòàíîâëåííîé FreeBSD, ÷åðåç VmWare, áåçî âñÿêèõ ïîáî÷íûõ ýôôåêòîâ (NeTAMS è ìîäóëü ÿäðà âûêëþ÷åíû):
freebsd-vm:~/netams#iperf -c 192.168.56.1 -t 10 -i 1
------------------------------------------------------------
Client connecting to 192.168.56.1, TCP port 5001
TCP window size: 32.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.56.17 port 51925 connected with 192.168.56.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 27.6 MBytes 232 Mbits/sec
[ 3] 1.0- 2.0 sec 28.4 MBytes 238 Mbits/sec
[ 3] 2.0- 3.0 sec 28.1 MBytes 236 Mbits/sec
[ 3] 3.0- 4.0 sec 28.3 MBytes 237 Mbits/sec
[ 3] 4.0- 5.0 sec 28.4 MBytes 238 Mbits/sec
[ 3] 5.0- 6.0 sec 28.3 MBytes 237 Mbits/sec
[ 3] 6.0- 7.0 sec 28.0 MBytes 235 Mbits/sec
[ 3] 7.0- 8.0 sec 28.1 MBytes 236 Mbits/sec
[ 3] 8.0- 9.0 sec 28.7 MBytes 240 Mbits/sec
[ 3] 9.0-10.0 sec 28.3 MBytes 237 Mbits/sec
[ 3] 0.0-10.0 sec 282 MBytes 237 Mbits/sec
Åñòåñòâåííî, ìåäëåííåå. Òåïåðü çàïóñòèì NeTAMS è ìîäóëü ÿäðà âìåñòå, â ðåæèìå
divert è óáåäèìñÿ, ÷òî ýòî áûëà íå ïîäñòàâà:
freebsd-vm:~/netams#iperf -c 192.168.56.1 -t 10 -i 1
------------------------------------------------------------
Client connecting to 192.168.56.1, TCP port 5001
TCP window size: 32.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.56.17 port 56639 connected with 192.168.56.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 20.9 MBytes 175 Mbits/sec
[ 3] 1.0- 2.0 sec 23.4 MBytes 196 Mbits/sec
[ 3] 2.0- 3.0 sec 23.5 MBytes 197 Mbits/sec
[ 3] 3.0- 4.0 sec 23.5 MBytes 197 Mbits/sec
[ 3] 4.0- 5.0 sec 23.6 MBytes 198 Mbits/sec
[ 3] 5.0- 6.0 sec 23.6 MBytes 198 Mbits/sec
[ 3] 6.0- 7.0 sec 23.4 MBytes 196 Mbits/sec
[ 3] 7.0- 8.0 sec 23.8 MBytes 200 Mbits/sec
[ 3] 8.0- 9.0 sec 23.6 MBytes 198 Mbits/sec
[ 3] 9.0-10.0 sec 23.3 MBytes 196 Mbits/sec
[ 3] 0.0-10.0 sec 233 MBytes 195 Mbits/sec
freebsd-vm:~/netams#ngctl msg netams: info
Rec'd response "info" (1) from "[3c5]:":
Args: { packets/in=85515 packets/out=169244 mode=2
debug=1 active_flows=4 total_flows=4 default_policy=2 }
Íàëèöî ïàäåíèå ïðîèçâîäèòåëüíîñòè íà 100*(237-195)/237=
17.7% èëè
â 1.2 ðàçà. Òåïåðü çàìåíèì ôèëüòðîâàíèå ÷åðåç ìîäóëü ÿäðà íà ñòàíäàðòíîå, ÷åðåç
ipfw divert è
data-source ip-traffic:
freebsd-vm:~/netams#iperf -c 192.168.56.1 -t 10 -i 1
------------------------------------------------------------
Client connecting to 192.168.56.1, TCP port 5001
TCP window size: 32.5 KByte (default)
------------------------------------------------------------
[ 3] local 192.168.56.17 port 55410 connected with 192.168.56.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0- 1.0 sec 2.96 MBytes 24.8 Mbits/sec
[ 3] 1.0- 2.0 sec 3.59 MBytes 30.1 Mbits/sec
[ 3] 2.0- 3.0 sec 3.73 MBytes 31.3 Mbits/sec
[ 3] 3.0- 4.0 sec 3.62 MBytes 30.3 Mbits/sec
[ 3] 4.0- 5.0 sec 3.70 MBytes 31.0 Mbits/sec
[ 3] 5.0- 6.0 sec 3.69 MBytes 30.9 Mbits/sec
[ 3] 6.0- 7.0 sec 3.65 MBytes 30.6 Mbits/sec
[ 3] 7.0- 8.0 sec 3.71 MBytes 31.1 Mbits/sec
[ 3] 8.0- 9.0 sec 3.71 MBytes 31.1 Mbits/sec
[ 3] 9.0-10.0 sec 3.73 MBytes 31.3 Mbits/sec
[ 3] 0.0-10.0 sec 36.1 MBytes 30.2 Mbits/sec
freebsd-vm:~/netams#ipfw show 10 11
00010 26136 39197956 divert 199 tcp from any to any dst-port 5001
00011 13069 679600 divert 199 tcp from any 5001 to any
 äàííîì ñëó÷àå ìû âèäèì ïîòåðþ ïðîèçâîäèòåëüíîñòè íà 100*(237-30.2)/237=
87.2% èëè
â 8 ðàç. Âûãîäà íàëèöî!
Âåëîñèïåä ìû íå èçîáðåëè, ýòî ïîíÿòíî. Ðåçóëüòàòû îæèäàåìû. Èñïîëüçîâàíèå ìîäóëÿ ÿäðà áîëåå îïàñíî, ÷åì îáû÷íîãî
data-source ip-traffic, à óæå òåì áîëåå ñáîðà ïî
libpcap èëè
netflow.  ñëó÷àå îøèáîê èëè ïåðåïîëíåíèÿ áóôåðîâ çàâèñàåò ÿäðî âìåñòå ñî âñåìè ïðîöåññàìè, èëè áëîêèðóþòñÿ âñå ñîêåòû. Áûëî ïðîâåäåíî òåñòèðîâàíèå íà ïðåäìåò ïîääåðæêè "íåõîðîøèõ ñèòóàöèé" âðîäå
ping -f èëè
nmap -sS -PS 80 -iR 100. Îäíàêî ñòàáèëüíîñòü ðàáîòû íå ãàðàíòèðóåòñÿ, òåñòèðóéòå ìîäóëü ñî âñåé îñòîðîæíîñòüþ!
Êòî-íèáóäü îñîáåííî óìíûé ìîæåò ñïðîñèòü: "À ñîáñòâåííî çà÷åì âû ýòî äåëàëè? Ôèëüòðîâàòü ìîæíî è â ÿäðå, ÷åðåç òîò æå
ipfw deny,
pfctl è ïðî÷åå. Âñå áóäåò áûñòðî è íàäåæíî."
Âîçìîæíî. Îäíàêî âàì ïðèäåòñÿ êàê-òî ñèíõðîíèçèðîâàòü òàáëèöó þíèòîâ è ïîëèòèê ó÷åòà ñ ïðàâèëàìè firewall, ôàêòè÷åñêè ãîðîäèòü çîîïàðê ñêðèïòîâ è äóáëèðîâàòü îäíî è òî æå äâàæäû. Çà÷åì? Èñïîëüçîâàíèå NeTAMS ïîçâîëÿåò õðàíèòü âñþ èíôîðìàöèþ î ïðàâèëàõ â îäíîì ìåñòå, áåç ïðîáëåì ïðèìåíÿÿ âñÿêèå õèòðîñòè âðîäå
break flag,
prefix table è
ñðàáàòûâàíèå ïî âðåìåíè ñóòîê. Ñîâåðøåííî ïðîçðà÷íî ðàáîòàþò ñåðâèñû êâîò, ñèñòåìíûå ïîëèòèêè, áèëëèíã, è òàê äàëåå.
Âîçìîæíûå íàïðàâëåíèÿ óëó÷øåíèÿ è ðàçâèòèÿ:
- Ñîçäàòü àíàëîãè÷íûé ïðîäóêò äëÿ Linux, âèäèìî íà áàçå ULOG
- Ñäåëàòü ïîääåðæêó RAW IP ïàêåòîâ, PPP è òàê äàëåå
- Ïðîâåðèòü ðàáîòîñïîñîáíîñòü â ñëó÷àå íåñêîëüêèõ ìîäóëåé ÿäðà, ðàáîòàþùèõ îäíîâðåìåííî