Перейти к содержимому


Фотография
- - - - -

Установка шлюза Exim+DNSBL+Greylistingd+ClamAV+Spamassassin+SPF+DKIM+DMARC+TLS(SSL)

установка exim exim4 exim exim+spamassassin tls ssl tls ssl dnsbl Mime Greylistd

  • Авторизуйтесь для ответа в теме
В этой теме нет ответов

#1 Demonik

Demonik

    Учусь Linux

  • Администраторы
  • 41 сообщений

Отправлено 01 Май 2016 - 17:41

Установка MTA Exim в Debian 8 Jessy с плюшками и антивирусом для хорошей резки СПАМа.

 

--------------------------------------------------------------------------------------------------------

Вариант с более высокой производительностью - читайте ТУТ

--------------------------------------------------------------------------------------------------------
Почтовая кухня по DNS находиться в этой статье.
Установка подписи DKIM описана в этой статье.
Полный конфиг exim.conf находиться под спойлером ниже 

Скрытый текст

 
Exim



apt-get install exim4-daemon-heavy

DNSBL
В конфиг exim, в проверку acl_check_rcpt добавляем:



deny message     = "You in blacklist - $dnslist_domain $dnslist_text; $dnslist_value"
 hosts           = !+relay_from_hosts
 dnslists        = rbl.rbldns.ru : zen.spamhaus.org : bad.psky.me : sbl.spamhaus.org : bl.spamcop.net : cbl.abuseat.org

Mime(вложения) проверки
Устанавливаем приложение "deepfind" которое содержиться в "strigi-utils" вместо unzip



apt-get install strigi-utils

Указываем в правилах condition где находиться "deepfind", в моем случаи это "/usr/bin/deepfind", и запихиваем правила в acl_check_mime.

acl_check_mime:

# Проверка вложений на исполняемые файлы
deny message = Error! Your message contains executible attachment(s) like: $mime_filename
 condition  = ${if match{$mime_filename}{\N\.(exe|com|vb|vbs|vbe|vba|wsf|bat|cmd|pif|scr|hta|js|jse|jsp|chm|cpl|reg|lnk|ocx|dll|sys|msi|msu|mst|apk|bin|cgi|ps1)$\N}}


# Проверка вложений-архивов zip-rar
deny message = Message contains executible files(s) in attachment $mime_filename
 condition = ${if match{$mime_filename}{\N(?i)\.(bz2|zip|rar|7z|cab|ace|7za|lah|lzo|lzx|gz|arj|bin|msi|cbr|deb|rpm|gzip|jar|pak|pkg|tar-gz|tgz|xar|zipx|wim|tb2|tar|paq|xz|iso|jar|lzh|lzma|pak|pk3|pk4|smzip|u3p|xpi|zipx|cpio|xar|lz|rk|zoo|img|ha)$\N}}
 decode = default
 condition = ${if match{${run{/usr/bin/deepfind $mime_decoded_filename}}}{\N(?i)\.(exe|com|vb|vbs|vbe|vba|wsf|bat|cmd|pif|scr|hta|js|jse|jsp|chm|cpl|reg|lnk|ocx|dll|sys|msi|msu|mst|apk|bin|cgi|ps1)\n\N}}
 log_message = forbidden attachment: recipients=$recipients, content-type=$mime_content_type, attach_filename=$mime_filename

Грейлист (Greylistd)



apt-get install greylistd

- Вставляем следующее правило в acl_check_rcpt до принятия окончательного решения accept: 

# Тут используем серые списки
defer message    = Greylisting in action, try later
 log_message     = Greylisted.
 !hosts          = ${if exists{/etc/greylistd/whitelist-hosts}\
                    {/etc/greylistd/whitelist-hosts}{}} : \
                   ${if exists{/var/lib/greylistd/whitelist-hosts}\
                    {/var/lib/greylistd/whitelist-hosts}{}}
 condition       = ${readsocket{/var/run/greylistd/socket}\
                    {--grey $sender_host_address $sender_address $local_part@$domain}\
                   {5s}{}{false}}

Антивирус ClamAV



apt-get install clamav-daemon

- Добавить в группу от которой запускается Exim

usermod -aG Debian-exim clamav

- Поправить в конфиге ClamAV /etc/clamav/clamd.conf срочку с "AllowSupplementaryGroups false" на "AllowSupplementaryGroups true", Также изменить значение "ScanOLE2 false" на "ScanOLE2 true".
- Вставляем строчку в начало в конфиг exim:

