diff --git a/articles/2016/04/10/hardcore-mail-relay-1/index.markdown b/articles/2016/04/10/hardcore-mail-relay-1/index.markdown new file mode 100644 index 0000000..d41e3ba --- /dev/null +++ b/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) diff --git a/articles/2016/04/10/hardcore-mail-relay-1/overview.png b/articles/2016/04/10/hardcore-mail-relay-1/overview.png new file mode 100644 index 0000000..b9e6eaf Binary files /dev/null and b/articles/2016/04/10/hardcore-mail-relay-1/overview.png differ diff --git a/articles/2016/04/10/hardcore-mail-relay-1/overview_tn.jpg b/articles/2016/04/10/hardcore-mail-relay-1/overview_tn.jpg new file mode 100644 index 0000000..536bd3c Binary files /dev/null and b/articles/2016/04/10/hardcore-mail-relay-1/overview_tn.jpg differ diff --git a/articles/2016/04/10/hardcore-mail-relay-2/exim-routes-usage.pl.gz b/articles/2016/04/10/hardcore-mail-relay-2/exim-routes-usage.pl.gz new file mode 100644 index 0000000..e11167d Binary files /dev/null and b/articles/2016/04/10/hardcore-mail-relay-2/exim-routes-usage.pl.gz differ diff --git a/articles/2016/04/10/hardcore-mail-relay-2/index.markdown b/articles/2016/04/10/hardcore-mail-relay-2/index.markdown new file mode 100644 index 0000000..638edef --- /dev/null +++ b/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/)