FastNetMon

среда, 4 декабря 2097 г.

Решение по обнаружению DDoS атак - FastNetMon



Всем привет! Как многие знают, я являюсь автором системы обнаружения атак FastNetMon.

FastNetMon поволяет обнаружить в Вашей сети узел, на который идет атака и заблокировать либо весь трафик до этого узла (силами BGP Blackhole на стороне роутеров в Вашей сети, а также с помощью сети оператора) либо отсечь только паразитный трафик силами BGP Flow Spec.

FastNetMon предоставляет большое количество динамической информации о Вашей сети и предоставляет удобный интерфейс для доступа к ней:


FastNetMon поддерживает почти все оборудование имеющееся на рынке и реализует следующие протоколы захвата трафика: 
  • sFlow v5
  • Netflow v5, v9, v10
  • IPFIX
  • SPAN/Mirror

С точки зрения платформ FastNetMon поддерживает почти все топовые дистрибутивы Linux, имеется в официальных портах FreeBSD, а также недавно добавлен в проект Debian.

Добро пожаловать на официальный сайт проекта: https://fastnetmon.com

суббота, 3 ноября 2018 г.

Installing 4.19 on Ubuntu 14.04

I'm playing with AF_XDP and this feature requires very fresh kernel. I decided to use 4.19 kernel from Ubuntu Kernel PPA.

But unfortunately, these packaged depend of very fresh version of linux-base package and it availabe only in Ubuntu 16.04 or 18.04. And I will help with this :)

First of all, install linux-base:
sudo apt-get install -y  linux-base
And then we will repack deb package to remove dependency on very fresh linux-base. I used guide from ServerFault.

Download original packages:
cd
mkdir -p deb_4_19_kernel_hacked_package
cd deb_4_19_kernel_hacked_package
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
Unpack deb:
ar x linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
tar -xf control.tar.xz
rm control.tar.xz
Remove nasty dependency:
sed -i 's/linux-base (>= 4.5ubuntu1~16.04.1)/linux-base/' control
Pack control file again:
tar --ignore-failed-read -cvJf control.tar.xz {post,pre}{inst,rm} md5sums control

Build deb package again:
ar rcs linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64_fixed_dependencies.deb debian-binary control.tar.xz data.tar.xz
And install it:
wget -c http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.19/linux-modules-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
sudo dpkg -i linux-modules-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64.deb
sudo dpkg -i linux-image-unsigned-4.19.0-041900-generic_4.19.0-041900.201810221809_amd64_fixed_dependencies.deb
Finally, rebuild grub configuration:
sudo update-grub
And confirm that Grub added new kernel to configuration:
cat /boot/grub/grub.cfg 
After that, prepare keyboard, monitor, IPKVM and start reboot process :) If you're lucky guy then you can get following:
uname -a
Linux flab1 4.19.0-041900-generic #201810221809 SMP Mon Oct 22 22:11:45 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


воскресенье, 8 апреля 2018 г.

Обновление Ubuntu 16.04 на Ubuntu 18.04 LTS (beta)

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

Для начала, нужно обновиться до упора в рамках текущей версии Ubuntu 16.04:
sudo apt update; sudo apt dist-upgrade; sudo apt autoremove
Устанавлим менеджер обновлений:
sudo apt-get install update-manager-core
Убеждаемся, что у нас стоят настройки для только LTS дистрибутивов:
sudo cat /etc/update-manager/release-upgrades
Выдача должна быть следующая:
Prompt=lts
Запускаем процесс:
sudo do-release-upgrade 

Если будет выдано, что не обнаружено релиз версий (скорее всего так и будет на момент публикации пока LTS еще не вышел), то нужно добавить флаг -d:
sudo do-release-upgrade -d
В процессе обновления будет задано множество вопросов, самые сложные, когда меняется конфигурация какого-либо демона.

Например, будьте аккуратны с ssh, если работает от root, так как при обновлений на новый конфиг будет удалена опция PermitRootLogin yes и её нужно вернуть вручную в файле /etc/ssh/sshd_config



воскресенье, 25 февраля 2018 г.

воскресенье, 28 января 2018 г.

Как применить grep на выдачу tpcdump?

Есть магическая опция, которая меняет поведенеи буферизации grep начинает работать по мере того, как tcpdump выводит данные:
sudo tcpdump -i eth0 port 80 -n |grep some_value_filtering --line-buffered

понедельник, 1 января 2018 г.

С Новым 2018м Годом! :)

Поздравляю с Новым Годом! :) Пусть новый год будет полон свершений, которые будет не стыдно добавить в резюме! :)

