Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: VladSun в Nov 10, 2005, 19:29



Титла: iptables
Публикувано от: VladSun в Nov 10, 2005, 19:29
Celeron D 1.7, RAM 384MB

uname -a
Linux 2.6.10 #5 Wed Oct 26 13:01:58 GMT-2 2005 i686 unknown

iptables -V
iptables v1.3.2

Има една частна /24 мрежа със SNAT и една публична /24 мрежа.
Прави се маркиране на пакетите по upload/download съответно за БГ/международен (т.е. 4 маркера)
Също така се прави и HTB шейп по четирите канала.

Макс. трафик е около 17Мбит.

Преди ползвах система от правила в Iptables, които бяха последователни и се обхождаха всичките, но когато сървера се натовари даже не можех да вляза в конзолата през SSH.
Поради това реших да направя дървовидна структура от правилата:

0. 2 отделни вериги за UL/DL - TRAF_IN, TRAF_OUT

1. във всяка от тези вериги се прави верига за БГ трафик (по БГ мрежи) - BG_IN, BG_OUT
2. във всяка от БГ веригите се правят две отделни вериги за разделяне на двете мрежи (публичната и частната)
3. във всяка от "мрежовите" вериги още 4 вериги за /26 мрежи
5. в получените "1/4 мрежови" вериги правя маркиране за всяко ИП
 ... по същия начин (1-5) за международния интернет
 ... по същия начин (2-5) в -t filter FORWARD веригата за разрешаване и забраняване на ИП-та

Въпросът ми е дали това което правя има смисъл и предложения за по-добри решения :)

ПС: в момента
 iptables -t nat -nL | iptables -nL | iptables -t mangle -nL | wc -l
 1190
при пуснати около 140 ИП-та


Титла: iptables
Публикувано от: Uvigii в Nov 10, 2005, 22:57
Примерен код
uvigii root #  iptables -t nat -nL | iptables -nL | iptables -t mangle -nL | wc -l
862

и нямам никакви проблеми , през повечето време процесорчето е на 300 - 600 MHz при средно около 1 MB/s пуснати HTTP, DNS и още 2-3 услуги.
Единия начин за оптимизация е да ползваш AND и OR при маркирането, при което :
+ ще имаш в пъти по малко правила
- няма да можеш да отчиташ поотделно трафика на всеки
Поздрави


Титла: iptables
Публикувано от: VladSun в Nov 10, 2005, 23:59
Мерси, Uvigii !
С AND/OR имаш предвид това ли?
Примерен код

   IPMARK
       Allows  you to mark a received packet basing on its IP address. This can replace many mangle/mark entries with only one,
       if you use firewall based classifier.

       This target is to be used inside the mangle table, in the PREROUTING, POSTROUTING or FORWARD hooks.

       --addr src/dst
              Use source or destination IP address.

       --and-mask mask
              Perform bitwise `and' on the IP address and this mask.

       --or-mask mask
              Perform bitwise `or' on the IP address and this mask.


или НЕДОКУМЕТИРАНАТА (поне при мене) опция за MARK --or-mark ?


Честно казано за пръв път го виждам и много ти благодаря за насоката :)))))
Четох няколко пъти МАН-а, но нещо не разбрах по отношение на  --addr src/dst - по-надолу в примера използват --addrs=dst, но казват:
Примерен код
... all packets going to/from 192.168.5.2 are directed to 1:0502 queue, 192.168.5.12 -> 1:050c etc. ...

Тъй като и ти го споменаваш, това означава ли, че няма начин за отделно маркиране на входящи/изходящи пакети? Много ме обърква и това, че се намира в POSTROUING верига, пък казват "от/към" :(

Ако ползвам:

iptables -t mangle -A FORWARD -o ext_if -i int_if -j IPMARK --addr=src --and-mask=0xffff --or-mask=0x10000 // upload
iptables -t mangle -A FORWARD -o ext_if -i int_if -j IPMARK --addr=dst --and-mask=0xffff --or-mask=0x20000 //download

предполагам че ТРЯБВА да получа два различни маркера на пакетите?

ПС: След известно наблюдение на сървера мога да кажа, че използването на дървовидната структура имаше ОГРОМЕН ефект :)


