Alex 'AdUser' Z
9 years ago
5 changed files with 175 additions and 0 deletions
@ -0,0 +1,65 @@ |
|||||||
|
--- |
||||||
|
title: Почтовый шлюз: задание со звёздочкой (Вступление) |
||||||
|
tags: mail, spam, exim, zabbix, rspamd, репост |
||||||
|
--- |
||||||
|
|
||||||
|
В этой серии заметок я попытаюсь обобщить свой опыт построения почтовых шлюзов на базе exim'а (с замечаниями как это делается в posfix'е). |
||||||
|
Сразу отмечу, что здесь не рассматриваются вопросы взаимодействия с юзерами, т.е. шлюз выполняет роль исключительно MTA |
||||||
|
(См общую схему [здесь](https://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D1%87%D1%82%D0%B0)). |
||||||
|
|
||||||
|
Материал большой, поэтому разбит на несколько частей, выходит по мере оформления. Примерное оглавление: |
||||||
|
|
||||||
|
- [Вступление](/articles/2016/04/10/hardcore-mail-relay-1/) |
||||||
|
* общие сведения о сети |
||||||
|
* литература и ссылки |
||||||
|
- [Статистика и мониторинг](/articles/2016/04/10/hardcore-mail-relay-2/) |
||||||
|
- Настройки средств самого exim'а |
||||||
|
- Усиливаем защиту внешними средствами |
||||||
|
* отстрел ботов |
||||||
|
* грейлистинг |
||||||
|
* DKIM |
||||||
|
* антиспам |
||||||
|
* антивирус |
||||||
|
* заметки на полях по поводу платных антивирусов под *nix |
||||||
|
- Обратная связь и переобучение системы |
||||||
|
* переобучение антиспама |
||||||
|
* репутация доменов |
||||||
|
- Базовая настройка rspamd |
||||||
|
- Донастройка антиспама на основе конкретных писем |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
Общая схема сети довольно проста: |
||||||
|
|
||||||
|
[![](overview_tn.jpg)](overview.png) |
||||||
|
|
||||||
|
``relay`` -- это наш почтовый шлюз, полное имя ``relay.example.com``, одним интерфейсом смотрит в локалку, вторым - наружу. |
||||||
|
``mail`` -- это сервер, где почта принимается, хранится и раздаётся юзерам; смотрит только в локалку. |
||||||
|
|
||||||
|
Задача простая - пропускать минимум спама, доставлять максимум почты, в минимальные сроки. |
||||||
|
|
||||||
|
В качестве MTA используется exim, т.к. он всё-таки лучше подходит для шлюза со сложной логикой маршрутизации: конфиг проще воспринимать. |
||||||
|
|
||||||
|
Если конфигурация достаточно простая -- берите postfix и не заморачивайтесь, там можно настроить всё то же самое, но с гораздо меньшим количеством ручной писанины. |
||||||
|
Например вам не придётся руками реализовывать общение с сокетом sqlgrey или другого подобного сервера политик. |
||||||
|
То же самое с большинством проверок helo/rev-hostname/domain -- правила естественным образом выносятся в отдельные файлы. |
||||||
|
|
||||||
|
Литература и ссылки |
||||||
|
------------------- |
||||||
|
|
||||||
|
Подборка ссылок, где можно скачить используемый софт и почитать документацию. |
||||||
|
|
||||||
|
Оффсайты: |
||||||
|
|
||||||
|
* [exim](http://www.exim.org) |
||||||
|
* [sqlgrey](http://sqlgrey.sourceforge.net/) |
||||||
|
* [clamav](http://www.clamav.net) |
||||||
|
* [rspamd](http://rspamd.com) |
||||||
|
* [fail2ban](http://www.fail2ban.org), [f2b](http://linuxdv.org/articles/2016/03/17/f2b/) |
||||||
|
* [redis](http://redis.io) |
||||||
|
|
||||||
|
Документация: |
||||||
|
|
||||||
|
* [официальный талмуд по exim'у](http://www.exim.org/exim-html-current/doc/html/spec_html/index.html) |
||||||
|
* [rspamd, документация на оффсайте](http://rspamd.com/doc/index.html) |
||||||
|
* [rspamd, более читабельная версия доков](https://bitbucket.org/vstakhov/rspamd/wiki/Documentation_single) |
After Width: | Height: | Size: 60 KiB |
After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
@ -0,0 +1,110 @@ |
|||||||
|
--- |
||||||
|
title: Почтовый шлюз: задание со звёздочкой (Статистика и мониторинг) |
||||||
|
tags: mail, spam, exim, zabbix |
||||||
|
--- |
||||||
|
|
||||||
|
Настройка почты - это длительный процесс, результаты будут видны далеко не сразу |
||||||
|
и могут различаться в зависимости от времени суток и дня недели. |
||||||
|
|
||||||
|
Пока мы не начали ничего делать, предлагаю для начала обложить всё статистикой и мониторингом, |
||||||
|
для отчётности, быстрой реакции на ошибки и чтоб потом показывать руководству результаты работы. |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
В составе самого exim'а идёт скрипт eximstats, который выполняет львиную часть работы. |
||||||
|
Осталось только организовать сохранение статистики. |
||||||
|
|
||||||
|
#!/bin/sh |
||||||
|
|
||||||
|
mkdir -p /var/stats/exim{exim,greylisting,rspamd} |
||||||
|
DATE=$(date +%Y-%m-%d) |
||||||
|
|
||||||
|
# статистика самого exim'а |
||||||
|
cd "/var/stats/exim" |
||||||
|
eximstats -nr -byedomain \\ |
||||||
|
-pattern "Warnings from logs" /Warning/ \\ |
||||||
|
/var/log/exim/mainlog > "stats_${DATE}.txt" |
||||||
|
rm -f "stats_latest.txt" |
||||||
|
ln -s "stats_${DATE}.txt" "stats_latest.txt" |
||||||
|
|
||||||
|
exit 0; # грейлистинг пока не настроен |
||||||
|
# статистика sqlgrey |
||||||
|
cd "/var/stats/greylisting" |
||||||
|
sqlgrey-logstats.pl -t < /var/log/maillog > "stats_${DATE}.txt" |
||||||
|
|
||||||
|
exit 0; # антиспам пока не настроен |
||||||
|
# статистика rspamd |
||||||
|
cd "/var/stats/rspamd" |
||||||
|
rspamc stat_reset > "${DATE}_stat.txt" |
||||||
|
rspamc counters > "${DATE}_hits.txt" |
||||||
|
|
||||||
|
Также, я для себя наваял [скрипт](exim-routes-usage.pl.gz), который считает статистику использования роутов. |
||||||
|
В выше он не используется, но иногда бывает полезен. |
||||||
|
|
||||||
|
Мониторинг |
||||||
|
---------- |
||||||
|
|
||||||
|
В zabbix всё добавляется достаточно легко. |
||||||
|
Мы будем мониторить размер очереди (общий/frozen) и доступность сервиса. |
||||||
|
|
||||||
|
``/etc/zabbix2/bin/exim-queue-size.sh``: |
||||||
|
|
||||||
|
#!/bin/sh |
||||||
|
set -e |
||||||
|
|
||||||
|
SUDO='/usr/bin/sudo' |
||||||
|
EXQG='/usr/sbin/exiqgrep' |
||||||
|
|
||||||
|
case "$1" in |
||||||
|
"total") |
||||||
|
$SUDO $EXIQ -i | wc -l |
||||||
|
;; |
||||||
|
"frozen") |
||||||
|
$SUDO $EXIQ -i -z | wc -l |
||||||
|
;; |
||||||
|
*) |
||||||
|
echo "ZBX_NOTSUPPORTED" |
||||||
|
;; |
||||||
|
esac |
||||||
|
|
||||||
|
Поправить пути, не забыть ``chmod +x``. |
||||||
|
|
||||||
|
``/etc/zabbix2/zabbix_agent.conf.d/exim.conf``: |
||||||
|
|
||||||
|
UserParameter=exim.queue[*],/etc/zabbix2/bin/exim-queue-size.sh $1 |
||||||
|
|
||||||
|
Убедиться, что в основном конфиге заббикса есть строчка типа ``Include=/etc/zabbix2/zabbix_agentd.conf.d/``. |
||||||
|
|
||||||
|
``/etc/sudoers.d/10-zabbix``: |
||||||
|
|
||||||
|
Defaults:zabbix !requiretty |
||||||
|
zabbix ALL=(ALL) NOPASSWD: \\ |
||||||
|
/etc/zabbix2/bin/exim-queue-size.sh |
||||||
|
|
||||||
|
Здесь нужно убедиться, что в основном конфиге sudo есть строчка ``#includedir /etc/sudoers.d``. |
||||||
|
Да, прямо так, как оно указано, с "#" в начале. |
||||||
|
Затем - проверить как вышеуказанный скрипт запускается из-под юзера ``zabbix``: |
||||||
|
|
||||||
|
sudo -u zabbix /bin/sh |
||||||
|
sudo -l |
||||||
|
# ^^ должно вылезти нечто подобное тому, что мы писали в файлик 10-zabbix. |
||||||
|
/etc/zabbix2/bin/exim-queue-size.sh total |
||||||
|
# ^^ должно вылезти число |
||||||
|
exit |
||||||
|
|
||||||
|
Если всё работает - здесь работа закончена, осталось написать шаблон для заббикса. |
||||||
|
Хорошим началом может стать следующий список item'ов для мониторинга: |
||||||
|
|
||||||
|
* tcp.listen[25] + tcp.listen[465] |
||||||
|
* exim.queue[total], exim.queue[frozen] |
||||||
|
* proc.num[exim], proc.num[sqlgrey] |
||||||
|
* proc.num[fail2ban] |
||||||
|
* proc.num[redis] |
||||||
|
* proc.num[rspamd] |
||||||
|
* proc.num[clamd] |
||||||
|
|
||||||
|
Последние четыре пункта - можно растащить по разным шаблонам, они могут использоваться отдельно. |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
[К оглавлению](/articles/2016/04/10/hardcore-mail-relay-1/) |
Loading…
Reference in new issue