URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 38720
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Пример использования таблиц блокировки в ipfw"

Отправлено auto_tips , 17-Окт-07 01:51 
Блокировка производится командой:

   ipfw add deny ip from "table(1)" to any via em0

/etc/load_table.sh:

   #!/bin/sh
   ipfw table 1 flush
   cat /etc/block.txt | while read cnt ip; do
       ipfw table 1 add $ip
   done

формат /etc/block.txt: "cnt ip"
получем, например, из tcpdump лога атаки:

   tcpdump -n -i em0 udp and port 80 > ./tcpdump.log
   cat ./tcpdump.log |cut -d' ' -f3|cut -d'.' -f1,2,3,4|sort|uniq -c |sort -r -n > /etc/block.txt


URL:
Обсуждается: https://www.opennet.ru/tips/info/1483.shtml


Содержание

Сообщения в этом обсуждении
"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 17-Окт-07 01:51 
спец-интерфейс...  не слишком красиво

"Пример использования таблиц блокировки в ipfw"
Отправлено Аноним , 18-Окт-07 08:46 
А по мне довольно изящно.Правда в конце я бы все таки добавлял, а не замещал.

"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 18-Окт-07 11:29 
>А по мне довольно изящно.Правда в конце я бы все таки добавлял,
>а не замещал.

да я, вобщем-то, о команде добавления в таблицу.
это ipfw - специнтерфейс.
Каждый ИПшник добавляеться _отдельным_ процессом ipfw.
Может на деле оно и пофигу, но все же технически не оптимально.

Линух. Как аналогичный пример, модуль iptables recent.

# iptables -I INPUT -i w0 -m recent --name bad_guys --rcheck -j DROP

(clear - спец команда очистки таблицы. Опционально :)
# cat bad_guys.txt
clear
1.2.3.4
5.6.7.8
9.10.11.12

# while read ip; do echo $ip > /proc/net/ipt_recent/bad_guys ; done < bad_guys.txt
(вот это все происходит в текущем процессе bash, без создания новых процессов)
(echo - встроенная команда bash, если кто не вкурсе ;)


можно посмотреть содержимое:

# cat /proc/net/ipt_recent/bad_guys
src=1.2.3.4 ttl: 0 last_seen: 4358612828 oldest_pkt: 1 4358612828
src=9.10.11.12 ttl: 0 last_seen: 4358612828 oldest_pkt: 1 4358612828
src=5.6.7.8 ttl: 0 last_seen: 4358612828 oldest_pkt: 1 4358612828


кроме того, с этими таблицами recent модуля можно работать прямо из фаервола,
динамичиски пополняя ее или удаляя IP адреса ;)
- динамичиское добавление (пример из мана :)
# iptables -A INPUT -i w0 -p tcp --dport 139 -m recent --name bad_guys --set -j DROP
все, кто ломиццо на 139 порт автоматом попадают в black list

- динамичиское удаление:
# iptables -A INPUT -i w0 -p udp --dport 34097 -m length --length 500 \
                    -m recent --name bad_guys --remove

кто владеет тайным знанием, тот пошлет UDP пакет длинной 500 байт на спец порт и будет разблокирован :)
для остроты ощущений можно добавить проверку по содержимому пакета и т.д.

Не флейма ради, но правды для, хоть пофлеймить и люблю ;)
Сильна ли BSD подобными средствами?
Их маны читать влом, да и вряд ли прочуствуешь все не попробовав.
А вот посмотреть готовых команд знающих людей - было бы нагляднее.


"Пример использования таблиц блокировки в ipfw"
Отправлено Av , 19-Окт-07 09:20 
Это не unix-way, Nick.

"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 19-Окт-07 09:29 
>Это не unix-way, Nick.

пардон, не согласен.
"Все - файл" - одно из утверждений UNIX-вейа.

в iptables/recent таблица IPшников - файл. А в BSD - внутреняя сущность ipfw.


"Пример использования таблиц блокировки в ipfw"
Отправлено Av , 19-Окт-07 09:41 
"Все - файл" - это plan9-way :). А unix-way - это решение сложных задач через множество простых средств.

"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 19-Окт-07 09:51 
>"Все - файл" - это plan9-way :)

ну, фантазия у Вас на высоте.

