FastNetMon

Wednesday 25 June 2014

Пару слов о режимах работы PF_RING

parm:           transparent_mode

0=standard Linux,
1=direct2pfring+transparent,
2=direct2pfring+non transparent

For 1 and 2 you need to use a PF_RING aware driver (uint).

Как можно понять, стандартно используется режим 0, так как 1 и 2 требуют установки специального драйвера. Где его взять? В дистрибутиве PF_RING в папке drivers/PF_RING_aware. Папку DNA пока не трогайте, она Вам незачем пока что.

Теперь шерстите папки :) Но вообще я Вам не рекомендую заниматься чем-то подобным, если у Вас сетевая не класса 82599. То есть можете, но не факт, что все будет работать, как Вам нужно.

Итак, идем в папку cd intel/ixgbe/ixgbe-3.21.2-zc/src (мой случай), собираем и устанавливаем в систему драйвер (тут установка штучная, в продакшене соберите пакет или используйте dkms):
make
make install

И после этого загружаете драйверы спец скриптом:
./load_driver.sh

Если он начнет ругаться "не могу найти pf_ring.ko", то исправьте к нему путь на абсолютный. Тоже самое касается случая, когда Вам нужен иной transparent_mode, его нужно указать драйверу явно в этом же файле.

Теперь убеждаемся, что у нас запустилась пропатченная версия драйвера, а не системная. Это можно легко определить по выдаче команды modinfo ixgbe. Следующие строки есть только в патченном драйвере.
parm:           numa_cpu_affinity:Comma separated list of core ids where per-adapter memory will be allocated (array of int)
parm:           enable_debug:Set to 1 to enable debug tracing into the syslog (uint)
 А вот дальше возникли сложности, так как хидер pfring_zc.h не устанавливается при установке либы, о чем я уже отправил багрепорт. 

Monday 23 June 2014

Как победить chrono:666:7: error: static_assert expression is not an integral constant expression в Debian Wheezy?

Ловлю вот такой баг:
In file included from fastnetmon.cpp:45:
In file included from /usr/include/c++/4.6/thread:37:
/usr/include/c++/4.6/chrono:666:7: error: static_assert expression is not an integral constant expression
      static_assert(system_clock::duration::min()
      ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
Боюсь, что тут ничего толком не сделать, кроме как воткнуть из бэкпортов более новый LibC++, что почти подобно самоубийству. Кроме этого, в сети пишут, что clang данной версиин не умеет этих самых константных выражений.

Friday 20 June 2014

Отключение IPMI на BCM карте Supermicro

Готовим окружение:
apt-get install ipmitool
modprobe ipmi_devintf
modprobe ipmi_si

Запускаем с машины:
ipmitool lan set 1 ipsrc static
ipmitool lan set 1 ipaddr 127.0.0.1
ipmitool lan set 1 defgw ipaddr 127.0.0.1

Убеждаемся, что все вырублено:
ipmitool lan print

и проверяем пингом

DHL - документы со скоростью мысли :)

Сегодня на 3 дня раньше обещенного срока получил посылку DHL прямо в торговом центре около дома! :) Хотя была оплачена не срочная доставка за 4 дня, посылка была у меня ровно через 2! И это из Самары в Питер (~1600 км)!

Вот это - образец качества. DHL рулез :)

Не пользуйтесь говнобанком по имени Сбербанк, НИКОГДА

Недавно испытал определенный баттхерт в отделении Сбербанка (Спб), на что, буквально через полчаса составил жалобу следующего содержания. Я, конечно, человек, наверное, наивный, но очень часто мои жалобы находят ответ. Но не в этом случае. В ЭТОМ банке всем насрать.

Здравствуйте!
Хотелось бы поделиться форменным идиотизмом, с которым я столкнулся в
подразделении Сбербанка по адресу Пионерская , Коломяжский пр. , 15 " А" ,
корп. 2. Но я не хотел бы наговаривать именно на это подразделение, потому
что эта ситуация точь-в-точь имеет место и в любых других подразделениях
Сбербанка.

Волею судьбы я вынужден оплачивать квартплату только в Сбербанке, для чего
пользуюсь Терминалами Самообслуживания. Они в целом удобны для меня (если,
конечно, работают - что в нашем подразделении тоже редкость - обычно
работает 1-2 из 6 штук).

Но сегодня оплачивая квартплату в 3450 я оплатил купюрой в 5000 рублей и
сумма сдачи была очень большой, чтобы получить ее на телефон (что я ранее делал
всегда - меня это устраивало) и я выбрал вариант "получить у кассира".
И тут начались все мои круги ада. Резонно спросив консультанта "а где
деньги-то получить" ? Я получил ответ - идите в ближайшее окно. Из ближайшего окна
прождав 5 минут я был послан взять талон (понять какой из 10 вариантов
"кредиты""ипотека""платежи" обозначает "я хочу свою сдачу из терминала"
имеяполное высшее обращование я не смог). Талон
(если хотите - я могу прислать его скан-копию, он у меня на столе лежит) меня
обрадовал ожиданием в 33 минуты и очередью в 5 человек.