С Праздником! :)

среда, 22 ноября 2017 г.

Сборка актуальной версии trafgen из пакета netsniff-ng на Ubuntu 14.04

cd /usr/src
git clone git://github.com/netsniff-ng/netsniff-ng.git
cd netsniff-ng
apt-get install -y libcli-dev libnet1-dev libnacl-dev  libpcap-dev liburcu-dev ccache libgeoip-dev libnetfilter-conntrack-dev  libncurses5-dev libnl-3-dev flex bison libnl-genl-3-dev libnl-3-dev libnl1 zlib1g-dev libnl-route-3-dev
./configure  --prefix=/opt/netsniff-ng
make
make install

Потом берем шаблон флуда: https://raw.githubusercontent.com/netoptimizer/network-testing/master/trafgen/udp_example01.trafgen


Кроме этого обязательно нужно обновить ядро до версии 4.4 и выше из пакета hardware support! Ибо используются модные AF_PACKET и чем новее ядро - тем будет быстрее.

Потом открываем файл udp_example01.trafgen и корректируем там MAC адрес целевой машины. А также программируем порты и прочее.

После этого запускаем:
/opt/netsniff-ng/sbin/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size 500KiB  --cpu 8
В случае ошибки "Cannot allocate TX_RING" рекомендую убрать --ring-size вовсе.

 Итого, на Intel(R) Core(TM) i7 CPU         950  @ 3.07GHz удалось выжать 3.5 MPPS ценой полной загрузки всех ядер машины:

  1  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]     5  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  2  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]     6  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  3  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]     7  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  4  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]     8  [|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||100.0%]
  Mem[|||                                                   190/48400MB]     Tasks: 32, 65 thr; 9 running
  Swp[|                                                        3/8190MB]     Load average: 0.64 1.37 4.28
                                                                             Uptime: 01:23:24

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 3728 root       20   0 13616  1760  1364 R 100.  0.0  0:09.22 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
 3732 root       20   0 13616  1780  1384 R 100.  0.0  0:09.22 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
 3721 root       20   0 13620  1780  1384 R 100.  0.0  0:09.22 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
 3722 root       20   0 13616  1764  1368 R 99.0  0.0  0:09.20 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
 3724 root       20   0 13616  1780  1384 R 99.0  0.0  0:09.21 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
 3723 root       20   0 13616  1768  1372 R 99.0  0.0  0:09.21 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
 3725 root       20   0 13616  1780  1384 R 99.0  0.0  0:09.20 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size
 3730 root       20   0 13616  1768  1372 R 98.0  0.0  0:09.12 /opt/trafgen --cpp --dev eth1 --rand --num 0 -i udp_example01.trafgen --cpp --ring-size


пятница, 10 ноября 2017 г.

Отличные инженерные вакансии компании Cloudflare Inc

Всем привет! :)

Знаю, что меня читает много отличных инженеров! Поэтому предлагаю рассмотреть замечательную компанию, в которой очень много прекрасных инженерных позиций - Cloudflare. Полный список вакансий тут: https://www.cloudflare.com/careers/departments/

Если Вам нравится Linux, C, Go или Вам более близок фроентед - милости просим :) 

вторник, 7 ноября 2017 г.

Как сделать из Mac OS NAT сервер чтобы дать доступ в интернет через машину на Mac?

Я все буду делать в macOS High Sierra.

Включаем форвардинг в ядре:
sudo sysctl -w net.inet.ip.forwarding=1
На внутреннем ифейсе задаем IP адрес (без этого не создаст, но потом почему-то поменяет на новый, очень странно он ведет себя):
sudo ifconfig en6 10.10.10.1
Если внешний интерфейс (с интернетом) это en0, а внутренний, которому требуется дать интернет - en6, то сделать это так:
echo "nat on en0 from en6:network to any -> (en0)" > rules
sudo pfctl -f ./rules -e
Очистка правил так: 
sudo pfctl -d
Источник: https://roelant.net/2015/share-your-vpn-mac-el-capitan.html 

Создание загрузочного USB диска на Ubuntu

Отличный вариант - Etcher, https://etcher.io Не требует никаких низкоуровневых команд и все можно сделать из GUI.

воскресенье, 23 июля 2017 г.

Каталог работодателей, предлагающих хорошие вакансии, где требуется Linux

Всем привет!

Я довольно часто приватно получаю сообщения с просьбой порекомендовать того или иного работодателя, где можно будет заниматься сугубо Линуксом.

Быстрого и легкого ответа на вопрос мне найти не удалось и я решил привлечь дорогих читателей.

