LINUX.ORG.RU
ФорумAdmin

Rspamd+relay

 ,


0

2

Добрый день! Хочу настроить сабж в качестве антиспама и релея. Примерная схема:

exg.local > rspamd-domain.tld(postfix-AS+relay) > domain1.tld(postfix-relay),domain2.tld(postfix-relay) etc. Т.е. вся почта хранится на экче(он внутри сети), остальные сервера снаружи они только релеят c заменой заголовков.

подскажите пожалуйста как правильно настроить, примеры конфигов. Все кроме экча, на centos 7.



Последнее исправление: dq2020 (всего исправлений: 1)

В сети много примеров конфигов. Если вы вобще не представляете как настраивать postfix и не хотите читать документацию — наймите админа. Использовать чужой конфиг без изучения черевато (open relay или ещё что).

Почему снаружи должно быть много серверов, один же может релеить почту нескольких доменов? Они ещё должны исходящую почту от exchange релеить?

mky ★★★★★
()

завтра скину что-нибудь

constin ★★★★
()

Твою работу за тебя делать никто не будет и я тоже не собираюсь.

Но я опишу примерно, что надо и дам куски конфигов.

exg.local > rspamd-domain.tld(postfix-AS+relay) > domain1.tld(postfix-relay),domain2.tld(postfix-relay)

Я полагаю, что обратно трафик пойдет сразу на rspamd-domain.tld, а затем на exg? Или же у тебя будет куча mx? Это важно, так как если мы получаем письмо вот так:

mx1-postfix >> rspamd-postfix >> exg

то rspamd-postfix получает все письма с айпи адресов mx серверов, что ограничивает его в анализе спама.

Поэтому получать письма лучше всего на rspamd-postfix с дальнейшей отправквой на MDA ( exg)

На каждом из релеев нужно сделать возможность авторизации. Можно, конечно, пропускать просто по IP, но эта схема хреновая тем, что при изменении конфигурации сети, провайдера, расположения других серверов и тп, тебе надо будет каждый раз править везде конфиги.

Поэтому авторизация.

На каждом из релеев создается учетка, которая имеет право посылать письма от любого почтового ящика. На каждом из релеев (если много mx) или на rspamd-postfix(если MX он) неплохо бы держать список обслуживаемых домой доменов, иначе они не смогут отсекать письма на домены тебе не пренадлежащие и разжевывать это придется на exc.

Вот пример релея, который работает и на прием с дальнейшей пересылкой на MDA и на отправку в мир с этого MDA.

Это старый конифг и мне лень его сейчас править, но он у целом рабочий.

main.cf

smtpd_banner = $myhostname ESMTP Who are you gonna pretend to be today? 
biff = no
append_dot_mydomain = no
recipient_delimiter = +
readme_directory = no
myhostname = smtp.domain.com
mydomain = smtp.domain.com
myorigin = $mydomain
inet_interfaces = all
mydestination = localhost, $mydomain
mynetworks = 127.0.0.0/8

#virtual_mailbox_domains = /etc/postfix/domains
virtual_mailbox_base = /mail
virtual_alias_maps = hash:/etc/postfix/alias
virtual_minimum_uid = 100
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
mailbox_size_limit = 0

#SASL#



smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes


# Disable SSLv3
#
smtpd_tls_protocols = !SSLv2 !SSLv3
smtp_tls_protocols = !SSLv2 !SSLv3
lmtp_tls_protocols = !SSLv2 !SSLv3
smtpd_tls_mandatory_protocols = !SSLv2 !SSLv3
smtp_tls_mandatory_protocols = !SSLv2 !SSLv3
lmtp_tls_mandatory_protocols = !SSLv2 !SSLv3

#TLS#

smtpd_use_tls=yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_tls_cert_file=/etc/ssl/mailserver.crt
smtpd_tls_key_file=/etc/ssl/mailserver.key
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_received_header = yes
tls_random_source = dev:/dev/urandom
smtpd_tls_security_level = may
smtp_tls_security_level = may


# Fix 'The Logjam Attack'.
#
smtpd_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, RC4, MD5, PSK, aECDH, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DES-CDC3-SHA, KRB5-DE5, CBC3-SHA
smtpd_tls_dh1024_param_file = /etc/postfix/dh2048.pem


smtpd_helo_required=yes
strict_rfc821_envelopes = yes
disable_vrfy_command = yes
smtpd_delay_reject = yes


anvil_rate_time_unit = 60s
smtpd_client_connection_rate_limit = 5
smtpd_client_connection_count_limit = 100

smtpd_error_sleep_time = 5s
smtpd_soft_error_limit = 2
smtpd_hard_error_limit = 3

smtpd_helo_restrictions= 
  permit_sasl_authenticated,
  reject_non_fqdn_hostname,
  #reject_unknown_helo_hostname,
  reject_invalid_helo_hostname,
  #check_helo_access pcre:/etc/postfix/helo_access.pcre