av_scanner = clamd:/var/run/clamav/clamd.ctl

- Вставляем правило в acl_check_data: 

# Запрет приема писем содержащих вирусы
deny message     = message contains a virus ($malware_name)
 malware         = *

- Перезагрузим Exim, чтобы настройки вступили в силу:

/etc/init.d/exim4 restart

Spamassassin + Sa-exim (На сокете)



apt-get install sa-exim spamassassin

- Разрешаем запуск SpamAssassin. Для этого в файле /etc/default/spamassassin меняем строчку на : 

ENABLED=1
CRON=1

Если у Вас Debian 8 jessy, то прописываем в консоли

 systemctl enable spamassassin

- Запускаем spamassassin

/etc/init.d/spamassassin start

- В файле /etc/exim4/sa-exim.conf найдите и удалите либо закоментируйте строчку:

  SAEximRunCond: 0

- Если сервер нагруженный то в /etc/default/spamassassin добавьте такие ключи для запуска:

OPTIONS="--create-prefs --max-children=12 --min-children=8 --max-conn-per-child=10 --helper-home-dir -d -H /var/log/spamassassin -s /var/log/spamassassin/spamd.log -u debian-spamd --socketpath=/var/run/spamd.sock"

У меня работает такая конфигурация по запуску, ошибок не вылетает зато (не указываю явно инфу про детей), бывает такое что письмо весь день долбиться а spamassasin его в определенном ребенке проверить не может и так по кругу (с предыдущим конфигом выше):



OPTIONS="--create-prefs --helper-home-dir -d -H /var/log/spamassassin -s /var/log/spamassassin/spamd.log -u debian-spamd --socketpath=/var/run/spamd.sock"

Также раскоментируем строчку в файле /etc/exim4/sa-exim.conf

SAspamcSockPath: /var/run/spamd.sock

Также добавим строчку в конф файле exim /etc/exim4/exim.conf

spamd_address = /var/run/spamd.sock

Далее смотрим логи и допиливаем права по папкам если имеются.
Так же незабываем кормить спамассассину спам и хам письма чтоб лучше работал.
- Добавим в crontab -e следующее

0 23 * * * root (/usr/bin/sa-update --nogpg && /etc/init.d/spamassassin reload) &> /dev/null

Русские правила для spamassassin

  • Поместите файл 99_wentor.cf или 99_wentor.cf в каталог, где находятся файлы правил (обычно это /usr/share/spamassassin) ,
  • Добавьте строчку include /usr/share/spamassassin/99_wentor.cf в файле /etc/mail/spamassassin/local.cf (необязательно, но у нас без нее правила не подключаются).
  • Перезапустите spamd (/etc/init.d/spamassassin stop, /etc/init.d/spamassassin start).
  • Можно проверить подключение правил командой spamassassin --lint –D
  • Если все подключено правильно в письмах и журнале обработки почты должны появляться правила начинающиеся на RU_WENTOR.

Так же добавить в local.cf следующие правила

Скрытый текст

 
Настройка ротации логов в spamassassin:
 
В /etc/logrotate.d/ положить файлик spamd с содержимым:
 

/var/log/spamassassin/spamd.log {
daily
size=5M
missingok
rotate 5
delaycompress
notifempty
create 666 root root
postrotate
 /usr/bin/pkill -HUP spamd
endscript
}

SPF
- Устанавливаем perl скрипт (только для Debian), другие устанавливают "libmail-spf-query-perl"


apt-get install libspf2-2 libmail-spf-perl spf-tools-perl

- Вставляем следующее правило в acl_check_rcpt до Greylist и принятия окончательного решения accept: 

# Используем "spfquery", чтобы получить статус SPF для данного конкретного отправителя / хоста.
# Если код возврата этой команды равен 1, это несанкционированный отправитель.
deny
 message         = [SPF] $sender_host_address is not allowed to send mail from $sender_address_domain.
 log_message     = SPF check failed.
 set acl_m9      = -ipv4=$sender_host_address \
                   -sender=$sender_address \
                   -helo=$sender_helo_name
 set acl_m9      = ${run{/usr/bin/spfquery $acl_m9}}
 condition       = ${if eq {$runrc}{1}{true}{false}}


defer
 message         = Temporary DNS error while checking SPF record.  Try again later.
 condition       = ${if eq {$runrc}{5}{yes}{no}}