Собственно, прошу как работодателей, так и работющих в данных прекрасных компаниях делиться ими в комментариях и я буду по мере накопления данных переносить их в этот пост.

Смысла ограничивать географию не вижу :) Требование простое - на работе нужен хардкорный Linux и его отличное знание :)

вторник, 25 апреля 2017 г.

sflowtool compilation

Very very very simple:
cd /tmp
wget https://github.com/sflow/sflowtool/releases/download/v3.41/sflowtool-3.41.tar.gztar -xf sflowtool-3.41.tar.gz
cd sflowtool-3.41
./configure --prefix=/opt/sflowtool
make install
It's very useful toolkit for reading sFLOW dumps.

You could try to read sFLOW in pcap format:
/opt/sflowtool/bin/sflowtool -r sflow.pcap
Or you cal start it and it will listen on sFLOW port:
/opt/sflowtool/bin/sflowtool
Here you could find example of output:
startDatagram =================================
datagramSourceIP 127.0.0.1
datagramSize 696
unixSecondsUTC 1435146070
datagramVersion 5
agentSubId 100000
agent 192.168.122.162
packetSequenceNo 3175
sysUpTime 786000
samplesInPacket 1
startSample ----------------------
sampleType_tag 0:2
sampleType COUNTERSSAMPLE
sampleSequenceNo 27
sourceId 2:1
counterBlock_tag 0:2001
counterBlock_tag 0:2010
udpInDatagrams 5430
udpNoPorts 24321676
udpInErrors 0
udpOutDatagrams 8154
udpRcvbufErrors 0
udpSndbufErrors 0
udpInCsumErrors 0
counterBlock_tag 0:2009
tcpRtoAlgorithm 1
tcpRtoMin 200
tcpRtoMax 120000
tcpMaxConn 4294967295
tcpActiveOpens 119
tcpPassiveOpens 11
tcpAttemptFails 0
tcpEstabResets 10
tcpCurrEstab 2
tcpInSegs 225262
tcpOutSegs 263644
tcpRetransSegs 10
tcpInErrs 0
tcpOutRsts 1668
tcpInCsumErrors 0
counterBlock_tag 0:2008
icmpInMsgs 2694
icmpInErrors 0
icmpInDestUnreachs 0
icmpInTimeExcds 2690
icmpInParamProbs 0
icmpInSrcQuenchs 0
icmpInRedirects 0
icmpInEchos 0
icmpInEchoReps 4
icmpInTimestamps 0
icmpInAddrMasks 0
icmpInAddrMaskReps 0
icmpOutMsgs 0
icmpOutErrors 0
icmpOutDestUnreachs 12148804
icmpOutTimeExcds 247174
icmpOutParamProbs 12148797
icmpOutSrcQuenchs 0
icmpOutRedirects 0
icmpOutEchos 0
icmpOutEchoReps 0
icmpOutTimestamps 3
icmpOutTimestampReps 4
icmpOutAddrMasks 0
icmpOutAddrMaskReps 0
counterBlock_tag 0:2007
ipForwarding 2
ipDefaultTTL 64
ipInReceives 25451365
ipInHdrErrors 0
ipInAddrErrors 2
ipForwDatagrams 0
ipInUnknownProtos 0
ipInDiscards 0
ipInDelivers 24555065
ipOutRequests 12420612
ipOutDiscards 412852
ipOutNoRoutes 0
ipReasmTimeout 0
ipReasmReqds 0
ipReasmOKs 0
ipReasmFails 0
ipFragOKs 0
ipFragFails 0
ipFragCreates 0
counterBlock_tag 0:2005
disk_total 20091629568
disk_free 75268096
disk_partition_max_used 99.62
disk_reads 49609
disk_bytes_read 2410784768
disk_read_time 64008
disk_writes 71505
disk_bytes_written 2536456192
disk_write_time 1195352
counterBlock_tag 0:2004
mem_total 14447202304
mem_free 12821819392
mem_shared 0
mem_buffers 104521728
mem_cached 1174110208
swap_total 922742784
swap_free 922742784
page_in 1177603
page_out 1238504
swap_in 0
swap_out 0
counterBlock_tag 0:2003
cpu_load_one 0.130
cpu_load_five 0.350
cpu_load_fifteen 0.430
cpu_proc_run 0
cpu_proc_total 125
cpu_num 8
cpu_speed 3600
cpu_uptime 269214
cpu_user 923700
cpu_nice 0
cpu_system 308060
cpu_idle 2150608980
cpu_wio 307440
cpuintr 290
cpu_sintr 518020
cpuinterrupts 27964221
cpu_contexts 43373068
cpu_steal 15120
cpu_guest 0
cpu_guest_nice 0
counterBlock_tag 0:2006
nio_bytes_in 446691530
nio_pkts_in 7430121
nio_errs_in 0
nio_drops_in 0
nio_bytes_out 476011841
nio_pkts_out 6730531
nio_errs_out 0
nio_drops_out 0
counterBlock_tag 0:2000
hostname debian
UUID 5b-5a-d7-11-9e-5b-7c-48-bf-5b-cb-41-78-cd-a0-2b
machine_type 3
os_name 2
os_release 3.16.0-4-amd64
endSample   ----------------------
endDatagram   =================================
startDatagram =================================
datagramSourceIP 127.0.0.1
datagramSize 160
unixSecondsUTC 1435146073
datagramVersion 5
agentSubId 100000
agent 192.168.122.162
packetSequenceNo 3176
sysUpTime 789000
samplesInPacket 1
startSample ----------------------
sampleType_tag 0:2
sampleType COUNTERSSAMPLE
sampleSequenceNo 27
sourceId 0:14
counterBlock_tag 0:1005
ifName eth5
counterBlock_tag 0:1
ifIndex 14
networkType 6
ifSpeed 10000000000
ifDirection 1
ifStatus 3
ifInOctets 445441800
ifInUcastPkts 7424030
ifInMulticastPkts 4294967295
ifInBroadcastPkts 4294967295
ifInDiscards 0
ifInErrors 0
ifInUnknownProtos 4294967295
ifOutOctets 126
ifOutUcastPkts 3
ifOutMulticastPkts 4294967295
ifOutBroadcastPkts 4294967295
ifOutDiscards 0
ifOutErrors 0
ifPromiscuousMode 0
endSample   ----------------------
endDatagram   =================================