Титла: iptables
Публикувано от: VladSun в Nov 11, 2005, 01:14
Цитат
Something I've only just noticed from a comment in the code - htb can
use mark without the need for lots of filters.

You only need one empty filter on the root (maybe you can still nest) like -

tc filter add dev eth0 parent 1:0 protocol ip prio 1 fw

and then if you arrange for your classes to be the same minor numbers as
the marks it will behave like using classify.


А това някой пробвал ли го е?


Титла: iptables
Публикувано от: в Nov 11, 2005, 13:11
pootdelno na vseki potrebitel imam napredvid***

ina4e za in/out ako si napravi6 pootdelno
iptables -t mangle -N MARK_O
iptables -t mangle -N MARK_I
i vatre sloji6 pravilata za markirane
iptables -t mangle -A POSTROUTING -o $eth_internal -j MARK_I
iptables -t mangle -A POSTROUTING -o $eth_external -j MARK_O
bi trqbvalo da stane


Титла: iptables
Публикувано от: в Nov 11, 2005, 13:29
Btw.
Цитат
2. във всяка от БГ веригите се правят две отделни вериги за разделяне на двете мрежи (публичната и частната)

I vav vsqka ot "leaf" verigite ima6 pravilo za vseki IP adres ?
A za kakvo ti e vsqka BG mreja po otdelno ? Ne e li po-dobre vsi4ki BG mreji v edna veriga i tam spored adresa na polu4atelq da markira6 .


Титла: iptables
Публикувано от: в Nov 11, 2005, 13:37
Цитат
предполагам че ТРЯБВА да получа два различни маркера на пакетите?

ako markera ne e 16 bitov
po dobre napravi 0x0100 i 0x0200 (ili 0x1000 i 0x2000)
otdelno zabelqzah 4e HTB clasove s minor nad 9999(decimal) predizvikvat overflow na nqkoj counter ?! moje i az da sum omazal ne6to po skriptovete si no klas s minor 10000 izliza kato clas 1 a drugite si rabotqt normalno !?!?
:(


Титла: iptables
Публикувано от: VladSun в Nov 11, 2005, 14:51
Цитат (Guest @ Ноември 11 2005,13:29)
Btw.
Цитат
2. във всяка от БГ веригите се правят две отделни вериги за разделяне на двете мрежи (публичната и частната)

I vav vsqka ot "leaf" verigite ima6 pravilo za vseki IP adres ?
A za kakvo ti e vsqka BG mreja po otdelno ? Ne e li po-dobre vsi4ki BG mreji v edna veriga i tam spored adresa na polu4atelq da markira6 .

Точно така съм го направил :)
Под БГ мрежите в тази точка (т.2) разбирам BG_IN, BG_OUT, получени след като са обходени БГ ИП зоните (т. 1) и чак след това се делят на публична/частна, 1/4 мрежи ит .тн..

Благодаря за предупреждението за НТВ-то.


Титла: iptables
Публикувано от: Uvigii в Nov 11, 2005, 19:26
Ето как изглеждат при мен нещата:
Цитат

1.
По една верига за всеки входящ интерфейс

Chain PREROUTING (policy ACCEPT 69908 packets, 31M bytes)
 pkts bytes target     prot opt in     out     source               destination
 8171 6648K MARK_0_S   all  --  eth1   *       0.0.0.0/0            0.0.0.0/0
16776   18M MARK_1_S   all  --  eth2   *       0.0.0.0/0            0.0.0.0/0
 6798 4181K MARK_2_S   all  --  eth3   *       0.0.0.0/0            0.0.0.0/0

2.
Маркирам всеки пакет като такъв с: Локален, БГ или международен произход (0x1000, 0x1100, 0x1200)
Chain MARK_0_S (1 references)
 pkts bytes target     prot opt in     out     source               destination