1. Почитайте что такое UNIX: http://ru.wikipedia.org/wiki/Unix
......
"представление устройств и некоторых средств межпроцессного взаимодействия как файлов;"
.....

Сеть - это средство межпроцессного взаимодействия когда процессы на разных компьютерах.
Таблица работы с адресами сети - отлично подходит под определение
"некоторых средств межпроцессного взаимодействия"

2. Даже если это _и_ Plan9-way - не вижу проблем. Одно другому не мешает.

>А unix-way - это решение
>сложных задач через множество простых средств.

а это тоже присутствует. Очень простые команды echo/cat - рулят таблицями IPшников.
Бинарь ipfw - тяжело назвать простым средством, ровно как и iptables.
Но тут пока так (хотя в идеале и iptables можно было бы заменить на управление через echo/cat).

Но все же в BSD таблицами приходиться тоже управлять этим не совсем простым бинарем.
В линухе это делаеться простыми командами.

Вы сами себе противоречите.


"Пример использования таблиц блокировки в ipfw"
Отправлено Av , 19-Окт-07 18:49 
Блин, я фигею. Еще раз, популярнее:
легче и проще, а значит лучше, сделать код с простым функционалом "table add $ip", а все остальное делать внешними средствами, нежели лепить все что можно сделать скриптами в целевой код.

"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 19-Окт-07 18:59 
>Блин, я фигею. Еще раз, популярнее:
>легче и проще, а значит лучше, сделать код с простым функционалом "table
>add $ip", а все остальное делать внешними средствами, нежели лепить все
>что можно сделать скриптами в целевой код.

я смотрю, мы с Вами на разных ядыках говорим...

по мне, так нет ничего проще впринципе, чем open(2)/read(2)/write(2)

в ядре же все тоже очень стандартно. Минимум кода:

static const struct file_operations recent_fops = {
        .open           = recent_seq_open,
        .read           = seq_read,
        .write          = recent_proc_write,
        .release        = seq_release_private,
        .owner          = THIS_MODULE,
};

определяеться небольшая функция recent_seq_write (ну, для изменения таблиц) - 54 строки с определением. И там весь парсер.
Вот это я называю ПРОСТО.

Поинересуйтесь структурой "ipfw table xxx" функций. Сколько нужно изменений в каких-то структурах если че-то нужно будет изменить?

Либо вы все же не о том...


"Пример использования таблиц блокировки в ipfw"
Отправлено Av , 20-Окт-07 00:07 
Пожалуйста, коллега:

/*
* This one handles all table-related commands
*      ipfw table N add addr[/masklen] [value]
*      ipfw table N delete addr[/masklen]
*      ipfw table N flush
*      ipfw table N list
*/
static void
table_handler(int ac, char *av[])
{
        ipfw_table_entry ent;
        ipfw_table *tbl;
        int do_add;
        char *p;
        socklen_t l;
        uint32_t a;

        ac--; av++;
        if (ac && isdigit(**av)) {
                ent.tbl = atoi(*av);
                ac--; av++;
        } else
                errx(EX_USAGE, "table number required");
        NEED1("table needs command");
        if (strncmp(*av, "add", strlen(*av)) == 0 ||
            strncmp(*av, "delete", strlen(*av)) == 0) {
                do_add = **av == 'a';
                ac--; av++;
                if (!ac)
                        errx(EX_USAGE, "IP address required");
                p = strchr(*av, '/');
                if (p) {
                        *p++ = '\0';
                        ent.masklen = atoi(p);
                        if (ent.masklen > 32)
                                errx(EX_DATAERR, "bad width ``%s''", p);
                } else
                        ent.masklen = 32;
                if (lookup_host(*av, (struct in_addr *)&ent.addr) != 0)
                        errx(EX_NOHOST, "hostname ``%s'' unknown", *av);
                ac--; av++;
                if (do_add && ac)
                        ent.value = strtoul(*av, NULL, 0);
                else
                        ent.value = 0;
                if (do_cmd(do_add ? IP_FW_TABLE_ADD : IP_FW_TABLE_DEL,
                    &ent, sizeof(ent)) < 0)
                        err(EX_OSERR, "setsockopt(IP_FW_TABLE_%s)",
                            do_add ? "ADD" : "DEL");
        } else if (strncmp(*av, "flush", strlen(*av)) == 0) {
                if (do_cmd(IP_FW_TABLE_FLUSH, &ent.tbl, sizeof(ent.tbl)) < 0)
                        err(EX_OSERR, "setsockopt(IP_FW_TABLE_FLUSH)");
        } else if (strncmp(*av, "list", strlen(*av)) == 0) {
                a = ent.tbl;
                l = sizeof(a);
                if (do_cmd(IP_FW_TABLE_GETSIZE, &a, (uintptr_t)&l) < 0)
                        err(EX_OSERR, "getsockopt(IP_FW_TABLE_GETSIZE)");
                l = sizeof(*tbl) + a * sizeof(ipfw_table_entry);
                tbl = malloc(l);
                if (tbl == NULL)
                        err(EX_OSERR, "malloc");
                tbl->tbl = ent.tbl;
                if (do_cmd(IP_FW_TABLE_LIST, tbl, (uintptr_t)&l) < 0)
                        err(EX_OSERR, "getsockopt(IP_FW_TABLE_LIST)");
                for (a = 0; a < tbl->cnt; a++) {
                        printf("%s/%u %u\n",
                            inet_ntoa(*(struct in_addr *)&tbl->ent[a].addr),
                            tbl->ent[a].masklen, tbl->ent[a].value);
                }
        } else
                errx(EX_USAGE, "invalid table command %s", *av);
}


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 20-Окт-07 01:14 
да, размер кода очень похож.
НО.

