FastNetMon

Monday, 16 June 2014

PF_RING: pfring_open Operation not supported errno: 95

Это очень странная баго-фича. Суть в том, что даже при успешном открытии сокета pfring_open возвращает errno = 95, который обозначает: Operation not supported. Это ломает в частности gopacket/pfring и приводит к тому, что он нифига не работает.

Бага исправлена по моему репорту в коммите 7775 и доступна в svn версии PF_RING. Скорее всего фикс будет включен в релиз 6.0.2, в 6.0.1 баг все еще присутствует.

Интересный продукт - APS Anti Abuse - защита Ваших VPS от жалоб

Вот наткнулся на такой продукт: http://vpsantiabuse.com/

Сам не пробовал, никакого резюме дать не могу. Все под Вашу личную ответственность.

Thursday, 12 June 2014

Can't install Go binding for PF_RING

go get "code.google.com/p/gopacket/pfring"
# code.google.com/p/gopacket/pfring
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libpfring.so: undefined reference to `numa_node_of_cpu'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libpfring.so: undefined reference to `clock_gettime'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libpfring.so: undefined reference to `numa_bind'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libpfring.so: undefined reference to `numa_parse_nodestring'
/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../lib/libpfring.so: undefined reference to `numa_available'
Что делать? Открываем:
/usr/share/go/src/pkg/code.google.com/p/gopacket/pfring/pfring.go 
 
И далее на строке #cgo корректируем следующее:
#cgo LDFLAGS: -lpfring -lpcap -lnuma -lrt 

 После этого повторяем сборку и все будет ок :)  Багрепорт уже создан мной.

Установка PF_RING на Debian 7 Wheezy

Стягиваем код:
cd /usr/src
wget 'http://downloads.sourceforge.net/project/ntop/PF_RING/PF_RING-6.0.1.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fntop%2Ffiles%2FPF_RING%2F&ts=1402307916&use_mirror=cznic' -OPF_RING-6.0.1.tar.gz
tar -xf PF_RING-6.0.1.tar.gz
cd PF_RING-6.0.1
apt-get install build-essential bison flex linux-headers-$(uname -r) libnuma-dev

Собираем модуль ядра:
cd kernel
make
make install
modprobe pf_ring

После этого смотрим в dmesg и убеждаемся, что модуль подгрузился.

Собираем библиотеки:
cd /usr/src/PF_RING-6.0.1/userland/lib
./configure  --disable-bpf --prefix=/opt/pf_ring
make install

После этого собираем примеры, чтобы посмотреть каков PF_RING в действии:
cd /usr/src/PF_RING-6.0.1/userland
make
cd examples

Смотрим PF_RING в бою:
./pfcount -i eth3
Using PF_RING v.6.0.1
Capturing from eth3 [90:E2:BA:49:92:4D][ifIndex: 4]
# Device RX channels: 8
# Polling threads:    1
Dumping statistics on /proc/net/pf_ring/stats/14988-eth3.5
=========================
Absolute Stats: [147170 pkts rcvd][147170 pkts filtered][0 pkts dropped]
Total Pkts=147170/Dropped=0.0 %
147'170 pkts - 113'915'190 bytes
=========================

=========================
Absolute Stats: [300663 pkts rcvd][300663 pkts filtered][0 pkts dropped]
Total Pkts=300663/Dropped=0.0 %
300'663 pkts - 229'629'649 bytes [300'647.06 pkt/sec - 1'836.93 Mbit/sec]
=========================
Actual Stats: 153493 pkts [1'000.05 ms][153'484.86 pps/0.93 Gbps]
И все это при нулевой нагрузке на процессор :)

Wednesday, 11 June 2014

rdiff: sorry, compression is not really implemented yet

Да, вот такая блин фича :)


rdiff: ERROR: (rdiff_options) sorry, compression is not really implemented yet
Но я думаю можно заменить путь до дельты на - и сделать | pigz.

Tuesday, 10 June 2014

Как построить диаграмму по размерам пакетов в Linux?

Вот так:

tshark -i eth0 -n -eframe.len -T fields > traffic.dat; cat traffic.dat | gsl-histogram 0 1500 30


После запуска ждете требуемое время и зажимаете CTRL+C. Из зависимостей: tshark и gsl-bin на Debian.

В итоге вы увидите красивую таблицу распределения:
0 50 0
50 100 130328
100 150 12102
150 200 3012
200 250 1595
250 300 3114
300 350 1738
350 400 1363
400 450 1361
450 500 1924
500 550 1530
550 600 2052
600 650 1164
650 700 908
700 750 638
750 800 622
800 850 683
850 900 557
900 950 452
950 1000 421
1000 1050 507
1050 1100 442
1100 1150 547
1150 1200 657
1200 1250 365
1250 1300 1666
1300 1350 367
1350 1400 1618
1400 1450 13008
1450 1500 25497

Инновационный хэш адгоритм Blake!

Встречайте, используйте: https://blake2.net/

Monday, 9 June 2014

FastNetMon - решение для высокоскоростного анализа трафика и блокировки узлов, на которые идет DDoS атака

Данная задача крайне часто встает в моей практике и, к сожалению, не имеет ни красивых ни удобных, ни вообще каких-либо решений.

