Перейти к содержимому
Калькуляторы

ipset 6.11 на роутере с CentOS 5 Стоит ли заморачиваться?

Имею в наличии роутер на 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). Может будет достаточно имеющихся в наличии "инструментов"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4.5 хватит "за глаза", мне кажется. Особых оптимизаций между 4.5 и 6.1 не было.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4.5 хватит "за глаза", мне кажется. Особых оптимизаций между 4.5 и 6.1 не было.

А Вы сами юзаете ipset, или это мнение только от прочтения changelog?

 

P.S. Кстати, где бы найти подробный howto (наподобие iptables tutorial) на ту же 4.5 версию? На оффсайте только ман, и тот только для 6-й версии. Кроме того, что он очень бедный, там еще существенные отличия в синтаксисе и прочее..

Изменено пользователем AlKov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Юзаю. Конкретно - iphash. man ipset / man iptables, чтобы разобраться, более-менее достаточно (при понимании логики работы). А так - если забить в Яндекс "ipset" - находится приличное число примеров с описанием.

 

---

 

Если кого вдруг заинтересует, пособие по сборке ipset 4.5 для C5 с "родной" версией iptables (+ 1 патч) из SRPM здесь: http://alex-at.ru/linux/ipset-4-5-centos-5

Изменено пользователем Alex/AT

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Юзаю. Конкретно - 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" - находится приличное число примеров с описанием.

Да уж неделю как яндекс-гугелю - а все никак.. Не выходит Каменный Цветок!

Изменено пользователем AlKov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У вас подсети?

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

Изменено пользователем sexst

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4.5 хватит "за глаза", мне кажется. Особых оптимизаций между 4.5 и 6.1 не было.

 

Поддержка nethash когда появилась? Потому как у меня есть потребность, чтобы можно было в сеты загонять и отдельные адреса и подсети. И вроде такого сета в 4.х небыло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

sexst, я не очень удачно привел пример.

Я хотел icmp type реализовать в set. Но так и не понял, в каком типе set и как это сделать (синтаксис).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В Вашем случае, как уже показали выше, вся пачка правил вырождается в два: с 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 - тогда можно думать.

Изменено пользователем Alex/AT

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поддержка 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.

Изменено пользователем Alex/AT

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.