From fdba45652887aedd95b47cc3a93302de5e4283e3 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Sun, 10 Apr 2016 12:55:54 +1000 Subject: [PATCH] + /articles/2016/04/10/hardcore-mail-relay-[12]/ --- .../10/hardcore-mail-relay-1/index.markdown | 65 +++++++++++ .../04/10/hardcore-mail-relay-1/overview.png | Bin 0 -> 61110 bytes .../10/hardcore-mail-relay-1/overview_tn.jpg | Bin 0 -> 3063 bytes .../exim-routes-usage.pl.gz | Bin 0 -> 343 bytes .../10/hardcore-mail-relay-2/index.markdown | 110 ++++++++++++++++++ 5 files changed, 175 insertions(+) create mode 100644 articles/2016/04/10/hardcore-mail-relay-1/index.markdown create mode 100644 articles/2016/04/10/hardcore-mail-relay-1/overview.png create mode 100644 articles/2016/04/10/hardcore-mail-relay-1/overview_tn.jpg create mode 100644 articles/2016/04/10/hardcore-mail-relay-2/exim-routes-usage.pl.gz create mode 100644 articles/2016/04/10/hardcore-mail-relay-2/index.markdown 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 0000000000000000000000000000000000000000..b9e6eafcd3de5d4ffed579d86c0f8ca028788ccf GIT binary patch literal 61110 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 z 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e11167d8f3a84131efb3496a32f25bcd071b5c31 GIT binary patch literal 343 zcmV-d0jT~TiwFqE%feOw17&z=Z7p(db#!HOEp>BYXJsyMYye$QU2DQH6n)RHIChn_ zsALKo!&({aVK0Nhd@X~hsfM+QB&i?N?6)s%=Nx;vx%b?A&pjtMJz5z}mqJo5_tq|FaZOCdL=t16p6CWNRRmr;2_`1S#xe4qxPJV zA1x|baAPk0FO=uZ4BpcyTMS~KomJu|!;ZBM#}1UHxcd(dQj8Pg$f{7@VRNIC^CVf> zsxeAi)Yl#6FiYpxdgIXOajT0Br p*1%2+X>$Z4^hc9BgDLv=YyWG*pY`EYN&C9S%r_HlxM "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/)