Интеграция P0F с Amavisd-new и SpamAssassin [2009]
Постановка задачи
P0F – Linux/Unix-утилита, предназначенная для
определения типа операционной системы удаленного компьютера путем анализа
пакетов, перехваченных в момент установки соединения. В отличие от активных
сканеров (например, nmap и queSO) p0f относится к пассивным сканерам, работает
абсолютно прозрачно и не создает какой-либо дополнительный трафик с удаленным
компьютером. Последние версии Amavisd-new и SpamAssassin позволяют использовать
результаты работы p0f в качестве дополнительного критерия идентификации СПАМа. В
этой заметке описан процесс интеграции p0f в существующую систему защиты от
СПАМа на базе Amavisd-new и SpamAssassin.
Исходные данные
Имеется сервер с FreeBSD, находящийся на входе подсети центрального офиса. На
этом сервере развернута почтовая система, имеющая примерно такую же подсистему
защиты от СПАМа, как Почтовая система среднего
офиса на базе Postfix. Утилита p0f будет автоматически установлена в
процессе пересборки порта Amavisd-new. Программное обеспечение будет
разворачиваться из портов, поэтому я рекомендую Вам обновить их перед выполнением действий, описанных
ниже (я использовал FreeBSD 7.2 и последние версии портов для нее).
Интеграция p0f и Amavisd-new
Amavisd-new взаимодействует с p0f посредством демона amavis-p0fanalyzer,
который входит в состав Amavisd-new. Демон amavis-p0fanalyzer обеспечивает
прослушивание входящих TCP-подключений на 25й порт всех сетевых
интерфейсов сервера с помошью p0f, соответствующую обработку, сохранение в кеше
на 10 минут и отдачу собранных данных в ответ на специальные UDP-запросы на 2345
порт локального сетевого интерфейса от Amavisd-new. Получив информацию,
Amavisd-new добавляет к сообщению заголовок
X-Amavis-OS-Fingerprint, содержащий тип операционной системы,
аптайм, IP-дистанцию, тип сетевого подключения, IP-адрес и порт почтового
сервера, например:
Интеграцию p0f и Amavisd-new следует начать с пересборки Amavisd-new (в
процессе пересборки будет автоматически установлена p0f):
cd
/usr/ports/security/amavisd-new
make deinstall
make
WITH_P0F=true reinstall clean
Для того, чтобы amavis-p0fanalyzer запускался при запуске операционной
системы, необходимо добавить в файл /etc/rc.conf строку:
amavis_p0fanalyzer_enable="YES"
После этого следует запустить amavis-p0fanalyzer командой
/usr/local/etc/rc.d/amavis-p0fanalyzer start. Для того, чтобы
Amavisd-new начал запрашивать информацию у amavis-p0fanalyzer и добавлять к
обрабатываемым сообщениям соответствующие заголовки, в файле
/usr/local/etc/amavisd.conf необходимо раскомментировать
строку:
$os_fingerprint_method = 'p0f:*:2345'; # to query
p0f-analyzer.pl
На этом интеграция p0f и Amavisd-new заканчивается. Остается перезапустить
Amavisd-new командой amavisd reload. Если Вы не допустили ошибок,
то в заголовки принятых сообщений теперь будет добавляться поле
X-Amavis-OS-Fingerprint. Следует отметить, что по умолчанию для
снижения нагрузки на сервер обрабатываются только те сообщения, которые были
отправлены из-за пределов доверенных сетей, определенных в файле
/usr/local/etc/amavisd.conf с помощью переменной
@mynetworks.
Интеграция p0f и SpamAssassin
Интеграция p0f и SpamAssassin заключается в добавлении правил, которые
анализируют содержимое поля X-Amavis-OS-Fingerprint и выставляют
соответствующие оценки. В официальной документации Amavisd-new представлена
следующая статистика (ham – сообщения, получившие оценку ≤3 и не
являющиеся СПАМом, spam – сообщения, получившие оценку ≥6 и
являющиеся СПАМом).
Для того, чтобы SpamAssassin учитывал тип операционной системы почтового
сервера, содержащийся в добавленном Amavisd-new заголовке
X-Amavis-OS-Fingerprint, необходимо добавить в файл в файл
/usr/local/etc/mail/spamassassin/local.cf следующие правила (оценки
score обоснованы представленной выше диаграммой и могут быть
уточнены в процессе точной настройки системы защиты от СПАМа):
describe
__L_P0F_EXISTS A header field X-Amavis-OS-Fingerprint does exist
Правило, заданное в строках 3-5 срабатывает в случае использования на
почтовом сервере Windows XP; в строках 6-8 – любой версии Windows, но не Windows
XP; в строках 9-11 – неизвестной p0f операционной системы; в строках 12-14 –
Unix, но не Linux; в строках 15-17 – Linux. Также официальная документация
Amavisd-new рекомендует учитывать IP-дистанцию в процессе идентификации СПАМа.
Для того, чтобы SpamAssassin учитывал IP-дистанцию, содержащуюся в добавленном
Amavisd-new заголовке X-Amavis-OS-Fingerprint, необходимо добавить
в файл в файл /usr/local/etc/mail/spamassassin/local.cf следующие
правила:
Правило, заданное в строках 1 и 2 срабатывает, если IP-дистанция равна 1-4; в
строках 3 и 4 – если IP-дистанция равна 5; 5 и 6 – если IP-дистанция равна 6; 7
и 8 – если IP-дистанция равна 7; 9 и 10 – если IP-дистанция равна 8; 11 и 12 –
если IP-дистанция равна 9; 13 и 14 – если IP-дистанция равна 10; 15 и 16 – если
IP-дистанция равна 11. На мой взгляд, правила не требуют дополнительных
пояснений. На этом интеграция p0f и SpamAssassin заканчивается. Остается
проверить файл /usr/local/etc/mail/spamassassin/local.cf на наличие
ошибок командой spamassassin --lint и перезапустить Amavisd-new
командой amavisd reload.
Заключение
Выполнив действия, описанные в этой статье, Вы поможете своей почтовой
системе более адекватно идентифицировать СПАМ. На мой взгляд, актуальность
рассмотренной доработки будет расти с течением времени, т.к. компьютеры,
подключенные к Интернет, есть почти в каждом доме, однако, далеко не все
пользователи заморачиваются с их грамотной настройкой и защитой от вредоносного
программного обеспечения.