Ця частина описує підготовку надійного мережевого інструмента на базі FreeBSD. Розглядаються базові етапи встановлення системи, правильне налаштування середовища та перевірка апаратної частини перед роботою з трафіком. Матеріал підходить для інженерів, які хочуть створити власний діагностичний пристрій, зрозуміти можливості обладнання та закласти стабільний фундамент для подальшого аналізу мережі.
Викладена в матеріалі ідея створення компактного інструмента для діагностики мережевих проблем може здатися передбачуваною для інженерів старої школи, однак для багатьох молодих фахівців, які звикли до дорогих сертифікованих рішень на кшталт Cisco Systems чи Fluke Networks, вона відкриває потенціал FreeBSD у «чистому» вигляді. Усього лиш потрібно встановити систему на компактний пристрій з двома Ethernet-інтерфейсами та виконати базове налаштування — і повноцінний інструмент для аналізу мережі готовий до роботи.
Концепція «stand-alone» рішення для віддаленої діагностики Ethernet-мереж виникла ще в часи, коли інтернет-провайдери широкомасштабно використовували звичайне ПК-обладнання з FreeBSD для маршрутизації та серверних завдань. У той період операційна система демонструвала стабільність, багатий набір мережевих можливостей «із коробки» та невимогливість до апаратних ресурсів. Навіть сьогодні багато інфраструктур продовжують працювати на подібних конфігураціях без збоїв протягом років.
Потреба повернутися до цієї ідеї зумовлена сучасними викликами. Один із замовників експлуатує великий парк різнорідних IP-домофонів і постійно стикається з проблемами сумісності, які неможливо коректно діагностувати без доступу до мережевого трафіку. Багато моделей бюджетного сегмента не дають можливості переглянути внутрішню логіку роботи, специфічні параметри SIP або механізми NAT traversal, а служби підтримки сторонніх провайдерів не завжди мають змогу оперативно розібратися з проблемою. У таких умовах критично важливо мати можливість коректно перехопити трафік, дослідити його та об’єктивно визначити, на якому етапі виникає помилка.
Саме тому виникла необхідність у простому, автономному та універсальному інструменті, здатному працювати в різних мережевих середовищах і надавати достатній обсяг даних для технічного аналізу.
Одним із класичних способів перехопити мережевий трафік є налаштування порту комутатора (або окремого VLAN) у спеціальний режим, за якого всі пакети з потрібного порту дублюються в інший, вільний порт. У термінології Cisco це відомо як SPAN. До такого порту підключається аналізатор — наприклад, Fluke OptiView або комп’ютер із запущеним WireShark.
Такий метод має суттєві недоліки: комутатор повинен підтримувати SPAN, необхідний повний адміністративний доступ, а для аналізу потрібен окремий ноутбук чи спеціалізований дорогий пристрій. Також інженеру часто доводиться фізично бути на місці, що не завжди зручно. Існує й ризик порушити роботу мережі неправильним рухом у конфігурації, тому адміністратори використовують цей метод із великою обережністю.
Альтернативний підхід значно простіший — використання звичайного ПК із двома Ethernet-інтерфейсами, між якими створюється прозорий міст (Ethernet Bridging). Для мережевого обладнання такий міст практично невидимий: окрім мінімальної затримки, його складно виявити. Головна перевага — можливість програмно аналізувати, фільтрувати або записувати весь трафік, що проходить між інтерфейсами.
Керування пристроєм здійснюється віддалено, наприклад через SSH поверх L2TP або PPTP-тунелю, який автоматично піднімається під час завантаження системи. У результаті утворюється компактний, автономний та повністю керований дистанційно інструмент моніторингу. Для встановлення достатньо підключити два патчкорди та живлення.
Такий «сніфер», встановлений між двома комутаторами, дозволяє аналізувати увесь трафік між ними — виявляти мережеві шторми, проблеми NAT чи SIP, помилки взаємодії обладнання та навіть потенційні спроби вторгнення. Водночас варто враховувати, що ресурси звичайного ПК можуть бути недостатніми для магістральних каналів, тому це рішення оптимальне для мереж ближче до абонента.
Цей інструмент є доступною альтернативою дорогим професійним аналізаторам. Комерційні пристрої аналогічного класу можуть коштувати від 50 000 до 100 000 грн, тоді як на вторинному ринку подібні рішення трапляються за 4000–5000 грн, що значно вигідніше.
Для реалізації концепції потрібен x86-сумісний ПК із двома Gigabit Ethernet-портами. Довгий час компактні пристрої такого типу були рідкістю, а USB-мережеві адаптери виявилися ненадійними для тривалого моніторингу. Проблеми можуть проявлятися нерегулярно, і тривале очікування з ноутбуком у технічному приміщенні — непрактичне рішення. Тим більше, коли моніторинг може вестися в квартирі чи приватному будинку.
Ситуацію змінила поява компактних комп’ютерів на базі Intel Atom. Один із таких — одноплатний ПК формату nano-ITX на Intel Atom J1190 (2.4 ГГц), оснащений 8 GB DDR4, SSD на 128 GB і чотирма портами 2.5G Ethernet, що пропонується приблизно за 4380 грн. Для своєї ціни він забезпечує функціональність, достатню для ролі мережевого сніфера, і є значно доступнішим за дорогі професійні аналізатори.

Поява цього міні-ПК одразу нагадала про концепцію автономного сніфера, і під час обговорення із замовником, що обслуговує мережу IP-домофонів, ідею було повторно порушено. Спочатку її не зрозуміли та не змогли належно оцінити, однак із часом кількість невирішених мережевих проблем зростала, а скарги користувачів накопичувалися.
Коли ситуація загострилася, пропозицію розглянули знову — і саме тоді в компанії замовника з’явився компетентний фахівець, який швидко побачив практичну користь такого підходу. Проєкт отримав розвиток.
Придбати міні-ПК від XCY не вдалося через обмеження на закупівлі на китайських маркетплейсах, проте новий спеціаліст оперативно підібрав локальний аналог — mini-ПК Horizon N5 сингапурського дизайн-центру, який постачається на ринок під брендом Rambica.