smtpd_client_restrictions = 
  permit_mynetworks,
  permit_sasl_authenticated,
  #reject_unknown_client_hostname,
  reject_unauth_pipelining
  #reject_rbl_client b.barracudacentral.org
  #reject_rbl_client cbl.abuseat.org
  #reject_rbl_client dul.dnsbl.sorbs.net
  #reject_rbl_client zen.spamhaus.org

smtpd_sender_restrictions = 
  permit_sasl_authenticated,
  reject_non_fqdn_sender,
  reject_unknown_sender_domain,
  reject_sender_login_mismatch

smtpd_recipient_restrictions = 
  permit_mynetworks
  permit_sasl_authenticated
  reject_invalid_hostname
  reject_non_fqdn_hostname
  reject_non_fqdn_sender
  reject_non_fqdn_recipient
  reject_unauth_destination
  reject_unauth_pipelining
  #reject_rbl_client b.barracudacentral.org
  #reject_rbl_client cbl.abuseat.org
  #check_policy_service unix:private/policy-spf
  #check_policy_service inet:127.0.0.1:2525
  #blacklist
  #reject_rbl_client zen.spamhaus.org=127.0.0.[2..11]
  #reject_rbl_client zen.spamhaus.org
  #reject_rbl_client cbl.abuseat.org
  #reject_rbl_client dul.dnsbl.sorbs.net
 
smtpd_recipient_limit = 250
alias_maps = hash:/etc/aliases 


# тут спи сок доменов, которые ты обслуживаешь
relay_domains = domain1.com , domain2.com
transport_maps = hash:/etc/postfix/transport_maps

#SPF
policy-spf_time_limit = 3600s



# тут можно вставить мильтер для rspamd
#MILTER
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332
message_size_limit = 40860000
#maximal_queue_lifetime = 5h
default_process_limit = 300
#bounce_queue_lifetime = 5h


/etc/postfix/transport_maps

#  карта транспорта, куда пересылать пришедшие письма, если мы MX
#тут 123.123.123.123 это айпи твоего exc

domnain1.com smtp:[123.123.123.123]:25
domnain2.com smtp:[123.123.123.123]:25

Как видно из конфига , авторизацией тут занимается dovecot. Просто на нем ее легче поднять. Мы убриаем у него функционал imap/pop3/etc и просто оставляем, чтобы он авторизировал нашу релдейную учетку

/etc/dovecot/dovecot.conf 

auth_mechanisms = plain login
disable_plaintext_auth = no
log_path = /var/log/dovecot.log
mail_location = maildir:/mail/%d/%n
mail_home = /mail/%d/%n
passdb {
  args = /etc/dovecot/users
  driver = passwd-file
}
userdb {
  args = /etc/dovecot/users
  driver = passwd-file
  default_fields = uid=vmail gid=vmail userdb_home=/mail/%Ld/%Ln userdb_location=maildir:/mail/%Ld/%Ln
}

service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = vmail
    mode = 0660
    user = postfix
  }
  unix_listener auth-master {
    group = vmail
    mode = 0600
    user = vmail
  }
}
ssl_cert = </etc/ssl/mailserver.crt
ssl_key = </etc/ssl/mailserver.key

#Disable SSLv3
ssl_protocols = !SSLv2 !SSLv3


protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  hostname = smtp.domain.com
  mail_plugin_dir = /usr/lib/dovecot/modules
  postmaster_address = postmaster@domain.com
}

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

touch /sbin/addmail
chmod +x /sbin/addmail

/sbin/addmail

#!/bin/bash


USAGE="Usage: $0 EMAIL";

if [ ! -n "$1" ]
then
  echo $USAGE;
  exit 1;
fi
regex="^[a-z0-9!#\$%&'*+/=?^_\`{|}~-]+(\.[a-z0-9!#$%&'*+/=?^_\`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?\$"
if [[ $1 =~ $regex ]] ; then
    email=$1;
else
    echo "Wrong email format."
    exit 1;
fi
echo -n Enter user password:
read -s password
echo

echo $email":"$(doveadm pw -p $password)"::::" >> /etc/dovecot/users
service dovecot reload
echo Done.

Как настраивать rspamd я писать не буду, слишком жирно будет и так много накидал. Как его прикрепить - есть в примере конфига выше.

constin ★★★★
()
Ответ на: комментарий от constin

Огромное спасибо, прошу прощения скорей всего не достаточно описал ситуацию. На данный момент у меня уже реализован функционал релея. Хоть и не так красиво, без авторизации через dovecot, просто через permit mynetworks. У меня затык с rspamd, вернее все работало более менее до версии 2, хоть и не идеально, спам все таки пробивался, но это как раз из-за того что каждый mx должен и принимать и отправлять. Мне нужно чтобы у каждого домена был свой ip.

Ниже чуть более наглядная схема https://i.ibb.co/SRygjfC/mailflow.jpg

Ниже конфиг main.cf с rspamd сервера

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = mx.domain1.com

