Как я extfilter запускал

Собственно процесс установки extfilter довольно прост.
Дано:
ПК (как оказалось есть нюансы):
CPU AMD Ryzen 7
16gb RAM
LAN Intel i350-t2
Требования у меня оказались минимальны, трафика у нас не много, в итоге главное:

  • сетевая на intel с очередями > 3 (на i350 говорят очень не плохо работает) с минимум 2 портами (на вход и для отправки)
  • любая сетевая для менеджмента (у меня встроенная в мать)
  • CPU с поддержкой SSE

Поток в 300мбит

Все это дело собиралось на CentOS 7
Linux filter 3.10.0-862.14.4.el7.x86_64 #1 SMP Wed Sep 26 15:12:11 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


Итак, установка:
обновим систему до актуальной
yum update
yum upgrade

необходимые компоненты
yum install epel-release
yum install python-pyelftools
yum install git mc htop wget gcc make automake kernel-devel zip unzip
yum install net-tools (ifconfiga иначе нет)
yum groupinstall ‘Development Tools’
yum install libpcap-devel

я все сложил в /usr/src/

cd /usr/src/
git clone https://github.com/max197616/extfilter.git
wget http://fast.dpdk.org/rel/dpdk-17.05.1.tar.xz
wget https://pocoproject.org/releases/poco-1.9.0/poco-1.9.0-all.tar.gz

Распаковываем и устанавливаем POCO
tar xf poco-1.9.0-all.tar.gz
cd /poco-1.9.0
./configure
make
make install
cd ../

распаковываем DPDK
tar xf dpdk-17.05.1.tar.xz
cd /dpdk-stable-17.05.1

make config T=x86_64-native-linuxapp-gcc

sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config

make

make install

mkdir -p /mnt/huge

mount -t hugetlbfs nodev /mnt/huge

cp /usr/src/dpdk-stable-17.05.1/build/kmod/igb_uio.ko /lib/modules/`uname -r`/kernel/net

depmod -a

cd ../

Собираем сам extfilter

cd /extfilter
./autogen.sh

./configure --with-dpdk_target=build --with-dpdk_home=/usr/src/dpdk-stable-17.05.1 --enable-native-code

make
make install

Теперь нам надо настроить загрузку ядра
Если у Вас не UEFI, то это можно сделать так:

Создаем в каталоге /usr/lib/tuned папку dpdk-tune
Создаем в dpdk-tune файл tuned.conf:

[main]
include=latency-performance

[bootloader]
cmdline=isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=4
применяем настройки

tuned-adm profile dpdk-tune

Перезагружаем.

Если у Вас UEFI и в момент прочтения вышеизложенный вариант еще не исправили, а проверить с какими параметрами грузится ядро можно так
cat /proc/cmdline

Идем таким путем:
в /etc/default/grub
в строке GRUB_CMDLINE_LINUX после всего дописываем
isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=8

делаем
grub2-mkconfig -o /etc/grub2-efi.cfg
и перезагружаемся.

Проверяем что все как положено:
[root@filter ~]# cat /proc/cmdline
BOOT_IMAGE=/vmlinuz-3.10.0-862.14.4.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet iommu=amd iommu=soft isolcpus=1,2,3 default_hugepagesz=1G hugepagesz=1G hugepages=8
[root@filter ~]# grep Huge /proc/meminfo
AnonHugePages: 6144 kB
HugePages_Total: 8
HugePages_Free: 8
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 1048576 kB

Теперь запускаем
Смотрим сетевые командой
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —status

нас интересует этот раздел:
Network devices using kernel driver
===================================
0000:21:00.0 ‘RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller 8168’ if=enp33s0 drv=r8169 unused= *Active*
0000:22:00.0 ‘I350 Gigabit Network Connection 1521’ if=enp34s0f0 drv=igb unused=
0000:22:00.1 ‘I350 Gigabit Network Connection 1521’ if=enp34s0f1 drv=igb unused=

загружаем нужные
modprobe uio
modprobe igb_uio

добавляем в дпдк сетевые
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —bind=igb_uio 0000:22:00.1
/usr/src/dpdk-stable-17.05.1/usertools/dpdk-devbind.py —bind=igb_uio 0000:22:00.0

Запускаем фильтр

/usr/local/bin/extFilter —config-file=/usr/src/extfilter/etc/extfilter.ini —pidfile=/var/run/extfilter.pid

конфиг с чем испытывал и запускалось

Если повезло, все запустится, если нет, вылетит с ошибкой.

Если в логах messages Вы увидите такое:

Oct 13 13:38:25 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.0 domain=0x000d address=0x00000003fc107e80 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc08c300 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc0aee00 flags=0x0000]
Oct 13 13:38:30 filter kernel: AMD-Vi: Event logged [IO_PAGE_FAULT device=22:00.1 domain=0x000d address=0x00000003fc069800 flags=0x0000]

а фильтр запустившись, все пакеты попадают в missed
в настройки grub необходимо еще такое добавить:
iommu=amd iommu=soft

перезагрузившись, все должно пойти как положено.

 

Сайт фильтра
https://github.com/max197616/extfilter

apache и fail2ban

Появилась надобность банить всех кто делает POST запросы и получает в ответ 404 ошибку на сервере под управлением ispmanager

создаем файл apache-404.conf в filter.d
и добавляем содержимое

[Definition]
failregex = (?P[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+ 404 [0-9]+
ignoreregex = .*(robots.txt|favicon.ico|jpg|png|html)

в jail.conf

[apache-404]

enabled = true
port = http,https
filter = apache-404
logpath = /var/www/*/data/logs/*access.log
bantime = 2592000
findtime = 600
maxretry = 2

перезагружаем сервис fail2ban