Это всего-лишь user-level тулза. Ей еще нужно поведать полученную команду ядру через
интерфейс ioctl/ipfw. А в ядре еще нужен код, чтобы принять и проверить эту команду.

В iptables/recent эта функция-парсер - уже внутри ядра и складывает отпаршенные ИПшники
сразу в свой внутренний массив.

Вот ЭТО я называю оптимальность.

А касательно гибкости: если нужно добавить еще одну команду работы с таблицами, например...  ээээ...   удалить все ИПшники, которые попадают в заданную сетку ;)

Для iptables это было бы еще несколько строк кода в парсере ядра и все.
А формат вот такой:
# echo del 72.56.84.0/24 > /proc/......


В ipfw придеться править и бинарь, и заголовки и ядро...

Все еще не видите преимуществ универсального UNIX-подхода iptables? ;)


"Пример использования таблиц блокировки в ipfw"
Отправлено Av , 20-Окт-07 09:37 
>да, размер кода очень похож.
> НО.
> Это всего-лишь user-level тулза. Ей еще нужно > поведать полученную команду ядру через
> интерфейс ioctl/ipfw. А в ядре еще нужен код, > чтобы принять и проверить эту команду.

мда это глупо конечно мерится так ), но что касается добавления:
выше приведенная table_handler + do_cmd 19 строк +
функции ядра add_table_entry - 26 строк.
всё.

> В iptables/recent эта функция-парсер - (!)уже(!) > внутри ядра и складывает отпаршенные ИПшники
> сразу в свой внутренний массив.
> Вот ЭТО я называю оптимальность.

Вот об этом я и говорил: в ядре находятся не нужные вещи. И на мой взгляд это - совсем не оптимальность.

> А касательно гибкости: если нужно добавить еще > одну команду работы с таблицами, например...  > ээээ...   удалить все ИПшники, которые попадают в > заданную сетку ;)

Ну и нафига пихать это в ядро?
Поймите же идею: гибкость должна создаваться внешними средствами.


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 21-Окт-07 04:27 
Ок, согласен. В плане "каждый делает свою мальнькую работу" это несколько не UNIX-way.

Зато это много проще в реализации, да и Plan9-way тоже неплохо ;)
если даже не лучше чем UNIX-way :)


"Пример использования таблиц блокировки в ipfw"
Отправлено Av , 21-Окт-07 12:24 
Оригинала от создателей найти не удалось, но вот почитайте:

UNIX history embeds the UNIX way with the notion of software tools, also the title of a work by UNIX gurus Brian Kernighan and P.J.Plauger, as a key concept - small, well designed text-based tools operating from the command line which do one job very well and can readily be connected to satisfy more complex tasks.