mydomain = domain1.com

myorigin = $mydomain

inet_interfaces = all
inet_protocols = all

mydestination = $myhostname, localhost.$mydomain, localhost, domain1.com

unknown_local_recipient_reject_code = 550

mynetworks = 127.0.0.0/8, pub-ip1/32, pub-ip2/32 etc

smtpd_client_restrictions = permit_mynetworks, reject

smtpd_sender_restrictions = permit_mynetworks,
   reject_unknown_address,
   permit_sasl_authenticated,
   reject_unknown_sender_domain,
   permit

smtpd_recipient_restrictions =
   permit_mynetworks,
   reject_unauth_destination,
    reject_unauth_pipelining,

smtpd_sender_restrictions = permit_mynetworks,
   reject_unknown_address,
   permit_sasl_authenticated,
   reject_unknown_sender_domain,
   permit

smtpd_recipient_restrictions =
   permit_mynetworks,
   reject_unauth_destination,
    reject_unauth_pipelining,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unknown_sender_domain,
    reject_invalid_hostname,
    reject_unlisted_recipient,
   permit

relay_domains =
    domain1.com
	domain2.com
	
	domainN.com
smtpd_client_restrictions = permit_mynetworks,
        permit_sasl_authenticated,
        reject_invalid_hostname,
        reject_non_fqdn_sender,
        reject_non_fqdn_recipient,
        reject_unknown_sender_domain,
        reject_unknown_recipient_domain,
        reject_unauth_destination,
        reject_rbl_client bl.spamcop.net,
        reject_rbl_client cbl.abuseat.org,
        reject_rbl_client sbl-xbl.spamhaus.org,
        reject_rbl_client xbl.spamhaus.org,
        permit


sender_dependent_relayhost_maps = hash:/etc/postfix/relaymap

smtp_helo_name = mx.domain1.com

transport_maps = hash:/etc/postfix/transport

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

local_recipient_maps =

#
debug_peer_level = 2

#
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
#
sendmail_path = /usr/sbin/sendmail.postfix

#
newaliases_path = /usr/bin/newaliases.postfix

#
mailq_path = /usr/bin/mailq.postfix

#
setgid_group = postdrop

#
html_directory = no

#
manpage_directory = /usr/share/man

#
sample_directory = /usr/share/doc/postfix-2.10.1/samples

#
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES
mime_header_checks = regexp:/etc/postfix/header_checks
header_checks = regexp:/etc/postfix/header_checks
mailbox_size_limit = 51200000
message_size_limit = 40960000
virtual_mailbox_limit = 51200000
smtp_data_xfer_timeout = 600s
smtp_data_done_timeout = 800s
smtp_data_init_timeout = 240s

# enter your settings below
disable_vrfy_command = yes

strict_rfc821_envelopes = yes

milter_protocol = 6
# use accept just in case rspamd fails
milter_default_action = accept
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332

Содержание header_checks

/^Received:.*with ESMTPSA/              IGNORE
/^X-Originating-IP:/    IGNORE
/^X-Mailer:/            IGNORE
/^Mime-Version:/        IGNORE
/^Received:.*\(Authenticated sender:/ IGNORE
/^X-Originating-IP:/    IGNORE
/^X-Virus-Scanned:/    IGNORE
/^Received:/    IGNORE
/^\s*Received: from \S+ \(\S+ \[\S+\]\)(.*)/ REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1])$1
dq2020
() автор топика
Ответ на: комментарий от dq2020

Мне нужно чтобы у каждого домена был свой ip.

Это решается одним сервером. Postfix умеет отсылать с разных айпи в зависимости от домена. И соответственно получать тоже.

constin ★★★★
()
Последнее исправление: constin (всего исправлений: 1)
Ответ на: комментарий от constin

это я тоже знаю, мне нужно чтобы эти IP не были связаны между собой…

dq2020
() автор топика
Ответ на: комментарий от dq2020

RSPAMD слеп в этой ситуации и может только смотреть тела писем, проверяя их на спам. У него нет информации откуда они приходят, потому что приходят они с ip mx’ов.

Я бы поменял схему.

Пусть на сервере с RSPAMD не будет postfix, будет только RSPAMD. И пусть он сервис RSPAMD будет открыт в мир, те 0.0.0.0:11332, но фаерволом дать доступ к этому порту только айпишникам релеев.

На каждом релее делаем мильтер с нашим RSPAMD. Тогда RSPAMD будет получать полную информацию о коннекте.

constin ★★★★
()
Ответ на: комментарий от dq2020

Я бы посоветовал на релеях с Postfix поставить только Rspamd proxy, а саму проверку делать на отдельном сервере или серверах. Прокси умеет из milter делать http request, умеет шифровать, а также, разумеется, передавать реальный IP. Сканеры можно также настроить в режиме encrypted only, чтобы не пропускать незашифрованный мусор (так можно избавиться от firewall’а).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.