warn
 message         = X-Received-SPF: ${if eq {$runrc}{0}{pass}{${if eq {$runrc}{2}{softfail}\
                                 {   ${if eq {$runrc}{3}{neutral}{${if eq {$runrc}{4}{unknown}\
                                 {${if eq {$runrc}{6}{none}{error}}}}}}}}}}
 condition       = ${if <={$runrc}{6}{yes}{no}}


 warn
    log_message = Unexpected error in SPF check.
    condition = ${if >{$runrc}{6}{yes}{no}}

 
DKIM
В Debian пакет exim4-daemon-heavy по умолчанию собран с поддержкой DKIM.
 
Делаем проверку по DKIM
- Добавляем в начало конфига exim:

DKIM_ENABLE = yes

- Анонсируем отдельный ACL для DKIM

acl_smtp_dkim = acl_check_dkim

- Добавляем правило: 

# Отклоняем письма, не содержащие DKIM-подпись
deny message = Valid DKIM signature needed for mail from $sender_domain
 sender_domains  = +dkim_required_domains
 dkim_status     = none
 add_header      = :at_start:Authentication-Results-DKIM: Exim 4.80 on mx1.tentorium.ru (no dkim signature)
 logwrite        = DKIM test NONE (address=$sender_address domain=$dkim_cur_signer), none signature.

# Отклоняем письма, содержащие DKIM-подпись, если она fail
deny message     = Wrong DKIM signature
 sender_domains  = +dkim_required_domains
 dkim_status     = fail
 add_header      = :at_start:Authentication-Results-DKIM: mx1.tentorium.ru, header.i=$dkim_cur_signer ($dkim_verify_status); reason=$dkim_verify_reason
 logwrite        = DKIM test FAIL (address=$sender_address domain=$dkim_cur_signer), fail signature.

# Принимаем письма, содержащие DKIM-подпись, если она invalid
accept message   = Invalid DKIM signature
 sender_domains  = +dkim_required_domains
 dkim_status     = invalid
 add_header      = :at_start:Authentication-Results-DKIM: mx1.tentorium.ru, header.i=$dkim_cur_signer ($dkim_verify_status); reason=$dkim_verify_reason
 logwrite        = DKIM test PASS (address=$sender_address domain=$dkim_cur_signer), but signature is invalid.

# Принимаем письма, содержащие DKIM-подпись, если проверка прошла успешно
accept message   = Good DKIM signature
 sender_domains  = +dkim_required_domains
 dkim_status     = pass
 add_header      = :at_start:Authentication-Results-DKIM: mx1.tentorium.ru; dkim=$dkim_verify_status, header.i=@$dkim_cur_signer
 logwrite        = DKIM test PASS (address=$sender_address domain=$dkim_cur_signer), good signature.

#Пропускаем остальное
accept

SSL +TLS
- Для получения сертификата можно использовать китайский сервис, который выдает SSL сертификат на 3 года: "https://buy.wosign.com/free/"
- Для генерации CSR для сайта, запускаем команду на сервере:



openssl req -out example.com.csr -new -sha256 -newkey rsa:2048 -nodes -keyout example.com.key

- Объединяем все выданные сертификаты по цепочке в 1 сертификат, потому что exim не имеет команды для просмотра intermidate сертификатов(объединять нужно в последовательности от конечного хоста(сертификат для нашего сервера) к rootCA сертификату:

cat 3_user_example.com.crt 2_issuer_Intermediate.crt 1_cross_Intermediate.crt root.crt > intermidate.crt

- Настраиваем Exim для использования зашифрованной передачи писем, это добавляем вверху конфига: 

#Настройка TLS
tls_on_connect_ports = 465
tls_advertise_hosts = *
tls_certificate = /etc/exim4/ssl/intermidate.crt
tls_privatekey = /etc/exim4/ssl/example.com.key

- Также запускаем демон на 465 порту и отключаем IPv6 если он Вам не нужен: 

#На каком порту будет работать демон SMTP
disable_ipv6
daemon_smtp_ports = 25 : 465

УСЁ!


  • Demonik это нравится

Есть вопросы или пожелания? demonik.0789@gmail.com

Сайт: https://asteriskperm.ru/

Группа ВК: ССЫЛКА (Заходим и вступаем! ;D)






Темы с аналогичным тегами установка exim, exim4, exim, exim+spamassassin, tls ssl, tls, ssl, dnsbl, Mime, Greylistd