tag:blogger.com,1999:blog-61883164063872603862024-03-04T23:39:41.060-08:00Тихая гаваньa7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-6188316406387260386.post-14925602877176091772016-09-12T11:55:00.000-07:002016-09-12T11:55:00.285-07:00Windows Store и ошибка 0x80070005<div dir="ltr" style="text-align: left;" trbidi="on">
Захотелось сегодня с маркета попробовать установить пару приложений. Но столкнулся с этой ошибкой. Гугл выдавал разные варианты решения. Но ни один из вариантов мне не помогал. Потом методом тыка заметил, что не устанавливается, если выбран отличный от системного диска (То есть если ставил не в С диск). Потратив еще минут 10 нашел причину. Проблема была в галочке "Сжимать содержимое диска". После снятия галочки и удаления директорий, который Windows Store создал при установке этих приложений, все пошло. </div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com0tag:blogger.com,1999:blog-6188316406387260386.post-10614737094048742032016-08-23T06:50:00.000-07:002016-08-23T06:50:17.296-07:00Отображение доменов посещенных https ресурсов в логе Squid<div dir="ltr" style="text-align: left;" trbidi="on">
Есть замечательные инструкции по поднятию прозрачного прокси Squid с фильтрацией https ресурсов. В частности https://habrahabr.ru/post/272733/. Все бы хорошо (сам использую, все прекрасно работает), но кое-что меня сильно раздражало. В логах сквида вместо адреса посещенного https ресурса указывался ip адрес. В век, когда каждый второй сайт переходит на https это становится проблемой, так как не понятно, что за ресурс посещает юзер и нужно ли блокировать этот ресурс. Потратив полдня на чтение мануалов нашел правильное решение для исправления ситуации. Суть в том, что мы создаем 2 ACL и 2 logformat параметра. Отдельно для логирования запросов на 80 порт и 443. logformat для 80 порта не будет заносить в лог записи о https соединениях. А второй logformat наоборот, пишет в лог только о запросах на 443 порт. Зачем это? дело в том, что для отображения SNI записи в логе надо добавить параметр %ssl::>sni. Но тут появляется другая проблема. Для https ресурсов в логе появляется и имя домена и его IP адрес. За занесение в лог ip адреса отвечает %ru. Вот его то мы и уберем в logformat для запросов на 443 порт. В итоге у нас получаются строки:<br />
<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> acl https_port port 443
logformat https %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ssl::>sni %[un %Sh/%<a %mt
cache_access_log /var/log/squid3/access.log https https_port
acl http_port port 80
logformat http %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt.
cache_access_log /var/log/squid3/access.log http http_port
</code></pre>
<br />
Теперь в логе порядок и можно любимым парсером строить отчеты и не бояться встретить там IP адрес вместо домена (за исключением случаев когда пользователь заходит именно по IP, а не по доменному имени)</div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com2tag:blogger.com,1999:blog-6188316406387260386.post-71447690660787369172016-03-31T11:29:00.000-07:002016-03-31T11:29:01.057-07:00Dr.Web Esuite Server + Active Directory + Bind<div dir="ltr" style="text-align: left;" trbidi="on">
<div data-select-like-a-boss="1">
Решил попробовать Dr.Web Esuite Server у себя в домене. Имею тестовый домен AD. В качестве DNS сервера используется bind9. При развертывании Dr.Web server сразу столкнулся с проблемой при предложении установщика зарегистрировать сервис в AD. Постоянно ругался на ошибку админа домена (мол не неправильно я его указал). Хотя логин и пароль были правильными. После 2-3 часов поиска проблем (гугл на это ничего не ответил) взял в руки tcpdump/wireshark и стал смотреть что происходит при попытке продолжить установку. И сразу увидел, что установщик пытается послать данные на порт 135 моего bind сервера. Но bind не открывает 135 порт. Его открывает процесс svhost на контроллере домена. Дело в том, что установщик смотрит, какие DNS серверы указаны в настройках подключения, так как считает, что DNS сервер находиться на контроллере домена. И в стандартной ситуации так и бывает. Но я по некоторым причинам отказался от DNS сервера Microsoft и использовал Bind. Видимо разработчики Dr.web не учитывали такой поворот. Но вернемся к проблеме. Не долго думая я перенаправил просто все запросы на 135 порт на сервер AD с помощью правил iptables<br />
<br /></div>
<div data-select-like-a-boss="1">
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> iptables -t nat -I PREROUTING -p tcp -d <dnsservip> --dport 135 -j DNAT --to-destination <adserverip>:135
iptables -t nat -A POSTROUTING -p tcp --dst <adserverip> --dport 135 -j SNAT --to-source <dnsservip>
</code></pre>
<br />
Где<br />
<dnsservip> IP адрес нашего сервера DNS<br />
<adserverip> IP адрес контроллера домена.<br />
<br />
Сразу после добавления правил установка пошла дальше. </div>
</div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com0tag:blogger.com,1999:blog-6188316406387260386.post-75459782495083374302015-10-28T06:51:00.000-07:002015-11-25T13:42:36.783-08:00Обход ограничения при переносе больших файлов плагином datadir в Rutorrent<div dir="ltr" style="text-align: left;" trbidi="on">
Кто пользуется Rutorrent в 32 битных системах наверное сталкивались с проблемой, при которой нельзя переносить торренты размером больше 2/4 Gb. Все основные предложения по обходу этой проблемы заключались в переходе на 64 битную ОС. Я же не мог взять и так просто перейти (домашний шлюз вот уже долгое время крутился на 32 битной Ubuntu, а заниматься переустановкой и настройкой шлюза с нуля не было никакого желания). В одном из постов автор Rutorrent предложил заменить вызовы php функции переноса/копирования на sh. Но до дела так и не дошло. В итоге решил заняться этим сам (к слову с php до этого никогда не работал, поэтому код может быть не идеальным, но зато рабочий). Изменения надо вносить в файл util_rt.php, который находиться в директории ../rutorrent/plugins/datadir. Надо найти строки<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code data-select-like-a-boss="1" style="color: black; word-wrap: normal;">function rtMoveFile( $src, $dst, $dbg = false )
{
$ss = LFS::stat($src);
if( !rename( $src, $dst ) )
{
if( $dbg ) rtDbg( __FUNCTION__, "from ".$src );
if( $dbg ) rtDbg( __FUNCTION__, "to ".$dst );
if( $dbg ) rtDbg( __FUNCTION__, "move fail, try to copy" );
if( !copy( $src, $dst ) )
{
if( $dbg ) rtDbg( __FUNCTION__, "copy fail" );
return false;
}
if( !unlink( $src ) )
if( $dbg ) rtDbg( __FUNCTION__, "delete fail (".$src.")" );
}
// there are problems here, if run-user is not file owner
if($ss!==false)
touch( $dst, $ss['mtime'], $ss['atime'] );
return true;
}
</code></pre>
И привести к виду <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"><span style="font-size: 12px; line-height: 20px;">function rtMoveFile( $src, $dst, $dbg = false )
{
$ss = LFS::stat($src);
$src = escapeshellarg($src);
$dst = escapeshellarg($dst);
exec ("/bin/mv -f $src $dst", $output, $retval);
$err = implode ($output);
if (!empty ($err))
{
if( $dbg ) rtDbg( __FUNCTION__, "from ".$src );
if( $dbg ) rtDbg( __FUNCTION__, "to ".$dst );
if( $dbg ) rtDbg( __FUNCTION__, "erorr ".$err );
if( $dbg ) rtDbg( __FUNCTION__, "move fail, try to copy" );
exec ("/bin/cp -r -f $src $dst 2>&1", $output, $retval);
$err = implode ($output);
if (!empty ($err))
{
if( $dbg ) rtDbg( __FUNCTION__, "copy fail ".$err );
return false;
}
}
// there are problems here, if run-user is not file owner
if($ss!==false)
touch( $dst, $ss['mtime'], $ss['atime'] );
return true;
}</span><span style="font-family: "arial";"><span style="font-size: 12px; line-height: 20px;">
</span></span></code></pre>
<br />
Вот и все. Теперь плагин может переносить файлы любого размера. </div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com0tag:blogger.com,1999:blog-6188316406387260386.post-29264990201650478652015-08-26T11:11:00.000-07:002015-09-03T23:33:15.842-07:00nShaper. Динамический шейпер для Linux. <div dir="ltr" style="text-align: left;" trbidi="on">
Рано или поздно у многих встает вопрос грамотного распределения трафика в сети. А точнее шейпинга. Особенно если в сети есть участники, качающие по протоколу bittorrent. Во времена, когда интернет у меня раздавал роутер DIR-320 с Олеговской прошивкой, этот вопрос особенно остро и для меня встал, так как канал у меня был слабый. И вот однажды нашел на форуме, посвященному этой прошивке, замечательный скрипт с названием nShaper (тема <a href="http://wl500g.info/showthread.php?13609-QoS-%D3%F1%F2%E0%ED%EE%E2%EA%E0-%E8-%ED%E0%F1%F2%F0%EE%E9%EA%E0-nShaper">тут</a>). Это был динамический шейпер, суть которого сводилась в динамическом распределении ширины канала в зависимости от типа и источника/назначения трафика. То есть он сам распределял скорость, в зависимости какой трафик проходит. И не надо было отключать торрент клиент, если кому-то в сети захотелось посидеть в ютубе или послушать музыку. Шейпер урезал скорость торренту и оставлял гарантированную полосу для остального трафика. <br />
<div data-select-like-a-boss="1">
<br /></div>
Но вот роутер отправился на заслуженный покой, а на смешу пришел полноценный Linux шлюз с Ubuntu. Конечно захотелось и на нем использовать этот шайпер. Сразу он работать отказался. Тогда я уже взял в руки "напильник" и стал заниматься "адаптацией", а после и тестированием. По ходу так же немного расширил функционал, добавив создание правил с использованием nDpi и iptables, и приоритезация трафика на основе маркировки трафика (через тот же ndpi или iptables). Скрипт в 2 версиях, с nDpi и без, если кому-то nDpi не нужен.<br />
<br />
Скрипт состоит из 3 файлов. 2 конфиг. файла (nshaper.conf и ip_z1.lst) и самого скрипта (nshaper.sh). Первые 2 лежат в /etc/nshaper, второй в /etc/init.d/ соответственно (естественно надо дать права на запуск и закинуть в автозагрузку при желании).<br />
<br />
Конфиг достаточно простой. Основные параметры:<br />
<br />
WAN_IF — интерфейс интернет соединения (eth0, ppp0 и т.п)<br />
LAN_IF — интерфейс локальной сети<br />
<br />
Если провайдер использует так называемый Russian PPTP, то так же указываем<br />
pptp_ip — сервер подключения pptp<br />
PPTP_IF – название сетевого интерфейса, который смотрит в сеть провайдера (интерфейс, куда воткнут кабель провайдера)<br />
В противном случае их нужно закомментировать.<br />
<br />
WAN_DN_RATE — максимально возможная скорость. Не физическая! Например если есть локальные ресурсы, то та самая скорость в локальной сети (если она к примеру выше, чем скорость интернет тарифа). Если же локальных ресурсов нет, то выставляем максимальную скорость интернет соединения. (К примеру, у меня тариф 40мбит Интернет и пиринговые зоны со скоростью 100мбит. Мне надо выставить 100000. Значения в кбит)<br />
WAN_UP_RATE — тоже самое, но для исходящего канала.<br />
<br />
<br />
WAN_ZONES – название зон. Первая зона всегда остается inet. Вторая уже на Ваш вкус. Если таких зон нет, то оставляем только inet<br />
ZONE_PATH – каталог с файлами зон. (по умолчанию там же, где и сам конфиг, /etc/nshaper)<br />
<br />
WAN_ZONES_DN_RATE, WAN_ZONES_UP_RATE – скорость интернет соединения (входящая и исходящая). Значения в кбит. Первая цифра, это скорость интернет соединения. Вторая и последующая - для пиринговых зон. Если зон нет, то указываем только скорость тарифа. Например WAN_ZONES_UP_RATE="40000 100000" или WAN_ZONES_UP_RATE="40000" если нет локальных ресурсов. <br />
<br />
В этом же блоке настраиваются скорости для тарифов с ночным увеличением. По комментариям в конфиге думаю все понятно.<br />
<br />
RATES="10 10 20 40 15 5"<br />
INET_NAMES="200 201 202 203 204 205"<br />
Приоритеты. % от максимальной ширины канала и их названия. % в принципе редактировать нет необходимости. В данном случае для первого и второго приоритета резервируется 10% канала, для второго 20%, для третьего 40%, для четвертого 15% и для самого низкого 5%. Если в какой-то очереди трафика нет, то его ширина «отдается» остальным. Но если канал забит, то каждый получает свой минимум. То есть запусти вы хоть 100 закачек торрента, свои 40% ширины веб трафик получит. Если же торрентов нет, то веб возьмет все что свободно.<br />
Второй параметр это название приоритетов. Видны при просмотре статуса. Можно как угодно называть. Например Prio, Web, Torrent и т. д.<br />
<br />
Синтаксис правил в конфиге подробно описан. Если будут вопросы, отвечу в комментариях.<br />
<br />
Теперь требования для работы скрипта.<br />
Во первых (и самое главное) нужна поддержка IMQ. Для этого нужно патчить ядро. В принципе ничего сложного нет. Инструкция тут же в блоге. Она же включает и сборку nDpi (не обязательно).<br />
Во вторых модуль nDpi (если он нужен конечно)<br />
В третьих gawk, conntrack и ipcalc (для корректной работы скрипта).<br />
<br />
Запуск скрипта /etc/init.d/nshaper start либо start2 (если нужен полный вывод статистики, подробней читать в nshaper.conf). Просмотр статистики /etc/init.d/nshaper status.<br />
<br />
По CPU особых требований нет. У меня на шлюзе слабый AMD E-350 без проблем «переваривает» 40мбит/с интернет трафика + еще 50-60 пирингового.<br />
<br />
Скрипт возможно не идеален. Но работает. Если есть замечания — буду рад исправить.<br />
<br />
<div data-select-like-a-boss="1">
<a href="https://www.dropbox.com/s/pjbmxoi2c6jfbuo/nshaper%20%2B%20ndpi.tar?dl=1">Версия с nDpi </a>и <a href="https://www.dropbox.com/s/1s0twza7qj0hbjo/nshaper.tar?dl=1">без</a>. Работоспособность проверял на Centos 7 и Ubuntu 12.04/14.04. Без проблем должно работать и в Debian.<br />
<br />
UPD. Обновил. Теперь получение адресов и маски через ip, а не ifconfig.</div>
</div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com17tag:blogger.com,1999:blog-6188316406387260386.post-28466240884068428742015-06-26T06:40:00.000-07:002019-01-08T07:36:22.229-08:00Сборка accel-pptp под Ubuntu 14.04<div dir="ltr" style="text-align: left;" trbidi="on">
Многие наверное в курсе, что родной pptp клиент в Ubuntu создает высокую нагрузку, при большом трафике. Поэтому было решено ставить accel-pptp. Поехали.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;"> </code><code class="" style="color: black; word-wrap: normal;"><code class="" data-select-link-text="1" style="color: black; word-wrap: normal;">cd /usr/src </code>&& sudo apt-get install pptp-linux build-essential gawk cmake </code></pre>
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;"> </code><code class="" style="color: black; word-wrap: normal;">sudo apt source ppp</code></pre>
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;"> git clone https://github.com/winterheart/accel-pptp.git </code></pre>
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;"> sudo ln -s /usr/src/ppp-2.4.7/pppd /usr/src/accel-pptp/src/pppd && cd ./accel-pptp/</code></pre>
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;"> cmake -DPPP_PREFIX_DIR=/usr -DPPP_PLUGIN_PATH=/usr/src/accel-pptp/ppp-2.4.7/pppd</code></pre>
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;"> make</code></pre>
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;"> cp /usr/src/accel-pptp/pptp.so /usr/lib/pppd/2.4.7/</code></pre>
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" data-select-link-text="1" style="color: black; word-wrap: normal;"> modprobe pptp
echo pptp >> /etc/modules
</code></pre>
<br />
Остается только в файле настроек клиента убрать строку "<b>pty "pptp.....</b>" и добавить<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" data-select-link-text="1" style="color: black; word-wrap: normal;"> plugin pptp.so
pptp_server XXX.XXX.XXX.XXX
</code></pre>
где <b>XXX.XXX.XXX.XXX</b> адрес pptp сервера. Так же в файлах options и options.pptp комментируем все строки <b>lock</b><br />
</div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com6tag:blogger.com,1999:blog-6188316406387260386.post-60506624390120363772015-01-24T00:46:00.000-08:002015-06-03T05:33:46.263-07:00Centos, ndpi и imq. Обновлено 3.06.2015. <div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<h2>
Сборка ядра для Centos с патчами IMQ и nDPI. </h2>
<div dir="ltr" style="text-align: left;" trbidi="on">
Еще один мануал сборки ядра с Ndpi и imq. Теперь для Centos 7. Проверялся только под x64! Мануал максимально подробный, на уровне "копировать-вставить". <br />
<br />
Переходим в домашний каталог и создаем необходимые директории <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd ~/
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros </code></pre>
<br />
Устанавливаем необходимые пакеты <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> yum install rpm-build redhat-rpm-config asciidoc hmaccalc nano perl-ExtUtils-Embed pesign xmlto
yum groupinstall "Development Tools"
yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel zlib-devel
yum install newt-devel numactl-devel pciutils-devel python-devel zlib-devel
yum install ncurses-devel </code><code style="color: black; word-wrap: normal;"><code style="color: black; word-wrap: normal;">qt-devel bc libnetfilter_conntrack-devel libnfnetlink-devel libpcap-devel net-tools wget libselinux-devel</code>
</code></pre>
<br />
Получаем исходники последнего ядра (на момент написания это 3.10.0-123.20.1) и патч подправленный (с офф сайта патч выдавал режекты) IMQ.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code data-select-like-a-boss="1" style="color: black; word-wrap: normal;"> rpm -i http://vault.centos.org/7.0.1406/updates/Source/SPackages/kernel-3.10.0-123.20.1.el7.src.rpm
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel.spec
cd ~/rpmbuild/SOURCES/ && wget https://www.dropbox.com/s/jay95g9tqbnhu29/linux-3.10-imq.diff
</code></pre>
<br />
<div data-select-like-a-boss="1">
Переходим в каталог и копируем конфиг</div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd ~/rpmbuild/BUILD/kernel-*/linux-*/
/bin/cp configs/kernel-3.10.0-x86_64.config .config </code></pre>
<br />
Подправим spec файл<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd ~/rpmbuild/SPECS/
/bin/cp kernel.spec kernel.spec.back
sed -i -e '5 s/^/%define buildid .IMQ\n/;' kernel.spec
sed -i -e '/Patch999999/i\Patch999998: linux-3.10-imq.diff' kernel.spec
sed -i -e '/ApplyOptionalPatch linux-kernel-test.patch/i\ApplyOptionalPatch linux-3.10-imq.diff' kernel.spec
</code></pre>
<br />
Накладываем патч IMQ и включаем модуль<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> </code><code style="color: black; word-wrap: normal;"><code style="color: black; word-wrap: normal;">cd ~/rpmbuild/BUILD/kernel-*/linux-*/</code>
patch -p1 < ../../../SOURCES/linux-3.10-imq.diff
make menuconfig
</code></pre>
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">
<u><span style="font-family: "Courier New",Courier,monospace;">Device Drivers; Network Device Support; <br />
[M] IMQ (intermediate queueing device) support</span></u></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<u><span style="font-family: "Courier New",Courier,monospace;"><br />
</span></u></div>
<span style="font-family: "Courier New",Courier,monospace;"><u>Networking Supportt; Networking Options; Network Packet Filtering Framework (Netfilter); Core Netfilter Configuration → "IMQ" Target Support </u></span><br />
<br />
<div data-select-like-a-boss="1">
Подправим файл конфига</div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> sed -i -e '1 s/^/# x86_64\n/;' .config
</code></pre>
<br />
Копируем наши конфиги<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> /bin/cp ./.config ../../../SOURCES/kernel-3.10.0-x86_64.config
/bin/cp ./.config ../../../SOURCES/kernel-3.10.0-x86_64-debug.config
</code></pre>
<br />
Ну и сборка<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd ~/rpmbuild/SPECS/
rpmbuild -bb </code><code data-select-like-a-boss="1" style="color: black; word-wrap: normal;">--without kabichk --without debug --without debuginfo --target=`uname -m` kernel.spec
</code></pre>
<br />
После устанавливаем наше ядро. <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> rpm -ivh --force ../RPMS/x86_64/kernel-*.rpm
</code></pre>
Перезагружаемся и проверяем<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> reboot
modprobe xt_IMQ
lsmod | grep IMQ
</code></pre>
<br />
Если все нормально то увидим приблизительно следующее<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> xt_IMQ 12532 0
</code></pre>
<br />
Теперь iptables.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd ~/ && rpm -ivh http://vault.centos.org/7.0.1406/os/Source/SPackages/iptables-1.4.21-13.el7.src.rpm
cd ~/rpmbuild/SPECS
rpmbuild -bp iptables.spec
cd ~/rpmbuild/SOURCES/ && wget https://www.dropbox.com/s/x2pvnznhq3z4jnt/imq-iptables-1.4.13.diff
cd ~/rpmbuild/SPECS/
</code></pre>
<br />
Подправим iptables.spec<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code data-select-like-a-boss="1" style="color: black; word-wrap: normal;"> sed -i -e '/Patch1/a\Patch2: imq-iptables-1.4.13.diff' iptables.spec
sed -i -e '/%patch1 -p1/a\%patch2 -p1 -b imq-iptables-1.4.13' iptables.spec
</code></pre>
<div data-select-like-a-boss="1">
<br /></div>
Теперь можем собрать и установить<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> rpmbuild -bb iptables.spec
rpm -Uvh ../RPMS/x86_64/iptables-*.rpm
</code></pre>
<br />
Далее xtables<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd ~/
wget https://www.dropbox.com/s/l16zkc8gbubf9ae/xtables-addons-2.6.tar.xz
tar -xvf xtables-addons-2.6.tar.xz
cd xtables-addons-2.6
./configure
make
make install
</code></pre>
<br />
Следующий шаг nDpi. Использоваться будет версия nDpi без патча ядра. Недостатком этого является отсутствие возможности использовать xt_connlabel. Если кому-то будет интересно, выложу дополнение по сборке с патчем.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> cd ~/
wget http://devel.aanet.ru/ndpi/nDPI-1.5.1.20150513.tar.gz
tar -xvzf nDPI-1.5.1.20150513.tar.gz && cd ./nDPI-1.5.1.20150513/ && ./autogen.sh && cd ./ndpi-netfilter/
sed -i -e 's/net, __ndpi_free_flow, n)/net, __ndpi_free_flow, n, 0 ,0)/' src/main.c
make
make install
make modules_install
modprobe xt_ndpi
</code></pre>
<br />
Проверяем с помощью<b> lsmod | grep xt_ndpi</b>. Если все нормально то в выводе увидите <b>xt_ndpi</b></div>
Протоколы с которыми можно работать.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> iptables -m ndpi -h
</code></pre>
<br />
<span class="st">Как и в прошлый раз привожу <a href="http://www.linux.org.ru/forum/general/9685281">ссылку</a> на тему, с которой все началось. За патчи говорим спасибо </span><b><a draggable="false" href="http://www.linux.org.ru/people/vel/profile" itemprop="creator" rel="author">Vel.</a></b><br />
<br />
<b>Полноценное тестирование не проводил. Максимум что я проверил - поднятие интерфейсов IMQ, перенаправление трафика с интерфейсов на IMQ и 1-2 правила nDpi с маркировкой. Поэтому если что-то работает не так просьба отписаться. </b><br />
<br />
UPD. В новых патчах добавлен target Ndpi. Теперь можно упростить маркировки трафика или его классификацию. Например:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">iptables -t mangle -A POSTROUTING -m ndpi --http -j MARK --set-mark 3
iptables -t mangle -A POSTROUTING -m ndpi --http -j RETURN
</code></pre>
Теперь можно записать как:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> iptables --t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 3 --set-mark --ret
</code></pre>
А классификацию: <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j CLASSIFY --set-class 1:5
iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j RETURN
</code></pre>
Можно записать как:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> iptables -t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 0X10005 --set-clsf --ret
</code></pre>
<br />
UPD2. Обновлено. Цитата Vel<br />
<blockquote class="tr_bq">
<br />
<i>Большие изменения в BT: добавлен парсер сообщений (dht) и хеш для хранения ip:port получаемых парсером</i><br />
<i>По-умолчанию хеш отключен! Чтобы его включить нужно указать его размер 1-32 (параметр bt_hash_size). Число элементо хеша будет равно N*1024.</i><br />
<i>Кроме это можно указать время хранения данных в хеше 900-3600 секунд (параметр bt_hash_timeout)</i><br />
<i>Число хранимых элементов в хеше и другую информацию о хеше можно посмотреть в /proc/net/xt_ndpi/info</i><br />
<i>При тестировании на сети /24 с 300Мбитным трафиком число элементов было 0.8-1.2 миллиона элементов!</i><br />
<i>Каждый элемент - 24 байта!</i></blockquote>
Хэш включается командой modprobe xt_ndpi bt_hash_size= bt_hash_timeout= подставив нужные значения для bt_hash_size и bt_hash_timeout (Естественно если модуль уже был загружен до этого, то его надо выгрузить).<br />
<br />
P.S. Уважаемые копипастеры. Будьте добры указывать первоисточники. Хотя бы ссылку на тему https://www.linux.org.ru/forum/general/9685281</div>
<br /></div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com29tag:blogger.com,1999:blog-6188316406387260386.post-61678856376590107352015-01-08T23:01:00.000-08:002017-12-22T11:29:58.074-08:00Уведомление занятости абонента при включенном Call Waiting в Asterisk.<div dir="ltr" style="text-align: left;" trbidi="on">
Наверное многие знают о существовании опции Call Waiting в Asterisk. Функция конечно хорошая, но не без недостатка. Если абонент, кому звонят, понимает, что на второй линии другой абонент, на которого он в случае чего может переключиться, то звонящий же не узнает, разговаривает сейчас абонент на другом конце или просто не отвечает на звонок. И, казалось бы, хорошая опция этим недостатком может убить все плюсы. По крайней мере в нашем офисе сотрудники часто были недовольны друг другом, думая что на их звонки не отвечают.<br />
<br />
В конце концов мне это надоело и решил искать решение. Нашел его достаточно быстро. Оказалось что я не один, кому не очень понравилась работа это функции. Решение нашел <a href="http://www.asteriskforum.ru/viewtopic.php?t=11320">тут</a>.<br />
<br />
Если коротко, то в extensions_custom.conf надо добавить<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> [from-internal-custom]
include => macro-dialout-one-predial-hook
[macro-dialout-one-predial-hook]
exten => s,1,Noop(DEVICE STATE - ${DEVICE_STATE(${DSTRING})})
exten => s,n,ExecIf($["${DEVICE_STATE(${DSTRING})}" = "INUSE"]?Playback(abonent_zanyat))
exten => s,n,ExecIf($["${DEVICE_STATE(${DSTRING})}" = "INUSE"]?Set(D_OPTIONS=Ttm))
exten => s,n,ExecIf($["${DEVICE_STATE(${DSTRING})}" = "RINGINUSE"]?Playback(abonent_zanyat))
exten => s,n,ExecIf($["${DEVICE_STATE(${DSTRING})}" = "RINGINUSE"]?Set(D_OPTIONS=Ttm))
</code></pre>
где abonent_zanyat название проигрываемого файла. Кстати саму начитку заказывать у сторонних фирм не хотелось (уж больно много просят за пару слов), так что на помощь пришли онлайн синтезаторы речи. В частности <a draggable="false" href="http://www.oddcast.com/home/demos/tts/tts_example.php">этот</a>. Текст был следующий: "В настоящий момент абонент разговаривает. Вы можете дождаться ответа или перезвонить позже." Сохранить файл можно с помощью инструментов разработки браузера. При выборе голоса Milena получилось очень даже натурально. Был даже удивлен что не сразу и заметно, что это речь синтезатора (особенно если это услышать в трубке телефона).<br />
<br />
В итоге теперь если мы звоним абоненту, который уже разговаривает, то услышим нашу запись, после чего звонок попадет на удержание. Дальше уже либо дожидаемся ответа, либо кладем трубку.<br />
<br />
Сотрудники теперь довольны =)<br />
<br />
UPD. Если у вас версия freepbx не самая свежая (например freepbx 2.11) то в файле ..admin/modules/core/functions.inc.php находим строку<br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> $ext->add($mcontext,$exten,'godial', new ext_dial('${DSTRING}', '${ARG1},${D_OPTIONS}'));
</code></pre>
и меняем на <br />
<pre style="background: #f0f0f0; border: 1px dashed #cccccc; color: black; font-family: "arial"; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> $ext->add($mcontext,$exten,'godial', new ext_execif('$["${QAGENT}"=""]', 'Macro', 'CHECK_DEVICE_STATE,'));
$ext->add($mcontext,$exten,'', new ext_dial('${DSTRING}', '${ARG1},${D_OPTIONS}'));
</code></pre>
<br />
В extensions_custom.conf в свою очередь контекс именуем не macro-dialout-one-predial-hook, а macro-CHECK_DEVICE_STATE<br />
<br /></div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com21tag:blogger.com,1999:blog-6188316406387260386.post-33991401644339884022014-10-06T23:02:00.004-07:002022-10-08T04:06:21.376-07:00Ubuntu, imq, ndpi. Обновлено. 03.2021<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div dir="ltr" style="text-align: left;" trbidi="on">
<div>
<br /></div>
<div class="dragselectlinktext-textcursor" dir="ltr" style="text-align: left;" trbidi="on">
<h2>
Сборка ядра для Ubuntu с патчами IMQ и nDPI (UPD. Актуализировано под 18.04)<br /></h2>
Очередное обновление от <b><a draggable="false" href="http://www.linux.org.ru/people/vel/profile" itemprop="creator" rel="author">Vel</a></b> <br />
Проверенно на Ubuntu Server 18.04. (Для тех кто использует версию 16.04 придется скачивать/применять другие версии ядер/iptables/патчей. Думаю разберетесь)<br />
Приступим: <br />
<br />
1. Ставим необходимые пакеты.<br />
<pre data-select-like-a-boss="1" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"> cd /usr/src/ && sudo apt-get install bc libnetfilter-conntrack-dev libnftnl-dev libssl-dev flex libmnl-dev libncurses5-dev bison libnfnetlink-dev linuxdoc-tools kernel-package </code><code style="color: black; overflow-wrap: normal; word-wrap: normal;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"></code><code style="color: black; overflow-wrap: normal; word-wrap: normal;">dh-autoreconf dkms iptables-dev bzr libpcap-dev </code>git arptables ebtables libjansson4 libmxml1 libnftnl7
sudo apt-get build-dep iptables </code></pre>
<br />
2. Скачиваем ядро 5.4.0.<br />
<pre data-select-like-a-boss="1" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">sudo wget http://security.ubuntu.com/ubuntu/pool/main/l/linux/linux-source-5.4.0_5.4.0-128.144_all.deb
sudo dpkg -i ./</code><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">linux-source-</code></code><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">5.4.0_5.4.0-128.144_all.deb</code><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"></code>
sudo ln -s ./linux-source-</code><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">5.4.0</code><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"> ./linux
sudo tar -xjf ./linux-source-</code><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">5.4.0</code><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"></code></code></code>/linux-source-</code><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">5.4.0</code><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">.tar.bz2 && cd /usr/src/linux</code></pre>
</div>
3. Скачиваем подправленный IMQ патч<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">sudo wget https://raw.githubusercontent.com/imq/linuximq/master/kernel/v5.x/linux-5.4-imq.patch -O kernel.patch</code><code style="color: black; overflow-wrap: normal; word-wrap: normal;"></code></pre>
<code style="color: black; overflow-wrap: normal; word-wrap: normal;"> </code><br />
4. Накладываем патч IMQ<br />
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">sudo patch -p1 < ./kernel.patch</code><code style="color: black; overflow-wrap: normal; word-wrap: normal;">
</code></pre>
<br />
<span style="font-family: "georgia" , "times new roman" , serif;">5. Включаем imq. </span> <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; overflow-wrap: normal; word-wrap: normal;">sudo make menuconfig
</code></pre>
<br />
<div dir="ltr" style="text-align: left;" trbidi="on">
<u><span style="font-family: "courier new" , "courier" , monospace;">Device Drivers; Network Device Support; <br />
[M] IMQ (intermediate queueing device) support</span></u></div>
<div dir="ltr" style="text-align: left;" trbidi="on">
<u><span style="font-family: "courier new" , "courier" , monospace;"><br />
</span></u></div>
<span style="font-family: "courier new" , "courier" , monospace;"><u>Networking Supportt; Networking Options; Network Packet Filtering Framework (Netfilter); Core Netfilter Configuration → "IMQ" Target Support</u></span><br />
<pre lang="ru-RU"><span style="font-family: "courier new" , "courier" , monospace;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"> </code></span></pre>
<span style="font-family: "georgia" , "times new roman" , serif;"><span style="font-size: small;"> 6. Начинаем сборку. Вместо 7 ставим количество своих ядер процессора + 1. </span></span><br />
<pre class="" lang="ru-RU"><span lang="ru-RU"><span lang="zxx"><span lang="ru-RU"><pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; overflow-wrap: normal; word-wrap: normal;">sudo CONCURRENCY_LEVEL=7 fakeroot make-kpkg --initrd --append-to-version=-v-ndpi+imq kernel-image kernel-headers
</code></pre></span></span></span><br /></pre>
7. Устанавливаем.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"> sudo dpkg -i ../linux*.deb
</code></pre>
<br />
8. Перезагружаемся<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;"> sudo reboot
</code></pre>
<br />
9. Следующим делом iptables. Скачиваем, патчим, собираем и устанавливаем(проверено на iptables версий 1.6.0):<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">cd /usr/src
sudo apt-get source iptables
cd /usr/src/iptables-*/
sudo wget https://raw.githubusercontent.com/imq/linuximq/master/iptables/iptables-1.6.0-imq.diff
sudo patch -p1 < ./iptables-1.6.0-imq.diff
sudo dpkg-buildpackage -rfakeroot -uc -b
sudo dpkg -i ../iptables_*.deb ../libxtables*.deb
</code></pre>
<br />
10. Xtables-addons<br />
<pre data-select-like-a-boss="1" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">sudo apt install xtables-addons-dkms xtables-addons-source xtables-addons-common
</code></pre>
<br />
<br />
11. Теперь nDPI. Переходим в каталог и начинаем сборку<br />
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" data-select-like-a-boss="1" style="color: black; overflow-wrap: normal; word-wrap: normal;">cd /usr/src
sudo git clone -b netfilter https://github.com/vel21ripn/nDPI.git
cd ./nDPI && sudo ./autogen.sh
cd src/lib ; sudo make ndpi_network_list.c.inc
cd ../../ndpi-netfilter
sudo make
sudo make install
sudo make modules_install
sudo modprobe xt_ndpi
</code></pre>
<br />
12. И проверяем с помощью<b> lsmod | grep xt_ndpi</b>. Если все нормально то в выводе увидите <b>xt_ndpi</b><br />
<br />
13. Протоколы с которыми можно работать.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"> iptables -m ndpi -h
</code></pre>
<br />
Дальше их уже можно маркировать и скармливать <span class="st"> Linux Traffic Control. </span><br />
<span class="st">Как и в прошлый раз привожу <a href="http://www.linux.org.ru/forum/general/9685281">ссылку</a> на тему, с которой все началось. За патчи говорим спасибо </span><b><a draggable="false" href="http://www.linux.org.ru/people/vel/profile" itemprop="creator" rel="author">Vel.</a></b><br />
<br />
<br />
UPD. В новых патчах добавлен target Ndpi. Теперь можно упростить маркировки трафика или его классификацию. Например:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;">iptables -t mangle -A POSTROUTING -m ndpi --http -j MARK --set-mark 3
iptables -t mangle -A POSTROUTING -m ndpi --http -j RETURN
</code></pre>
Теперь можно записать как:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"> iptables --t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 3 --set-mark --ret
</code></pre>
А классификацию: <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"> iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j CLASSIFY --set-class 1:5
iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j RETURN
</code></pre>
Можно записать как:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: rgb(240, 240, 240); border: 1px dashed rgb(204, 204, 204); color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; overflow-wrap: normal; word-wrap: normal;"> iptables -t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 0X10005 --set-clsf --ret
</code></pre>
<br />
UPD2. Обновлено. Цитата Vel<br />
<blockquote class="tr_bq">
<br />
<i>Большие изменения в BT: добавлен парсер сообщений (dht) и хеш для хранения ip:port получаемых парсером</i><br />
<i>По-умолчанию хеш отключен! Чтобы его включить нужно указать его размер 1-32 (параметр bt_hash_size). Число элементо хеша будет равно N*1024.</i><br />
<i>Кроме это можно указать время хранения данных в хеше 900-3600 секунд (параметр bt_hash_timeout)</i><br />
<i>Число хранимых элементов в хеше и другую информацию о хеше можно посмотреть в /proc/net/xt_ndpi/info</i><br />
<i>При тестировании на сети /24 с 300Мбитным трафиком число элементов было 0.8-1.2 миллиона элементов!</i><br />
<i>Каждый элемент - 24 байта!</i></blockquote>
Хэш включается командой modprobe xt_ndpi bt_hash_size= bt_hash_timeout= подставив нужные значения для bt_hash_size и bt_hash_timeout (Естественно если модуль уже был загружен до этого, то его надо выгрузить).<br />
<br />
<div data-select-like-a-boss="1">
<code style="color: black; overflow-wrap: normal; word-wrap: normal;"> </code>UPD3. 13.01.2015. Патчить ядро для nDpi больше не нужно. Только Imq. но нельзя при этом использовать connlabel. Если нужен connlabel, то нужно патчить ядро патчем из архива nDpi.</div>
<br />
P.S. Уважаемые копипастеры. Будьте добры указывать первоисточники. Хотя бы ссылку на тему https://www.linux.org.ru/forum/general/9685281</div>
</div>
</div>
</div>
</div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com20tag:blogger.com,1999:blog-6188316406387260386.post-25150252299536752972014-07-29T05:52:00.000-07:002015-03-25T11:11:31.641-07:00Мониторинг HASP ключей 1с в Zabbix<div dir="ltr" style="text-align: left;" trbidi="on">
Появилась недавно необходимость мониторинга ключей 1с через Zabbix, так как в один момент упустили тот факт, что клиентов 1с было больше, чем количество имеющихся лицензий. Поэтому, чтоб избежать повторения подобного, решили прикрутить мониторинг Zabbix и настройки триггеров. <br />
<br />
Велосипед изобретать не хотел. Поэтому первым делом начал искать готовые решения. Решения, которые удовлетворяли бы меня, я не нашел. Но наткнулся на интересную <a href="https://www.zabbix.com/forum/showpost.php?p=96243&postcount=4">тему</a> на форуме Zabbix. Правда то решение мне не особо нравилось. Потому что практически на все у меня настроены LLD. Руками каждый раз вбивать элементы данные в какой-то момент мне надоело, и я настроил на все что мог LLD. Поэтому и для HASP я решил пойти этим путем.<br />
<br />
Делать все будем на Windows сервере. В вышеприведенной ссылке один из участников форума написал небольшую программу, которая обращается к библиотеке <i>hsmon.dll </i>из<i> </i>состава Aladdin Monitor. Ее и будем использовать. Так же нам понадобиться утилиты sed и grep. Чтоб не заниматься поиском, в конце будет ссылка на архив.<br />
<br />
Итак. Предположим что zabbix-agent у нас в папке C:\zabbix. Создаем в этой папке еще одну папку и называем ее hasp. Содержимое архива кидаем туда. В конфиг zabbix добавляем строки<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;">UserParameter=hasp_id,powershell -File "C:\zabbix\hasp\hasp.ps1" get_id
UserParameter=hasp_used[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_load $1
UserParameter=hasp_max[*],powershell -File "C:\zabbix\hasp\hasp.ps1" get_max $1
</code></pre>
<br />
Скрипт занимается 2 вещами. Для начала он выводит в формате JSON ID ключей Hasp. Это необходимо для работы LLD. Если скрипту в качестве переменной передать ему get_load ID, то он выдаcт количество активных подключений. Если передать get_max ID, то выдаст еще и максимально возможное количество. <br />
<br />
В самом Zabbix создаем шаблон. Называем как угодно, например <b>Template Hasp</b>. Переходим в Правила Обнаружения. Создаем новое. Пусть называется оно <b>Hasp discovery</b>. В графе ключ вписываем <b>hasp_id</b>, интервал 3600. Сохраняем. Дальше в прототипы данных. Создаем прототип. Назовем <b>Hasp keys used for id {#ID}</b>, ключ <b>hasp_used[{#ID}]</b>, Интервал обновления можно 60 сек. И еще один такой же элемент, но с именем <b>Hasp keys max for id {#ID}</b>, а в строке ключ <b>hasp_max[{#ID}]. </b>Первый покажет сколько занято. Второй максимальное количество. На основе этих элементов создаем график с таким же именем. В качестве прототипа выбираем наши созданные элементы данных. Так же можно создать триггер, который будет сравнивать текущее количество с максимальным. Как создавать такой триггер описывать не стану. Ничего сложного в этом нет.<br />
<br />
Вот и все. Все необходимое есть в <a draggable="false" href="https://yadi.sk/d/DDKO9ubyb4s3d">этом</a> архиве. Возможно скрипт написан не совсем элегантно. Делал на скорую руку.<br />
<br />
UPD. Перевел на Powershell. <code style="color: black; word-wrap: normal;"> </code>Архив обновил.<br />
<br />
Не забываем разрешить выполнение скриптов Powershell. </div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com29tag:blogger.com,1999:blog-6188316406387260386.post-15940943746565943652013-12-30T05:25:00.002-08:002017-08-13T02:49:59.369-07:00Бэкап системы в "облако". <div dir="ltr" style="text-align: left;" trbidi="on">
<div lang="ru-RU" style="margin-bottom: 0cm;">
Небольшой пост
о скрипте, который создает бекап системы и скидывает
в яндекс диск. Да, знаю, что подобных мануалов куча. Но мне не хочется потом искать в интернете мануал. А тут свой, под рукой всегда =). </div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
Для начала
устанавливаем сам яндекс диск. Ничего
сложного. Все подробно описано по ссылке
<a href="http://help.yandex.ru/disk/cli-clients.xml">http://help.yandex.ru/disk/cli-clients.xml</a></div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
Теперь скрипт.
</div>
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> #!/bin/sh
back=backup-`date '+%d-%B-%Y'`
yadisk=/media/yandex.disk/backup
cd /tmp
tar -cvpf ./fullbackup.tar --exclude=/proc --exclude=/dev --exclude=/media --exclude=/mnt --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/tmp --exclude=/usr/src --exclude=/var/spool/squidcache /
cd $yadisk
7z a $back.7z -mx3 /tmp/fullbackup.tar -v200M
for i in `find * | grep -v "$back"`; do rm $i; done
rm -f /tmp/fullbackup.tar
</code></pre>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<br />
<div lang="ru-RU" style="margin-bottom: 0cm;">
Где:</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<b>/media/yandex.disk/backup</b> — каталог примонтированого яндекс диска.</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<b>backup-`date
'+%d-%B-%Y'`</b> — шаблон имени нашего бэкапа.<br />
<br />
<b>--exclude</b> — каталоги,
которые исключаем из архивирования.
</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<b>-mx3</b> — степень
сжатия. Можно поставить <span lang="en-US">mx7,
</span>уровень сжатия высокий, но и выполняться
будет дольше. Мне достаточно и 3 уровня.
</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<b>-v200M</b> — разделяем
на архивы по <span lang="en-US">200Mb </span>(мне так
удобней)</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
<div style="margin-bottom: 0cm;">
</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<b>for i in `find * | grep
-v "$<span lang="en-US">back</span>"`; do echo $<span lang="en-US">i</span>;
done</b> — удаляет предыдущий
бэкап (чтоб не занимало место, на яндекс
диск не так много и места, а каждый бэкап
у меня занимает по 3 <span lang="en-US">Gb =) ). </span>Кому
не нужно просто удаляем строку.<br />
<br />
Не забывает делать его исполняемым. </div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
Сперва бэкапим
все <span lang="en-US">tar'</span>ом (чтоб сохранились
права доступа файлов), а потом сжимаем
и делим все <span lang="en-US">7z.</span> Все это закинул
в крон, чтоб в раз в неделю запускался.
</div>
<div lang="ru-RU" style="margin-bottom: 0cm;">
<br /></div>
</div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com2tag:blogger.com,1999:blog-6188316406387260386.post-43748139550103979252013-08-31T05:59:00.003-07:002018-04-14T14:40:01.013-07:00Парсер списка запрещеных сайтов Роскомнадзора. Update от 15.04.2018. Теперь это все на ipset<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
Надоела уже порядком эта заглушка =).<br />
<br />
Последовательность действий такая:<br />
1. Настраиваем OpenVpn подключение к какому нибудь буржуйскуму серверу.<br />
2. Получаем список заблокированных ресурсов.<br />
3. Парсим его, извлекая нужные нам IP.<br />
<div class="">
4. ipset+iptables+iproute2.</div>
<br />
Первый пункт описывать тут не стану. С этим нет проблем. Остальное решается с помощью вот такого скрипта<br />
<pre class="" style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code class="" style="color: black; word-wrap: normal;">#!/bin/bash
file=/etc/openvpn/rkz.list
tmp=/tmp/black_ip.tmp
gw=tun3
IPSET_TB=rkz
MARK_ID_DEC=4
MARK_ID_HEX=`printf 0x'%x\n' $MARK_ID_DEC`
if [ -n "`ip rule | grep "lookup $MARK_ID_DEC"`" ]; then
ip rule del from all fwmark $MARK_ID_HEX lookup $MARK_ID_DEC
fi
if [ -n "`ip route show table $MARK_ID_DEC`" ]; then
ip route del default dev $gw table $MARK_ID_DEC
fi
while [ -n "`iptables-save -t mangle | grep $MARK_ID_HEX | grep PREROUTING `" ]; do iptables -t mangle -D PREROUTING -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX; done
while [ -n "`iptables-save -t mangle | grep $MARK_ID_HEX | grep OUTPUT`" ]; do iptables -t mangle -D OUTPUT -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX; done
if [ -n "`ipset -L rkz 2> /dev/null`" ]; then ipset -X rkz; fi
wget -q https://www.assembla.com/code/z-i/git/nodes/master/dump.csv?_format=raw -O $tmp
grep -oE '\b[0-9]{1,3}(\.[0-9]{1,3}){3}\b' $tmp |sort -u > $file
ipset -N rkz iphash hashsize 999999 maxelem 999999
while read line
do
ipset -A rkz $line
done < $file
iptables -t mangle -A PREROUTING -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX
iptables -t mangle -A OUTPUT -m set --match-set rkz dst -j MARK --set-xmark $MARK_ID_HEX
ip rule add from all fwmark $MARK_ID_HEX lookup $MARK_ID_DEC
ip route add default dev $gw table $MARK_ID_DEC
</code></pre>
<div class="">
Итак. Список получаем с https://www.assembla.com/code/z-i/git/nodes/master/dump.csv?_format=raw. Парсим его, вытаскивая IP. И прописываем маршруты. </div>
<div class="">
<br /></div>
<div class="">
Не забывает правильно настроить SNAT в POSTROUTING. </div>
<div class="">
</div>
Список достаточно быстро обновляется. Можно кинуть скрипт в крон.<br />
<br />
UPD. В конфиг OpenVpn добавим <br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizzKq7PQpoJ9nhOaL2-__Ytf8VvMvV7KBn9eInFs0h7zP6-T5pnAok_C4crszerS92_mhwnu8gr__f62_xiU5ncKA-pnqFHHyv0Axft4fERYsot93pj5dHI_vztOw_taKo1G1WMbVDoM1u/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> script-security 2
up /путь/к_скрипту
</code></pre>
<br />
и предыдущий скрипт будет запускаться сам, как только появится подключение к OpenVpn. <br />
<br /></div>
a7lanovhttp://www.blogger.com/profile/07097878849472255194noreply@blogger.com2