//-> Това са локалните  за ISP0 мрежи
    0     0 MARK       all  --  *      *       212.116.x.y/24     0.0.0.0/0           MARK set 0x1000
   10   862 MARK       all  --  *      *       217.160.a.b       0.0.0.0/0           MARK set 0x1000
   35  2660 MARK       all  --  *      *       216.104.c.d       0.0.0.0/0           MARK set 0x1000
    0     0 MARK       all  --  *      *       66.45.n.m         0.0.0.0/0           MARK set 0x1000
   34  2584 MARK       all  --  *      *       195.161.f.p      0.0.0.0/0           MARK set 0x1000
    0     0 MARK       all  --  *      *       67.15.g.e          0.0.0.0/0           MARK set 0x1000
//-> тук прявя проверка за това дали пакета е маркиран вече - ако да няма нужда да се обхождат правилата по нататък
   79  6106 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1000
//->
//-> следват всички БГ мрежи
    0     0 MARK       all  --  *      *       62.32.52.0/24        0.0.0.0/0           MARK set 0x1100
    0     0 MARK       all  --  *      *       62.32.56.0/24        0.0.0.0/0           MARK set 0x1100
    7  3875 MARK       all  --  *      *       62.44.96.0/19        0.0.0.0/0           MARK set 0x1100
    0     0 MARK       all  --  *      *       62.73.64.0/18        0.0.0.0/0           MARK set 0x1100
    0     0 MARK       all  --  *      *       62.176.64.0/18       0.0.0.0/0           MARK set 0x1100
    0     0 MARK       all  --  *      *       62.200.195.0/24      0.0.0.0/0           MARK set 0x1100
    0     0 MARK       all  --  *      *       62.204.128.0/19      0.0.0.0/0           MARK set 0x1100
..........
//-> Проверка за това дали е БГ ?
3416 2242K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1100
//->
//-> Ако не е БГ и не е Локален - значи е международен.
 4672 4398K MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK set 0x1200


Тази верига е аналогична на останалите 2  (MARK_1_S за  пристигащите през eth2 и MARK_2_S  пристигащите през eth3) разликите са само в стойностите с които се маркира) 0x2000,0x2100,0x2200; 0x3000,0x3100,0x3200

3.
Премаркирам пакетите според получателя (тук е мястото където може да се използва OR и да се заменят всички правила само с 1)

Chain POSTROUTING (policy ACCEPT 67092 packets, 31M bytes)
 pkts bytes target     prot opt in     out     source               destination
39542   29M MARK_0_D   all  --  *      eth0    0.0.0.0/0            0.0.0.0/0


Chain MARK_0_D (1 references)
 pkts bytes target     prot opt in     out     source               destination
    1    76 MARK_0_D_0x1000  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1000
   38  6274 MARK_0_D_0x1100  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1100
   70 93607 MARK_0_D_0x1200  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1200
   33 46588 MARK_0_D_0x2000  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x2000
   90 16529 MARK_0_D_0x2100  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x2100
   49  5960 MARK_0_D_0x2200  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x2200
    0     0 MARK_0_D_0x2300  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x2300
   31  2987 MARK_0_D_0x2400  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x2400
  203  105K MARK_0_D_0x2500  all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x2500

Chain MARK_0_D_0x1000 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.1      MARK set 0x1001
.....
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.254      MARK set 0x10FE

Chain MARK_0_D_0x1100 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.168.1      MARK set 0x1101
......

Chain MARK_0_D_0x1200 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.1.11      MARK set 0x1201
......

//-> Същото е и за останалите вериги.


Chain MARK_0_D_0x2000 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MARK       all  --  *      *       0.0.0.0/0            192.168.168.1      MARK set 0x2001

........



Титла: iptables
Публикувано от: VladSun в Nov 11, 2005, 23:36
Примерен код

$ipt -A FORWARD -t mangle -j MARK --set-mark 1
$ipt -t mangle -A FORWARD -i eth1 -o eth0 -j TRAF_OUT
$ipt -t mangle -A FORWARD -i eth0 -o eth1 -j TRAF_IN

echo -n "Building subnets tree..."

# BG IPs
let cc=0
for i in `cat /docs/bgnet`; do
  let cc=$cc+1
  if [ "$cc" = "50" ]
  then
    let cc=0
    $ipt -t mangle -A TRAF_IN -m mark ! --mark 1 -j RETURN
    $ipt -t mangle -A TRAF_OUT -m mark ! --mark 1 -j RETURN
  fi
  $ipt -t mangle -A TRAF_IN -s $i -j BG_IN
  $ipt -t mangle -A TRAF_OUT -d $i -j BG_OUT