Rambica Horizon N5 DN5122P [PCMI-0105] оснащений іншим процесором — Intel Celeron N5105 із чотирма ядрами на 2 ГГц. Пристрій має 12 GB DDR4 оперативної пам’яті та SSD на 256 GB. На відміну від моделі XCY, Horizon N5 комплектується двома 1-Gbit Ethernet портами, чого більш ніж достатньо для побудови сніфера у мережах невеликого масштабу. Додатково він оснащений вбудованим Wi-Fi, трьома HDMI-портами, трьома USB 3.0 та декоративним RGB-підсвічуванням.
Компактні габарити 47×88×88 мм і вартість близько 9 300 грн роблять цей пристрій конкурентним рішенням у порівнянні з популярними одноплатниками на кшталт Raspberry Pi 5, особливо з огляду на продуктивність та набір інтерфейсів.
Після придбання Horizon N5 пристрій був переданий для встановлення та налаштування FreeBSD відповідно до поставлених вимог. Матеріал далі описує процес підготовки, конфігурації та практичного використання цього апаратного рішення як основи для автономного мережевого сніфера.
Отже, можна переходити до технічної частини реалізації задуму.
Для встановлення операційної системи FreeBSD, налаштування та тестування сніфера нам знадобляться такі додаткові засоби:
Робочий ПК з ОС Windows/Linux/FreeBSD або будь-якої іншої сучасної ОС з 3 ГБ вільного дискового простору. На цьому ПК має бути засіб, що дозволяє підключатися до інших машин по SSH (ssh, putty.exe).
Накопичувач USB Flash ємністю щонайменше 2 GB.
Монітор/телевізор з інтерфейсом HDMI.
Клавіатура USB 2.0
Два підготовлені UTP патч-корд.
Доступ до мережі WiFi (пароль доступу) з виходом до Інтернету.
Насамперед нам потрібно буде завантажити завантажувальний образ системи з інсталятором на борту. На сайті проекту FreeBSD представлено декілька різних версій цієї операційної системи. На момент написання цієї статті є три різні гілки ОС FreeBSD: поточна в розробці 15.0-CURRENT , застаріла, але все ще підтримувана 13.5-RELEASE і стабільна 14.3-RELEASE . Завантажуватимемо стабільну версію 14.3-RELEASE. Для кожної версії ОС запропоновано кілька варіантів образів різного обсягу та призначення. У тому числі:
dvd1 — містить завантажувальну систему, призначену для інсталяції з DVD або USB, а також набір вже зібраних бінарних файлів для графічного інтерфейсу. Даний варіант найоб’ємніший і призначений для встановлення як робоче місце на ПК користувача.
disc1 — те саме, тільки без зібраних пакетів. Також є варіант для робочого місця.
bootonly не містить інсталятора, але може бути завантажена з CD-ROM або USB як тимчасова робоча ОС.
memstick – оптимізований для розгортання на USB носій, що містить мінімум достатній для виконання інсталяції.
mini-memctick – те саме, що memstick, але без інсталятора. Більше підходить як відновлення після збою.
Також на сайті представлені готові образи для віртуальних машин, орендованих у Amazon AWS EC2. Це все нас зараз не цікавить.
А цікавить нас мінімальний образ з інсталятором, тобто memstick . Переходимо на сторінку з образами і бачимо, що ОС FreeBSD доступна для декількох різних платформ, у тому числі для amd64 , arm64 (у кількох варіантах), i386 , PowerPC , PowerPC64 (також у кількох варіантах) та RISCV64 . Для кожної з підтримуваних платформ образ представлений у звичайному ( .img ) і упакованому ( .img.xz ) форматі.
В даному випадку нас цікавить платформа amd64 , а значить качаємо файл FreeBSD-14.3-RELEASE-amd64-memstick.img.xz який займає приблизно 800 МБ.
Поки завантажувальний образ скачується, ми повинні підключити до нашого Mini-ПК USB клавіатуру, HDMI монітор, подати живлення, натиснути кнопку Power та увійти до BIOS, щоб змінити ряд настоянок. Відразу хочу зауважити, що з невідомої причини провідні клавіатури стандарту USB 1.0 з BIOS-ом даного міні-ПК не працюють, а ось з бездротовою Logitech USB 2.0 все вийшло.
Діяти, як завжди, потрібно оперативно – відразу після включення живлення (що індикується веселою ілюмінацією RGB підсвічування), необхідно багаторазово натискати клавішу DEL ще до появи зображення на екрані монітора. Якщо згаяти момент, пристрій завантажить раніше встановлену на SSD накопичувачі ОС невідомого походження з дуже дивним і незрозумілим інтерфейсом користувача. 😉
Якщо ж Ви були досить оперативні, то перед Вами відкриється текстове меню звичного AMI BIOS.
У меню BIOS необхідно змінити такі настройки:
Встановити послідовність завантаження: першим із USB: Boot → Hard Disk Drives: USB .
Встановити режим, у який переходить пристрій після збою (зникнення та відновлення) живлення. Необхідно встановити режим S0 , щоб пристрій завжди вмикався і завантажувався відразу після подачі живлення, не чекаючи натискання клавіші Power: Boot → State After G3: S0 State .
Після зміни налаштувань необхідно вийти з меню BIOS зі збереженням внесених змін, тобто вибрати Save Settings and Exit .
Після завантаження образу його необхідно розпакувати командою xz . Для запису образа Вам знадобиться близько 2 ГБ вільного дискового простору.
# xz -d FreeBSD-14.3-RELEASE-amd64-memstick.img.xz
На сторінці сайту FreeBSD із завантаженнями наводиться наступна команда dd із параметрами для запису образу на USB носій:
# dd if=FreeBSD-14.3-RELEASE-amd64-memstick.img of=/dev/da0 bs=1m conv=sync status=progress
Записати образ можна і не розпаковуючи, щоб даремно не витрачати дисковий простір наступною командою:
# zx -d -c FreeBSD-14.3-RELEASE-amd64-memstick.img.xz | dd of=/dev/da0 bs=1m conv=sync status=progress
Ці команди необхідно виконувати від користувача root (або скористатися утилітою sudo ). Команди однаково добре працюють як у ОС Linux, так і в ОС FreeBSD. Єдине, що необхідно зробити при роботі в Linux – поміняти ім’я файлу-пристрою USB носія на /dev/sdb (або як воно у Вас визначилося, див в dmesg ).
Однак, команди dd немає в Windows. В останній доведеться заздалегідь скачати та встановити утиліту Rufus або USBImager та дотримуватися відповідних інструкцій. До речі, розпакувати образ під ОС Windows можна утилітою winrar.exe , вона підтримує формат xz .
Вставте носій USB у будь-який з роз’ємів USB, вимкніть і увімкніть пристрій. Якщо попередні операції пройшли вдало (BIOS налаштований на завантаження з USB і образ успішно записаний на USB Flash носій), то протягом декількох секунд Вам представиться завантажувач від ОС FreeBSD, який запропонує кілька варіантів дій:

У цей момент можна просто нічого не робити, а почекати 10 сік і активне (перше) меню Boot Installer буде вибрано автоматично. Або натиснути Enter, щоб прискорити вибір. Система продовжить завантаження, по екрану побіжать рядки тексту від ядра ОС, що інформують про виявлені пристрої, завантажені драйвери та їх параметри. Зрештою Вам представиться запрошення від FreeBSD Installer на блакитному тлі:

Інсталлер пропонує три різні варіанти дій, вибираємо [Install]. Усі детальні кроки встановлення FreeBSD та скріншоти інсталяції описані в багатьох статтях і відеоматеріалах, доступних у відкритому доступі. Тому в цьому матеріалі наведено лише послідовність основних дій та окремі важливі моменти, які варто врахувати під час налаштування:
1. Спочатку Інсталлер запропонує вибрати розкладку клавіатури. У термінах FreeBSD це називається “Keymap”.
2. Далі Інсталлер попросить вказати ім’я машини. У Unix прийнято давати машинам (хостам) романтичні імена. У нашому випадку пропоную обізвати хост словом, що відображає його майбутню мерзенну і мерзенну роботу: sniffer .
3. Наступним кроком Інсталлер попросить вибрати набір дистрибутивів (набір стандартних пакетів). Відключаємо все, що стосується налагодження ( *-dbg ), включаємо lib32 і рухаємося далі.
4. Далі Інсталер запропонує розбивку диска на розділи. Вибираємо Auto (UFS) та продовжуємо. У жодному разі не вибираємо ZFS — це зовсім не те, що потрібно для нашого завдання!
5. Інсталер відобразить список доступних дисків, серед яких буде /dev/ada0 – це наш SSD накопичувач, і запропонує варіант розбиття на окремі файлові системи. Нічого не міняємо, погоджуємось і рухаємось далі.
6. Інсталер запропонує вибрати тип таблиці розділів (BSD, GPT, MBR та інші). Вибираємо GPT . Це популярний і зручний спосіб, що дозволяє звертатися до томів диска за унікальними ідентифікаторами. Ця абревіатура не має жодного відношення до нейромереж!
7. Після цього Інсталлер почне установку: розмітить диск, створить таблицю розділів та розпакує необхідні системні пакети з ядром, утилітами та бібліотеками. Весь процес займає від 30 до 60 секунд.
Тут треба зауважити. Якщо на SSD знаходиться раніше встановлена інша операційна система, Інсталлер попросити підтвердити факт того, що ця ОС буде знищена в процесі установки. Погоджуємося не дивлячись і натискаємо та натискаємо <Commit> .
8. Після завершення інсталер покаже чорне термінальне вікно і попросить задати пароль для користувача root . Вводимо кілька разів 1234 , якийсь серйозний і супер-складний пароль тут не потрібно. Ми готуємо собі інструмент для роботи, а не супер-сек’юрний фаєрвол.