Но на этом мои удивления не закончились, уже _после_ получения этого чудо
чека я прочитал на нем, что у меня должен быть паспорт, которогое у меня с собой
не было. Поэтому я был вынужден сходить домой и взять паспорт, чтобы получить
своиденьги. Но очередь была настолько длинной, что пока я ходил домой (20 минут), она
не сдвинулась вообще. Почему? Потому что пришли техники и начали чинить
переговорное устройство и в итоге из 4х окон работали от силы 2, очередь в
филиале достигла почти 25 человек - сесть было уже некуда.
После этого с горем поплам через 40 минут (!!!) дошла моя очередь. Кассир
сработала довольно оперативно (если не считать ухода за мелочью мне на
сдачу на 5 минут; у Вас в банке нет запаса мелочи?).


Но что меня напрочь убило - это два огромных бланка (по одному за каждый из
возвратов из терминала), которые я должен заполнить сам! Да, ФИО и мой
паспорт операционист впечатала (да и вообще операционистка была самым лучшим
впечатлением после посещения данного филиала). В итоге мне понадобилось еще
почти 5 минут, чтобы заполнить эти огромные бланки, где я должен вписать
ФИО, адрес жительства, адрес регистрации, телефон, номер подразделения выдавшего
мой паспорт и две подписи. Вам не кажется, что это просто тотальный и бесповоротный идиотизм? Мне
кажется, честно. Пожалуйста, раз уж Вы позиционируете терминалы как "ОПЕРАТИВНЫЙ"
способ осуществления платежей.
В итоге на оплату двух несчастных квитков квартплаты я потратил ровно
полтора часа своего личного времени, из-за чего был вынужден опоздать на работу. И
это в 21м веке, а не в 18м и мои деньги не ехали на перекладных из Петербурга в
Москву.

Я надеюсь, что хотя бы пару пунктов моей жалобы будут рассмотрены.
С уважением, Одинцов Павел, контактный телефон: +7951xxxyyzz

ОТВЕТ  БАНКА:

На что получил тупую отписку (Ответ на обращение N 000913-2014-059266 от Одинцов Павел):

Ответ Клиенту:
Уважаемый Павел Юрьевич!
ОАО "Сбербанк России" (далее-Банк), рассмотрев Ваше обращение, сообщает
следующее.
Прежде всего, позвольте поблагодарить Вас за то, что Вы нашли время и
поделились с нами впечатлениями от обслуживания в Сбербанке. Для нас очень
важно знать мнение клиентов о предоставляемых банком услугах, ведь это
позволяет находить и исправлять существующие ошибки или вносить изменения в

процессы Банка для повышения качества обслуживания.
Мы искренне сожалеем о времени, которое Клиенты Банка теряют в
очередях, и заверяем Вас, что Банк принимает все меры к устранению этого
недостатка в нашей работе.
В частности, в настоящее время в Банке проводится масштабная программа по
борьбе с очередями, целями которой является снижение максимального времени
ожидания клиентов в отделениях. В рамках этой программы мы активно меняем
формат отделений, пересматриваем их месторасположение, внедряем системы
электронной очереди и совершенствуем наши процессы.
Также нельзя не отметить, что уже сейчас Вы можете избежать
неудобств, которые могут возникнуть при личном посещении отделений Банка,
воспользовавшись альтернативными каналами обслуживания: услугами "Сбербанк

ОнЛ@йн" (услуга предоставляется бесплатно) и "Мобильный банк", безналичным
списанием коммунальных платежей с вкладов, либо использовать для оплаты
услуг
широкую сеть наших информационно-платежных терминалов и банкоматов. С
подробной
информацией об этих услугах, а также полным списком устройств
самообслуживания
и структурных подразделений Банка можно ознакомиться на нашем официальном
сайте www.sberbank.ru.
В заключение хотим еще раз принести свои извинения за причиненные

неудобства и выразить надежду, что наши разъяснения помогут Вам в
дальнейшем
успешно пользоваться нашими услугами.
С уважением,
Управление претензионной работы
Центра сопровождения клиентских операций
ОАО "Сбербанк России"



С уважением,
Управление претензионной работы
Центра сопровождения клиентских операций
"Старо-Петергофский" ОАО "Сбербанк России"

Wednesday 18 June 2014

Сборка xdelta3 на CentOS 6

Вот так:
yum install -y xz gcc make xz-devel gcc-c++
cd /usr/src
wget https://xdelta.googlecode.com/files/xdelta3-3.0.8.tar.xz
tar -xf xdelta3-3.0.8.tar.xz
cd xdelta3-3.0.8
./configure --build=x86_64 --prefix=/opt/xdelta3
Может кто соберет пакетик в Epel? А-то там только xdelta1 :)

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 и тестируем скорость добавления доменов.