done


#Private 1/4 subnets
$ipt -t mangle -N BG_IN_192_168_2_0
$ipt -t mangle -N BG_IN_192_168_2_1-63
$ipt -t mangle -N BG_IN_192_168_2_64-127
$ipt -t mangle -N BG_IN_192_168_2_128-191
$ipt -t mangle -N BG_IN_192_168_2_192-254
$ipt -t mangle -N BG_OUT_192_168_2_0
$ipt -t mangle -N BG_OUT_192_168_2_1-63
$ipt -t mangle -N BG_OUT_192_168_2_64-127
$ipt -t mangle -N BG_OUT_192_168_2_128-191
$ipt -t mangle -N BG_OUT_192_168_2_192-254

$ipt -t mangle -A BG_IN -d 192.168.2.0/24 -j BG_IN_192_168_2_0
$ipt -t mangle -A BG_OUT -s 192.168.2.0/24 -j BG_OUT_192_168_2_0

$ipt -t mangle -A BG_IN_192_168_2_0 -d 192.168.2.0/26 -j BG_IN_192_168_2_1-63
$ipt -t mangle -A BG_OUT_192_168_2_0 -s 192.168.2.0/26 -j BG_OUT_192_168_2_1-63
$ipt -t mangle -A BG_IN_192_168_2_0 -d 192.168.2.64/26 -j BG_IN_192_168_2_64-127
$ipt -t mangle -A BG_OUT_192_168_2_0 -s 192.168.2.64/26 -j BG_OUT_192_168_2_64-127
$ipt -t mangle -A BG_IN_192_168_2_0 -d 192.168.2.128/26 -j BG_IN_192_168_2_128-191
$ipt -t mangle -A BG_OUT_192_168_2_0 -s 192.168.2.128/26 -j BG_OUT_192_168_2_128-191
$ipt -t mangle -A BG_IN_192_168_2_0 -d 192.168.2.192/26 -j BG_IN_192_168_2_192-254
$ipt -t mangle -A BG_OUT_192_168_2_0 -s 192.168.2.192/26 -j BG_OUT_192_168_2_192-254

$ipt -t mangle -N BG_OUT_192_168_2_1-63 -s 192.168.1.1 -j MARK --set-mark 101
$ipt -t mangle -N BG_OUT_192_168_2_1-63 -s 192.168.1.2 -j MARK --set-mark 102
......
$ipt -t mangle -N BG_IN_192_168_2_1-63 -d 192.168.1.1 -j MARK --set-mark 401
$ipt -t mangle -N BG_IN_192_168_2_1-63 -d 192.168.1.2 -j MARK --set-mark 402
......

$ipt -A TRAF_IN -t mangle -m mark --mark 1 -j INT_IN
$ipt -A TRAF_OUT -t mangle -m mark --mark 1 -j INT_OUT

#Private 1/4 subnets
$ipt -t mangle -N INT_IN_192_168_2_0
$ipt -t mangle -N INT_IN_192_168_2_1-63
$ipt -t mangle -N INT_IN_192_168_2_64-127
$ipt -t mangle -N INT_IN_192_168_2_128-191
$ipt -t mangle -N INT_IN_192_168_2_192-254
$ipt -t mangle -N INT_OUT_192_168_2_0
$ipt -t mangle -N INT_OUT_192_168_2_1-63
$ipt -t mangle -N INT_OUT_192_168_2_64-127
$ipt -t mangle -N INT_OUT_192_168_2_128-191
$ipt -t mangle -N INT_OUT_192_168_2_192-254

$ipt -t mangle -A INT_IN -d 192.168.2.0/24 -j INT_IN_192_168_2_0
$ipt -t mangle -A INT_OUT -s 192.168.2.0/24 -j INT_OUT_192_168_2_0