9. Інсталер повернеться до блакитного екрана та попросить налаштувати мережеві інтерфейси. Налаштувати інтерфейси Ethernet не слід, ми виконаємо цю процедуру пізніше при налаштуванні Ethernet Bridging-а. Але що слід зробити, так це налаштувати WiFi – це потрібно нам для віддаленого керування пристроєм та встановлення додаткового програмного забезпечення.
Необхідно вибрати інтерфейс wlan0 та відповісти на додаткові запитання Інсталера: вказати ім’я (SSID) бездротової мережі, тип авторизації, пароль, вказати на використання IPv4 та включити DHCP для автоматичного отримання IP адреси та інших налаштувань мережі.
10. Інсталер запропонує налаштувати IPv6. Робити цього не слід, якщо, звичайно, Ви не є фахівцем у цьому питанні. Вибираємо No і рухаємось далі.
11. Далі Інсталлер попросить вказати ім’я домену, до якого належить ця машина та ім’я DNS сервера. Залишаємо все так: localdomain і IP адресу DNS сервера отриманого по DHCP. Якщо з’єднання з мережею на момент інсталяції відсутнє, слід вказати адресу DNS сервера вручну.
12. Наступним етапом Інсталлер попросить вибрати регіон та країну для того, щоб правильно встановити тимчасову зону. Вибираємо Asia , потім Russia . Далі вибираємо відповідну тимчасову зону (у моєму випадку це MSK+2 ).
13. Далі система запропонує встановити поточну дату та час. Можна пропустити цей пункт (вибрати Skip ), тому що далі ми встановимо демона ntpd, що відповідає за синхронізацію системного часу.
14. Наступним етапом Інсталлер запропонує провести низку системних налаштувань. Необхідно відзначити послуги: sshd (віддалений доступ до системи), ntpd (синхронізація часу) та powerd (управління електроживленням).
15. Далі Інсталлер запропонує посилити безпеку шляхом «загвинчування гайок» (System Hardening). Тут нічого вмикати та вимикати не потрібно, в системі і так все досить безпечно за умовчанням. До того ж частина опцій може додати несподіваних проблем.
16. Наступним кроком Інсталлер запропонує додати нового користувача. Ось це потрібно зробити обов’язково! У чорному екрані вкажіть ім’я нового користувача, наприклад sniffer . Встановіть пароль, наприклад, reffins . Користувача обов’язково слід додати до груп wheel і network , і навіть встановити тип оболонки tcsh . Скріншот на рис. 6.
Додавання користувача до групи wheelзробить цього користувача адміністратором, а додавання до групи network дозволить використовувати мережеві утиліти без підвищення рівня привілеїв (без sudo).