с http://tuxdeluxe.org/node/147


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 21-Окт-07 12:31 
>Оригинала от создателей найти не удалось, но вот почитайте:
>
>UNIX history embeds the UNIX way with the notion of software tools,
>also the title of a work by UNIX gurus Brian Kernighan
>and P.J.Plauger, as a key concept - small, well designed text-based
>tools operating from the command line which do one job very
>well and can readily be connected to satisfy more complex tasks.

Да, я это читал

ну, по этому критерию команде echo 5 с плюсом,
ну а ядру чуть меньше ;))

зато все равно, ИМХО, подход у iptables лучше


"Пример использования таблиц блокировки в ipfw"
Отправлено XoRe , 15-Ноя-07 04:11 
>зато все равно, ИМХО, подход у iptables лучше

Я бы не стал дальше спорить после такого утверждения.
Когда человек в споре хочет прийти не к истине ("истина рождается в споре", а просто к удовлетворению своих желаний ("iptables/linux все равно лучше/круче"), то адекватности тут можно не ждать.

По теме:
Всунуть все ip адреса в таблицу за один проход  можно командой:
ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname

Как я понял из мана, в файл "pathname" запихиваются команды ipfw.


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 15-Ноя-07 04:18 
>Я бы не стал дальше спорить после такого утверждения.
>Когда человек в споре хочет прийти не к истине ("истина рождается в
>споре", а просто к удовлетворению своих желаний ("iptables/linux все равно лучше/круче"),
>то адекватности тут можно не ждать.

я уже пришел к истине - и утверждал это.
Если вы ставите истинность моей истины (;) под сомнение - давайте контраргументы моим доводам, которые ПРИСУТСТВУЮТ наряду с утверждением "iptables лучше". Ничего противоестественного не вижу.
Я хочу истину и вижу ее в netfilter'е. Свои взгляды я изложил.
Извольте оспорить, а не просто сказать "он сказал 'iptables лучше' - значит он неправ!"


>По теме:
>Всунуть все ip адреса в таблицу за один проход  можно командой:
>
>ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname
>
>Как я понял из мана, в файл "pathname" запихиваются команды ipfw.

а вот тоже по теме: сделать это можно лишь командой ipfw, в чем собственно и наблюдаеться
минус спец-интерфейса.


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 21-Окт-07 12:55 
Ну и не удержусь от ответного камуЖка в ваш огород.

"Just for fun" by Торвальдс:

"Уродство, когда для любого действия у системы есть специальный интерфейс. В Unix - все наоборот. Она предоставляет строительные блоки, из которых можно создать что угодно. Вот что такое стройная архитектура."

Извлечь/Добавить IP адреса в ipfw table можно лишь через спец-интерфейс... ;)))


А если следовать UNIX-way здесь - то самое простое действие для того чтобы увидеть список адресов - это сделать cat из файла, а вот файлом может быть уже что и посложнее чем plain файл. Или есть что-то более простое в UNIX определениях?

iptables/recent как раз это и есть, самое простое, без спец интерфейса ;)


"Пример использования таблиц блокировки в ipfw"
Отправлено AVK , 01-Ноя-07 17:26 
>iptables/recent как раз это и есть, самое простое, без спец интерфейса ;)

Спец-интерфейс всё таки есть. Скрырый. Для сравнения, что помещаем в bad_guys? IP only. Что имеем по cat /proc/net/ipt_recent/bad_guys? Совсем не IP...

Ой, блин, держите меня...
cat /dev/random > /proc/net/ipt_recent/bad_guys
И где будет тормозить? В ядре :)
Класс.

Время собирать камни?


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 02-Ноя-07 15:44 
>>iptables/recent как раз это и есть, самое простое, без спец интерфейса ;)
>
>Спец-интерфейс всё таки есть. Скрырый. Для сравнения, что помещаем в bad_guys? IP
>only. Что имеем по cat /proc/net/ipt_recent/bad_guys? Совсем не IP...

деревня...

при помещении ИП в список, мы помещаем не тока сам ИП, но и ВРЕМЯ помещения.
Так вот списки этих добавлений для каждого ИП мы и храним


"Пример использования таблиц блокировки в ipfw"
Отправлено AVK , 10-Ноя-07 15:41 
>деревня...

Ну-ну.