$ipt -t mangle -A INT_IN_192_168_2_0 -d 192.168.2.0/26 -j INT_IN_192_168_2_1-63
$ipt -t mangle -A INT_OUT_192_168_2_0 -s 192.168.2.0/26 -j INT_OUT_192_168_2_1-63
$ipt -t mangle -A INT_IN_192_168_2_0 -d 192.168.2.64/26 -j INT_IN_192_168_2_64-127
$ipt -t mangle -A INT_OUT_192_168_2_0 -s 192.168.2.64/26 -j INT_OUT_192_168_2_64-127
$ipt -t mangle -A INT_IN_192_168_2_0 -d 192.168.2.128/26 -j INT_IN_192_168_2_128-191
$ipt -t mangle -A INT_OUT_192_168_2_0 -s 192.168.2.128/26 -j INT_OUT_192_168_2_128-191
$ipt -t mangle -A INT_IN_192_168_2_0 -d 192.168.2.192/26 -j INT_IN_192_168_2_192-254
$ipt -t mangle -A INT_OUT_192_168_2_0 -s 192.168.2.192/26 -j INT_OUT_192_168_2_192-254


$ipt -t mangle -N INT_OUT_192_168_2_1-63 -s 192.168.1.1 -j MARK --set-mark 1101
$ipt -t mangle -N INT_OUT_192_168_2_1-63 -s 192.168.1.2 -j MARK --set-mark 1102
......
$ipt -t mangle -N INT_IN_192_168_2_1-63 -d 192.168.1.1 -j MARK --set-mark 1401
$ipt -t mangle -N INT_IN_192_168_2_1-63 -d 192.168.1.2 -j MARK --set-mark 1402
......



но мисля че след като съществува такова нещо като IPMARK използването на дървовидна структура се обезмисля (поне за маркирането)
За FORWARD -j ACCEPT/DROP обаче има смисъл.

Чел съм твоята статия и често пъти съм я препоръчвал :) Но вземи предвид скромното ми предложение за обхождане на БГ мрежите по начин, който ти предлагам в този скрипт.

Също така, след като опитам IPMARK target-a ще постна едно мнение за него - твоята система от правила също би се олекотила много.

Благодаря за дейното участие в разискването, Uvigii :)


Титла: iptables
Публикувано от: Uvigii в Nov 12, 2005, 17:33
Както съм го направил има много недостатъци и утежнява (макр, че на мен не ми пречи) работата на машината.
Но има ЕДНО основно предимство: имам статиска по абсолютно всеки вазможен параметър.


Титла: iptables
Публикувано от: VladSun в Nov 12, 2005, 17:54
Да, и аз това се сетих ...
Ама след това реших, че от статистиката на tc ще мога да си правя статистика по IP (по-скоро по MARK)


Титла: iptables
Публикувано от: Uvigii в Nov 14, 2005, 10:58
Цитат
Ама след това реших, че от статистиката на tc ще мога да си правя статистика по IP (по-скоро по MARK)

Което аз лично не рабрах как да направя т.е. не разбрах как да си нулирам броячите, а да разчитам на мртг или ррд неискам.
Още една много приятна идейка мога да ти дам:

Примерен код

Chain QUOTAS (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            192.168.1.1      quota: 1610612736 bytes
........
........
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x1000/0xff00
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x2000/0xff00
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           MARK match 0x3000/0xff00


Ако някой надвиши 1.5Г на ден -> спира му се локалния
в кронтаб слагаш веднъж дневно да се обновяват правилата.


Титла: iptables
Публикувано от: VladSun в Nov 28, 2005, 03:36
Примерен код

   account
       Account traffic for all hosts in defined network/netmask.

       Features:

       - long (one counter per protocol TCP/UDP/IMCP/Other) and short statistics

       - one iptables rule for all hosts in network/netmask

       - loading/saving counters (by reading/writting to procfs entries)

       --aaddr network/netmask
              defines network/netmask for which make statistics.

       --aname name
              defines name of list where statistics will be kept. If no is specified DEFAULT will be used.

       --ashort
              table will colect only short statistics (only total counters without splitting it into protocols.

       Example usage:

       account traffic for/to 192.168.0.0/24 network into table mynetwork:

       # iptables -A FORWARD -m account --aname mynetwork --aaddr 192.168.0.0/24


Това май ни оправя проблемите със статистиките ;) При това пак с едно правило :)
Утре ще пачвам и ще кажа за резултати :)))

