Найти в Дзене

Инструкции по установке и настройке p0f-mtu

sudo apt-get update
sudo apt-get install -y build-essential autoconf automake libtool \
git pkg-config libpcap-dev flex bison Пояснение: Если хотите собрать libpcap вручную, то можно: cd /opt
git clone https://github.com/the-tcpdump-group/libpcap
cd libpcap
./configure
make -j$(nproc)
sudo make install
sudo ldconfig (но пакет libpcap-dev решает нужду в большинстве случаев, я использовал его). Лучше поставить в /opt: sudo mkdir -p /opt
cd /opt
git clone https://github.com/ValdikSS/p0f-mtu.git
# или если у вас уже архив — распакуйте
cd /opt/p0f-mtu Запустите сборочный скрипт: cd /opt/p0f-mtu
sudo ./build.sh Если ./build.sh падает с ошибками — смотрите вывод, установите дополнительные dev-пакеты. Частые зависимости: libpcap-dev, libssl-dev, liblzma-dev, zlib1g-dev — при необходимости устанавливайте. Сам скрипт можете поставить в директорию своего сайта: git clone https://github.com/ValdikSS/p0f-mtu-script.git Перейдите в каталог tools и соберите утилиты клиента: cd /opt/p0f-mtu/tools
Оглавление
Пошаговая инструкция по установке и запуску p0f/p0f-mtu (сборка libpcap, зависимости, сборка p0f, запуск демона и клиент-утилиты). Инструкция даёт готовые команды, объяснения и советы по отладке — можно копировать и запускать на целевой машине (Ubuntu/Debian-производные).
Пошаговая инструкция по установке и запуску p0f/p0f-mtu (сборка libpcap, зависимости, сборка p0f, запуск демона и клиент-утилиты). Инструкция даёт готовые команды, объяснения и советы по отладке — можно копировать и запускать на целевой машине (Ubuntu/Debian-производные).

1. Подготовка: обновление и установка зависимостей

sudo apt-get update
sudo apt-get install -y build-essential autoconf automake libtool \
git pkg-config libpcap-dev flex bison

Пояснение:

  • build-essential — gcc/make и т.д.
  • libpcap-dev — заголовки/библиотеки pcap (в истории вы пытались собирать libpcap, но можно установить пакет).
  • flex и bison — требуются для сборки некоторых компонентов.

Если хотите собрать libpcap вручную, то можно:

cd /opt
git clone https://github.com/the-tcpdump-group/libpcap
cd libpcap
./configure
make -j$(nproc)
sudo make install
sudo ldconfig

(но пакет libpcap-dev решает нужду в большинстве случаев, я использовал его).

2. Клонирование/копирование p0f-mtu и начальная сборка

Лучше поставить в /opt:

sudo mkdir -p /opt
cd /opt
git clone
https://github.com/ValdikSS/p0f-mtu.git
# или если у вас уже архив — распакуйте
cd /opt/p0f-mtu
GitHub - ValdikSS/p0f-mtu: p0f with patches to save MTU value and export it via API (for VPN detection)

Запустите сборочный скрипт:

cd /opt/p0f-mtu
sudo ./build.sh

Если ./build.sh падает с ошибками — смотрите вывод, установите дополнительные dev-пакеты. Частые зависимости: libpcap-dev, libssl-dev, liblzma-dev, zlib1g-dev — при необходимости устанавливайте.

Сам скрипт можете поставить в директорию своего сайта:

git clone https://github.com/ValdikSS/p0f-mtu-script.git
GitHub - ValdikSS/p0f-mtu-script: WITCH?(VPN detector) source code

3. Сборка инструментов (tools)

Перейдите в каталог tools и соберите утилиты клиента:

cd /opt/p0f-mtu/tools
make p0f-sendsyn # если доступно
make p0f-client

После успешной сборки у вас появятся p0f-client, p0f-sendsyn и др.

4. Привилегии для захвата пакетов

Для захвата пакетов p0f должен иметь привилегии (raw sockets). Варианты:

  1. Запускать p0f от root (просто sudo или systemd с User=root) — просто, но менее безопасно.
  2. Дать бинарю права CAP_NET_RAW и CAP_NET_ADMIN (лучше):
sudo setcap 'cap_net_raw,cap_net_admin+eip' /opt/p0f-mtu/p0f

(если ваша сборка разместила бинарь под другим путём — поправьте путь).

Если setcap недоступен, установите libcap2-bin.

5. Запуск p0f вручную (проверка)

Примеры команд из вашей истории (корректируем пути и опции):

Запуск демона:

cd /opt/p0f-mtu
sudo ./p0f -i eth0 -s /opt/p0f-mtu/p0f-socket -u daemon -d 'tcp and (dst port 80 or src port 80)'

Объяснение опций:

  • -i eth0 — интерфейс для прослушивания (подставьте ваш интерфейс: ip a).
  • -s /opt/p0f-mtu/p0f-socket — unix socket для клиента.
  • -u daemon — сменить пользователя на daemon после привилегий (можно создать специального пользователя).
  • -d '...' — BPF-фильтр для снижения объёма трафика.

Подсказка: если хотите запускать в фоне — используйте nohup или лучше systemd (см. ниже).

6. Проверка p0f-client

После того как демон запущен и создал socket /opt/p0f-mtu/p0f-socket, вы можете опрашивать socket:

/opt/p0f-mtu/tools/p0f-client /opt/p0f-mtu/p0f-socket 8.8.8.8
/opt/p0f-mtu/tools/p0f-client /opt/p0f-mtu/p0f-socket 104.23.221.102

Первый аргумент — путь к socket, второй — IP для запроса. В истории именно так и делали — это удобный способ протестировать работу.

7. Создание системного пользователя (рекомендуется)

Создайте пользователя, от имени которого будет работать p0f (без логина):

sudo useradd --system --no-create-home --shell /usr/sbin/nologin p0f
sudo chown -R p0f:p0f /opt/p0f-mtu

Если в командной строке p0f указываете -u p0f, процесс после инициализации переключится на этого пользователя.

8. systemd-unit для p0f (рекомендуется для продакшна)

Создайте файл /etc/systemd/system/p0f.service со следующим содержимым:

[Unit]
Description=p0f passive OS/fingerprint daemon (p0f-mtu)
After=network.target

[Service]
Type=simple
User=p0f
Group=p0f
# при необходимости укажите полный путь к бинарю
ExecStart=/opt/p0f-mtu/p0f -i eth0 -s /opt/p0f-mtu/p0f-socket -u p0f -d "tcp and (dst port 80 or src port 80)"
# если нужен абсолютный путь для working dir
WorkingDirectory=/opt/p0f-mtu
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Затем:

sudo systemctl daemon-reload
sudo systemctl enable --now p0f.service
sudo journalctl -u p0f.service -f

Проверьте статус:

sudo systemctl status p0f.service

9. Логирование и ротация логов

p0f пишет в stdout/journal. Если вы хотите файлы логов — используйте systemd-юнит с StandardOutput=append:/var/log/p0f.log или перенаправляйте вывод в лог-файл и настроите logrotate.

Пример конфигурации для logrotate /etc/logrotate.d/p0f (если используете файл):

/var/log/p0f.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 p0f p0f
}

10. Тонкая настройка BPF-фильтра и интерфейса

BPF-фильтр в -d важен для снижения нагрузки. Примеры:

  • HTTP трафик: 'tcp and (dst port 80 or src port 80)'
  • Добавить HTTPS (если нужно): tcp and (port 80 or port 443)
  • Фильтрация по IP-сети: net 10.0.0.0/8

Также убедитесь, что выбран правильный интерфейс: ip link / ip addr чтобы не слушать ненужный интерфейс.

11. Отладка проблем (частые ошибки и решения)

  • p0f не запускается — нет прав: используйте sudo или дайте setcap привилегии (см. выше).
  • socket не создаётся / p0f-client не подключается: проверьте пути и права на socket; запуск от не того пользователя может не позволять клиенту читать.
  • Ошибка сборки: установите недостающие *-dev пакеты по сообщениям configure/make.
  • Если использовали ручную сборку libpcap: убедитесь, что ldconfig выполнил обновление (sudo ldconfig), чтобы система увидела новую libpcap.
  • SELinux/AppArmor: при включённом профиле безопасность может блокировать сетевой доступ — посмотрите логи audit/dmesg и временно отключите профиль для проверки.

12. Команды для быстрого тестирования (суммарно)

# 1) Сборка (пример)
cd /opt/p0f-mtu
sudo ./build.sh

# 2) Сборка инструментов
cd /opt/p0f-mtu/tools
make p0f-client
make p0f-sendsyn

# 3) Запуск вручную (для теста)
sudo /opt/p0f-mtu/p0f -i eth0 -s /opt/p0f-mtu/p0f-socket -u p0f -d 'tcp and (dst port 80 or src port 80)'

# 4) Проверка client
/opt/p0f-mtu/tools/p0f-client /opt/p0f-mtu/p0f-socket 8.8.8.8