Browse Source

+ /articles/2016/04/10/hardcore-mail-relay-[12]/

master
Alex 'AdUser' Z 8 years ago
parent
commit
fdba456528
  1. 65
      articles/2016/04/10/hardcore-mail-relay-1/index.markdown
  2. BIN
      articles/2016/04/10/hardcore-mail-relay-1/overview.png
  3. BIN
      articles/2016/04/10/hardcore-mail-relay-1/overview_tn.jpg
  4. BIN
      articles/2016/04/10/hardcore-mail-relay-2/exim-routes-usage.pl.gz
  5. 110
      articles/2016/04/10/hardcore-mail-relay-2/index.markdown

65
articles/2016/04/10/hardcore-mail-relay-1/index.markdown

@ -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)

BIN
articles/2016/04/10/hardcore-mail-relay-1/overview.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
articles/2016/04/10/hardcore-mail-relay-1/overview_tn.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
articles/2016/04/10/hardcore-mail-relay-2/exim-routes-usage.pl.gz

Binary file not shown.

110
articles/2016/04/10/hardcore-mail-relay-2/index.markdown

@ -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…
Cancel
Save