ПС:
Докато си играех с това делене на мрежи се зачудих, дали разработчиците от netfilter не са го направили точно така. В смисъл, като се получат поредни правила в една верига, да ги сортират и да правят двоично търсене след това за всеки пакет ... Би могло, стига парсерът да е достатъчно умен :)


Титла: iptables
Публикувано от: VladSun в Nov 30, 2005, 00:07
Цитат

Thanks for the flowers ;-)

Unfortunately ipt_ACCOUNT is for 2.4 only. We are planning
to provide a 2.6 version in Q1 2006. A port shouldn't be hard to do,
but we didn't have time to try yet.

Best regards,
Thomas Jarosch



Е, това е лошата новина ;)


Титла: iptables
Публикувано от: Uvigii в Nov 30, 2005, 07:51
Ами аз съм научил 1 -
искаш ли нещо да стане точно както го искаш .... - правиш си го сам ;)


Титла: iptables
Публикувано от: VladSun в Nov 30, 2005, 15:22
Просто не ми се преоткриваше топлата вода :)
Сега разглеждам сорса на ACCOUNT пача (както и на такива, които имат поддръжка за 2.6.х кернели) и се мъча да го направя за 2.6.х.
Лошото е, че досега не съм писал нещо за линукс по-дълго от 100 реда ... камо ли да вникна в чужд код (от това по-гадно няма)
Най-много да омажа нещата :)


Титла: iptables
Публикувано от: VladSun в Dec 01, 2005, 00:42
Тъй като е по темата :)
Примерен код

iptables -t raw -I PREROUTING -i eth1 -s 1.2.3.4/24 -j NOTRACK
iptables -t raw -I PREROUTING -i eth0 -d 1.2.3.4/24 -j NOTRACK


Това (ако защ. стена е "без памет" по отношение на публичните ИП-та, т.е. тези които нямат NAT) би трябвало да поосвободи малко ресурси. :)


Титла: iptables
Публикувано от: Uvigii в Dec 01, 2005, 13:22
Лично аз не бих го нарекъл преоткриване на топлата вода
;)
Разбира се има универсални "сметачни" системки ;)
но колкото са по универсални - толкова са по комплексирани и поддатливи на нестабилност !
колкото по-близо до реалността е решението на проблема - толкова по-добре
;)


Титла: iptables
Публикувано от: VladSun в Dec 01, 2005, 23:03
е да де ама наистина много отдавна ми е писнало от решения "работи за мен, за момента" ... сменяш нещо и айде наново.
Още от първите ми крачки в програмирането (преди около 10-12 год.) бях "поучен", че нещата трябва да се правят за общия случай за да работят за всеки частен :)
И се придържам към това правило и за момента :)))


Титла: iptables
Публикувано от: mrvoland в Dec 08, 2005, 23:42
тук се очертава fan-club IPtables :)
да внеса и моето скромно инфо ще ме извините ако повторя някой преди мен :)

http://www.linuxguruz.com/iptables/

това е доста добър източник за идеи, готови скриптове и т.н.
всеки може да си вземе готов скрипт и да го прерпави за неговите нужди


Титла: iptables
Публикувано от: VladSun в Dec 09, 2005, 01:03
Интересен линк, наистина :) и доста полезен
Благодаря за него :)

Но ;) ... в тази тема по-скоро искаме да намерим начини за оптимизация на защитни стени, user accounting (на това не се сещам превод :) ) и т.н. изградени с iptables и обикновено *доста* големи (като брой правила).
Ще се радвам, ако се включиш :)


Титла: iptables
Публикувано от: в Dec 13, 2005, 14:56
//Off
Цитат
нещата трябва да се правят за общия случай за да работят за всеки частен

със което не съм съгласен! Всеки подход си има плюсове и минуси! Как виждаш програма на Java работеща на AVR, PIC или какъвто и да е друг микроконтролер? Или графична среда писана на асемблер? Или драйвер за серийния порт който има гласов интерфейс към потребителя и търси извънземни докато си почива ?? Ако ти ще работиш с един или 2 частни случая за какво ти е да си напишеш програма обработваща всички възможни случаи? Това ми звучи като "Нашата складова(счетоводна) програма е най-хубавата и става за всеки склад (счетоводство) защото е предвидена да работи със всички складове и всички счетоводства на света ...
Както беше казал някой :
KISS
;)


