Тема: Directadmin и greylist

Продолжаем серию заметок о хостинге, вот только не очень понятно для кого я все это делаю, ну, пусть это будет своего рода самовыражение smile

Задача: защитить пользователей на сервере под управлением 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))

все мило и красиво.