Войти через loginza
Закрыть панель

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

Во многих сетях есть популярный сервис обмена файлов по протоколу 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=""/>

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