Что мы делаем? Мы работаем через PF_RING и на очень высокой скорости извлекаем транзитные либо входящие пакеты идущие на нашу машину либо крупную сеть.  Приложение написано на С++ и может работать до очень и очень серьезных нагрузок, 10-15 Gbps или 2-5 Mpps - это нормально. Как только на один из узлов pps превышает заданный порог, то запускается скрипт, который банит клиента либо передает сообщение группе администраторов.

Аналогичные решения существуют только для NetFlow, который сам по себе не создан для оперативной реакции и уведомления об атаке, а в моем решении уведомление об атаке будет через 3-5 секунд после превышение порога. 

Также решение умеет работать на OpenVZ нодах и фиксировать атаки на VPS, нагрузка на CPU и сеть от решения минимальная. 

 Прошу: FastNetMon.com

Friday, 6 June 2014

Миграция Puppet Master сервера с WebRick на Passenger + httpd на CentOS

Итак, мы имеем работающий Puppet сервер со скоростью работы не удовлетворяющей нас совершенно. Что делать? Ускорять методом переключения на Апача с модулем Passanger.

Устанавливаем зависимости:

install httpd httpd-devel mod_ssl ruby-devel rubygems gcc zlib-devel  openssl-devel curl-devel gcc-c++

Устанавливаем модули rack и passanger:
gem install rack passenger
Компилируем модуль Passanger для Апача:

passenger-install-apache2-module
Если он спросит какой язык нам требуется, выбираем Ruby.

Далее создаем конфиг

vim /etc/httpd/conf.d/passenger.conf

Со следующим содержимым: https://gist.github.com/pavel-odintsov/7813f50ee2f8dc1ef467

Перегружаем Апача, чтобы активировать модуль:

/etc/init.d/httpd restart
Убеждаемся, что все зацепилось корректно:
apachectl -M 2>&1|grep pass
 passenger_module (shared)

Создаем конфигурацию для запуска Puppet Master как Passanger приложения:
mkdir -p /usr/share/puppet/rack/puppetmasterd
mkdir /usr/share/puppet/rack/puppetmasterd/public /usr/share/puppet/rack/puppetmasterd/tmp
cp /usr/share/puppet/ext/rack/config.ru /usr/share/puppet/rack/puppetmasterd/
chown puppet:puppet /usr/share/puppet/rack/puppetmasterd/config.ru
Создаем конфигурацию сайта:

vim /etc/httpd/conf.d/puppetmaster.conf
Вот содержимое: https://gist.github.com/pavel-odintsov/386956e25f886ba214fe

После этого повторно перезапускаем апача и деактивируем старый pupept master сервер:
chkconfig puppetmaster off
/etc/init.d/puppetmaster stop
/etc/init.d/httpd restart
После этого пробуем провести синхронизацию с какого-либо клиента :) Думаю, все будет ок!

Гайд, по которому велась конфигурация: http://docs.puppetlabs.com/guides/passenger.html

Wednesday, 4 June 2014

Эффективность работы ZFS дедупликации и сжатия на Open Indiana при хранении бэкапов ploop образов VPS

Вот такие цифры:
zpool list
NAME    SIZE  ALLOC   FREE  EXPANDSZ    CAP  DEDUP  HEALTH  ALTROOT
array  43,5T  9,30T  34,2T         -    21%  5.16x  ONLINE  -
rpool    29G  10,0G  19,0G         -    34%  1.00x  ONLINE  -
Сжатие примерно двухкратное:
zfs get compressratio array
NAME   PROPERTY       VALUE  SOURCE
array  compressratio  2.03x  -
То есть, относительно исходного сырого объема мы получаем следующее соотношение - для хранения где-то десятка бэкапов по 10 гб нам требуется 10 гб. Так как они сжимаются 1 к 5 дедупликацией и потом вдвое за счет сжатия. 

Tuesday, 3 June 2014

Использование собственных параметров в конфиге OpenVZ контейнера

Очень часто требуется добавить какие-то свои параметры в конфиг OpenVZ контейнера, например, идентификатор услуги в биллинге или еще что-то.

Городить отдельные конфиги крайне не хочется и есть отличный способ! Можно просто добавить их в конфиг контейнера /etc/vz/conf/XXX.conf в виде по аналогии с родными параметрами vzctl:

NETWORK_UPLOAD_SPEED="10mbps"
Никаких проблем/ошибок это не вызовет, vzctl примет их как родных. Единственным неудобством в данном случае является то, что требуется делать обертку для правки/чтения данных параметров, так как vzctl/vzlist ничего о них не знаю и не могут их править/отображать.

Monday, 2 June 2014

Ускорение работы DNS в ISPManager 4 при добавлении доменов

Суть проблемы в том, что ISPManager перезапускает Bind при добавлении каждого домена.

Чтобы избежать этого делаем следующее.

Открываем конфиг  ISPManager:
vi /usr/local/ispmgr/etc/ispmgr.conf

Там корректируем либо добавляем строку (если не было):
path ndc /usr/sbin/rndcfast
А там кладем вот такой скриптик: https://gist.github.com/pavel-odintsov/e4a3cd655f51fa7f99b8

После этого перезапускаем ISPManager по killall -9 ispmgr и тестируем скорость добавления доменов.