LINUX.ORG.RU
ФорумAdmin

ipac-ng и новые iptables.


0

0

Привет. Недавно тут писал про попытки сбить рабочий гейт на 2.6.14, все возможные и невозможные препятствия, начиная от зависания железа и заканчивая вываливающимся в кору fetchipac'ом.

Вроде, справился.
Если кому-нибудь интересно, выложу тут инфу о том, как прикрутить ipac-ng 1.31 (по всему судя, девелоперы его больше не поддерживают) к iptables, собранным для 2.6, а также о том, как перелить имеющуюся статистику из ipac-ng 1.21 в 1.31 (формат базы изменился полностью).

А нет - так и флудить нечего.

Удач,
я.


Ответ на: комментарий от anonymous

Ну, если интересно, слушайте :)

В ipac-ng почему-то наличествует свой собственный агент iptables,
дублирующий во многом файлы из пакета iptables. Так как версия 1.31
была сделана для iptables 1.2, со времен которых структура правил
сильно изменилась, ipac-ng вываливается с segmentation fault при
попытке установить правила. Нужно проапдейтить агент. Я было сам
ломанулся писать патчи, но нашел готовые на
http://sourceforge.net/tracker/index.php?func=detail&aid=1193721&group_i
d=40604&atid=428516

Конкретно, два файла:
http://sourceforge.net/tracker/download.php?group_id=40604&atid=428516&f
ile_id=132613&aid=1193721
http://sourceforge.net/tracker/download.php?group_id=40604&atid=428516&f
ile_id=136438&aid=1193721

После наложения патчей собираем ipac-ng и убеждаемся на простейшем
конфиге, что пакеты считаются как надо.

Если у вас была база на ipac-ng 1.2х, она не подойдет к 1.31. В моем
случае инфу, собранную старой версией, было необходимо перелить в
новую, для безразрывного подсчета трафика. 

Для этого, перед установкой 1.31, надо слить базу в текстовый файл
утилитой ipac-convert старой версии (у меня база хранится в gdbm).
#ipac-convert /var/lib/ipac gdbm /var/lib/ipactxt plain-file


Затем пошаманить над текстом следующей перловой программкой:
---------------------------------------------------------------
#!/usr/bin/perl

$HOSTNAME = `hostname`;
@fns = `ls /var/lib/ipactxt/2*`;
# Все имена файлов - таймстемпы. У меня они идут с 2000, так что
# и начинаются на 2.

use POSIX;

open OUTF, ">>out.txt";

foreach $fn (@fns) {
 chomp $fn;
 print $fn;
 open INF, "<$fn";
 @all = <INF>;
 close INF;

 $i = 0;
 foreach $ln (@all) {
  chomp $ln;
  if ($ln =~ /#-#-#-#-#/) { # это разделитель имен правил и цЫфр.
   $n = $i;
  }
 $i++;
 }

 $fn =~ /(....)(..)(..)-(..)(..)(..)/;
 my ($year, $mon, $day, $h, $m, $s) = ($1, $2, $3, $4, $5, $6);
 $mon -= 1;
 $year -= 1900;
 $ts = mktime($s, $m, $h, $day, $mon, $year);
 $s = localtime($ts);
 print ": $s\n";

 print OUTF "ADD\n$ts 1\n( $HOSTNAME\n";
 for ($i = 0; $i < $n; $i++) {
  @all[$i+$n+1] =~ s/(.+)\s+(.+)/$2 $1/;
  print OUTF "@all[$i+$n+1] \|@all[$i]\|\n";
 }
 print OUTF ")\n\n";
}

close OUTF;
---------------------------------------------------------------

Получившийся файл - готовые данные, которые можно залить в новую базу.
Для этого, деинсталлировав 1.21 и установив 1.31, делаем:

#fetchipac -b < out.txt

Проверяем, запустив fetchipac; ipacsum - всё должно быть на месте.

Удач,
 я.

billy
() автор топика
Ответ на: комментарий от billy

Увы... Патч наложить не удалось, ибо в исходниках ipac-ng-1.31. взятых с sf.net, нет файла .../linux_list.h. Если у кого получилось пропатчить исходники, поделитесь опытом, пожалуйста.

anonymous
()
Ответ на: комментарий от billy

Увы... Патч наложить не удалось, ибо в исходниках ipac-ng-1.31. взятых с sf.net, нет файла .../linux_list.h. Если у кого получилось пропатчить исходники, поделитесь опытом, пожалуйста.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.