Титла: iptables
Публикувано от: в Dec 13, 2005, 15:12
/Off
Мисля, че и двамата сме прави донякъде, но и двамата грешим в същото време :) - просто сме застанали сме в двата края, а истината е винаги по средата :) ( където КИСС принципът действа с пълна сила ) - нещата наистина не трябва да се правят супер глобални, но не трябва и да са прекалено локални :) И в двата крайни случаи име много проблеми при добавяне на нова фукционалност, нали ;)


Титла: iptables
Публикувано от: в Dec 13, 2005, 15:16
Между другото видя ли
http://www.linux-bg.org/cgi-bin....t=11643
на мен ми звучи доста добре :)
Само дето нямам представа как се подкарва по MARK


Титла: iptables
Публикувано от: в Dec 13, 2005, 15:34
//Off
И аз това казвам:
Има случаи когато прог трябва да е голяма, сложна и объркана , с възможност да и се намазват нови функционалности от което тя да става още по объркана и нестабилна ..
Има и случаи когато прог трябва просто да работи и нищо друго.
//Off2
Въобще замислял ли си се колко % от софтуера решава човешки задачи т.е. помага на хората и колко % решава софтуерни и хардуерни проблеми ?
като започниеш БИОС,Райд,ОС,Драйвери,Бейкъп,Протоколи,АнтиВирус, АнтиСпам,ФайърУол,ИДС, Анти това, Анти Онова АААААаааа......
и това само за да си изпратиш 1 писмо ...
:(


Титла: iptables
Публикувано от: в Dec 13, 2005, 15:46
Да.
След като разбрах, че примера е само за клас Б а за клас Ц не ставало се отказах да го чета ;)
Но сега по твоя препоръка направих един бърз прочит. Не мисля, че в случая с ло/бг/инт ще има полза, но ще поразгледам по подробно.


Титла: iptables
Публикувано от: в Dec 13, 2005, 16:17
Доколкото си спомням tc-filter можеше да match-ва по няколко признака (fw, ip), така че би могло да ни свърши свърши работа, ако имаме MARK за лок/бг/инт и след това за всяко ИП по самото ИП :)

Е, не изглежда ли хубаво:

MARK лок/бг/инт (глобално)
ACCOUNT (по мрежи)

hashed filters htb (ip, fw)

около 20 правила, повишена ефективност на хтб-то и нищо друго :)


Титла: iptables
Публикувано от: в Dec 13, 2005, 16:49
Цитат
ACCOUNT (по мрежи)

Имаш на предвид:
1. Клиентски?(dst) При което ще имаш акк за всяко клиентско ИП като цяло и няма да можеш да разграничиш ло/бг/инт освен ако не направиш отделен акк за всеки от видовете
2. БГ ?!(src)
btw.
Защо мислиш, че АЦЦ прави нещо различно от това да добавя по един(или повече) брояч(и) за всеки клиент ? Вярно може и да има увеличено бързодействие (което е по скоро в % отколкото в пъти).

Цитат
hashed filters htb (ip, fw)

Това би трябвало да слага във всеки филтър по 2 условия 1 за МАРК и 1 за ИП  така ли ?


Титла: iptables
Публикувано от: VladSun в Dec 13, 2005, 17:02
Еми примерно:

Маркираме мрежите БГ, ЛОК, останалото ИНТ, съотв. UL/DL
- BG_IN, BG_OUT, LOC_IN, LOC_OUT, INT_IN, INT_OUT - MARK 1,2,3,4,5,6.
Във всяка
-m account --aname mynetwork --aaddr 192.168.0.0/24
и получаваме accounting  за всяко ИП.

Производителността със сигурност ще се увеличи и то не само от самия match (1! правило), ами и в последствие при събирането на данните и обработката им - (работим с файл в /proc/sys/...., който е в паметта - доколкото разбрах от описанието на ACCOUNT).

