Тема: Directadmin и greylist
Продолжаем серию заметок о хостинге, вот только не очень понятно для кого я все это делаю, ну, пусть это будет своего рода самовыражение
Задача: защитить пользователей на сервере под управлением DirectAdmin, а точнее exim (нас интересует только он) от SPAM'a. Вообще технология greylist'a отбрасывает около 70-80% спама. Как работает и что это такое - читайте сами. Тут моя заметка как это делается для postfix Базовая защита от спама на backup MX'е.
Примечание: postgrey использовать не получилось так как он требует postfix который режется с уже установленным exim'ом. Мы же делаем все по науке и без рукожопства, так как нам еще это все администрировать, ну и вообще, делать надо все корректно.
postgreyd - это python скрипт который практически ничего не требует дополнительно и может быть взят отсюда http://dl.atrpms.net/el6-i386/atrpms/stable/ на данный момент доступен greylistd-0.8.7-10.el6.noarch.rpm
Посли установки initd скрипт не стартует так как в коде используется команда initlog которая в Centos 6 больше не поддерживается, меняем ее на logger, она входит в несколько пакетов, я поставил util-linux-ng
немного правим загрузочный скрипт, теперь все логи пойдут в maillog и будут симпатично смотреться как "greylistd[1234]:"
# diff /etc/init.d/greylistd /etc/init.d/greylistd.orig
22,23c22
< # initlog $INITLOG_ARGS -c "su -s /bin/bash - greylistd -c \"/usr/sbin/greylistd > /dev/null 2>&1 &\""
< su -s /bin/bash - greylistd -c "/usr/sbin/greylistd 2>&1 | /bin/logger -isp mail.info -t greylistd &"
---
> initlog $INITLOG_ARGS -c "su -s /bin/bash - greylistd -c \"/usr/sbin/greylistd > /dev/null 2>&1 &\""
32,34d30
<
< chmod 660 /var/run/greylistd/socket
< chown greylistd:mail /var/run/greylistd/socket
после запуска проверяем socket, пользователь правильный, type: socket
# ls -la /var/run/greylistd/socket
srw-rw---- 1 greylistd mail 0 Jun 23 13:42 /var/run/greylistd/socket
# file /var/run/greylistd/socket
/var/run/greylistd/socket: socket
настраиваем exim. Это надо добавить после "deny message" перед "accept domains". Дурацкий у exim'a конфиг, уж извините.
# Perform greylisting
defer message = $sender_host_address is greylisted. Please try again later after 5min.
log_message = greylisted.
domains> = +relay_domains : +local_domains
!senders = : postmaster@*
!hosts = : +relay_hosts : \
${if exists {/etc/greylistd/whitelist-hosts}{/etc/greylistd/whitelist-hosts}{}} : \
${if exists {/etc/virtual/whitelist-hosts}{/etc/virtual/whitelist-hosts}{}}
verify = recipient/callout=500s,use_sender,defer_ok
condition = ${readsocket{/var/run/greylistd/socket}\
{--grey $sender_host_address $sender_address $local_part@$domain}{500s}{}{false}}
перегружаемся и проверяем
Это я вижу со стороны exim'а
2014-06-23 14:14:18 H=mail.xxx.lt [111.111.111.111] F=<[email protected]> temporarily rejected RCPT <[email protected]>: greylisted.
2014-06-23 14:14:18 H=mail.xxx.lt [111.111.111.111] incomplete transaction (RSET) from <[email protected]>
Это со стороны отправителя
Jun 23 17:15:24 mail postfix/smtp[42137]: 81B411694D06: to=<[email protected]>, relay=datest.xxx.lt[222.222.222.222]:25, delay=5, delays=0/0.01/0.66/4.3, dsn=4.0.0, status=deferred (host datest.xxx.lt[222.222.222.222] said: 451 111.111.111.111 is greylisted. Please try again later after 5min. (in reply to RCPT TO command))
все мило и красиво.