17. Після додавання нового користувача Істалятор повернеться до блакитного екрана і запропонує виконати ще ряд операцій налаштування системи. На цьому етапі можна закінчити встановлення системи та перезавантажити машину. Для цього потрібно вийняти USB Flash носій із порту та вибрати меню Exit.
Інсталятор запропонує запустити оболонку (shell), щоб надати Вам ще одну можливість доналаштувати систему. Тут потрібно вибрати No, після чого інсталятор відобразить меню з опцією Reboot. Вибираємо її і чекаємо, поки система перезавантажиться.
Пройшовши через завантажувач і текст діагностичних повідомлень від ядра ОС, що швидко пролітає, врешті-решт користувачеві надасть запрошення для входу в систему:
Tue Jul 8 01:59:11 +05 2025 FreeBSD/amd64 (sniffer) (ttyv0) login: sniffer Password: reffins
Вказуємо користувача sniffer , пароль reffins і потрапляємо в оболонку tcsh попередньо і дуже коротко ознайомившись з Message of the Day (motd) наступного виду:
Welcome to FreeBSD! Release Notes, Errata: https://www.FreeBSD.org/releases/ Security Advisories: https://www.FreeBSD.org/security/ FreeBSD Handbook: https://www.FreeBSD.org/handbook/ FreeBSD FAQ: https://www.FreeBSD.org/faq/ Questions List: https://www.FreeBSD.org/lists/questions/ FreeBSD Forums: https://forums.FreeBSD.org/ Documents installed with the system are in the /usr/local/share/doc/freebsd/ directory, or can be installed later with: pkg install en-freebsd-doc For other languages, replace "en" with a language code like de or fr. Show the version of FreeBSD installed: freebsd-version ; uname -a Please include that output and any error messages when posting questions. Introduction to manual pages: man man FreeBSD directory layout: man hier To change this login announcement, see motd(5). sniffer@sniffer:~ %
Останній рядок sniffer@sniffer:~ % це і є запрошення від оболонки tcsh . Вона означає, що Ви є звичайним користувачем (про це говорить символ % ) з ім’ям sniffer на машині з ім’ям sniffer . На цьому етапі нам потрібно продовжити доустановку різних корисних пакетів програм та утиліт.
Перед тим як почати інсталяцію пакетів, необхідно по-перше, отримати привілеї адміністратора, а по-друге з’ясувати налаштовано і чи піднято мережне з’єднання через WiFi. Завантаження всіх програм будемо виконувати саме таким чином. Звичайно ж це можна зробити і через провідний Ethernet, але в даному випадку буде зручніше, якщо провідні мережеві інтерфейс re0 і re1 ми залишимо незайманими для подальшого налаштування моста. Але це все умовності, і Ви можете діяти інакше. 🙂
Щоб отримати привілеї адміністратора, необхідно ввести команду su та вказати пароль користувача root . Нагадаємо, що раніше при інсталяції пароль для root був заданий як 1234 .
sniffer@sniffer:~ % su Password: 1234 #
Після правильного введення пароля вигляд командного рядка змінюється. Символ # у кінці промпту означає, що активовано привілеї адміністратора, а тому всі подальші дії необхідно виконувати з максимальною обережністю, щоб уникнути випадкового видалення важливих файлів чи порушення конфігурації системи.
Промпт із символом # створюється оболонкою sh, яка використовується для користувача root за замовчуванням. Ця оболонка є базовою та не надто зручною, тому зазвичай її замінюють на більш функціональну tcsh.
Замінити оболонку можна наступною командою:
# chsh -s tcsh chsh: user information updated
Утиліта chsh повідомила, що оболонка замінена. Тепер вийдемо зі старої оболонки командою еxit і ще раз виконаємо команду su :
# exit sniffer@sniffer:~ % su Password: 1234 root@sniffer:/home/sniffer #
Ми знову отримали права адміністратора, але зараз у промпті ми бачимо під яким користувачем ( root ) і на якій машині ( sniffer ) ми працюємо, а також у якому каталозі дерева файлової системи ( /home/sniffer ) ми зараз знаходимося. Це не єдина зручність, що надається оболонкою tcsh , натискаючи стрілки вгору/вниз, тепер можна переміщатися по історії раніше виконаних команд. При цьому можна задавати частину імені команди і натискати стрілки і tcsh знайде близьку по рядку команду.
Перевірити наявність з’єднання з WiFi можна командою ifconfig . Вводимо команду:
root@sniffer:/home/sniffer # ifconfig wlan0
і отримуємо відповідь виду:
wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=0
ether b0:ac:82:7c:c2:5b
inet 192.168.168.140 netmask 0xffffff00 broadcast 192.168.168.255
groups: wlan
ssid SOME_NETWORK channel 149 (5745 MHz 11a) bssid 50:ff:20:78:f8:23
regdomain FCC country US authmode WPA1+WPA2/802.11i privacy ON
deftxkey UNDEF AES-CCM 3:128-bit txpower 23 bmiss 7 mcastrate 6
mgmtrate 6 scanvalid 60 wme roaming MANUAL
parent interface: rtw880
media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11a
status: associated
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
У виведенні команди ifconfig інтерес представляють виділені рядки:
status: associated – означає, що з’єднання з WiFi точкою доступу встановлено;
ssid SOME_NETWORK – містить ім’я точки доступу (тут для прикладу: SOME_NETWORK);
inet 192.168.168.140 — показує, яка IP адреса видана мережею (DHCP сервером) для даної машини.
Якщо у Вас вийшов подібний результат, значить з’єднання з мережею встановлено, можна виконати ping якогось хоста в глобальній мережі та перевірити чи є доступ до Інтернету:
root@sniffer:/home/sniffer # ping www.google.com PING www.google.com (173.194.220.147): 56 data bytes 64 bytes from 173.194.220.147: icmp_seq=0 ttl=107 time=106.200 ms 64 bytes from 173.194.220.147: icmp_seq=1 ttl=107 time=107.547 ms 64 bytes from 173.194.220.147: icmp_seq=2 ttl=107 time=106.863 ms ^C --- www.google.com ping statistics --- 3 packets transmitted, 3 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 106.200/106.870/107.547/0.550 ms
Вихід із команди ping , як і з будь-якої іншої, в Unix-подібних системах здійснюється за натисканням Ctrl-C. Це ініціює посилку процесу сигналу SIGINT, що завершує його виконання та управління передається назад в оболонку tcsh .
Якщо з підключенням до мережі не вдалося, то доведеться зануритися в налаштування WiFi. За роботу WiFi в операційній системі FreeBSD відповідає демон wpa_supplicant , його конфігураційний файл знаходиться в /etc/wpa_supplicant.conf . Спробуйте перевірити, чи правильно вказано пароль та ім’я точки доступу. Для цього відкрийте цей файл у редакторі ee або vi :
root@sniffer:/home/sniffer # ee /etc/wpa_supplicant.conf
Після внесення виправлень у конфігураційний файл слід зберегти. У редакторі ee це робиться натисканням послідовності ESC , Enter та ще раз Enter . Збережений конфіг буде сприйнятий демоном wpa_supplicant лише після рестарту мережного (wlan0) інтерфейсу. Для цього вводимо наступну команду:
root@sniffer:/home/sniffer # service netif restart wlan0 Stopping wpa_supplicant. Waiting for PIDS: 46902. Stopping Network: wlan0. Destroyed wlan(4) interfaces: wlan0. Created wlan(4) interfaces: wlan0. Starting wpa_supplicant. Starting Network: wlan0.
Через кілька секунд слід знову перевірити наявність з’єднання командою ifconfig wlan0 .
Припускатимемо, що в системі з’явився доступ до Інтернету і ми можемо перейти до встановлення пакетів. Встановлення, видалення та апгрейд зібраних (заздалегідь скомпільованих) пакетів програм в ОС FreeBSD здійснюється командою (утилітою) pkg . Ця утиліта має кілька розширень:
pkg search – здійснює пошук пакета, по заданому рядку символів, в централізованому репозиторії, розташованому на сайті проекту FreeBSD.
pkg install – здійснює установку пакета за його точним ім’ям.
pkg remove – видаляє раніше встановлений пакет.
pkg info – видає докладну інформацію про встановлений пакет.
Подивимося, як це працює. Наприклад, виконаємо пошук пакету за рядком «WireShark»:
root@sniffer:/home/sniffer # pkg search WireShark wireshark-4.4.7 Powerful network analyzer/capture tool wireshark-nox11-4.4.7 Powerful network analyzer/capture tool (without GUI)
pkg search видає знайдені пакети та їх короткий опис, по одному на рядок. У цьому прикладі бачимо, що у репозиторії перебувають два варіанти пакета wireshark — з графічним інтерфейсом і без такого ( nox11 ).
Для завдання мережевого сніфера нам необхідно встановити такі пакети програм та утиліт:
sudo – для отримання привілеїв адміністратора;
screen — для керування віртуальними терміналами та одночасного запуску кількох програм з віддаленим керуванням;
wireshark-nox11 – для захоплення та аналізу мережевого трафіку;
trafshow – для аналізу поточного завантаження мережі;
snort3 – для аналізу та виявлення потенційних проблем безпеки та вторгнення.
mpd5 — демон для створення тунельного з’єднання з сервером L2TP або PPTP для організації віддаленого каналу управління сніффером.
gcc , cmake , gmake, git — компілятор з мови Сі та набір утиліт для збирання інших програм із вихідних кодів.
cpu-x – утиліта для збирання та відображення інформації про апаратуру обчислювальної системи.
Ну що ж, давайте встановимо їх усі разом. Для цього введемо наступну дуже довгу команду:
root@sniffer:/home/sniffer # pkg install sudo screen wireshark-nox11 trafshow snort3 mpd5 gcc cmake gmake git cpu-x
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
Updating FreeBSD-kmods repository catalogue...
FreeBSD-kmods repository is up to date.
All repositories are up to date.
The following XXX package(s) will be affected (of 0 checked):
New packages to be INSTALLED:
e2fsprogs-libuuid: 1.47.2 [FreeBSD]
hwdata: 0.393,1 [FreeBSD]
hwloc2: 2.11.2 [FreeBSD]
...
screen: 4.9.1_5 [FreeBSD]
snort3: 3.7.1.0,1 [FreeBSD]
spdlog: 1.15.2 [FreeBSD]
Number of packages to be installed: 14
The process will require YYY MiB more space.
ZZZ MiB to be downloaded.
Proceed with this action? [y/N]: y
Утиліта pkg проаналізує свою базу даних з пакетами, виявить усі залежності (інші бібліотеки та додатки, які потрібні для роботи тих, що ми просимо встановити) та відобразить довгий список пакетів для встановлення. Наприкінці вона повідомить обсяг необхідного дискового простору та обсяг даних для завантаження з глобального репозиторію. Тиснемо y , потім Enter. Утиліта pkg викачає пакети, розпакує їх та встановить у систему. У ході процесу з’являтиметься повідомлення виду:
[1/144] Fetching snort3-3.7.1.0,1.pkg: 100% 2 MiB 1.2MB/s 00:02 [2/144] Fetching luajit-devel-2.1.0.20250311.pkg: 100% 480 KiB 491.3kB/s 00:01 [3/144] Fetching hwloc2-2.11.2.pkg: 100% 3 MiB 1.5MB/s 00:02 [4/144] Fetching screen-4.9.1_5.pkg: 100% 568 KiB 581.8kB/s 00:01 ... [1/144] Installing screen-4.9.1_5... [1/144] Extracting screen-4.9.1_5: 100% [2/144] Installing snort3-3.7.1.0,1... [2/144] Extracting snort3-3.7.1.0,1: 100% [3/144] Installing e2fsprogs-libuuid-1.47.2... [3/144] Extracting e2fsprogs-libuuid-1.47.2: 100% [4/144] Installing hwloc2-2.11.2... [4/144] Extracting hwloc2-2.11.2: 100% ... root@sniffer:/home/sniffer #
Також можуть з’являтись різні попереджувальні повідомлення від конкретних пакетів, їх можна сміливо ігнорувати.
Якщо в процесі установки виникнуть якісь проблеми, тобто повідомлення про помилки, і pkg зупиниться на півдорозі, то варто спробувати встановити кожен пакет окремо, вводячи команду pkg install имя_пакета . Таким чином, можна з’ясувати ім’я проблемного пакета і далі спробувати розібратися з ним індивідуально. Часто буває, що імена пакетів змінюються і потрібно просто з’ясувати правильну назву за допомогою pkg search .
Наприкінці ми знову побачимо знайомий промпт. Це означає, що все готове!
Проводити подальше налаштування систему через консоль (консоллю традиційно називається клавіатура і монітор підключені до системи безпосередньо) вкрай незручно, так як консоль не дозволяє копіювати шматки тексту або команди. Для того, щоб спростити роботу, слід підключитися до системи через мережу, через WiFi, використовуючи протокол віддаленого доступу до оболонки – SSH (Secure Shell). Для цього необхідно мати клієнт SSH на робочому комп’ютері. Якщо Ви є користувачем Unix системи (Linux, *BSD), то проблем не виникне – утиліта ssh напевно присутня у Вашій системі. Для користувачів Windows необхідно встановити SSH клієнт, який називається putty.exe (завантажити його можна за посиланням ), ну або подібний.
Перш ніж виконувати віддалене підключення через SSH, необхідно визначити IP-адресу сніфера у Wi-Fi мережі. Зробити це нескладно: команда ifconfig wlan0 виводить повну інформацію про мережевий інтерфейс, включно з призначеною IP-адресою.
Наприклад, якщо інтерфейсу присвоєно адресу 192.168.168.140, то для підключення до сніфера з робочої машини через SSH потрібно використати відповідну команду з цією адресою:
% ssh [email protected]
Для користувачів putty.exe все трохи складніше – потрібно створити новий сеанс, вказати ім’я користувача та IP-адресу хоста, зберегти цей сеанс і тільки потім натиснути Connect . Докладніше про використання цієї утиліти можна почитати на сайті проекту PuTTY .
У процесі підключення, при першому з’єднанні, SSH клієнт попросить підтвердити наміри встановити з’єднання із зазначеним хостом і лише після цього попросить ввести пароль. Вводимо reffins і якщо все пройшло вдало, спостерігаємо те ж саме запрошення (motd) від системи, після якого слідує той самий промпт:
sniffer@sniffer:~ %
Заради інтересу запитаємо у системи, хто ми є і звідки, введемо команду who :
sniffer@sniffer:~ % who sniffer pts/0 Jul 10 07:01 (192.168.171.1) sniffer@sniffer:~ %
Отримаємо привілеї адміністратора, для цього ведемо:
sniffer@sniffer:~ % su Password: 1234 root@sniffer:/home/sniffer #
Тепер клавіатуру і монітор можна сміливо відключити і сховати в куточок (але не далеко), вони нам, швидше за все, не знадобляться, оскільки працювати далі будемо через SSH, але тримати їх варто поблизу талісманів, які відганяють злих духів. 😉
Щоб постійно не перебувати в оболонці з правами адміністратора (root-а), що може бути небезпечним через можливість випадково знищити систему невірно введеною командою, в Unix системах прийнято використовувати утиліту sudo (або аналог doas ). Утиліта sudo дозволяє тимчасово для однієї команди, яка передається їй як параметри, підняти привілеї до адміністратора і скинути їх після завершення.
Ми тільки-но встановили утиліту sudo разом з рядом інших пакетів, але цього ще недостатньо для того, щоб користувач sniffer міг їй скористатися. Нам потрібно розкоментувати один рядок у конфігураційному файлі /usr/local/etc/sudo.conf , але редагувати його ми будемо через допоміжну утиліту visudo (вона є частиною пакету sudo ).
Спочатку вкажемо системі, що для редагування текстових файлів слід використовувати редактор ee . Робиться це налаштуванням змінної оточення EDITOR :
root@sniffer:/home/sniffer # setenv EDITOR /usr/bin/ee
Тепер викликаємо visudo для редагування конфігураційного файлу:
root@sniffer:/home/sniffer # visudo
Утиліта visudo запустить редактор ee і завантажить поточний вміст конфігураційного файлу. Тут треба бути гранично обережним, щоб випадково не змінити нічого зайвого! Знаходимо у тексті рядок виду:
## Uncomment to allow members of group wheel to execute any command # %wheel ALL=(ALL:ALL) ALL
І перед символами %wheel забираємо символ # . Це означає, що цей рядок почне діяти. Її дія зводиться до того, що утиліта sudo дозволить будь-якому користувачеві, що входить до групи wheel , виконувати будь-яку команду від імені root-а. Нагадаю, що коли ми створювали в системі користувача sniffer , ми додавали його до груп wheel і network . В результаті редагування рядок має виглядати так:
%wheel ALL=(ALL:ALL) ALL
Натискаємо ESC , Ener та ще раз Enter щоб зберегти зміни у файл і вийти з ee . З цього моменту sudo дозволить користувачеві sniffer виконувати команди від імені користувача root , тобто з правами адміністратора.
Щоб з’ясувати, до яких груп входить користувач sniffer , можна скористатися командою id наступним чином:
root@sniffer:/home/sniffer # id sniffer uid=1002(sniffer) gid=1002(sniffer) groups=1002(sniffer),0(wheel),69(network)
Команда id показує всі системні ідентифікатори вказаного користувача. Тут ми бачимо, що користувач sniffer входить аж до трьох груп: sniffer , wheel і network . Зверніть увагу, що група wheel має ідентифікатор 0 – це група адміністраторів.
Якщо раптом Ви забули додати користувача sniffer до потрібної групи, зробити це можна будь-якої миті командою pw usermod :
root@sniffer:/home/sniffer # pw usermod sniffer -G wheel,network
Ця команда встановлює (заміщає) список груп користувача sniffer .
Перевіримо як працює sudo . Для цього спочатку вийдемо з адміністраторської оболонки, ввівши команду exit , тобто повернемося в оболонку без привілеїв:
root@sniffer:/home/sniffer # exit exit sniffer@sniffer:~ %
Далі, виконаємо команду id від імені адміністратора:
sniffer@sniffer:~ % sudo id
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
For security reasons, the password you type will not be visible.
Password: reffins
uid=0(root) gid=0(wheel) groups=0(wheel),5(operator)
Спочатку sudo попередить про те, що ви намагаєтеся отримати привілеї адміністратора, що несе за собою певну відповідальність і вам слід діяти обережно. Дане попередження з’явиться лише один раз під час першого використання. Далі sudo запросить у Вас пароль від користувача sniffer . Якщо введений пароль вірний, команда id виконується з правами користувача root . Це видно за ідентифікаторами uid=0(root) gid=0(wheel), що відображаються цією командою.
Якщо раптом sudo видасть повідомлення:
sniffer is not in the sudoers file. This incident has been reported to the administrator.
Це означає, що користувач sniffer не входить до групи wheel , або в конфігураційному файлі є помилка. Варто ще раз запустити visudo та перевірити наявність рядка %wheel .
Далі ми будемо працювати в оболонці від користувача sniffer без привілеїв, промпт має виглядати так: sniffer@sniffer:~ % . А коли знадобиться виконати команду, яка вимагає привілеїв адміністратора, то будемо використовувати sudo .
Перед тим як перейти до мережевих налаштувань, слід трохи вивчити «залізо», що є у нас. Як зазначалося вище, одноплатний міні-ПК Horizon N5 оснащений мікропроцесором Intel Celeron N5105. Побачимо, що наша система знає про нього. Для цього скористаємося чудовою утилітою cpu-x . Ця утиліта має два режими роботи: інтерактивний і командний.
Якщо запустити cpu-x без параметрів, вона перейде в інтерактивний режим з багатоекранним текстовим меню. Переміщуючись по меню стрілками курсору, можна в реальному часі спостерігати за змінами тактової частоти центрального процесора, швидкостей роботи шини, кешів та оперативної пам’яті.
Щоб отримати всю інформацію відразу, можна вказати ключ -D . В обох випадках запускати утиліту cpu-x слід з привілеями адміністратора, наприклад:
sniffer@sniffer:~ % sudo cpu-x Password: reffins
Після цього з’явиться вікно з текстовим меню як на Мал. 7.