По отношение на тц-то: хрумна ми, че *може би* можеда се направи filter по MARK за parent-а за всеки отделен трафик, а в него листата да се мачват по ИП - само, че не знам дали ще сработи :(

Цитат
Това би трябвало да слага във всеки филтър по 2 условия 1 за МАРК и 1 за ИП  така ли ?


Иначе, точно това имам предвид :)


Титла: iptables
Публикувано от: в Dec 13, 2005, 17:41
Цитат
Производителността със сигурност ще се увеличи и то не само от самия match (1! правило), ами и в последствие при събирането на данните и обработката им - (работим с файл в /proc/sys/...., който е в паметта - доколкото разбрах от описанието на ACCOUNT).

1.Това, че правилото е едно НЕ ОЗНАЧАВА, че ще се премине по бързо от колкото 2 други ( в общия случай)!
2.всички вериги се държат в РАМ-а така че ?
btw.
Примерен код

/sbin/modprobe rd
/sbin/mkfs.ext2 /dev/ram0
/bin/mount /dev/ram0 /mnt/rd



Цитат
По отношение на тц-то: хрумна ми, че *може би* можеда се направи filter по MARK за parent-а за всеки отделен трафик, а в него листата да се мачват по ИП - само, че не знам дали ще сработи

това е идейно  донякаде макар,че ще увеличи правилата спрямо случая с hash-a ... струва си да тестваш


Титла: iptables
Публикувано от: VladSun в Dec 13, 2005, 18:03
Там е работата, че с текущата НИ accounting система, като цяло има адски много правила - идеята ми е глобално да се намалят тези правила (за FORWARD разрешенията на ИП-тата няма как да стане, но за MARK има). С други думи да се премахнат *последователното* обхождане на правилата във веригите за маркиранe, а както се видя може и да се премахне и *последователното* обхождане на филтрите на тц-то.
По принцип ВСЯКА система, която се занимава с филтриране (търсене) ТРЯБВА да използва hashing (или поне сортиране) алгоритми за по-добра производителност - не е ли така?
Това го има във всяка книжка за "алгоритми-структури-данни".

За ACCOUNT patch-a:

1. Истината е, че броят на правилата в момента през които минаваме средно е 1/2 от всичките правила за маркиране - съгласен? ;
2. Ако преминем към системата, която ти предлагам в пред. пост, то както ти каза по-рано няма как да правим traffic accounting - ето тук използването на ACCOUNT е просто наложително (другия вариант е статистиките на тц-то);
3. на 99% съм сигурен, че ACCOUNT-patach-a е направен с hashing-алгоритъм (то дори и по индекс на масив да го правят стига). Нещо от сорта на:
account_table[IP]+= lengthOf(packet);
Това ние не можем да го постигнем с iptables правила;
4. по отношение на ползването на RAM-a - ок, съгласен съм :)

Цитат
това е идейно  донякаде макар,че ще увеличи правилата спрямо случая с hash-a ... струва си да тестваш

Тъй като не те разбрах много добре, ще кажа какво аз съм имал предвид:
root - > parent_bg_in(mark) -> hashed filters(ip)
root - > parent_bg_out(mark) -> hashed filters(ip)
root - > parent_int_in(mark) -> hashed filters(ip)
.......
Ние и в момента имаме това разделение (и няма начин да го махнем), но hashing алгоритъма в листат за ип-тата ще си работи пак по същия начин.

ПС: За n-ти път ще ти благодаря, че участваш в дискусията :) :) :) А за прекомерния ми ентусиазъм - ще ми простиш :p


Титла: iptables
Публикувано от: в Dec 13, 2005, 22:27
//Off
Има проблем - има ентусиазъм.
Аз като нямам проблем само си човъркам пресъхналия мозък с контра-тези ей така да открием истината в спора.
Трябва някой път да обсъдим решението на задачката.
;)


Титла: iptables
Публикувано от: в Dec 14, 2005, 05:42
/офф
все си мисля, че обсъждането ще протече по-гладко на маса със салатка и ракийка (все пак зима е ;) ) :) :) :)


Титла: iptables
Публикувано от: VladSun в Mar 13, 2006, 16:41
@Uvigii
Пак ти благодоря за коментарите :)
Вече има резултат - статийка