Проект Netfilter представил (http://lists.netfilter.org/pipermail/netfilter-announce/2014...) четвёртый выпуск нового пакетного фильтра nftables (0.4), а также выпуск сопутствующей библиотеки libnftnl 1.0.3 (http://lists.netfilter.org/pipermail/netfilter-announce/2014...), предоставляющей низкоуровневый API для взаимодействия с подсистемой nf_tables. В пакет Nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, которая входит в состав ядра Linux начиная с выпуска 3.13.Nftables нацелен на замену iptables, ip6table, arptables и ebtables, и примечателен унификацией интерфейсов фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов. Для реализации поставленной задачи Nftables предоставляет на уровне ядра лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком. В работе используются уже существующие типовые универсальные компоненты инфраструктуры Netfilter, в том числе применяются существующие хуки, система отслеживания состояния соединений, компоненты организации очередей и подсистема ведения лога.
Непосредственно логика фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Например, если в iptables при выполнении в правилах сопоставления номера входящего TCP-порта использовалась специальная предопределённая функция модуля ядра xt_tcpudp, то в nftables производится формирование инструкции "прочитать в регистр 2 байта из определённой позиции заголовка пакета и сравнить содержимое регистра с указанным значением". Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.Для формирования правил фильтрации предлагается использовать утилиту nft, которая проверяет корректность правил и транслирует их в байткод. Правила могут как добавляться инкрементально, так и загружаться целиком из файла на диске. Синтаксис правил (http://people.netfilter.org/wiki-nftables/index.php/Main_Page) не похож (https://home.regit.org/netfilter-en/nftables-quick-howto/) на iptables и отличается использованием иерархических блочных структур вместо линейной схемы. Язык классификации правил основан на реальной грамматике, при обработке которой используется сгенерированный в bison парсер. Поддерживается словарный маппинг (хеши), поиск по наборам правил (sets), диапазоны значений (можно определять подсети), средства для отслеживания соединений, NAT, ведение лога. Для обеспечения совместимости с правилами iptables/ip6tables предоставляется специальная прослойка.
Особенности новой версии:
- Поддержка операций с глобальными наборами правил (ruleset). Возможность появилась в ядре 3.18). Например, командой "<font color="#461b7e">nft flush ruleset</font>" можно разом очистить все таблицы, цепочки и правила. Посмотреть доступные наборы правил можно командой "<font color="#461b7e">nft list ruleset</font>". Результаты вывода данной команды можно сохранить в файл и затем загрузить при помощи "<font color="#461b7e">nft -f ruleset.file</font>" для восстановления сохранённого состояния, что будет аналогично выполнению iptables-restore c захватом правил для всех поддерживаемых семейств протоколов (ip, ip6, inet, bridge и arp);- Поддержка ведения полного лога для всех семейств протоколов, в том числе nfnetlink_log. Поддерживается начиная с ядра Linux 3.17;
- Возможность автоматического выбора оптимальной реализации списка (set). Поддерживается начиная с ядра Linux 3.16. Метод оптимизации списка можно определить и вручную, например, для включения оптимизации по потреблению памяти можно указать "<font color="#461b7e">nft add set filter set1 { type ipv4_addr ; policy memory ; }</font>", а для оптимизации для достижения максимальной производительности - "<font color="#461b7e">nft add set filter set1 { type ipv4_addr ; policy performance ; }</font>". Аналогичным образом можно поступить и для словарей (maps), например "<font color="#461b7e">nft add map filter map1 { type ipv4_addr : verdict ; policy performace ; }</font>";
- Полноценная поддержка операции отклонения (reject) с отправкой ответного сообщения об ошибке. Например, "<font color="#461b7e">nft add rule filter input reject with icmp type host-unreachable</font>" или "<font color="#461b7e">nft add rule filter input reject with tcp reset</font>";
- Поддержка трансляции адресов (максарадинга) для IPv4 и IPv6. Например, "<font color="#461b7e">nft add rule nat postrouting masquerade</font>". Работает в ядрах Linux, начиная с 3.18;- Поддержка перенаправления запросов (redirect). Например, "<font color="#461b7e">nft add rule nat prerouting tcp dport 22 redirect to 2222</font>". Работает в ядрах Linux, начиная с 3.19-rc;
- Поддержка NAT-флагов random, fully-random и persistent;
- Проверка непротиворечивости пересечений между обновлениями и дампами ruleset;
- Метаинформация о пакете расширена поддержкой сопоставлений pkttype, cpu и devgroup;- Добавлен скрипт для автоматического тестирования на предмет появления регрессивных изменений;
- Возможность отключения использования библиотеки libreadline и отладки на стадии выполнения скрипта configure;
- Система сборки переведена на использование autotools;- Изменение синтаксиса: Флаг 'queue' теперь рассматривается как разделённый запятыми список символов, например "<font color="#461b7e">nft add filter input counter queue num 0-3 fanout,bypass</font>";
- По умолчанию прекращено преобразования имён в правилах. IP-адреса всегда должны задаваться в числовом представлении. Для резолвинга имён хостов следует явно указывать опцию '-N'.
URL: http://lists.netfilter.org/pipermail/netfilter-announce/2014...
Новость: http://www.opennet.dev/opennews/art.shtml?num=41282
Наконец-то маскарад доделали, а то вообще неприлично было.
А шейпинг встроили ?
Dummynet, не?
> А шейпинг встроили ?man tc же :)
За это отвечает другая подсистема ядра QoS. Зачем дублировать функциональность?
Всё бы хорошо, но чертовы правила, состоящие из слов в одном регистре как-то очень неуютно парсятся глазами. iptables с их дефисами и таргетами большими буквами как-то легче в этом плане
Отправляйся-ка SQL читать, дядя. Нечего нам здесь регистры менять.
ИМХО дело привычки. Зато правила стали лаконичней и уютно структурируются, а не как при "старом режиме" - порянка текста экранов на несколько без отступов, структуры и часто бывает что и комментариев, которая ещё не сразу пойми, что и делает.
> Зато правила стали лаконичней и уютно структурируются, а не как при "старом режиме"
> порянка текста экранов на несколько без отступов, структуры и часто бывает что и комментариевУ народа какой-то патологический сидром футуризма - всё, что новое по определению лучше.
Маяковский тоже это любил, застрелился (или помогли), так что вы аккуратнее.
table ip filter {
chain input {
type filter hook input priority 0;
# accept traffic originated from us
ct state established,related accept
# accept any localhost traffic
iif lo accept
# count and drop any other traffic
counter drop
}
}
iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -I INPUT -i lo -j ACCEPT
iptables -t filter -Z
Это просто нириально тяжело!
Выстрой-ка пооптимальнее, чтобы нагрузка на процессор была поменьше. Напиши комментарии, как в первом случае. Тогда и поговорим.
> Напиши комментарии, как в первом случае. Тогда и поговорим.Зачем комментарии, там в командах все написано.
Вот тут ещё можно, пару строчек.
proto gre and ((ip[((ip[0]&0xf)<<2):4] & 0xff7fffff) = 0x3001880b) and
(
(
(ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) +
12)]=0x21) and ((ip[((((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] &
0x80) >> 5) + 12)+1 +12):4] & 0xffffff00 = 0x52754000) or
((ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) + 12)+1
+9]=17) and ((ip[(((((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80)
>> 5) + 12)+1 +((ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] &0x80) >> 5) + 12)+1]&0xf)<<2))+12):4]=0x64323a69) )))
) or (
(ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) +
12):2]=0xff03) and (ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] &
0x80) >> 5) + 12)+2]=0x21) and ((ip[((((ip[0]&0xf)<<2) +
((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) + 12)+3 +12):4] & 0xffffff00 =
0x52754000) or ((ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] &
0x80) >> 5) + 12)+3 +9]=17) and ((ip[(((((ip[0]&0xf)<<2) +
((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) + 12)+3 +((ip[(((ip[0]&0xf)<<2)
+ ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) +
12)+3]&0xf)<<2))+12):4]=0x64323a69) )))
) or (
(ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) +
12):4]=0xff030021) and ((ip[((((ip[0]&0xf)<<2) +
((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) + 12)+4 +12):4] & 0xffffff00 =
0x52754000) or ((ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] &
0x80) >> 5) + 12)+4 +9]=17) and ((ip[(((((ip[0]&0xf)<<2) +
((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) + 12)+4 +((ip[(((ip[0]&0xf)<<2)
+ ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) +
12)+4]&0xf)<<2))+12):4]=0x64323a69) )))
) or (
(ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) +
12):2]=0x0021) and ((ip[((((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] &
0x80) >> 5) + 12)+2 +12):4] & 0xffffff00 = 0x52754000) or
((ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80) >> 5) + 12)+2
+9]=17) and ((ip[(((((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] & 0x80)
>> 5) + 12)+2 +((ip[(((ip[0]&0xf)<<2) + ((ip[((ip[0]&0xf)<<2)+1] &0x80) >> 5) + 12)+2]&0xf)<<2))+12):4]=0x64323a69) )))
)
)
Вот это удобно, да?
> Вот это удобно, да?Там просили "чтобы нагрузка на процессор была поменьше."
>> Вот это удобно, да?
> Там просили "чтобы нагрузка на процессор была поменьше."Открою страшную тайну - можно было просто правило с -i lo перенести повыше, чтобы оно не дергало conntrack на локальных пакетах.
Наглядно на тему: работая над кодом програмы её можно ускорить на 10-15%, а рабоная над алгоритмом - на пару порядков! :)
>>> Вот это удобно, да?
>> Там просили "чтобы нагрузка на процессор была поменьше."
> Открою страшную тайну - можно было просто правило с -i lo перенести
> повыше, чтобы оно не дергало conntrack на локальных пакетах.cat /proc/net/ip_conntrack |wc
30 420 4478
cat /proc/net/ip_conntrack |grep -c 127.0.0.1
0на друой машине
cat /proc/net/ip_conntrack | wc
10208 142628 1505300
cat /proc/net/ip_conntrack | grep -c 127.0.0.1
30оптимизатор унылый
Вы таки полагаете, что доказали одним конкретным случаем некую всеобъемлющую закономерность?
> Вы таки полагаете, что доказали одним конкретным случаем некую всеобъемлющую закономерность?я таки пологаю что Павлин троль, накинул так, что никто и не заметил потому-что
iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t filter -I INPUT -i lo -j ACCEPT
iptables -t filter -Zсии правила делают инсерт -- но не читавшим соответствующий ман этого не понять.
, кроме того ответственно заявляю что на МСЭ общение на интерфейсе lo минимально, и даже если МСЭ имеет такие нестандартные функции как transparent http/ftp proxy поиск в контраке делали не дибилы, о чём сведующие люди могли поинтересоваться в find ./ -iname '*conntrac*'
> сии правила делают инсертХм, и правда. Значит, фиговый из павлина переводчик.
> кроме того ответственно заявляю что на МСЭ общение на интерфейсе lo минимально
На чем основано такое заявление?
> поиск в контраке делали не дeбилы
Тем не менее, это наиболее тяжелая операция во всем процессе обработки пакетов фаерволом.
>> сии правила делают инсерт
> Хм, и правда. Значит, фиговый из павлина переводчик.
>> кроме того ответственно заявляю что на МСЭ общение на интерфейсе lo минимально
> На чем основано такое заявление?на опыте -- ибо это МСЭ
>> поиск в контраке делали не дeбилы
> Тем не менее, это наиболее тяжелая операция во всем процессе обработки пакетов
> фаерволом.кто сказал?
>> Вы таки полагаете, что доказали одним конкретным случаем некую всеобъемлющую закономерность?
> я таки пологаю что Павлин троль, накинул так, что никто и не заметил потому-что
> iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
> iptables -t filter -I INPUT -i lo -j ACCEPT
> iptables -t filter -Z
> сии правила делают инсерт -- но не читавшим соответствующий ман этого не
> понять.Доколе вы будете читать мои примеры как Святое писание? :D
Начинали по CodingStyle... Закончим, как всегда ассемблерными вставками в фирмварь сетевухи?!
>>> Вы таки полагаете, что доказали одним конкретным случаем некую всеобъемлющую закономерность?
>> я таки пологаю что Павлин троль, накинул так, что никто и не заметил потому-что
>> iptables -t filter -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
>> iptables -t filter -I INPUT -i lo -j ACCEPT
>> iptables -t filter -Z
>> сии правила делают инсерт -- но не читавшим соответствующий ман этого не
>> понять.
> Доколе вы будете читать мои примеры как Святое писание? :D
> Начинали по CodingStyle... Закончим, как всегда ассемблерными вставками в фирмварь сетевухи?!Павлин? -- а это ты точно мне пейсал? -- а то я чито-то не понимаю.
всмысле ничего не понимаю.. вот, совсем запутался Ж:(
Открою вторую страшную тайну, можно ещё lo в raw в NOTRACK запихнуть... Чтобы вообще conntrack не дёргало.
> Это просто нириально тяжело!Эталонное "насрано" с мешаниной из больших и маленьких букв в качестве optional-argument'ов, сочетание '-' и '--' в одной команде, UPPERCASE в качестве option-argument'ов, практически полное отсутствие сколько-нибудь вменяемой мнемоники для всего этого - в общем, дети, почитайте GNU/POSIX Utility Syntax Guidelines И НЕ ДЕЛАЙТЕ ТАК БОЛЬШЕ!!!1111АДЫНАДЫНАДЫН
А еще лучше - посмотрите, как это сделано хотя бы в IPFW (Про PF молчу) и сделайте так же. Впрочем, за неимением гербовой - сойдет и первый вариант
Видишь ли, в этом "насрано" глав мгновенно выхватывает "ESTABLISED,RELATED" - и контекст для понимания готов, я уже знаю, о чем речь. Так же и таргет большими буквами четко виден, даже если за ним идут параметры. То есть можно быстро понять, о чем правило, а потом, если надо, смотреть детали. А мнемоника... Полтора десятка общеупотребимых параметров запоминается элементарно, а за остлаьным раз в пол-года в справочник заглянуть не проблема. Ну так это всегда так - распространённое помнишь, об остальном - читаешь при надобности.А в ipfw-подобном синтаксисе вот этих подсказок нет, там надо именно читать всё простыню. В принципе, так как здесь, в отличие от ipfw, имеем не параметры командной строки в простыне sh-скрипта, а отдельные файлы, редакторы, скорее всего, будут поддерживать раскраску, что может и снять проблему.
>Видишь ли, в этом "насрано" глав мгновенно выхватывает "ESTABLISED,RELATED" - и контекст для понимания готов, я уже знаю, о чем речь.Вот только все остальные, хвала Аллаху, милостивому и милосердному, привычку выделять каждое второе ВАЖНОЕ слово КАПСОМ почему-то не подхватили. Хотя... О, точно - MS PowerShell напоминает. Точно такое же "насрано" с CamelCase-Где-Надо--и-Где-Не-НАДО, раскраска всего и вся "под радугу" и вечная необходимость квотить пробелы... спасибо, обойдусь.
> А мнемоника... Полтора десятка общеупотребимых параметров запоминается элементарно, а за остлаьным раз в пол-года в справочник заглянуть не проблема. Ну так это всегда так - распространённое помнишь, об остальном - читаешь при надобности.Заменить "запоминается" на "задрачивается" и ага. Вот только для большинства *nix'оводов firewall не является "предметом наипервейшей необходимости" - 99,95% *nix-инсталляций имеют firewall с десятком правил (Или не имеют его вовсе, ага), для которых многослойная архитектура iptables явно избыточна, достаточно плоского firewall'а, а там, где сложность реально нужна давным-давно стоят cisco-juniper-brocade. Как-то так.
В отличие от - набор правил ipfw\pf\ipf именно что ЧИТАЕТСЯ любым носителем английского языка, минимально знакомым с предметной областью. Не надо ничего "задрачивать", в простых случаях (Которых абсолютное большинство) берешь, читаешь и пишешь по образцу. Profit!
> Вот только все остальные, хвала Аллаху, милостивому и милосердному,
> привычку выделять каждое второе ВАЖНОЕ слово КАПСОМ почему-то не подхватили.Чё ты гонишь? Видимо них...я не читаешь доки, книги, маны. Ну так забей в гугле Linux Firewall Howto
Первые три ссцылки:
http://www.howtogeek.com/177621/the-beginners-guide-to-iptab.../
http://doc.norang.ca/iptables.html
http://www.comentum.com/unix-linux-ip-firewall.html
> Чё ты гонишь? Видимо них...я не читаешь доки, книги, маны. Ну так
> забей в гугле Linux Firewall HowtoТо-то, я смотрю, большинство "админов" "настраивает" iptables методом бездумной копипасты из гугла, и допиливает напильником под свои нужды при помощи а) ненаучного тыка б) создания тем "памагите пажалуйста" на каком-нибудь LOR-е.
getopt. Что в ответ может предложить носитель языга?
> getopt. Что в ответ может предложить носитель языга?Bison.
Ну-ну.
>где сложность реально нужна давным-давно стоят cisco-juniper-brocadeС "непонятно кем" встроенными бекдорами. Читай недавнюю новость на opennet. Поэтому доверие к такой "защите" стремится к нулю.
Спорим, что конфиг будет очень критичен к количеству отступов от края, и если кто-то не дай бог сделает лишний отступ или на один меньше - правило не будет работать, просто молча на будет работать без объяснения причин ?
> Спорим, что конфиг будет очень критичен к количеству отступов от края, и
> если кто-то не дай бог сделает лишний отступ или на один
> меньше - правило не будет работать, просто молча на будет работать
> без объяснения причин ?Вы проиграли.
И так будет с каждым, кто не читал, но осуждает.
Там блоки формируются с помощью {...}. Так что не надо сравнивать с Питоном.
Когда всё, что нужнодля понимания, в одной строке, а не в начале блока, находящемся выше на четыре экрана - тоже свои плюсы есть. Но я, в общем-то, не против структуры. Только под такое надо, как минимум, раскраску в редакторе.
А чё толку, те же яйцы, только капслок держать
nft ADD SET FILTER set1 { TYPE IPV4_ADDR ; POLICY MEMORY ;}
Смотря как капсы расставлять... Но мне в прицнипе не нравится, что подумали об удобстве для машины, но не для читающего
Айпитаблес - и для машины не удобен, ибо длинные цепочки правил все нагибают и занести 200 айпишников - чревато. И для человека - не очень. Хотя в плане длинных цепочек частично пролечено ipset. Но там читабельность еще больше в ауте: то что в правиле - одно, а то что в set со списком к которым правило применяется - другое. Две разные сущности.
Только когда дизайнили новое - о машине подумали, а о человеке не особенно
Умалишённые - не люди. О нормальных людях подумали.
Мы, умалишенные, не согласный с вашим не толерантным комментарием. Держите минус.
> Умалишённые - не люди. О нормальных людях подумали.Это в тебе гармонЪ играет, половое созревание, то-сё ...
Ну ниче, вырастишь, поймёшь что так прогибать человеков под машину можно когда но только когда нужно. Ну на каком нить 8-и битном синклере там :)
А на писюгах - нет. Писюг - это море ресурсов, конфиг не надо парсить 100500 раз в секунду, так что пусть разбирает то что удобно людям. Период. АзЪ. Ы!.
> А на писюгах - нет. Писюг - это море ресурсов, конфиг не
> надо парсить 100500 раз в секунду, так что пусть разбирает то
> что удобно людям. Период. АзЪ. Ы!.Парадокс в том, что большинство людей в данном случае оказались по одну сторону баррикад с машинами.
Да ладно вам спорить. Радуйтесь, что не XML-е :)
> А чё толку, те же яйцы, только капслок держать
> nft ADD SET FILTER set1 { TYPE IPV4_ADDR ; POLICY MEMORY ;}Такому админу для настройки фаервола нужен эникей-ассистент, который будет стоять рядом и в нужный момент зажимать Shift :)
> Такому админу для настройки фаервола нужен эникей-ассистент, который будет стоять рядом
> и в нужный момент зажимать Shift :)Стесняюсь спросить ЧЕМ у вас админ фаервол настраивает :))))
Эээм... а как вы книжки читаете?
Отлично читаю.Абзацы, большие буквы, знаки препинания, приличный шрифт и тому подобное - они ж не просто так.
> Отлично читаю.
> Абзацы, большие буквы, знаки препинания, приличный шрифт и тому подобное - они
> ж не просто так.Ну вот вам в примере выше все перечисленное, кроме разве что больших букв:
table ip filter {
chain input {
type filter
hook input priority 0;# accept
traffic originated from us
ct state
established,related accept# accept
any localhost traffic
iif lo
accept# count
and drop any other traffic
counter drop
}
}
и? Н-Ад0 чТО--Нибудь втАКОм /РОДЕ,СдELатЬ ПуIIIеЙ чИтАеМ0$ти for?
Еще раз объясняю. В варианте iptables для того, чтобы найти нужный участок, правила не нужно читать. Достаточно выхватить взглядом те самые большие буквы - хоть таблицу, хоть таргет. Эдакий "визуальный grep". А детально смотреть только те строки, в которых есть нужное.А когда всё сплошняком - эту плошную простыню надо читать сплошняком.
Возможно, у тебя нет этого навыка и поэтому ты не понимаешь, о чем речь.
> Еще раз объясняю. В варианте iptables для того, чтобы найти нужный участок,
> правила не нужно читать. Достаточно выхватить взглядом те самые большие буквы
> - хоть таблицу, хоть таргет.Ах вот откуда берутся м^Hчудаки, которые пишут названия таблиц капсом, из-за чего над каждым приходится секунду думать - это новый таргет такой, или просто автор рулесета чудак.
> Ну вот вам в примере выше все перечисленное, кроме разве что больших букв:А ты парсер и форматер написал, чтоб "сделай мне красива" было?!
Мне правильный SQL синтаксис нравиться из-за того, что можно
легко отличить команды от пользовательских данных.SELECT a.snum, sname, onum, 'Highest on', odate
FROM (Salespeople a, Orders b WHERE a.snum = b.snum
AND b.mak = (SELECT MAX(mak) FROM Orders c WHERE c.odate = b.odate) UNION
SELECT a.snum, (sname, (onum 'Lowest on', odate
FROM ( Salespeople a, Orders b WHERE a.snum = b.snum
AND b.mak = (SELECT MIN(mak) FROM Orders c WHERE c.odate = b.odate);А это - "Многабукав, сам нах разбирайся"
select a.snum, sname, onum, 'Highest on', odate
from (salespeople a, orders b where a.snum = b.snum
and b.mak = (select max (mak) from orders c where c.odate = b.odate) union
select a.snum, (sname, (onum 'Lowest on', odate
from ( salespeople a, orders b where a.snum = b.snum
and b.mak = (select min(mak) from orders c where c.odate = b.odate);
> Мне правильный SQL синтаксис нравиться из-за того, что можно
> легко отличить команды от пользовательских данных.
> А это - "Многaбукав, сам нaх разбирайся"Первое больше похоже на nftables, второе больше похоже на iptables. ИМХО.
Очень надеюсь что павлин - хороший мaльчик и вложенные селекты и юнион выделил ещё и идентами, но плoxой мaльчик опеннет сожрал чужой формат :)
> Всё бы хорошо, но чертовы правила, состоящие из слов в одном регистре
> как-то очень неуютно парсятся глазами. iptables с их дефисами и таргетами
> большими буквами как-то легче в этом планеОткрою вам страшную тайну: синтаксис nftables надо не "парсить глазами", а просто читать.
Читается он отлично.
В большинстве случаев правила файрволла читать (сплошняком) как раз не нужно. Нужно найти интересующий кусок и в нём разобраться/что-то подправить. Если меня интересует правило для SNAT, то чем быстрее я пропущу все ACCEPT/REJECT - тем лучше.
> Непосредственно логика фильтрации и специфичные для протоколов обработчики компилируются
> в байткод в пространстве пользователя, после чего данный байткод загружается в
> ядро при помощи интерфейса Netlink и выполняется в специальной виртуальной машине,
> напоминающей BPF (Berkeley Packet Filters). Например, если в iptables при
> выполнении в правилах сопоставления номера входящего TCP-порта использовалась специальная
> предопределённая функция модуля ядра xt_tcpudp, то в nftables производится формирование
> инструкции "прочитать в регистр 2 байта из определённой позиции заголовка пакета
> и сравнить содержимое регистра с указанным значением".пейсать и фантацировать это не одно и то-же.
BPF зачастую реализуется в виде виртуальной машины (виртуальной -- потому-что опкоды интерпретируются), а зачастую например как на многих архитектурах в Linux или x86 во FreeBSD они компилируются в нативный код (jit).nftables не использует никакую компиляцию в байткод -- nftables в пространстве ядра представляет собой FSM, юзерспейсная часть nftables в зависимости от правил фильтрации подготавливает для ядра модель для данной FSM.
>Подобный подход позволяет значительно
> сократить размер кода фильтрации, работающего на уровне ядра и вынести все
> функции разбора правил и логики работы с протоколами в пространство пользователя.с этим согласен -- но как уже обсуждалось, зачастую такая унификация ведёт к тому что, то разнообразие действий которое предоставляет стандартный netfilter описать через стандартный nftables не возможно.
И чем оно лучше PF?
в отличие от PF у nftables нет фатального недостатка.
Кстати да, меня тоже поражает стремление лялексоедов запилить очередной ни с чем не совместимый кривой велосипед вместо того, чтобы взять готовое проверенное годами решение вроде PF,
> Кстати да, меня тоже поражает стремление лялексоедов запилить очередной ни с чем
> не совместимый кривой велосипед вместо того, чтобы взять готовое проверенное годами
> решение вроде PF,как давно PF имеет возможность обрабатывать на разных ядрах?
есть аналог TPROXY, RATEEST, NETMAP, cgroup, bpf, audit, cluster, owner ... десятки их?
как насчёт побыстрому налабать свой модуль без пересборки ядра?
как там с NAT/statefull filter tftp/sctp/sip/h323/pptp?
как у вас теперь с поддержкой списков ip/сетей/портов/меток/комбинаций_вышеперечисленного ?покажите наконец ваш некривой велосипед -- то-то ляликсоиды подивяться
>[оверквотинг удален]
>> не совместимый кривой велосипед вместо того, чтобы взять готовое проверенное годами
>> решение вроде PF,
> как давно PF имеет возможность обрабатывать на разных ядрах?
> есть аналог TPROXY, RATEEST, NETMAP, cgroup, bpf, audit, cluster, owner ... десятки
> их?
> как насчёт побыстрому налабать свой модуль без пересборки ядра?
> как там с NAT/statefull filter tftp/sctp/sip/h323/pptp?
> как у вас теперь с поддержкой списков ip/сетей/портов/меток/комбинаций_вышеперечисленного
> ?
> покажите наконец ваш некривой велосипед -- то-то ляликсоиды подивятьсяЭэээм... Cisco IOS?
А от desktop'ного, мать его за ногу, linux'а хочется иметь firewall, правила которого можно с минимальными усилиями читать глазами, править пальцами (Не ломая их при этом) и понимать головой (Среднестатистического пользователя). Простые вещи должны делаться просто, сложные - немного сложнее, вместо этого... ну вы видите. "ЗАТО ИЗ ЭТОГО МОЖНО СОБРАТЬ АДРОННЫЙ КОЛЛАЙДЕР!!111"
>[оверквотинг удален]
>> как там с NAT/statefull filter tftp/sctp/sip/h323/pptp?
>> как у вас теперь с поддержкой списков ip/сетей/портов/меток/комбинаций_вышеперечисленного
>> ?
>> покажите наконец ваш некривой велосипед -- то-то ляликсоиды подивяться
> Ээээм... Cisco IOS?
> А от desktop'ного, мать его за ногу, linux'а хочется иметь firewall, правила
> которого можно с минимальными усилиями читать глазами, править пальцами (Не ломая
> их при этом) и понимать головой (Среднестатистического пользователя). Простые вещи должны
> делаться просто, сложные - немного сложнее, вместо этого... ну вы видите.
> "ЗАТО ИЗ ЭТОГО МОЖНО СОБРАТЬ АДРОННЫЙ КОЛЛАЙДЕР!!111"тот, кто считает что "для десктопного юзера" можно ждать какое-то понимание какого-то там синтиксиса pf/ipfw/netfilter/nftables/cisco_acl просто малолетний чудак.
при чём тут ось для коммутаторов/маршрутизаторов? на какой вопрос вы ответили написав про иос?
> как давно PF имеет возможность обрабатывать на разных ядрах?Не так давно.
> есть аналог TPROXY, RATEEST, NETMAP, cgroup, bpf, audit, cluster, owner ... десяткиЭто про знание каратэ, джиу-джитсу, айкидо и других страшных слов? :)
> покажите наконец ваш некривой велосипед -- то-то ляликсоиды подивятьсяВыдыхай бобёр. Речь о синтаксе конфиг файла, я щщетаю :) что у pf-а оно более для людей. Тчк.
> Речь о синтаксе конфиг файла, я щщетаю :)в каком слове оригинального вопроса шла речь о синтаксисе? как в рамках указанного синтаксиса (pf) можно использовать отдельные модули обработки трафика?
> Не так давно.Еще скажите, что оно нормально масштабируется хотя бы на 4-6 ядер :D
>> есть аналог TPROXY, RATEEST, NETMAP, cgroup, bpf, audit, cluster, owner ... десятки
> Это про знание каратэ, джиу-джитсу, айкидо и других страшных слов? :)Очевидно, возможности нормального фаервола для любителей pf выглядят как нечто заоблачное.
> Выдыхай бобёр. Речь о синтаксе конфиг файла, я щщетаю :) что у
> pf-а оно более для людей. Тчк.Это ваше личное мнение. А у других людей оно может быть и другое, и даже прямо противоположное :)
Покажите мне пример конфига Netfilter, и я скажу - практически применимо или нет.
:D
Странный конфиг
> Странный конфиг:)
Метка же, GOTO D:D
GOTO )
Оно конечно правильно, но подскажите: что там с маркировкой пакетов для tc/ip ro?
> Оно конечно правильно, но подскажите: что там с маркировкой пакетов для tc/ip
> ro?А по мануалить?
meta
length Length of the packet in bytes: meta length > 1000
protocol ethertype protocol: meta protocol vlan
priority TC packet priority
mark Packet mark
iif Input interface index
iifname Input interface name
iiftype Input interface type
oif Output inteface index
oifname Output inteface name
oiftype Output interface hardware type
skuid UID associated with originating socket
skgid GID associated with originating socket
rtclassid Routing realm
а как он скриптуется? например, в iptables можно так:iptables -F wan_in_flt
for src in `cat some_file_with_ip_addresses`; do iptables -A wan_in_flt -s $src -j ACCEPT ; doneа эта новомодная хрень так умеет?
> а как он скриптуется? например, в iptables можно так:
> iptables -F wan_in_flt
> for src in `cat some_file_with_ip_addresses`; do iptables -A wan_in_flt -s $src -j
> ACCEPT ; done
> а эта новомодная хрень так умеет?ты только-что понтанулся неумением пользоваться netfilter'ом. нищим тут не подают и поэтому нернём nftables я бы называть на вашем месте тоже не стал.