1.3, Аноним (3), 08:46, 18/10/2007 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А по мне довольно изящно.Правда в конце я бы все таки добавлял, а не замещал.
| |
|
2.4, Nick (??), 11:29, 18/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
>А по мне довольно изящно.Правда в конце я бы все таки добавлял,
>а не замещал.
да я, вобщем-то, о команде добавления в таблицу.
это 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 подобными средствами?
Их маны читать влом, да и вряд ли прочуствуешь все не попробовав.
А вот посмотреть готовых команд знающих людей - было бы нагляднее.
| |
|
|
2.6, Nick (??), 09:29, 19/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
>Это не unix-way, Nick.
пардон, не согласен.
"Все - файл" - одно из утверждений UNIX-вейа.
в iptables/recent таблица IPшников - файл. А в BSD - внутреняя сущность ipfw.
| |
|
1.7, Av (??), 09:41, 19/10/2007 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
"Все - файл" - это plan9-way :). А unix-way - это решение сложных задач через множество простых средств.
| |
|
2.8, Nick (??), 09:51, 19/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
>"Все - файл" - это plan9-way :)
ну, фантазия у Вас на высоте.
1. Почитайте что такое UNIX: http://ru.wikipedia.org/wiki/Unix
......
"представление устройств и некоторых средств межпроцессного взаимодействия как файлов;"
.....
Сеть - это средство межпроцессного взаимодействия когда процессы на разных компьютерах.
Таблица работы с адресами сети - отлично подходит под определение
"некоторых средств межпроцессного взаимодействия"
2. Даже если это _и_ Plan9-way - не вижу проблем. Одно другому не мешает.
>А unix-way - это решение
>сложных задач через множество простых средств.
а это тоже присутствует. Очень простые команды echo/cat - рулят таблицями IPшников.
Бинарь ipfw - тяжело назвать простым средством, ровно как и iptables.
Но тут пока так (хотя в идеале и iptables можно было бы заменить на управление через echo/cat).
Но все же в BSD таблицами приходиться тоже управлять этим не совсем простым бинарем.
В линухе это делаеться простыми командами.
Вы сами себе противоречите.
| |
|
1.9, Av (??), 18:49, 19/10/2007 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Блин, я фигею. Еще раз, популярнее:
легче и проще, а значит лучше, сделать код с простым функционалом "table add $ip", а все остальное делать внешними средствами, нежели лепить все что можно сделать скриптами в целевой код.
| |
|
2.10, Nick (??), 18:59, 19/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
>Блин, я фигею. Еще раз, популярнее:
>легче и проще, а значит лучше, сделать код с простым функционалом "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" функций. Сколько нужно изменений в каких-то структурах если че-то нужно будет изменить?
Либо вы все же не о том...
| |
|
1.11, Av (??), 00:07, 20/10/2007 [ответить] [﹢﹢﹢] [ · · · ] | +/– | Пожалуйста, коллега This one handles all table-related commands i... большой текст свёрнут, показать | |
|
2.12, Nick (??), 01:14, 20/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
да, размер кода очень похож.
НО.
Это всего-лишь user-level тулза. Ей еще нужно поведать полученную команду ядру через
интерфейс ioctl/ipfw. А в ядре еще нужен код, чтобы принять и проверить эту команду.
В iptables/recent эта функция-парсер - уже внутри ядра и складывает отпаршенные ИПшники
сразу в свой внутренний массив.
Вот ЭТО я называю оптимальность.
А касательно гибкости: если нужно добавить еще одну команду работы с таблицами, например... ээээ... удалить все ИПшники, которые попадают в заданную сетку ;)
Для iptables это было бы еще несколько строк кода в парсере ядра и все.
А формат вот такой:
# echo del 72.56.84.0/24 > /proc/......
В ipfw придеться править и бинарь, и заголовки и ядро...
Все еще не видите преимуществ универсального UNIX-подхода iptables? ;)
| |
|
1.15, Av (??), 09:37, 20/10/2007 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
>да, размер кода очень похож.
> НО.
> Это всего-лишь user-level тулза. Ей еще нужно > поведать полученную команду ядру через
> интерфейс ioctl/ipfw. А в ядре еще нужен код, > чтобы принять и проверить эту команду.
мда это глупо конечно мерится так ), но что касается добавления:
выше приведенная table_handler + do_cmd 19 строк +
функции ядра add_table_entry - 26 строк.
всё.
> В iptables/recent эта функция-парсер - (!)уже(!) > внутри ядра и складывает отпаршенные ИПшники
> сразу в свой внутренний массив.
> Вот ЭТО я называю оптимальность.
Вот об этом я и говорил: в ядре находятся не нужные вещи. И на мой взгляд это - совсем не оптимальность.
> А касательно гибкости: если нужно добавить еще > одну команду работы с таблицами, например... > ээээ... удалить все ИПшники, которые попадают в > заданную сетку ;)
Ну и нафига пихать это в ядро?
Поймите же идею: гибкость должна создаваться внешними средствами.
| |
|
2.16, Nick (??), 04:27, 21/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
Ок, согласен. В плане "каждый делает свою мальнькую работу" это несколько не UNIX-way.
Зато это много проще в реализации, да и Plan9-way тоже неплохо ;)
если даже не лучше чем UNIX-way :)
| |
|
1.17, Av (??), 12:24, 21/10/2007 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Оригинала от создателей найти не удалось, но вот почитайте:
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
| |
|
2.18, Nick (??), 12:31, 21/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
>Оригинала от создателей найти не удалось, но вот почитайте:
>
>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 лучше
| |
|
3.27, XoRe (ok), 04:11, 15/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
>зато все равно, ИМХО, подход у iptables лучше
Я бы не стал дальше спорить после такого утверждения.
Когда человек в споре хочет прийти не к истине ("истина рождается в споре", а просто к удовлетворению своих желаний ("iptables/linux все равно лучше/круче"), то адекватности тут можно не ждать.
По теме:
Всунуть все ip адреса в таблицу за один проход можно командой:
ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname
Как я понял из мана, в файл "pathname" запихиваются команды ipfw.
| |
|
4.28, Nick (??), 04:18, 15/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
>Я бы не стал дальше спорить после такого утверждения.
>Когда человек в споре хочет прийти не к истине ("истина рождается в
>споре", а просто к удовлетворению своих желаний ("iptables/linux все равно лучше/круче"),
>то адекватности тут можно не ждать.
я уже пришел к истине - и утверждал это.
Если вы ставите истинность моей истины (;) под сомнение - давайте контраргументы моим доводам, которые ПРИСУТСТВУЮТ наряду с утверждением "iptables лучше". Ничего противоестественного не вижу.
Я хочу истину и вижу ее в netfilter'е. Свои взгляды я изложил.
Извольте оспорить, а не просто сказать "он сказал 'iptables лучше' - значит он неправ!"
>По теме:
>Всунуть все ip адреса в таблицу за один проход можно командой:
>
>ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname
>
>Как я понял из мана, в файл "pathname" запихиваются команды ipfw.
а вот тоже по теме: сделать это можно лишь командой ipfw, в чем собственно и наблюдаеться
минус спец-интерфейса.
| |
|
|
2.19, Nick (??), 12:55, 21/10/2007 [^] [^^] [^^^] [ответить]
| +/– |
Ну и не удержусь от ответного камуЖка в ваш огород.
"Just for fun" by Торвальдс:
"Уродство, когда для любого действия у системы есть специальный интерфейс. В Unix - все наоборот. Она предоставляет строительные блоки, из которых можно создать что угодно. Вот что такое стройная архитектура."
Извлечь/Добавить IP адреса в ipfw table можно лишь через спец-интерфейс... ;)))
А если следовать UNIX-way здесь - то самое простое действие для того чтобы увидеть список адресов - это сделать cat из файла, а вот файлом может быть уже что и посложнее чем plain файл. Или есть что-то более простое в UNIX определениях?
iptables/recent как раз это и есть, самое простое, без спец интерфейса ;)
| |
|
3.20, AVK (?), 17:26, 01/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
>iptables/recent как раз это и есть, самое простое, без спец интерфейса ;)
Спец-интерфейс всё таки есть. Скрырый. Для сравнения, что помещаем в bad_guys? IP only. Что имеем по cat /proc/net/ipt_recent/bad_guys? Совсем не IP...
Ой, блин, держите меня...
cat /dev/random > /proc/net/ipt_recent/bad_guys
И где будет тормозить? В ядре :)
Класс.
Время собирать камни?
| |
|
4.21, Nick (??), 15:44, 02/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
>>iptables/recent как раз это и есть, самое простое, без спец интерфейса ;)
>
>Спец-интерфейс всё таки есть. Скрырый. Для сравнения, что помещаем в bad_guys? IP
>only. Что имеем по cat /proc/net/ipt_recent/bad_guys? Совсем не IP...
деревня...
при помещении ИП в список, мы помещаем не тока сам ИП, но и ВРЕМЯ помещения.
Так вот списки этих добавлений для каждого ИП мы и храним
| |
|
5.23, AVK (?), 15:41, 10/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
>деревня...
Ну-ну.
>при помещении ИП в список, мы помещаем не тока сам ИП, но и ВРЕМЯ помещения.
>Так вот списки этих добавлений для каждого ИП мы и храним
Ещё раз и медленно. Попробуйте подумать над этим.
cat somefile > /proc/net/ipt_recent/bad_guys отправляет в /proc/net/ipt_recent/bad_guys именно IP и ничего более. Все остальные данные рядом с IP во внутреннюю таблицу помещаются кодом, ответственным именно за ИНТЕРФЕЙС. Интерфейс между внешним миром и внутренними структурами.
В случае же отсутствия интерфейса, в случае с cat, никаких других данных в таблицу, кроме IP помещаться не должно. Или мы будем должны помещать IP, ВРЕМЯ, etc. Что и будет называться "прямой доступ к внутренним структурам", без интерфейса.
В связи с этим, выглядит как минимум странно фраза "iptables/recent как раз это и есть, самое простое, без спец интерфейса ;) "
ИМХО бардак в голове. Вместо "простой интерфейс" говорят "без спец интерфейса". Отсюда и спор раздули.
| |
|
6.24, Nick (??), 04:13, 12/11/2007 [^] [^^] [^^^] [ответить] | +/– | неа За интерфейс тут отвечает VFS open 2 read 2 write 2 close 2 Вот ЭТОТ... большой текст свёрнут, показать | |
|
7.33, nuclight (?), 22:10, 09/01/2008 [^] [^^] [^^^] [ответить] | +/– | Ага, со здоровенным промежуточным слоем в виде VFS Нихрена не оптимально То же... большой текст свёрнут, показать | |
|
|
|
4.22, Nick (??), 15:47, 02/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
>Ой, блин, держите меня...
>cat /dev/random > /proc/net/ipt_recent/bad_guys
>И где будет тормозить? В ядре :)
>Класс.
>
>Время собирать камни?
да хоть разбирай, хоть собирай...
cat /dev/urandom > /dev/sda
или с винтом уже не смешно?
| |
|
|
|
1.25, AVK (?), 08:32, 14/11/2007 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Ну всё, сдаюсь...
Трудно объяснять идеологическую разницу между классами С++ и структурами данных со скрытыми методами присвоения (a la borland с++ builder). Надоело уже, Вы, Nick, не первый, и, увы, не последний :(
Кстати, мой пример с random тоже тихо так пустили по-боку - неудобный он всё же, правда?
| |
|
2.26, Nick (??), 03:11, 15/11/2007 [^] [^^] [^^^] [ответить] | +/– | ах вон ты как мыслишь для тебя все, что записывает ИПшник, принимая его на вход... большой текст свёрнут, показать | |
|
3.31, AVK (?), 20:41, 18/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
># 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.
| |
|
4.32, Nick (??), 21:22, 18/11/2007 [^] [^^] [^^^] [ответить]
| +/– |
Ок, давай на том и подвяжем :)
а трава с IPшниками - ну а че, хреново, но отпарсили :)
В конце концов ни это, ни выброс с ошибкой не делают сему эксперименту чести :)
(но парсер могли бы и подучить, конечно)
| |
|
|
|
1.30, XoRe (ok), 07:18, 15/11/2007 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
2Nick:
> я уже пришел к истине - и утверждал это.
> Если вы ставите истинность моей истины (;) под сомнение - давайте контраргументы моим доводам, которые ПРИСУТСТВУЮТ наряду с
> утверждением "iptables лучше". Ничего противоестественного не вижу.
> Я хочу истину и вижу ее в netfilter'е. Свои взгляды я изложил.
> Извольте оспорить, а не просто сказать "он сказал 'iptables лучше' - значит он неправ!"
Да, iptables лучше.
Свободен.
Т.к. мой предыдущий пост засел глубоко в топике посреди оффтопа, повторю совет:
Всунуть все ip адреса в таблицу за один проход можно командой:
ipfw [-cfnNqS] [-p preproc [preproc-flags]] pathname
Как я понял из мана, в файл "pathname" запихиваются команды ipfw.
| |
|