Давно хотел написать статью по ipset, но все как то руки не доходили.
А тема то для меня довольно интересная.
Да и намучался одно время я достаточно с этим.
Итак — для чего оно вообще нужно ? И кому ?
Для этого рассмотрим немного теории.
Используется в основном это дело на маршрутизаторах с установленной ОС Linux.
Для того, чтоб выпустить клиента в сеть достаточно добавить в фаерволе всего несколько простых правил.
Например :
/sbin/iptables -t NAT -I POSTROUTING -s $IP_Client -o eth1 -j MASQUERADE /sbin/iptables -I FORWARD -s $IP_Client -j ACCEPT /sbin/iptables -I FORWARD -d $IP_Client -j ACCEPT |
Правила пишу по памяти, но я думаю суть ясна : первым мы разрешаем маскарадинг клиента наружу, вторым и третьим разрешаем проходить пакеты в интернет и обратно.
Вроде бы ничего сложного, но если мы вспомним, то пакет не выйдет в инет пока не пройдет ВСЕ правила фаервола. А под всеми я понимаю весь набор правил маршрутизатора.
Для 1 или 100 клиентов это конечно не много и современные машины вполне спокойно справляются с такой нагрузкой.
Но представьте, что если клиентов 1000 или больше ?
Прежде чем выпустить хоть 1 пакет он должен пробежаться по ВСЕМ 3000 правилам. Почему 3000 — потому что для каждого клиента мы написали по 3 правила.
И чем больше клиентов, тем соответственно пакет не попадет в инет пока не пробежит по всем правилам.
А теперь представьте, что хотя бы половина клиентов использует программы p2p, где создается более 200-300 соединений для 1 клиента.
Вот тут я и понял что основной задачей стоит уменьшение правил фаервола.
Но как их уменьшить-то ?
Вот тут нам на помощь и приходит ipset.
Ipset представляет собой программу для работы с наборами адресов IP (IP set) в ядре Linux. Программа позволяет создавать, изменять и проверять наборы адресов IP, с которыми работает ядро Linux (включая netfilter/iptables). IP set может включать в себя адреса IP, номера портов TCP и UDP, а также дополнительную информацию.
От теории к практике.
Не знаю как на других дистрибутивах, но на Linux Ubuntu Server все ставится достаточно просто :
sudo apt-get install module-assistant sudo apt-get install ipset-source /sbin/m-a a-i ipset |
вот и все что требуется — модули будут загружены и скомпилированы автоматически.
Что же делать дальше ?
А вот что :
Смотрим наши правила и заменяем их списками :
/sbin/ipset -N FFIN ipmap --network 192.168.0.0/16 /sbin/ipset -N FSNAT ipmap --network 192.168.0.0/16 |
Создаем 2 цепочки для форварда и для НАТа.
/sbin/iptables -t mangle -I FORWARD -m set --set FFIN src,dst -j ACCEPT /sbin/iptables -t mangle -I FORWARD -m set --set FFIN dst,src -j ACCEPT /sbin/iptables -t nat -A POSTROUTING -m set --set FSNAT src -o $eWAN -j MASQUERADE |
И ВСЕ.
Теперь только заполняем списки
/sbin/ipset -A FSNAT $IP_Client /sbin/ipset -A FFIN $IP_Client |
Теперь в фаерволе вместо 3000 правил реально будет только 3. ТРИ. Всего то 3 правила-списка.
Это колоссально снизит нагрузку на процессор.
Более детально про ipset можно почитать тут или
man ipset |
Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.