четверг, 23 марта 2017 г.

Установка ipt_netflow на Ubuntu 14.04

Ставим зависимости:
sudo apt-get install -y iptables-dev locate pkg-config make gcc git dkms libsnmp-dev snmpd
Собираем:
cd /tmp
wget https://github.com/aabc/ipt-netflow/archive/v2.2.tar.gz
tar -xf v2.2.tar.gz
cd ipt-netflow-2.2/
./configure
make all
sudo make install
sudo dkms build ipt-netflow/2.2
sudo dkms install ipt-netflow/2.2
Запуск:
sudo modprobe ipt_NETFLOW protocol=9 destination=127.0.0.1:2055 inactive_timeout=10 hashsize=65535 maxflows=4000000 active_timeout=15
И направляем трафик:
sudo iptables -I INPUT -i lo -j NETFLOW

четверг, 2 марта 2017 г.

How to install Apache Kafka on Ubuntu 14.04

Install JRE:
sudo apt-get update
sudo apt-get install default-jre

Install Zoo Keeper:
sudo apt-get install zookeeperd

Restrict it to only localhost:
sudo vim /etc/zookeeper/conf/zoo.cfg 

And fix line:
clientPortAddress=127.0.0.1

And apply changes:
sudo service zookeeper restart
Then we need to download pre-compiled Kafka binaries and install them.

wget 'http://www-eu.apache.org/dist/kafka/0.10.2.0/kafka_2.11-0.10.2.0.tgz' -Okafka_2.11-0.10.2.0.tgz
sudo tar -xf kafka_2.11-0.10.2.0.tgz -C /opt
cd /opt/kafka_2.11-0.10.2.0/

Create user for Kafka:
sudo useradd kafka -m 

Change permissions:
sudo chown -R kafka:kafka /opt/kafka_2.11-0.10.2.0/

Create folder for kafka logs:
sudo mkdir /tmp/kafka-logs
sudo chown kafka:kafka /tmp/kafka-logs
Move configuration to proper place:
sudo mkdir /etc/kafka
sudo cp config/server.properties /etc/kafka

Create Kafka Upstart script:
sudo vim /etc/init/kafka.conf

 With following content:
description "Kafka Broker"
start on runlevel [2345]
stop on starting rc RUNLEVEL=[016]
respawn
respawn limit 2 5
env HOME=/etc/kafka
env KAFKA_HOME=/opt/kafka_2.11-0.10.2.0
umask 007
kill timeout 300
pre-start script
    #Sanity checks
    [ -r $HOME/server.properties ]
end script
setuid kafka
setgid kafka
exec $KAFKA_HOME/bin/kafka-server-start.sh $HOME/server.properties

And finally start Kafka: