Хешируемые списки iptables — ipset

Давно хотел написать статью по 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

Личные сообщения в StrongDC++

Во многих сетях есть популярный сервис обмена файлов по протоколу DirectConnect или проще «Стронг».

На многих хабах установлен плагин Offline Message — возможность отправлять личные сообщения пользователям, даже если они не онлайн.

Обычно это делается при помощи команды в главном окне чата :

В этой статье я хочу рассказать о таком полезном скрипте  как пользовательское меню, которое реализует данную функцию.

Вариант №1

Первое : создаем для этого новый пункт в меню.
Файл — Настройки- дополнительно — Юзер-команды.
Смотрим на скриншот ниже (Pic1)
Рис.1
Нажимаем новый.
Выбираем как показано на рисунке(Pic2).
Рис.2
В поле команда вставляем строку:

+msgsend %[line:Кому: Точный ник с УЧЁТОМ РаЗмЕрА БуКв!!!] %[line:Тема сообщения]--%[line:Сообщение]

Далее идем в главное окно, щелкаем на любого пользователя и выбираем Юзер-команды — личка оффлайн(Pic3)
Рис.3
и следуем инструкции.
Когда пользователь будет Онлайн, ему придет Ваше сообщение.

Вариант №2.

Закрываем СтронгДЦ++
Идем в папку где установлен СтронгДЦ++
Ищем Файл Favorites.xml
Открываем его блокнотом.
Ищем в нем пары строк:(Pic4)


< UserCommands>
< /UserCommands>

Рис.4
между ними вставляем:


< UserCommand Type="1" Context="2" Name="Личка в оффлайн" Command="<%[myNI]> +msgsend %[line:Кому: Точный ник с УЧЁТОМ РаЗмЕрА БуКв!!!] %[line:Тема сообщения]--%[line:Сообщение]|" Hub=""/>

Сохраняем. Запускаем стронгДЦ++