Борьба со спамом. Защита от спама exim + spamassassin + фильтрация конфига

Exim защита от спама

Спам … это слово вызывает отвращение после того как вы потратите больше часа в день на удаление рекламных предложений со своего почтового аккаунта. Но рано или поздно вам это надоесть и вы скажете ХВАТИТ … то же делать … можно ли вообще защититься от спама и как ?

Ответ прост .. конечно можно, но нужно потратить немного времени и приложить немного усилий. Итак, что нам понадобится, это установленный exim взять его можно с репозитория centos.alt.ru. Далее нам потребуется spamassassin, настраиваем и выставляем количество баллов для блокировки на свой вкус. По стандарту ставят 5-6.

Далее идем в конфиг файла exim …. /etc/exim/exim.conf

и прописываем там:

acl_not_smtp = acl_not_smtp

begin acl

acl_not_smtp:
deny message = Sender rate overlimit — $sender_rate / $sender_rate_period
ratelimit = 50 / 1h / leaky
accept

acl_check_rcpt:

#Отрубаем если запрещенные символы в адресе
deny message = «Incorrect symbols in address»
domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./

accept local_parts = postmaster
domains = +local_domains

require verify = sender

#Отрубаем если нет HELO
deny message = HELO/EHLO required by SMTP RFC
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
delay = 30s

#Отрубаем хосты у которых в EHLO стоит IP
deny message = We don’t allow domain literals. Too much spam…
domains = !+local_domains
condition = ${if isip{$sender_helo_name}{yes}{no}}
delay = 30s

#Отрубаем хосты у которых в EHLO наш адрес.
deny message = Message was delivered by ratware — own
condition = ${if match_domain{sender_helo_name}\
{$primary_hostname:+local_domains:+relay_to_domains}\
{true}{false}}
log_message = remote host used our name in EHLO/HELO.
delay = 30s

#Отрубаем хосты с динамическими адресами
deny message = Go Away! You are spammer.
condition = ${if match{$sender_host_name} \
{bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \
{yes}{no}}

deny message = Sender rate SMTP overlimit — $sender_rate / $sender_rate_period
ratelimit = 100 / 1h / leaky

# Проводим процедуру обратного звонка, т.е. при поступлении запроса на отправку от отпределенного адреса, происходит встречный запрос к серверу отправителя
verify = sender/callout=90s,maxwait=120s
verify = recipient/defer_ok/callout=90s/callout_defer_ok
message = The sender cannot be verified. Check your email-client settings! \
If you think that the system is mistaken, please report details to abuse@odminblog.ru
!local_parts = abuse
!sender_domains = +domains_disable_senderverify # в данном списке, объявленом в главной конфигурации, мы задаем исключения для доменов

deny message = rejected, $sender_host_address is listed in: http://mail-abuse.org/ \
If you think that the system is mistaken, please report details to abuse@odminblog.ru
!authenticated = *
!local_parts = abuse
log_message = found in www.mail-abuse.org
dnslists = blackholes.mail-abuse.org : \
dialup.mail-abuse.org

# Проверяем диалог на соответствие RFC
deny message = HELO/EHLO required by SMTP RFC
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
delay = TEERGRUBE

# Проверяем корректность IP адреса отправителя, проверка направлена на манипуляции с HELO
deny message = Forged IP detected in HELO-$sender_helo_name
hosts = !+relay_from_hosts
log_message = Forged IP detected in HELO: $sender_helo_name
!authenticated = *
condition = ${if eq{$sender_helo_name}{$interface_address}{yes}{no}}
delay = TEERGRUBE

# Проверяем корректность IP адреса отправителя, проверка направлена на манипуляции с HELO
deny message = Forged IP detected in HELO -$sender_helo_name != $sender_host_address
hosts = !+relay_from_hosts
!authenticated = *
condition = ${if match{$sender_helo_name}{\N^\d+(\.\d+){3}$\N} {yes}{no}}
condition = ${if eq{$sender_helo_name}{$sender_host_address} {no}{yes}}
delay = TEERGRUBE

deny message = Forged hostname detected in HELO -$sender_helo_name
hosts = !+relay_from_hosts
!authenticated = *
log_message = Forged hostname detected in HELO -$sender_helo_name
condition = ${if match_domain{$sender_helo_name}{+local_domains} {yes}{no}}
delay = TEERGRUBE

# Отбиваем больше одного пустого отправителя
deny message = Only one recipient accepted for NULL sender
senders = :
condition = ${if >{$rcpt_count}{1} {1}}
delay = TEERGRUBE
accept hosts = net-lsearch;/etc/exim/whitelist

deny hosts = net-lsearch;/etc/exim/blacklist
message = $host_data

Перезагружаем exim и радуемся результату.