>при помещении ИП в список, мы помещаем не тока сам ИП, но и ВРЕМЯ помещения.
>Так вот списки этих добавлений для каждого ИП мы и храним

Ещё раз и медленно. Попробуйте подумать над этим.

cat somefile > /proc/net/ipt_recent/bad_guys отправляет в /proc/net/ipt_recent/bad_guys именно IP и ничего более. Все остальные данные рядом с IP во внутреннюю таблицу помещаются кодом, ответственным именно за ИНТЕРФЕЙС. Интерфейс между внешним миром и внутренними структурами.

В случае же отсутствия интерфейса, в случае с cat, никаких других данных в таблицу, кроме IP помещаться не должно. Или мы будем должны помещать IP, ВРЕМЯ, etc. Что и будет называться "прямой доступ к внутренним структурам", без интерфейса.

В связи с этим, выглядит как минимум странно фраза "iptables/recent как раз это и есть, самое простое, без спец интерфейса ;) "

ИМХО бардак в голове. Вместо "простой интерфейс" говорят "без спец интерфейса". Отсюда и спор раздули.


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 12-Ноя-07 04:13 
>Ещё раз и медленно. Попробуйте подумать над этим.
>
>cat somefile > /proc/net/ipt_recent/bad_guys отправляет в /proc/net/ipt_recent/bad_guys именно IP и ничего более. Все остальные данные рядом с IP во внутреннюю таблицу помещаются кодом, ответственным именно за ИНТЕРФЕЙС.
>Интерфейс между внешним миром и внутренними структурами.

неа. За интерфейс тут отвечает VFS :)
open(2)
read(2)
write(2)
close(2)

Вот ЭТОТ интерфейс тут использован. Т.е. обычный, файловый.

>В случае же отсутствия интерфейса, в случае с cat,

не обижайся, плз, но я ж говорил: "деревня"...
ЛЮБОЕ взаимодействие происходит через какой-нибудь интерфейс :)

>никаких других данных
>в таблицу, кроме IP помещаться не должно.

Если модуль преследует собой цель хранить лишь ИП адреса - то да, не должно.
Но у нас модуль, который хранит их и предоставляет еще некий функционал.
(если не нравяться timestamps - их количество можно свести к минимуму - 1)


>Или мы будем должны помещать IP, ВРЕМЯ, etc. Что и будет называться "прямой доступ к
>внутренним структурам", без интерфейса.

без каментов про "без интерфейса"...
Также не понял связи между интерфейсом и набором помещаемых данных в список.


>В связи с этим, выглядит как минимум странно фраза "iptables/recent как раз
>это и есть, самое простое, без спец интерфейса ;) "

VFS - более чем _не_ специальный интерфейс. Без него не бывает линуха (говорим о современных версиях). За сим и вещаю, что взаимодействие источника списка ИПшников
(прога cat) и ядра происходит без специального интерфейса (но, безусловно, _с_ интерфейсом!!!), а через VFSные вызовы open()/RW()/close()

ipfw же работает с ядром при помощи своего _СПЕЦИАЛЬНОГО_ набора ioctl() запросов.

Выходит, что с ipt_recent таблицами может работать практически любой процесс, способный
открывать/писать/читать файл, а с ipfw таблицами лишь специально "обученные" проги
(ну, вроде этого же ipfw. немного тавталогии...)

Доступно?

>ИМХО бардак в голове.

Ну, бардак вытряхивай и читай маны. Они рулят.


>Вместо "простой интерфейс" говорят "без спец интерфейса".

Ну, не сказал бы, что ioctl(IP_FW_<GET/ADD>,... ) - это "сложный" интерфейс :)
он то простой. Тока вот и VFS интерфейс тоже весьма прост.
Но. Суть _именно_ в том, что один из них _специальный_ (т.е. только для каких-то вещей),
а другой - нет, т.е. справедливо сипользовать выражение "без специального интерфейса",
говоря о работе с ipt_recent.
А это доступно?

>Отсюда и спор раздули.

Как видишь, не совсем...


"Пример использования таблиц блокировки в ipfw"
Отправлено nuclight , 09-Янв-08 22:10 
>неа. За интерфейс тут отвечает VFS :)
>open(2)
>read(2)
>write(2)
>close(2)
>
>Вот ЭТОТ интерфейс тут использован. Т.е. обычный, файловый.