Або в командному режимі, щоб отримати повний листинг із описом апаратури. Введемо команду:
sniffer@sniffer:~ % sudo cpu-x -D
І отримаємо:
>>>>>>>>>> CPU <<<<<<<<<<
***** Processor *****
Vendor: Intel
Code Name: Jasper Lake (Celeron)
Package: U3E1
Technology: 10 nm
Voltage: 1.110 V
Specification: Intel(R) Celeron(R) N5095 @ 2.00GHz
Family: 0x6
Disp. Family: 0x6
Model: 0xC
Disp. Model: 0x9C
Temp.: 48°C
Stepping: 0
Instructions: MMX, SSE(1, 2, 3, 3S, 4.1, 4.2), AES, CLMUL, RdRand, SHA, VT-x, x86-64
***** Clocks *****
Core Speed: 1996 MHz
Multiplier: x20.0 (8-29)
Bus Speed: 99.80 MHz
Usage: 0.39 %
***** Cache *****
L1 Data: 4 x 32 kB, 8-way
L1 Inst.: 4 x 32 kB, 8-way
Level 2: 1 x 1536 kB, 12-way
Level 3: 4 MB, 16-way
***** * *****
Cores: 4
Threads: 4
>>>>>>>>>> Caches <<<<<<<<<<
***** L1 Cache *****
Size: 4 x 32 kB, 8-way associative, 64-bytes line size
Speed: 83410.70 MB/s
***** L2 Cache *****
Size: 1 x 1536 kB, 12-way associative, 64-bytes line size
Speed: 35808.30 MB/s
***** L3 Cache *****
Size: 4 MB, 16-way associative, 64-bytes line size
Speed: 24022.30 MB/s
>>>>>>>>>> Motherboard <<<<<<<<<<
***** Motherboard *****
Manufacturer: Rombica
Model: Default string
Revision: Default string
***** BIOS *****
Brand: American Megatrends International, LLC.
Version: T9PRO001
Date: 10/23/2024
ROM Size: 64 kB / 5 MB
***** Chipset *****
Vendor: Intel Corporation
Model: Jasper Lake eSPI Controller
>>>>>>>>>> Memory <<<<<<<<<<
***** Bank 0 *****
Reference: Samsung , 6 GB @ 3733 MT/s (Row Of Chips LPDDR4)
***** Bank 1 *****
Reference: Samsung , 6 GB @ 3733 MT/s (Row Of Chips LPDDR4)
>>>>>>>>>> System <<<<<<<<<<
***** Operating System *****
Kernel: 14.3-RELEASE
Distribution: FreeBSD
Hostname: sniffer
Uptime: 0 days, 1 hours, 54 minutes, 50 seconds
Compiler: FreeBSD clang version 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg
***** Memory *****
Used: 0.90 GiB / 11.46 GiB
Buffers: 0.00 GiB / 11.46 GiB
Cached: 0.00 GiB / 11.46 GiB
Free: 10.55 GiB / 11.46 GiB
Swap: 0.00 GiB / 4.00 GiB
>>>>>>>>>> Graphics <<<<<<<<<<
***** Card 0 *****
Vendor: Intel
Driver:
UMD Version:
Model: JasperLake [UHD Graphics]
Compute Unit:
DeviceID: 0x4E55:0x01
VBIOS Version:
Interface:
Temperature:
Usage:
Core Voltage:
Power Avg:
GPU clock:
Memory clock:
Memory Used:
Resizable BAR:
Vulkan RT:
OpenGL Version:
Vulkan Version:
OpenCL Version:
Тест Coremark дозволяє виміряти пікову продуктивність системи в деяких відносних одиницях, які виражаються в числі ітерацій основного циклу за секунду часу. Знаючи цей параметр для випробуваної системи можна зіставити її з іншими відомими обчислювальними системами і комплексами і оцінити навантаження, з якою може впоратися ця система. Тест Coremark прийшов на зміну тесту Dhrystone і вважається релевантнішим для сучасних обчислювальних систем. Тест Coremark є програмою, написану мовою Сі, і поширюється він у вихідних кодах. Цю програму перед запуском потрібно зібрати (скомпілювати), що можна виконати з різними параметрами оптимізації, а отже тест може показувати дуже різні результати. Тому при порівнянні результатів завжди необхідно звертати увагу на опції компіляції.
Отримати вихідні коди тесту можна з репозиторію з Github-а наступною командою:
sniffer@sniffer:~ % git clone https://github.com/eembc/coremark.git Cloning into 'coremark'... remote: Enumerating objects: 412, done. remote: Counting objects: 100% (175/175), done. remote: Compressing objects: 100% (70/70), done. remote: Total 412 (delta 136), reused 115 (delta 105), pack-reused 237 (from 2) Receiving objects: 100% (412/412), 542.69 KiB | 1.51 MiB/s, done. Resolving deltas: 100% (234/234), done.
Привілеї адміністратора при цьому не потрібні. Складання та запуск тесту виконується відразу однією командою:
sniffer@sniffer:~ % cd coremark && gmake
При цьому буде виконано два прогони тесту з дещо різними параметрами. Результати тестів будуть поміщені у файли ./run1.log та ./run2.log . Нас цікавить перший прогін (performance). Щоб відобразити результат скористаємося командою cat :
sniffer@sniffer:~/coremark % cat run1.log
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 16601
Total time (secs): 16.601000
Iterations/Sec : 18071.200530
Iterations : 300000
Compiler version : FreeBSD Clang 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
Compiler flags : -O2 -DPERFORMANCE_RUN=1 -lrt
Memory location : Please put data memory location here
(e.g. code in flash, data on heap etc)
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0xcc42
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 18071.200530 / FreeBSD Clang 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2) -O2 -DPERFORMANCE_RUN=1 -lrt / Heap
Цифра, що цікавить нас, виділена жирним і становить 18071 одиниць. Часто цей показник переводять у нормовані одиниці на 1 МГц. У нашому випадку це число слід розділити на тактову частоту 1999. Отримаємо 9.0 одиниць Coremark/MHZ .
Важливо, що за умовчанням програма тестує лише одне обчислювальне ядро. Щоб перевірити сумарну продуктивність всіх ядер, необхідно розпаралелити тест на кількість ядер мікропроцесора. Як повідомляє утиліта cpu-x , мікропроцесор Intel Celeron N5095 має 4 паралельні нитки виконання програм. Виконаємо тест на всіх чотирьох нитках:
sniffer@sniffer:~/coremark % gmake clean
rm -f ./coremark.exe ./core_list_join.o ./core_main.o ./core_matrix.o ./core_state.o ./core_util.o ./*.log *.info ./index.html
sniffer@sniffer:~/coremark % gmake XCFLAGS="-DMULTITHREAD=4 -DUSE_FORK"
sniffer@sniffer:~/coremark % cat run1.log
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 16682
Total time (secs): 16.682000
Iterations/Sec : 71933.820885
Iterations : 1200000
Compiler version : FreeBSD Clang 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2)
Compiler flags : -O2 -DMULTITHREAD=4 -DUSE_FORK -DPERFORMANCE_RUN=1 -lrt
Parallel Fork : 4
Memory location : Please put data memory location here
(e.g. code in flash, data on heap etc)
seedcrc : 0xe9f5
[0]crclist : 0xe714
[1]crclist : 0xe714
[2]crclist : 0xe714
[3]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[1]crcmatrix : 0x1fd7
[2]crcmatrix : 0x1fd7
[3]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[1]crcstate : 0x8e3a
[2]crcstate : 0x8e3a
[3]crcstate : 0x8e3a
[0]crcfinal : 0xcc42
[1]crcfinal : 0xcc42
[2]crcfinal : 0xcc42
[3]crcfinal : 0xcc42
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 71933.820885 / FreeBSD Clang 19.1.7 (https://github.com/llvm/llvm-project.git llvmorg-19.1.7-0-gcd708029e0b2) -O2 -DMULTITHREAD=4 -DUSE_FORK -DPERFORMANCE_RUN=1 -lrt / Heap / 4:Fork
В результаті отримуємо 71933 Coremark на всі чотири ядра.
Щоб зрозуміти, багато це чи мало, можна порівняти з аналогічними вимірами, виконаними для відомих систем. Готові вимірювання можна переглянути на сайті EEMBC. Для порівняння, RaspberryPI 5 з тактовою частотою 2.5 МГц видає 72 059 одиниць, а мій ноутбук Lenovo з процесором AMD Ryzen5 і частотою 3.3 ГГц видає 303 116 одиниць Coremark. Очевидно, що міні-ПК, що є в нашому розпорядженні, не поступається популярному одноплатному ПК RaspberryPI 5, але майже на порядок відстає від серйозних десктопних систем.
Давно відомо, що вузьким місцем у сучасних обчислювальних системах є пам’ять, її недостатня швидкість може радикально знизити продуктивність всієї системи. Тест STREAM складається з чотирьох операцій: вимірювання продуктивності операції копіювання (copy), масштабування (scale), складання вмісту осередків (add) та комплексних операцій: масштабування + додавання + пересилання (triad). Як і тест Coremark, тест STREAM є усталеним промисловим стандартом, детальніше прочитати про нього можна за посиланням: https://documentation.sigma2.no/jobs/arm-perf/stream.html
Тест STEAM також поширюється у вихідних кодах, тому, щоб виконати виміри продуктивності пам’яті на нашому пристрої, аналогічним чином клонуємо репозиторій:
sniffer@sniffer:~ % git clone https://github.com/jeffhammond/STREAM.git Cloning into 'STREAM'... remote: Enumerating objects: 89, done. remote: Counting objects: 100% (38/38), done. remote: Compressing objects: 100% (14/14), done. remote: Total 89 (delta 31), reused 24 (delta 24), pack-reused 51 (from 2) Receiving objects: 100% (89/89), 32.88 KiB | 320.00 KiB/s, done. Resolving deltas: 100% (50/50), done.
Перейдемо в підкаталог з вихідним кодом і виконаємо складання:
sniffer@sniffer:~ % cd STREAM && gmake
В результаті складання у нас утворюється файл, що виконується, з ім’ям stream_c.exe. Запустимо його:
sniffer@sniffer:~/STREAM % ./stream_c.exe ------------------------------------------------------------- STREAM version $Revision: 5.10 $ ------------------------------------------------------------- This system uses 8 bytes per array element. ------------------------------------------------------------- Array size = 10000000 (elements), Offset = 0 (elements) Memory per array = 76.3 MiB (= 0.1 GiB). Total memory required = 228.9 MiB (= 0.2 GiB). Each kernel will be executed 10 times. The *best* time for each kernel (excluding the first iteration) will be used to compute the reported bandwidth. ------------------------------------------------------------- Number of Threads requested = 4 Number of Threads counted = 4 ------------------------------------------------------------- Your clock granularity/precision appears to be 1 microseconds. Each test below will take on the order of 7411 microseconds. (= 7411 clock ticks) Increase the size of the arrays if this shows that you are not getting at least 20 clock ticks per test. ------------------------------------------------------------- WARNING -- The above is only a rough guideline. For best results, please be sure you know the precision of your system timer. ------------------------------------------------------------- Function Best Rate MB/s Avg time Min time Max time Copy: 14527.0 0.011080 0.011014 0.011218 Scale: 13139.5 0.012274 0.012177 0.012343 Add: 12786.4 0.018830 0.018770 0.018882 Triad: 12819.8 0.018799 0.018721 0.018890 ------------------------------------------------------------- Solution Validates: avg error less than 1.000000e-13 on all three arrays -------------------------------------------------------------
У результаті бачимо, що операції копіювання виконуються зі швидкістю близько 14 ГБ/сек . Для порівняння, на моєму ноутбуці Lenovo цей показник досягає 18 ГБ/сек , але треба відзначити, що в Horizon N5 використовується високошвидкісна пам’ять LPDDR4, така ж як і в моєму ноуті, тому результати дуже близькі. На серйозних серверних платформах тест STREAM може показувати 120 ГБ/сек (і більше) для операцій копіювання.
Ще один цікавий момент та побічний результат вимірювання продуктивності за допомогою STREAM – це коефіцієнт помилок, який показує надійність усієї підсистеми оперативної пам’яті. У наведеному прикладі тест показує, що коефіцієнт помилок становить менше 1.000000e-13 тобто їх взагалі не зафіксовано. Гарна ознака!
З апаратною частиною розібралися та зробили відповідні висновки. Обчислювальних ресурсів системи цілком достатньо, щоб проводити нескладні виміри трафіку і навіть аналізувати його «на льоту».
На наступному етапі налаштування сніфера важливо визначити спосіб віддаленого доступу до пристрою. Існують різні підходи, однак у більшості випадків для керування Unix-системами використовується протокол SSH, який є стандартом де-факто та забезпечує безпечний канал зв’язку.
Користувачам Windows зазвичай більш звичний RDP, і таку опцію також можна реалізувати, проте для задач даного проєкту основний фокус робиться саме на SSH.
У Unix системах підключення по SSH здійснюється однойменною командою ssh, що входить у пакет OpenSSH. Цей пакет є частиною багатьох операційних систем і вже встановлений у процесі інсталяції. Команда ssh приймає на вхід обов’язковий параметр виду username@hostname або username@xxxx , де xxxx — IP адреса машини. З username все зрозуміло, це ім’я користувача в системі, в нашому випадку це користувач sniffer . А ось з IP адресою (і тим більше з ім’ям хоста, яке можна перетворити на IP адресу) є низка проблем. Як нам дізнатися яку IP адресу у машини сніфера коли вона встановлена, наприклад, у абонента в квартирі? Понад те, навіть ми дізнаємося цей IP, то користі від цього знання немає ніякого, оскільки у домашній мережі абонента завжди використовуються «фейкові», тобто. публічно не маршрутизовані IP адреси, а сам абонент знаходиться за одним і більше транслятором адрес ( NAT – Network Adress Translation). Все це НЕ дозволяє встановити з’єднання з хостом сніфера розташованого всередині домашньої мережі абонента, перебуваючи за її межами. Але що ж робити?
Рішень кілька. Можна скористатися засобами самого ssh для організації зворотного тунелю (SSH Reverse Tunneling) за допомогою опції -R до відомого та публічно доступного хосту Unix, до якого у Вас є доступ. Це рішення не просте в тому плані, що вимагає навичок у використанні Unix систем та розуміння процесу, що відбувається, тому розглядати тут його не будемо. Бажаючі можуть ознайомитися з інструкцією з настроювання зворотного тунелю в Інтернеті.
На місце цього розглянемо більш традиційний спосіб – організація тунелю до відомого публічного хосту за протоколами PPTP (або L2TP) відомих широкому загалу як Virtual Private Network (VPN). Ця технологія дозволяє об’єднувати розкидані глобальною мережею хости компанії в єдину мережу. Гідність VPN технології полягає в тому, що Вам не потрібно організовувати свій PPTP/L2TP сервер, достатньо звернутися до найближчого провайдера послуг Інтернет з проханням організувати для Ваших службових потреб обліковий запис з фіксованою публічною IP адресою. Така послуга буде не безкоштовною, зате знімає масу проблем. Зрозуміло, Ви також можете орендувати в Інтернет провайдера віртуальний сервер з ОС Linux і організувати на ньому свій службовий VPN сервер, але це тема окремої розмови.
Коротше, будемо вважати, що проблема отримання облікового запису до сервера VPN якимось чудовим чином вирішена і у Вас є чотири рядки тексту: IP адреса PPTP сервера, нехай це буде 1.2.3.4 , ім’я користувача: pptp_username та пароль: pptp_password . Також ми знаємо, що після підняття з’єднання з сервером на стороні клієнта завжди буде встановлена та сама публічна IP адреса 4.3.2.1 .
Наше завдання на даному етапі полягає в тому, щоб налаштувати PPTP або L2TP клієнта на машині сніффера. Треба зауважити, що організацією тунелів за протоколами PPTP та L2TP в операційній системі FreeBSD займається демон (фонова утиліта) mpd5, установку якої вже виконали раніше. Насправді всю роботу з інкапсуляції трафіку виконує підсистема netgraph (введіть команду man 4 netgraph для більш детального ознайомлення), а mpd5 це лише надводна частина цього айсберга виконує авторизацію та конфігурування мережного інтерфейсу.
Всі налаштування демона mpd5 знаходяться в каталозі /usr/local/etc/mpd5/ , зазвичай там розташовуються всього три файли: mpd.conf , mpd.script і mpd.secret . Нам потрібно внести зміни до файлу mpd.conf — додати секцію з описом з’єднання, і створити два нові файли-скрипти. Один скрипт (назвемо його ifup.sh ) для додавання специфічних маршрутів до таблиці маршрутизації при встановленні з’єднання, а інший ( ifdown.sh ) для видалення їх при роз’єднанні. А ще нам потрібно внести зміни до системного файлу конфігурації операційної системи /etc/rc.conf , щоб виконувати авто-запуск mpd5 при завантаженні ОС.
Використовуючи редактор ee від імені root-а відкриваємо файл /usr/local/etc/mpd5/mpd.conf командою :
sniffer@sniffer:~ % sudo ee /usr/local/etc/mpd5/mpd.conf
Копіюємо в буфер обміну і вставляємо на початок файлу наступний текст:
startup:
log +ALL +EVENTS -FRAME -ECHO
default:
load PPTP
L2TP:
create bundle static B1
set iface up-script /usr/local/etc/mpd5/ifup.sh
set iface down-script /usr/local/etc/mpd5/ifdown.sh
set iface enable tcpmssfix
set ipcp yes vjcomp
set ccp yes mppc
set mppc yes e128
set mppc yes stateless
create link static L1 l2tp
set link action bundle B1
set link max-redial 0
set link mtu 1460
set link keep-alive 20 75
set link accept chap-msv2
set l2tp peer 1.2.3.4
set auth authname "l2tp_username"
set auth password "l2tp_password"
open
PPTP:
create bundle static B1
set bundle enable compression
set ccp yes mppc
set mppc no e40
set mppc yes e128
set mppc yes stateless
set iface up-script /usr/local/etc/mpd5/ifup.sh
set iface down-script /usr/local/etc/mpd5/ifdown.sh
create link static L1 pptp
set link action bundle B1
set link max-redial 0
set link mtu 1460
set link keep-alive 20 75
set pptp disable windowing
set pptp peer 1.2.3.4
set auth authname "pptp_username"
set auth password "pptp_password"
open
Перед збереженням необхідно підмінити IP-адресу сервера, ім’я користувача та пароль, а також вибрати яку з двох протоколів буде використовуватися. Знаходимо наступні рядки:
set l2tp peer 1.2.3.4
set auth authname "l2tp_username"
set auth password "l2tp_password"
set pptp peer 1.2.3.4
set auth authname "pptp_username"
set auth password "pptp_password"
Та замінює значення параметрів на дійсні, отримані від Інтернет-провайдера.
Для вибору протоколу на початку шукаємо рядки:
default:
load PPTP
І замінюємо load PPTP на load L2PT , якщо потрібно використовувати протокол L2PT. Інакше залишаємо як є. Виходимо з редактора ee , як завжди, послідовним натисканням: ESC , Enter , Enter .
Наступним кроком створюємо файли cкриптів для підняття мережного інтерфейсу. Відкриваємо в редакторі ee спочатку файл ifup.sh :
sniffer@sniffer:~ % sudo ee /usr/local/etc/mpd5/ifup.sh
Копіюємо та вставляємо в нього наступний текст:
#!/bin/sh echo $* > /tmp/.mpd5.$1 wanip=`/sbin/route -n get default | sed -rn 's/gateway: (.*)/\1/p'` echo $wanip > /tmp/.defaultgateway localip=$3 remoteip=$4 serverip=$8 echo localip=$3 remoteip=$4 serverip=$8 >> /tmp/.mpd5.$1 /sbin/route delete $serverip /sbin/route add $serverip $wanip /sbin/route delete default /sbin/route add default $remoteip
Зберігаємо файл (ESC, Enter, Enter) і потім відкриваємо інший файл ifdown.sh :
sniffer@sniffer:~ % sudo ee /usr/local/etc/mpd5/ifdown.sh
Копіюємо та вставляємо в нього наступний текст:
#!/bin/sh wanip=`cat /tmp/.defaultgateway` /sbin/route delete $4 /sbin/route delete default /sbin/route add default $wanip rm /tmp/.defaultgateway
І також зберігаємо.
Тепер нам потрібно додати mpd5 в авто-запуск, щоб при завантаженні операційної системи ця утиліта запускалася і негайно встановлювала з’єднання з сервером VPN, таким чином організуючи нам канал доступу на машину.
В ОС FreeBSD процес авто-запуску програм, та й багато інших аспектів завантаження системи, контролюються набором скриптів, які прийнято називати rc – на ім’я головного скрипта. Налаштування автозапуску розміщуються у файлі /etc/rc.conf . Цей файл можна редагувати звичайним текстовим редактором ( ee ), але так робити не прийнято з цілком зрозумілої причини – непомітна помилка в цьому файлі загрожує виведенням системи з обороту. Для того, щоб вносити зміни в файл конфігурації безпечним способом служить окрема утиліта sysrc .
Скористайтеся утилітою sysrc для додавання mpd5 в /etc/rc.conf , виконаємо наступні команди:
sniffer@sniffer:~ % sudo sysrc mpd_enable="YES" Password: mpd_enable: -> YES sniffer@sniffer:~ % sudo sysrc mpd_flags="-b" mpd_flags: -> -b
Остання команда додає /etc/rc.conf прапор -b який буде переданий утиліті mpd5 при старті і сигналізує їй про необхідність працювати у фоновому режимі (тобто демоном).
Тепер можемо запустити mpd5 та подивитися що у нас вийшло. Запуск системних демонів, тобто тих, що керуються через rc , в ОС FreeBSD здійснюється утилітою service . Виконаємо запуск mpd5 наступною командою:
sniffer@sniffer:~ % sudo service mpd5 start Starting mpd5.
Якщо це пройшло гладко, тобто. у конфігах немає друкарських помилок, а всі налаштування (IP адреса сервера, ім’я користувача та пароль) коректні, то в системі повинен з’явиться ще один мережевий інтерфейс з ім’ям ng0 . Переглянути його параметри можна командою ifconfig ng0 (для перегляду права root-а не потрібні):
sniffer@sniffer:~ % ifconfig ng0
ng0: flags=10088d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1456
options=0
inet 192.168.176.135 --> 192.168.176.1 netmask 0xffffffff
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Тут бачимо, що сервер видав мені IP адресу 192.168.176.135. У Вашому випадку тут має висвічуватися фіксована публічна IP адреса, яка видана Вам провайдером, тобто 4.3.2.1 .
Якщо щось пішло не так, і замість IP адреси на інтерфейс нічого немає, тобто якось так:
sniffer@sniffer:~ % ifconfig ng0 ifconfig: interface ng0 does not exist
Це означає, що mpd5 не запущено або навіть не встановлено.
Або ось так:
sniffer@sniffer:~ % ifconfig ng0
ng0: flags=8890<POINTOPOINT,NOARP,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=0
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Це означає, що mpd5 запустився, але встановити з’єднання PPTP або L2TP у нього не вийшло. Щоб з’ясувати причину необхідно заглянути в лог файл /var/log/daemon.log , у нього утиліта mpd5 видає величезну кількість діагностичної інформації. За допомогою утиліти grep виберемо інформацію з цього файлу щодо встановлення з’єднання:
Наприклад:
sniffer@sniffer:~ % grep mpd /var/log/daemon.log ... Jul 10 09:04:48 sniffer mpd[2986]: [L1] CHAP: Using authname "Sniffer" Jul 10 09:04:48 sniffer mpd[2986]: [L1] CHAP: sending RESPONSE #1 len: 61 Jul 10 09:04:48 sniffer mpd[2986]: [L1] CHAP: rec'd FAILURE #1 len: 31 Jul 10 09:04:48 sniffer mpd[2986]: [L1] MESG: E=691 R=0 M=Login incorrect Jul 10 09:04:48 sniffer mpd[2986]: [L1] LCP: authorization failed Jul 10 09:04:48 sniffer mpd[2986]: [L1] LCP: parameter negotiation failed Jul 10 09:04:48 sniffer mpd[2986]: [L1] LCP: state change Opened --> Stopping Jul 10 09:04:48 sniffer mpd[2986]: [L1] LCP: phase shift AUTHENTICATE --> TERMINATE Jul 10 09:04:48 sniffer mpd[2986]: [L1] AUTH: Cleanup ...
З цього лога видно, що була зроблена спроба використовувати ім’я користувача Sniffer , що призвело до повідомлення « Loging incorrect» через друкарську помилку в першому символі. Необхідно відкрити файл /usr/local/etc/mpd5/mpd.conf у редакторі ee та виправити помилку, після чого виконати команду перезапуску mpd5 :
sniffer@sniffer:~ % sudo service mpd5 restart Stopping mpd5. Waiting for PIDS: 2986. Starting mpd5.
і відразу перевірити:
sniffer@sniffer:~ % ifconfig ng0
ng0: flags=10088d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1456
options=0
inet 192.168.176.135 --> 192.168.176.1 netmask 0xffffffff
nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Якщо все ок, IP адреса на інтерфейсі ng0 присутня, то можна підключатися до сніфер на цю IP адресу наступною командою зі свого робочого ПК:
$ ssh [email protected]
Де 4.3.2.1 — IP адреса на тунельному інтерфейсі, він призначений Вашим провайдером. У моєму випадку це адреса 192.168.176.135 , вона є локальною для моєї мережі і використана тільки для демонстрації.
З цього моменту у Вас з’являється можливість віддаленого підключення до сніфер через глобальну мережу Інтернет, а пароль користувача sniffer слід поміняти на щось більш безпечне або зробити авторизацію по несиметричним ключам.
У першій частині ми пройшли весь фундаментальний шлях — від появи самої ідеї автономного мережевого сніфера до повноцінної підготовки системного середовища на базі FreeBSD. На практиці було показано, яке обладнання підходить для створення компактного інструмента діагностики, як встановити операційну систему, виконати початкове налаштування, підключитися через SSH та підготувати необхідні пакети для подальшої роботи. Ми розглянули апаратні можливості міні-ПК, провели базові тести продуктивності й переконалися, що навіть компактні пристрої здатні забезпечити достатній ресурс для аналізу мережевого трафіку.
Усе це формує надійний технічний фундамент, на який спиратиметься друга частина — практична робота з мережевими інтерфейсами, мостами, тунелями, фільтрами BPF і повноцінним аналізом трафіку.