Сборка ядра для Centos с патчами IMQ и nDPI.
Еще один мануал сборки ядра с Ndpi и imq. Теперь для Centos 7. Проверялся только под x64! Мануал максимально подробный, на уровне "копировать-вставить".
Переходим в домашний каталог и создаем необходимые директории
Устанавливаем необходимые пакеты
Получаем исходники последнего ядра (на момент написания это 3.10.0-123.20.1) и патч подправленный (с офф сайта патч выдавал режекты) IMQ.
Подправим spec файл
Накладываем патч IMQ и включаем модуль
Networking Supportt; Networking Options; Network Packet Filtering Framework (Netfilter); Core Netfilter Configuration → "IMQ" Target Support
Копируем наши конфиги
Ну и сборка
После устанавливаем наше ядро.
Если все нормально то увидим приблизительно следующее
Теперь iptables.
Подправим iptables.spec
Теперь можем собрать и установить
Далее xtables
Следующий шаг nDpi. Использоваться будет версия nDpi без патча ядра. Недостатком этого является отсутствие возможности использовать xt_connlabel. Если кому-то будет интересно, выложу дополнение по сборке с патчем.
Проверяем с помощью lsmod | grep xt_ndpi. Если все нормально то в выводе увидите xt_ndpi
Протоколы с которыми можно работать.Переходим в домашний каталог и создаем необходимые директории
cd ~/
mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
Устанавливаем необходимые пакеты
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
qt-devel bc libnetfilter_conntrack-devel libnfnetlink-devel libpcap-devel net-tools wget libselinux-devel
Получаем исходники последнего ядра (на момент написания это 3.10.0-123.20.1) и патч подправленный (с офф сайта патч выдавал режекты) IMQ.
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
Переходим в каталог и копируем конфиг
cd ~/rpmbuild/BUILD/kernel-*/linux-*/
/bin/cp configs/kernel-3.10.0-x86_64.config .config
Подправим spec файл
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
Накладываем патч IMQ и включаем модуль
cd ~/rpmbuild/BUILD/kernel-*/linux-*/
patch -p1 < ../../../SOURCES/linux-3.10-imq.diff make menuconfig
Device Drivers; Network Device Support;
[M] IMQ (intermediate queueing device) support
[M] IMQ (intermediate queueing device) support
Подправим файл конфига
sed -i -e '1 s/^/# x86_64\n/;' .config
Копируем наши конфиги
/bin/cp ./.config ../../../SOURCES/kernel-3.10.0-x86_64.config
/bin/cp ./.config ../../../SOURCES/kernel-3.10.0-x86_64-debug.config
Ну и сборка
cd ~/rpmbuild/SPECS/ rpmbuild -bb
--without kabichk --without debug --without debuginfo --target=`uname -m` kernel.spec
После устанавливаем наше ядро.
rpm -ivh --force ../RPMS/x86_64/kernel-*.rpm
Перезагружаемся и проверяем reboot
modprobe xt_IMQ
lsmod | grep IMQ
Если все нормально то увидим приблизительно следующее
xt_IMQ 12532 0
Теперь iptables.
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/
Подправим iptables.spec
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
rpmbuild -bb iptables.spec
rpm -Uvh ../RPMS/x86_64/iptables-*.rpm
Далее xtables
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
Следующий шаг nDpi. Использоваться будет версия nDpi без патча ядра. Недостатком этого является отсутствие возможности использовать xt_connlabel. Если кому-то будет интересно, выложу дополнение по сборке с патчем.
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
Проверяем с помощью lsmod | grep xt_ndpi. Если все нормально то в выводе увидите xt_ndpi
iptables -m ndpi -h
Как и в прошлый раз привожу ссылку на тему, с которой все началось. За патчи говорим спасибо Vel.
Полноценное тестирование не проводил. Максимум что я проверил - поднятие интерфейсов IMQ, перенаправление трафика с интерфейсов на IMQ и 1-2 правила nDpi с маркировкой. Поэтому если что-то работает не так просьба отписаться.
UPD. В новых патчах добавлен target Ndpi. Теперь можно упростить маркировки трафика или его классификацию. Например:
iptables -t mangle -A POSTROUTING -m ndpi --http -j MARK --set-mark 3
iptables -t mangle -A POSTROUTING -m ndpi --http -j RETURN
Теперь можно записать как: iptables --t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 3 --set-mark --ret
А классификацию: iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j CLASSIFY --set-class 1:5
iptables -t mangle -A POSTROUTING -m ndpi --bittorrent -j RETURN
Можно записать как: iptables -t mangle -A POSTROUTING -m ndpi --proto bittorrent -j NDPI --value 0X10005 --set-clsf --ret
UPD2. Обновлено. Цитата Vel
Хэш включается командой modprobe xt_ndpi bt_hash_size= bt_hash_timeout= подставив нужные значения для bt_hash_size и bt_hash_timeout (Естественно если модуль уже был загружен до этого, то его надо выгрузить).
Большие изменения в BT: добавлен парсер сообщений (dht) и хеш для хранения ip:port получаемых парсером
По-умолчанию хеш отключен! Чтобы его включить нужно указать его размер 1-32 (параметр bt_hash_size). Число элементо хеша будет равно N*1024.
Кроме это можно указать время хранения данных в хеше 900-3600 секунд (параметр bt_hash_timeout)
Число хранимых элементов в хеше и другую информацию о хеше можно посмотреть в /proc/net/xt_ndpi/info
При тестировании на сети /24 с 300Мбитным трафиком число элементов было 0.8-1.2 миллиона элементов!
Каждый элемент - 24 байта!
P.S. Уважаемые копипастеры. Будьте добры указывать первоисточники. Хотя бы ссылку на тему https://www.linux.org.ru/forum/general/9685281
Hello great tutorial, but I have one problem when I try to build rpm it give the following error:
ОтветитьУдалитьMakefile:506: /home/manage/rpmbuild/BUILD/kernel-3.10.0-123.20.1.el7/linux-3.10.0-123.20.1.el7.nDPI.x86_64/arch//Makefile: No such file or directory
make: *** No rule to make target `/home/manage/rpmbuild/BUILD/kernel-3.10.0-123.20.1.el7/linux-3.10.0-123.20.1.el7.nDPI.x86_64/arch//Makefile'. Stop.
+ true
+ '[' -s .newoptions ']'
+ rm -f .newoptions
+ make ARCH= oldnoconfig
Makefile:506: /home/manage/rpmbuild/BUILD/kernel-3.10.0-123.20.1.el7/linux-3.10.0-123.20.1.el7.nDPI.x86_64/arch//Makefile: No such file or directory
make: *** No rule to make target `/home/manage/rpmbuild/BUILD/kernel-3.10.0-123.20.1.el7/linux-3.10.0-123.20.1.el7.nDPI.x86_64/arch//Makefile'. Stop.
error: Bad exit status from /var/tmp/rpm-tmp.28Elcy (%prep)
It will be highly appreciated if the you clarify the above error message as there is no help available elswhere.
Regards,
Zia
Hello. Thank you! Today I will update instructions. There is an update patch IMQ and ndpi, as well as double-check assembly in Virtualboks.
УдалитьSorry for my English.
I have updated the tutorial. Try again. I build on Сentos 7 without errors
УдалитьHello and Thanks for taking time and fixing the problems. I am going to try it in a moment and give you feedback afterwards.
Удалитьregards,
Zia
Great. I have compiled and Installed successfully both kernel and iptables following your tutorial.
УдалитьOnce again l would like to thank your efforts. I have been searching for nDPI tutorial since long. You are lifesaver.
regards,
Zia
My pleasure.
УдалитьI also was looking for. Nothing was found, and he decided to make a tutorial.
You can watch for updates Ndpi modules in my blog or topic http://www.linux.org.ru/forum/general/9685281
Thanks once again, I have one other question, it is possible to compile nDPI on Centos 6.5, If possible and you have time, kindly do tutorial on how to compile nDPI on Centos 6.5. I have an old server which is running on Centos 6.5.
ОтветитьУдалитьregards,
Zia
I can not promise, but I'll try
Удалитьне собирается на 7.1
ОтветитьУдалить[root@localhost linux-3.10.0-229.11.1.el7.centos.x86_64]# cd ~/rpmbuild/SPECS/
[root@localhost SPECS]# rpmbuild -bb --without kabichk --without debug --without debuginfo --target=`uname -m` kernel.spec
Building target platforms: x86_64
Building for target x86_64
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.fjbAUG
+ umask 022
+ cd /root/rpmbuild/BUILD
+ patch_command='patch -p1 -F1 -s'
+ cd /root/rpmbuild/BUILD
+ rm -rf kernel-3.10.0-229.11.1.el7
+ /usr/bin/mkdir -p kernel-3.10.0-229.11.1.el7
+ cd kernel-3.10.0-229.11.1.el7
+ /usr/bin/xz -dc /root/rpmbuild/SOURCES/linux-3.10.0-229.11.1.el7.tar.xz
+ /usr/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ mv linux-3.10.0-229.11.1.el7 linux-3.10.0-229.11.1.el7.centos.IMQ.x86_64
+ cd linux-3.10.0-229.11.1.el7.centos.IMQ.x86_64
+ cp /root/rpmbuild/SOURCES/kernel-3.10.0-ppc64-debug.config /root/rpmbuild/SOURCES/kernel-3.10.0-ppc64.config /root/rpmbuild/SOURCES/kernel-3.10.0-ppc64le-debug.config /root/rpmbuild/SOURCES/kernel-3.10.0-ppc64le.config /root/rpmbuild/SOURCES/kernel-3.10.0-s390x-debug.config /root/rpmbuild/SOURCES/kernel-3.10.0-s390x-kdump.config /root/rpmbuild/SOURCES/kernel-3.10.0-s390x.config /root/rpmbuild/SOURCES/kernel-3.10.0-x86_64-debug.config /root/rpmbuild/SOURCES/kernel-3.10.0-x86_64.config .
+ ApplyOptionalPatch linux-3.10-imq.diff
+ local patch=linux-3.10-imq.diff
+ shift
+ '[' '!' -f /root/rpmbuild/SOURCES/linux-3.10-imq.diff ']'
++ wc -l /root/rpmbuild/SOURCES/linux-3.10-imq.diff
++ awk '{print $1}'
+ local C=1753
+ '[' 1753 -gt 9 ']'
+ ApplyPatch linux-3.10-imq.diff
+ local patch=linux-3.10-imq.diff
+ shift
+ '[' '!' -f /root/rpmbuild/SOURCES/linux-3.10-imq.diff ']'
Patch999998: linux-3.10-imq.diff
+ case "$patch" in
+ patch -p1 -F1 -s
2 out of 6 hunks FAILED -- saving rejects to file include/linux/skbuff.h.rej
1 out of 1 hunk FAILED -- saving rejects to file include/net/netfilter/nf_queue.h.rej
error: Bad exit status from /var/tmp/rpm-tmp.fjbAUG (%prep)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.fjbAUG (%prep)
[root@localhost SPECS]#
что делать?
Ядро другое. Патч imq надо подправлять под это ядро. Либо собирать на старом ядре. Патч может в течении пары дней подправлю. К сожалению сейчас сменил место работы, и нет под рукой физической машины с Centos, как будет время подправлю патч.
Удалитьсобрал со старым ядром - трафик детектится.
ОтветитьУдалитьНо интересно классифицировать и посмотреть какую полосу "жрёт" например торрент трафик? И соответственно прижать.
Могли бы вы не большой пример (простой) написать? С использованием IMQ и TC
Вечером постараюсь скинуть скрипт динамического шейпера. там же можно и статистику смотреть.
УдалитьГотово. http://a7lanov.blogspot.ru/2015/08/blog-post.html
УдалитьЧерез этот скрипт можно просматривать статистику. Думаю разберетесь.
и xt_IMQ чем отличается от imq ? без последнего интерфейсы imq не подымаются
ОтветитьУдалитьНу судя по тому где они лежат первое часть netfilter второе драйвер самого устройства. Естественно без второго интерфейсы не поднимутся.
Удалитьможете патч подправить для нового ядра?
ОтветитьУдалитьбыло несколько попыток подправить патч. С наложением проблем не было. Но вот сборка не проходила. Надо глубоко патч править. К сожалению в данный момент на это времени совсем нет да и знаний в программировании недостаточно.
УдалитьЕсли кого интересует могу дополнить ман сборкой на последнем 3.18.22 ядре на спеках от elrepo уже с поддержкой как imq так и ndpi. Последнее 3.10 ядро от рхела серьезно подлатали патчами ни одни ханк не проходит. Врядли кто то будет морочится и писать патч только под него.
ОтветитьУдалитьИнтересует - ждем. Пилите. Спасибо :)
Удалитьтак и не дождались печально.
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьПо поводу ядра kernel-3.10.0-327.13.1 очень много залатали если использовать linux-3.10-imq.diff то ядро не собирается.
ОтветитьУдалитьВся та же инструкция подправленная под актуальные версии.
Сборка ядра 4.4.6 на SPEC от ELRepo.
#Download
cd ~/rpmbuild/SOURCES
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.4.6.tar.xz
cd ~/rpmbuild/SPECS
rpm -i http://ftp.colocall.net/pub/elrepo/kernel/el7/SRPMS/kernel-lt-4.4.6-1.el7.elrepo.nosrc.rpm
#правка SPEC
cd ~/rpmbuild/SPECS/
/bin/cp kernel-lt-4.4.spec kernel-lt-4.4-IMQ.spec
sed -i -e '8 s/^/%define buildid .IMQ\n/;' kernel-lt-4.4-IMQ.spec
sed -i -e '303 s/^/%{__patch} -p1 -F1 -d "$RPM_BUILD_DIR\/%{name}-%{LKAver}\/linux-%{version}-%{release}.%{_target_cpu}" < "$RPM_SOURCE_DIR\/linux-4.4-imq-test.diff"\n/;' kernel-lt-4.4-IMQ.spec
#Патч ядра
yum install libunwind-devel openssl-devel xz-devel
cd ~/rpmbuild/SPECS
rpmbuild -bp --target=$(uname -m) kernel-lt-4.4.spec
cd ~/rpmbuild/SOURCES
wget https://www.dropbox.com/s/fdbrz93780gwpih/linux-4.4-imq-test.diff
cd ~/rpmbuild/BUILD/kernel-*/linux-*/
patch -p1 < ../../../SOURCES/linux-4.4-imq-test.diff
#Настройка ядра
cd ~/rpmbuild/BUILD/kernel-*/linux-*/
make menuconfig
Device Drivers; Network Device Support;
[M] IMQ (intermediate queueing device) support
Networking Supportt; Networking Options; Network Packet Filtering Framework (Netfilter); Core Netfilter Configuration > "IMQ" Target Support
#Копирование конфига
cd ~/rpmbuild/BUILD/kernel-*/linux-*/
/bin/cp ./.config ../../../SOURCES/config-4.4.6-x86_64
#сборка ядра
cd ~/rpmbuild/SPECS/
rpmbuild -bb --without kabichk --without debug --without debuginfo --target=`uname -m` kernel-lt-4.4-IMQ.spec
#Установка ядра
rpm -ivh --force ../RPMS/x86_64/kernel-lt-4.4.6-1.IMQ.el7.centos.x86_64.rpm
rpm -ivh --force ../RPMS/x86_64/kernel-lt-devel-4.4.6-1.IMQ.el7.centos.x86_64.rpm
#Iptables
cd ~/ && rpm -ivh http://vault.centos.org/7.2.1511/os/Source/SPackages/iptables-1.4.21-16.el7.src.rpm
cd ~/rpmbuild/SOURCES/ && wget https://raw.githubusercontent.com/imq/linuximq/master/latest/imq-iptables-1.4.13.diff
cd ~/rpmbuild/SPECS/
rpmbuild -bp iptables.spec
#Подправим iptables.spec
sed -i -e '/Patch4/a\Patch5: imq-iptables-1.4.13.diff' iptables.spec
sed -i -e '/%patch4 -p1/a\%patch5 -p1 -b imq-iptables-1.4.13' iptables.spec
#Сборка пакета и установка
rpmbuild -bb iptables.spec
rpm -Uvh ../RPMS/x86_64/iptables-*.rpm
#xtables
cd ~/
git clone http://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons
cd xtables-addons/
./autogen.sh
./configure
make
make install
#nDpi
cd ~/
git clone -b netfilter https://github.com/vel21ripn/nDPI.git
./autogen.sh
cd ndpi-netfilter
make
make install
make modules_install
Патч для kernel-lt-4.4.33-1.el7.elrepo.nosrc.rpm подойдет? т.к. 4.4.6 уже нет.
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьС патчем от Vel собралось на 4.4.33 http://devel.aanet.ru/ndpi/linux-imq-4.4.diff.xz
ОтветитьУдалитьДобрый день. Где-то можно найти инструкцию по установке на debian 7?
ОтветитьУдалитьГляньте версию для Ubuntu. Там смысл будет тем же. Надо лишь взять соответствующие версии imq и ndpi для вашей версии ядра в дистре. Я поэтому давно не обновлял посты. Там разве что ссылки на патчи изменять в зависимости от версии ядра. Но если человек решил собрать ядро самостоятельно, то думаю с поиском нужного патча у него проблем не будет) и ndpi-netfilter и imq есть на гитхабе.
УдалитьЭтот комментарий был удален автором.
УдалитьНичего не пропало)
Удалитьhttps://a7lanov.blogspot.com/2014/10/ubuntu-imq-ndpi-13092016.html
Она была на другой странице.