Jump to content
Калькуляторы

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

Edited by AlKov

Share this post


Link to post
Share on other sites

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

 

---

 

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

Edited by Alex/AT

Share this post


Link to post
Share on other sites

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

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

Edited by AlKov

Share this post


Link to post
Share on other sites

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

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

Edited by sexst

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Edited by Alex/AT

Share this post


Link to post
Share on other sites
Поддержка 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.

Edited by Alex/AT

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this