The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Пример использования таблиц блокировки в ipfw
Блокировка производится командой:

   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
 
16.10.2007
Ключи: ipfw, table, block / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетный фильтр в FreeBSD: ipfw, IP-Filter

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Nick (??), 01:51, 17/10/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спец-интерфейс...  не слишком красиво
     
  • 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 подобными средствами?
    Их маны читать влом, да и вряд ли прочуствуешь все не попробовав.
    А вот посмотреть готовых команд знающих людей - было бы нагляднее.

     

  • 1.5, Av (??), 09:20, 19/10/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Это не unix-way, Nick.
     
     
  • 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.

     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру