Bsdadmin.ru

Записки администратора FreeBSD

Путь на сайте

Домашняя Почтовики Утилиты для работы с почтовым сервером Exim.Часть2

Утилиты для работы с почтовым сервером Exim.Часть2

Листы контроля доступа (Access Control List, ACL)

Exim предоставляет возможность использовать, листы контроля доступа (ACL) на
различных этапах SMTP передачи. Условия ACL назначаются в конфигурационном файле exim.conf.
Вы можете провести проверку по отправителю или удаленному хосту. В примере показано как фильтровать по содержимому, идущему после команды RCPT TO. Если прием сообщения будет отклонен в этом месте, вы получите больше данных в логах, нежели при блокировке по MAIL FROM.

# Назначить проверку содержимого после RCPT TO
acl_smtp_rcpt = check_recipient

# Условия для check_recipient ACL
check_recipient:

# [...]

drop hosts = /etc/exim_reject_hosts
drop senders = /etc/exim_reject_senders

# [ Probably a whole lot more... ]
В приведенном примере для блокировки используются два текстовых файла.
В файл /etc/exim_reject_hosts, значения добавляются в виде: имя_хоста/IP_адрес, в файл
/etc/exim_reject_senders в виде адреса отправителя, по одной записи в строке.
Кроме того, можно сканировать содержимое сообщения, на предмет совпадения с регулярным выражением. Это дополнительно загружает процессор, особенно на больших сообщениях.

# Назначить ACL для использования после команды DATA
acl_smtp_data = check_message

# Условия проверки для check_messages ACL
check_message:

deny message = "Sorry, Charlie: $regex_match_string"
regex = ^Subject:: .*Lower your self-esteem by becoming a sysadmin
accept

Запись в лог файл заголовка Subject
Одна из наиболее  полезных возможностей Exim - добавление в exim.conf нижеприведенной строки. Это позволит писать в лог файл строку subject, писем проходящих через сервер. Это может помочь при решении проблем в процессе настройки сервера, а так-же дает дополнительные критерии для отсева спама.
log_selector = +subject

Отключение identd
Identd опирается на подключающийся хост, что-бы подтвердить идентификацию ( System UID ), удаленного пользователя, владельца процесса, устанавливающего сетевое соединение.
Можно запретить Exim делать подобные запросы, установив таймаут 0 секунд в exim.conf.
rfc1413_query_timeout = 0s


Поиск в журнальных файлах с помощью exigrep.
( Можете использовать программу exilog - она проще  и нагляднее, см. на этом сайте.)

Утилита exigrep ( не путайте с exiqgrep, использующейся для поиска в очереди ),используется для поиска по лог файлам. Например exigrep может вывести все записи из лог файла с совпадающим ID сообщения, что довольно удобно, учитывая что каждое сообщение занимает 3 строки в лог файле.
Поиск сообщений отправленных с определенного IP адреса:
localhost# exigrep '<= .* \[12.34.56.78\] ' /path/to/exim_log

Поиск сообщений отправленных на определенный IP адрес:
localhost# exigrep '=> .* \[12.34.56.78\]' /path/to/exim_log

Данный пример ищет сообщения содержащие символы "=>", и отправленные на адрес " Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.  , далее по конвейеру, результат передается команде grep, которая из полученного результата выбирает строки, содержащие "<=" с информацией об отправителе, почтовом адресе, IP адресе, размере сообщения, ID сообщения и заголовок subject, если логгирование этой строки включено.
localhost# exigrep '=> .* Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ' /path/to/exim_log | fgrep '<='

Генерировать из лог-файла и показать статистику Exim:
localhost# eximstats /path/to/exim_mainlog

То-же самое, что и выше, но с более подробными данными:
localhost# eximstats -ne -nr -nt /path/to/exim_mainlog

Аналогично, но за определенный день:
localhost# fgrep YYYY-MM-DD /path/to/exim_mainlog | eximstats

И еще.

Удалить все сообщения в очереди, содержащие в теле, определенную строку:
localhost# grep -lr 'a certain string' /var/spool/exim/input/ | \
sed -e 's/^.*\/\([a-zA-Z0-9-]*\)-[DH]$/\1/g' | xargs exim -Mrm
Командой выше, мы проверяем содержимое каталога /var/spool/exim/input/, в поисках файлов очереди, содержащих определенную строку в теле сообщения, поскольку команда exiqgrep не умеет просматривать тело сообщений. Если вы решите удалить найденные файлы напрямую, ЭТО БУДЕТ НЕ ПРАВИЛЬНО, используйте предназначенные для этого команды exim.
Если вывод используемой команды слишком длинный, например ID сообщений при exiqgrep -i, которые нужно передать дальше по конвейеру команде exim, может быть превышено количество аргументов командной строки вашей системной оболочки. В этом случае передавайте результат поиска через конвейер, команде xargs, которая будет обрабатывать результаты ограниченными порциями.

Например удалим тысячи сообщений, отправленных с адреса Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :
localhost# exiqgrep -i -f '' | xargs exim -Mrm 
После того как вы внесли изменения в файл конфигурации, не забудьте перезапустить exim , или послать рабочему процессу сигнал SIGHUP, что-бы он перечитал конфигурационный файл и изменения вступили в силу. Предпочтительней естественно отправить сигнал, нежели перезапускать приложение.
localhost# kill -HUP `cat /var/spool/exim/exim-daemon.pid`

Домашняя Почтовики Утилиты для работы с почтовым сервером Exim.Часть2