[exim-conf] набор сигнатур p0f адаптирован для пассивного определения свежих версий FreeBSD и Linux при использовании IPv6

Victor Ustugov victor на corvax.kiev.ua
Вс Сен 2 19:06:25 EEST 2018


Victor Ustugov wrote on 24.11.2014 1:22:

> реализована пассивная проверка операционной системы хоста отправителя.
> 
> сама проверка ОС осуществляется с помощью p0f:
> 
> http://lcamtuf.coredump.cx/p0f3/

обнаружилось, что в списке сигнатур для p0f нет сигнатур, специфичных
для FreeBSD (как минимум 11.x, а потом это касается и 10.x) и Linux (как
минимум 4.4.0, но скорее всего всех 4.x) при работе по IPv6.

соответствующие сигнатуры добавлены в файл p0f.fp и выложены варианты
для несколько версий p0f:

https://mta.org.ua/p0f/db/

p0f 3.07b доступен на https://github.com/p0f/p0f (почему-то на столько
не свежая версия там), p0f 3.00b и p0f 3.09b - две последние версии,
доступные как в портах FreeBSD, так и на
http://lcamtuf.coredump.cx/p0f3/releases/


> можно скачать архив исходных текстов:
> 
> http://lcamtuf.coredump.cx/p0f3/releases/p0f-3.08b.tgz

свежая ссылка:

http://lcamtuf.coredump.cx/p0f3/releases/p0f-3.09b.tgz


> под FreeBSD можно собрать p0f из порта:
> 
> cd /usr/ports/net-mgmt/p0f && make install clean

после установки p0f из порта нужно добавить стартовый скрипт:

wget https://mta.org.ua/p0f/freebsd/usr/local/etc/rc.d/p0f
-O/usr/local/etc/rc.d/p0f
chmod +x /usr/local/etc/rc.d/p0f


и обновить базу сигнатур:

wget https://mta.org.ua/p0f/db/p0f.fp-3.09b -O/usr/local/etc/p0f.fp


или так (в случае, если версия p0f в портах будет свежее 3.09b):

curl -o - https://mta.org.ua/p0f/db/p0f.fp-3.09b.diff | patch
/usr/local/etc/p0f.fp


> в /etc/rc.conf нужно указать:
> p0f_enable="YES"
> 
> p0f может работать только на одном интерфейсе. поэтому в переменной
> p0f_iface нужно указать название интерфейса.
> 
> по умолчанию будет использовано следующее имя файла сокета:
> /var/run/p0f.sock
> 
> альтернативное имя файла можно указать в /etc/rc.conf в переменной
> p0f_socket:
> 
> p0f_socket="/var/run/p0f_em0.sock"

добавлены два новых параметра:

p0f_pidfile="/var/run/p0f.pid
p0f_flags=""


их можно переопределять в /etc/rc.conf

в p0f_flags можно указать "-o /var/log/p0f.log" для включения
протоколирования работы p0f (сильно пригодилось при разборках с
определением свежих Ubuntu и FreeBSD при использовании IPv6).

для включения ротации логов можно использовать следующий файл для
настройки newsyslog:

https://mta.org.ua/p0f/freebsd/usr/local/etc/newsyslog.conf.d/newsyslog-p0f.conf


> при необходимости определять операционную систему SMTP клиента при
> коннектах на нескольких интерфейсах нужно запустить по одному экземпляру
> p0f для каждого интерфейса.
> 
> для запуска второго экземпляра p0f нужно сделать копию стартового
> скрипта /usr/local/etc/rc.d/p0f с другим именем. при этом нужно учесть,
> что имена всех переменных в /etc/rc.conf будут соответствовать названию
> новой копии стартового скрипта.
> 
> т. е. для /usr/local/etc/rc.d/p0f_em1 в /etc/rc.conf можно указать
> следующие переменные:
> 
> p0f_em1_enable="YES"
> p0f_em1_iface="em1"
> p0f_em1_socket="/var/run/p0f_em1.sock"

в этом случае также нужно указать альтернативный путь к pid файлу и
опционально альтернативный путь к логу:

p0f_em1_pidfile="/var/run/p0f_em1.pid
p0f_em1_flags="-o /var/log/p0f_em1.log"


и следует не забыть внести путь к /var/log/p0f_em1.log и
/var/run/p0f_em1.pid в /usr/local/etc/newsyslog.conf.d/newsyslog-p0f.conf


> для RedHat/CentOS/Fedora можно получить пакет с исходными текстами из
> Fedora rawhide с одного из зеркал:
> 
> https://dl.fedoraproject.org/pub/fedora/linux/development/rawhide/source/SRPMS/p/p0f-3.08b-1.fc22.src.rpm
> ftp://ftp.funet.fi/pub/Linux/mirrors/fedora/linux/development/rawhide/source/SRPMS/p/p0f-3.08b-1.fc22.src.rpm

свежая ссылка:

ftp://ftp.funet.fi/pub/Linux/mirrors/fedora/linux/development/rawhide/Everything/source/tree/Packages/p/p0f-3.09b-6.fc29.src.rpm


после сборки и установки пакета нужно добавить стартовый скрипт:

wget https://mta.org.ua/p0f/redhat/etc/rc.d/init.d/p0f
-O/etc/rc.d/init.d/p0f
chmod +x /etc/rc.d/init.d/p0f
chkconfig --level 35 p0f on


и обновить базу сигнатур:

wget https://mta.org.ua/p0f/db/p0f.fp-3.09b -O/etc/p0f/p0f.fp


> p0f указываются в файле /etc/sysconfig/p0f:
> 
> P0F_IFACE="eth0"
> P0F_SOCKET="/var/run/p0f.sock"

добавлена опциональная переменная P0F_EXTRA_COMMAND_ARGS, в которой
можно указать путь к логу:

P0F_EXTRA_COMMAND_ARGS="-o /var/log/p0f.log"


в этом случае для настроек logrotate можно использовать данный пример:

https://mta.org.ua/p0f/redhat/etc/logrotate.d/p0f


> в случае необходимости запуска второго экземпляра p0f на другом
> интерфейсе необходимо сделать копию стартового скрипта
> /etc/rc.d/init.d/p0f с другим именем, создать для него соответствующий
> файл настроек в /etc/sysconfig и настроить запуск демона:
> 
> cp -p /etc/rc.d/init.d/p0f /etc/rc.d/init.d/p0f_eth1
> echo 'P0F_IFACE="eth1"' > /etc/sysconfig/p0f_eth1
> echo 'P0F_SOCKET="/var/run/p0f_eth1.sock"' >> /etc/sysconfig/p0f_eth1
> /sbin/chkconfig --level 35 p0f_eth1 on
> /sbin/service p0f_eth1 start


сборка p0f под Ubuntu 16:

apt-get update
apt-get install -y libpcap-dev

wget http://lcamtuf.coredump.cx/p0f3/releases/p0f-latest.tgz
tar -xvzf p0f-latest.tgz
cd p0f*
make all && ( cp -p p0f /usr/local/sbin/ ; cp -p p0f.fp /usr/local/etc/
; mkdir -p /usr/local/share/doc/p0f ; cp -p docs/*
/usr/local/share/doc/p0f/ )
cd tools
make all && cp -p p0f-client p0f-sendsyn p0f-sendsyn6 /usr/local/bin/
cd ../..

echo 'P0F_IFACE="eth0"' > /etc/default/p0f
#echo 'P0F_SOCKET="/var/run/p0f.sock"' >> /etc/default/p0f
#echo 'P0F_FINGERPRINT_DATABASE="/usr/local/etc/p0f.fp"' >> /etc/default/p0f
#echo 'P0F_EXTRA_COMMAND_ARGS="-o /var/log/p0f.log"' >> /etc/default/p0f


добавление стартового скрипта:

wget https://mta.org.ua/p0f/ubuntu-16/etc/init.d/p0f -O/etc/init.d/p0f
chmod +x /etc/init.d/p0f
systemctl enable p0f
systemctl start p0f


обновление базы сигнатур:

wget https://mta.org.ua/p0f/db/p0f.fp-3.09b -O/etc/p0f.fp


или так (в случае, если версия p0f в
http://lcamtuf.coredump.cx/p0f3/releases/p0f-latest.tgz будет свежее 3.09b):

curl -o - https://mta.org.ua/p0f/db/p0f.fp-3.09b.diff | patch /etc/p0f.fp


настройки p0f указываются в /etc/default/p0f:

P0F_IFACE="eth0"
P0F_SOCKET="/var/run/p0f.sock"
P0F_FINGERPRINT_DATABASE="/usr/local/etc/p0f.fp"
P0F_EXTRA_COMMAND_ARGS="-o /var/log/p0f.log"


кроме P0F_IFACE остальные настройки опциональные.

в случае указания "-o /var/log/p0f.log" в значении
P0F_EXTRA_COMMAND_ARGS можно использовать данный пример настроек logrotate:

https://mta.org.ua/p0f/ubuntu-16/etc/logrotate.d/p0f


> кроме p0f для определения ОС SMTP клиента понадобится fldunc
> exim-p0f3-dlfunc:
> 
> http://dist.epipe.com/exim/
> http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.README.txt
> http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.tar.gz
> 
> для сборки этой dlfunc понадобятся исходные тексты exim (как и для
> сборки любой другой dlfunc).
> 
> пример для FreeBSD:
> 
> fetch http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.tar.gz
> tar -xzf exim-p0f3-dlfunc-0.1.tar.gz
> cd exim-p0f3-dlfunc-0.1
> CPPFLAGS="-I`ls -1d /usr/ports/mail/exim/work/exim-4.*/build-FreeBSD-*`"
> ./configure --libdir=`ls -1d
> /usr/ports/mail/exim/work/exim-4.*/build-FreeBSD-*`/
> make
> cp -p .libs/exim-p0f3-dlfunc.so /usr/local/libexec/exim/
> cd ..
> 
> 
> пример для RedHat/CentOS/Fedora:
> 
> wget http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.tar.gz
> tar -xzf exim-p0f3-dlfunc-0.1.tar.gz
> cd exim-p0f3-dlfunc-0.1
> CPPFLAGS="-I`ls -1d /usr/src/redhat/BUILD/exim-4.*/build-Linux-* | tail
> -n 1`" ./configure --libdir=`ls -1d
> /usr/src/redhat/BUILD/exim-4.*/build-Linux-* | tail -n 1`/
> make
> cp -p .libs/exim-p0f3-dlfunc.so /usr/local/libexec/exim/
> cd ..

пример для сборки exim-p0f3-dlfunc при сборке exim из deb-src под
Debian/Ubuntu механизмом из
https://mta.org.ua/exim-4.88-conf/packages/deb-debian/exim-4.91-7.sid/:

wget http://dist.epipe.com/exim/exim-p0f3-dlfunc-0.1.tar.gz
tar -xzf exim-p0f3-dlfunc-0.1.tar.gz
cd exim-p0f3-dlfunc-0.1
CPPFLAGS="-I`ls -1d
/tmp/pbuild/exim4/exim4-4.*/build-tree/build-exim4-daemon-custom
/tmp/pbuild/exim4/exim4-4.*/b-exim4-daemon-custom/build-*
/tmp/pbuild/exim4/exim4-4.*/b-exim4-daemon-light/build-* | tail -n 1`"
./configure --libdir=`ls -1d
/tmp/pbuild/exim4/exim4-4.*/build-tree/build-exim4-daemon-custom
/tmp/pbuild/exim4/exim4-4.*/b-exim4-daemon-custom/build-*
/tmp/pbuild/exim4/exim4-4.*/b-exim4-daemon-light/build-* | tail -n 1`/
make
cp -p .libs/exim-p0f3-dlfunc.so /usr/local/libexec/exim/
cd ..


-- 
Best wishes
Victor Ustugov        mailto:victor на corvax.kiev.ua
public GnuPG/PGP key: https://victor.corvax.kiev.ua/corvax.asc
Skype ID: corvax_nb   JID: victor на corvax.kiev.ua




Подробная информация о списке рассылки Exim-conf