AlKov Опубликовано 7 марта, 2012 · Жалоба Имею в наличии роутер на CentOS 5, самосборное ядро 2.6.34, iptables v1.4.8, ipset v4.5. На роутере кроме всего NAT. Создать данную тему сподвигла многодневная борьба с искусственно созданной проблемой. После чего решил серьезно заняться оптимизацией правил iptables с использованием ipset. Вот на последнем и оказалась засада.. Вернее сказать, задумался, на какой версии ipset реализовывать задуманное. Попытался в лоб навернуть последнюю версию 6.11. Увы.. configure: error: The kernel source directory /lib/modules/2.6.34.fctv.v3/build is not patched with netlink.patch to support ipset Почитал changelog ipset 6.11 - по сравнению с 4.5 очень много изменений, включая обязательное наличие поддержки ipv6, который у меня отключен и который в ближайшем обозримом использовать не собираюсь. Вот и задумался, стОит ли заморачиваться с 6.11? Ведь насколько я представляю, для этого возможно потребуется собирать новое ядро и iptables. До сегодняшнего дня ipset не использовал совсем, поэтому практически не представляю, насколько существенно отличие версии 6.11 от 4.5 в свете поставленной задачи (оптимизация NAT и firewall в iptables). Может будет достаточно имеющихся в наличии "инструментов"? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alex/AT Опубликовано 7 марта, 2012 · Жалоба 4.5 хватит "за глаза", мне кажется. Особых оптимизаций между 4.5 и 6.1 не было. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 7 марта, 2012 (изменено) · Жалоба 4.5 хватит "за глаза", мне кажется. Особых оптимизаций между 4.5 и 6.1 не было. А Вы сами юзаете ipset, или это мнение только от прочтения changelog? P.S. Кстати, где бы найти подробный howto (наподобие iptables tutorial) на ту же 4.5 версию? На оффсайте только ман, и тот только для 6-й версии. Кроме того, что он очень бедный, там еще существенные отличия в синтаксисе и прочее.. Изменено 7 марта, 2012 пользователем AlKov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alex/AT Опубликовано 7 марта, 2012 (изменено) · Жалоба Юзаю. Конкретно - iphash. man ipset / man iptables, чтобы разобраться, более-менее достаточно (при понимании логики работы). А так - если забить в Яндекс "ipset" - находится приличное число примеров с описанием. --- Если кого вдруг заинтересует, пособие по сборке ipset 4.5 для C5 с "родной" версией iptables (+ 1 патч) из SRPM здесь: http://alex-at.ru/linux/ipset-4-5-centos-5 Изменено 7 марта, 2012 пользователем Alex/AT Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 7 марта, 2012 (изменено) · Жалоба Юзаю. Конкретно - iphash. man ipset / man iptables, чтобы разобраться, более-менее достаточно (при понимании логики работы). С пониманием логики особо без проблем, а вот с синтаксисом беда... :( Ну вот например, хочу оптимизировать следующую конструкцию в iptables $IPTABLES -A FORWARD -p icmp -j icmp_packets_fw # ICMP rules # $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IP_RANGE --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPS_RANGE --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IP_RANGE --icmp-type 11 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPS_RANGE --icmp-type 11 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP_RANGE --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP_RANGE --icmp-type 11 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP1_RANGE --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP1_RANGE --icmp-type 11 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP2_RANGE --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP2_RANGE --icmp-type 11 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP3_RANGE --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_packets_fw -p ICMP -s $LAN_IPP3_RANGE --icmp-type 11 -j ACCEPT Читаем man ipset на эту тему.. icmp:codename|type/code ICMP codename or type/code. The supported ICMP codename identifiers can always be listed by the help command. icmpv6:codename|type/code ICMPv6 codename or type/code. The supported ICMPv6 codename identifiers can always be listed by the help command. proto:0 All other protocols, as an identifier from /etc/protocols or number. The pseudo port number must be zero. И? Как создать необходимый set, какой тип set-а применять, где находится описание синтаксиса? by the help command выдаёт ipset -H icmp ipset v4.5: Couldn't load settype `icmp':/lib64/ipset/libipset_icmp.so: cannot open shared object file: No such file or directory Try `ipset -H' or 'ipset --help' for more information. Ну и т.п. "синтаксические" заморочки.. А так - если забить в Яндекс "ipset" - находится приличное число примеров с описанием. Да уж неделю как яндекс-гугелю - а все никак.. Не выходит Каменный Цветок! Изменено 7 марта, 2012 пользователем AlKov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sexst Опубликовано 7 марта, 2012 (изменено) · Жалоба У вас подсети? ipset -N xxx nethash ipset -A xxx $SUBNET Повторяем последнюю команду со всеми подсетями. Для отдельных ip есть тип iphash При больших списках можно поиграться с размером хэша. В iptables пишем -A icmp_packets_fw -p icmp --icmp-type 8 -m set --match-set xxx src -j ACCEPT -A icmp_packets_fw -p icmp --icmp-type 11 -m set --match-set xxx src -j ACCEPT Изменено 7 марта, 2012 пользователем sexst Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
taf_321 Опубликовано 8 марта, 2012 · Жалоба 4.5 хватит "за глаза", мне кажется. Особых оптимизаций между 4.5 и 6.1 не было. Поддержка nethash когда появилась? Потому как у меня есть потребность, чтобы можно было в сеты загонять и отдельные адреса и подсети. И вроде такого сета в 4.х небыло. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
sexst Опубликовано 8 марта, 2012 · Жалоба В 4.5 есть Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 8 марта, 2012 · Жалоба sexst, я не очень удачно привел пример. Я хотел icmp type реализовать в set. Но так и не понял, в каком типе set и как это сделать (синтаксис). Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alex/AT Опубликовано 8 марта, 2012 (изменено) · Жалоба В Вашем случае, как уже показали выше, вся пачка правил вырождается в два: с icmp-type 8 и icmp-type 11, все подсети вносятся в set. Причем данную штуку можно было слегка оптимизировать даже без set (повысить производительность для худшего случая почти в 2 раза): сделать две цепочки - на type 8 и type 11, и бросать в них сначала по type, а потом уже проверять сети. Но с set, конечно, получится много эффективнее в любом случае. Давайте так скажем: прямая задача set - эффективное в плане поиска хранение наборов IP (подсетей либо отдельных адресов), и, возможно, портов, для сравнения с src/dst в iptables. Не более, и не менее. Еще set позволяет очень удобно добавлять и удалять динамически адреса/подсети для файрвольных правил, не требуя модификации собственно самих правил. Хранить все прочее в set тоже можно - но только в специфичных случаях, когда этого прочего много, и скорее всего придется писать свой модуль для ipset. В Вашем случае перенос icmp type в set особой пользы не даст - вы анализируете всего два типа. Вот если их будет 8-16-many - тогда можно думать. Изменено 8 марта, 2012 пользователем Alex/AT Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Alex/AT Опубликовано 8 марта, 2012 (изменено) · Жалоба Поддержка nethash когда появилась? Потому как у меня есть потребность, чтобы можно было в сеты загонять и отдельные адреса и подсети. И вроде такого сета в 4.х небыло. # uname -a Linux *.*.ru 2.6.18-238.9.1.el5 #1 SMP Tue Apr 12 18:10:13 EDT 2011 x86_64 x86_64 x86_64 GNU/Linux # ls -l /lib/modules/2.6.18-238.9.1.el5/extra/*nethash* -rw-r--r-- 1 root root 349360 Янв 25 2011 /lib/modules/2.6.18-238.9.1.el5/extra/ip_set_ipportnethash.ko -rw-r--r-- 1 root root 331151 Янв 25 2011 /lib/modules/2.6.18-238.9.1.el5/extra/ip_set_nethash.ko # ipset -v ipset v4.5, protocol version 4. Kernel module protocol version 4. Изменено 8 марта, 2012 пользователем Alex/AT Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...