Ага, со здоровенным промежуточным слоем в виде VFS. Нихрена не оптимально.

>>В связи с этим, выглядит как минимум странно фраза "iptables/recent как раз
>>это и есть, самое простое, без спец интерфейса ;) "
>
>VFS - более чем _не_ специальный интерфейс. Без него не бывает линуха
>(говорим о современных версиях). За сим и вещаю, что взаимодействие источника
>списка ИПшников
>(прога cat) и ядра происходит без специального интерфейса (но, безусловно, _с_ интерфейсом!!!),
>а через VFSные вызовы open()/RW()/close()
>
>ipfw же работает с ядром при помощи своего _СПЕЦИАЛЬНОГО_ набора ioctl() запросов.

То же, абсолютно то же делает сам iptables со своими правилами - он, как и ipfw, текстовый вид преобразует к getsockopt()/setsockopt(). Да, кстати, кое-кому не мешало бы подучить матчасть - ioctl() не используется ни в ipfw, ни в iptables.

>[оверквотинг удален]
>
>Доступно?
>
>>ИМХО бардак в голове.
>
>Ну, бардак вытряхивай и читай маны. Они рулят.
>
>а другой - нет, т.е. справедливо сипользовать выражение "без специального интерфейса",
>говоря о работе с ipt_recent.
>А это доступно?

См. выше. Имеем, что в случае iptables появляется уже как минимум ДВА интерфейса - один опциями сокета у iptables, другой через текстовый файл. Который ведет к ДУБЛИРУЮЩЕМУСЯ коду в ядре, мало того, что задействует тормозной VFS, и обрабатывает далеко не все ошибки, которые должен был. Это называется стройная архитектура по Торвальдсу, ы? Это как раз бардак в голове, ведущий к бардаку в ядре.

Если бы автор модуля ipt_recent не выпендривался, а встроился в _уже_ _имеющийся_ интерфейс "специально обученного" iptables (заметим, он уже существует, и никуда от него не деться), то кроме сокращения лишнего кода и общего улучшения качества (использования парсера и проверщика ошибок самих таблесов) стало бы возможным использовать дополнительные фичи - например, единовременный штатный таблесовский COMMIT кучи правил разом, то есть оно стало бы работать куда быстрее на больших объемах.

В результате подход ipfw (и основного iptables) весьма вписывается в unix-way - средство, умеющее делать свою работу, и делать ее хорошо, имеет наружу текстовый интерфейс для других программ, в результате работа по теме сконцетрирована где надо, а не повторяется каждым автором много раз, тем более в ядре, где цена ошибок и скорости куда более высока.

Да, и как уже отмечалось, у ipfw есть препроцессоры, так что, быстро загнать файл с айпишником на строку, не форкая на каждый по процессу, весьма просто:

cat file.txt | awk '{print "table 1 add " $0}'  | ipfw -p cat - /dev/null


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 02-Ноя-07 15:47 
>Ой, блин, держите меня...
>cat /dev/random > /proc/net/ipt_recent/bad_guys
>И где будет тормозить? В ядре :)
>Класс.
>
>Время собирать камни?

да хоть разбирай, хоть собирай...

cat /dev/urandom > /dev/sda


или с винтом уже не смешно?


