|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Ilya Teterin 2:5020/400 20 Nov 2002 21:43:23 To : Vitaly.Lugovsky@ontil.ihep.su Subject : Re: Скриптовый язык для netfilter --------------------------------------------------------------------------------
Wed Nov 20 2002 15:16, Vitaly.Lugovsky@ontil.ihep.su wrote to Ilya Teterin:
VLois> Опять - не совсем понятна задумка. Язык этот надо компилировать, или
VLois> достаточно будет интерпретации?
Ассемблировать :) Т.к. в теории я полный ноль, попробую привести примеры.
Строка кода задается правилом iptables. Вот как примерно будет выглядеть
"программа" для учета трафика с детализацией:
iptables -A act -j mov ls "name" srcip // задать значение локальной переменной
iptables -A act -j cat lc "name" " " // добавить константу
iptables -A act -j cat ls "name" dstip // добавить dstip
iptables -A act -j cat lc "name" " "
iptables -A act -j cat ls "name" proto
iptables -A act -j cat lc "name" " "
iptables -A act -j cat ls "name" sport
// в переменной "name", соответствующий обрабатываемому пакету, лежит "строка
детализации", содержащая через пробел src ip, dst ip, протокол и порт (если
есть).
iptables -A act -j add gs $name length
// увеличиваем значение глобальной переменной по имени, задаваемому значением
локальной переменной name, на значение, соответствующее длине пакета
Значения глобальных переменных можно читать из приложения, допустим, через
proc. В них будет детализация трафика, попавшего в правило act.
Другой пример - реализация аналога матча width на этом "ассемблере".
iptables -A act -j add gs "width" length // увеличить глобальную переменную
width на длину пакета
iptables -A act -j mov gs "jiffies" jiffies // берем число jiffies
iptables -A act -j div gc "jiffies" 100 // делим на 100
iptables -A act -m if neq gg "jiffies" "jiffold" -j mov gc "width" 0 //
сравниваем с глобальной переменной, если не совпадает, обнуляем width
iptables -A act -m if neq gg "jiffies" "jiffold" -j mov gg "jiffold" "jiffies"
iptables -A act -m if ge gc "width" 10000 -j DROP // если за секунду счетчик
достиг 10000, то выкидываем пакет.
По идее, скорость обработки таких правил будет не особо меньше, чем обработка
обычных правил iptables.
--- ifmail v.2.15dev5
* Origin: FidoNet Online - http://www.fido-online.com (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/16679252b5dea.html, оценка из 5, голосов 10
|