"Пример использования таблиц блокировки в ipfw"
Отправлено AVK , 14-Ноя-07 08:32 
Ну всё, сдаюсь...
Трудно объяснять идеологическую разницу между  классами С++ и структурами данных со скрытыми методами присвоения (a la borland с++ builder). Надоело уже, Вы, Nick, не первый, и, увы, не последний :(

Кстати, мой пример с random тоже тихо так пустили по-боку - неудобный он всё же, правда?


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 15-Ноя-07 03:11 
>Ну всё, сдаюсь...
>Трудно объяснять идеологическую разницу между  классами С++ и структурами данных со
>скрытыми методами присвоения (a la borland с++ builder). Надоело уже, Вы,
>Nick, не первый, и, увы, не последний :(

ах вон ты как мыслишь.
для тебя все, что записывает ИПшник, принимая его на входе и аж до записи во внутрений хеш - один кусок. Ну звыняй. На практике (в ядре) такие абстракции не живут. Тут нужно понимать, что методы тоже состоят из N компонент и методы взаимодествия между ними.


>Кстати, мой пример с random тоже тихо так пустили по-боку - неудобный
>он всё же, правда?

ну так разуваем глаза и читаем мой ответ от 2 го(!!) ноября на этот random:
(приведу ссылку для пущей уверенности)

https://www.opennet.ru/openforum/vsluhforumID3/38720.html#22


а суть моего ответа проста: если рут начитает творить х-ню - то это уже не проблема системы или ядра.

Ну а даже если спустиццо к идиотизму твоего примера - то я его пусканул, чисто поржать и тебе дать поржать.
Причем, заюзал не /dev/random, который, кстати, может ничего и не выдать, если random pool пуст, а /dev/urandom, который всегда че-то выдает, но менее качественное.

# cat /dev/urandom > /proc/net/ipt_recent/DEFAULT

.....  ну cat начал жрать проц....  подождал наццать секунд пока не надоело

потом смотрим в /proc/net/ipt_recent/DEFAULT

# cat !$
cat /proc/net/ipt_recent/DEFAULT
src=227.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 1 4306263113
src=54.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 1 4306263113
src=3.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 2 4306263113, 4306263113
src=36.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 1 4306263113
src=190.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 1 4306263113
src=238.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 1 4306263113
......

# wc -l /proc/net/ipt_recent/DEFAULT
100 /proc/net/ipt_recent/DEFAULT


собсно, лимит количества ИПшников был 100 на одну таблицу (по умолчанию)
(на практике юзаю лимит в миллионы IPs)
так что, таблица просто прокручивалась и все.

обидно, да ? :)


"Пример использования таблиц блокировки в ipfw"
Отправлено AVK , 18-Ноя-07 20:41 
># cat !$
>cat /proc/net/ipt_recent/DEFAULT
>src=227.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 1 4306263113
>src=54.0.0.0 ttl: 0 last_seen: 4306263113 oldest_pkt: 1 4306263113
>собсно, лимит количества ИПшников был 100 на одну таблицу (по умолчанию)
>(на практике юзаю лимит в миллионы IPs)
>так что, таблица просто прокручивалась и все.
>
>обидно, да ? :)

Обидно, конечно :) где Вы такой urandom взяли, что голимые IP на выходе есть :) Я тоже хочу  такую траву. Другу подарю :) пусть проверку входных данных отлаживает :)

>ах вон ты как мыслишь.
>для тебя все, что записывает ИПшник, принимая его на входе и аж до записи во внутрений хеш >- один кусок. Ну звыняй. На практике (в ядре) такие абстракции не живут. Тут нужно >понимать, что методы тоже состоят из N компонент и методы взаимодествия между ними.

:) Вот это уже интересно... я программис, ООП моя стезя; как я мыслю, уже сказал. И как программист, я вижу, что сущность ipfw - более целостна с точки зрения взаимодействия cli c подсистемой, чем iptables.


"Пример использования таблиц блокировки в ipfw"
Отправлено Nick , 18-Ноя-07 21:22 
Ок, давай на том и подвяжем :)

а трава с IPшниками - ну а че, хреново, но отпарсили :)
В конце концов ни это, ни выброс с ошибкой не делают сему эксперименту чести :)
(но парсер могли бы и подучить, конечно)


"Раздел полезных советов: Пример использования таблиц блокиро..."
Отправлено XoRe , 15-Ноя-07 07:18 
2Nick:
> я уже пришел к истине - и утверждал это.
> Если вы ставите истинность моей истины (;) под сомнение - давайте контраргументы моим доводам, которые ПРИСУТСТВУЮТ наряду с
> утверждением "iptables лучше". Ничего противоестественного не вижу.
> Я хочу истину и вижу ее в netfilter'е. Свои взгляды я изложил.
> Извольте оспорить, а не просто сказать "он сказал 'iptables лучше' - значит он неправ!"

Да, iptables лучше.
Свободен.

Т.к. мой предыдущий пост засел глубоко в топике посреди оффтопа, повторю совет:
Всунуть все ip адреса в таблицу за один проход  можно командой:
ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname

Как я понял из мана, в файл "pathname" запихиваются команды ipfw.