Announcement

Collapse
No announcement yet.

Почтовый сервер Postfix Dovecot SASL Amavis OpenDKIM OpenDMARC SPF postgrey MySQL 8.0 debian 11 ubuntu 20.04

Collapse
This is a sticky topic.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Почтовый сервер Postfix Dovecot SASL Amavis OpenDKIM OpenDMARC SPF postgrey MySQL 8.0 debian 11 ubuntu 20.04

    Почтовый сервер на базе Postfix Dovecot SASL Amavis OpenDKIM OpenDMARC SPF postgrey MySQL 8.0 debian 11 ubuntu 20.04
    1. После установки debian 11 выполним обновление пакетов
      Code:
       sudo apt-get update sudo apt-get upgrade
    2. Устанавливаем Postfix, Dovecot, MySQL и другие необходимые пакеты
      Code:
      	apt-get install postfix dovecot-common dovecot-imapd mysql-server mysql-client postfix-mysql dovecot-mysql sasl2-bin opendkim opendkim-tools [SIZE=16px][FONT=Roboto Mono][COLOR=#000000]opendmarc[/COLOR][/FONT][/SIZE] clamav-daemon amavisd-new spamassassin spamc -y
    3. Подключаемся к MySQL
      Code:
      mysql -u root –p
      создаем базу данных, в которой будут храниться учетные записи почтовых аккаунтов
      Code:
      	CREATE DATABASE base0;
      Внимание! Далее будет использоваться пользователь root и пароль пользователя root для доступа к базе данных почтовых аккаунтов в MySQL.
      создаем таблицу доменов.
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]> USE base0; > CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/COLOR][/FONT][/SIZE]
      Создать таблицу виртуальных доменов
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]> USE base01 > CREATE TABLE `virtual_domains` ( `id` INT NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/COLOR][/FONT][/SIZE][B][FONT=Playfair Display][COLOR=#212529][/COLOR][/FONT][/B]
      Создание таблицы виртуальных пользователей
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]> CREATE TABLE `virtual_users` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `password` VARCHAR(106) NOT NULL, `email` VARCHAR(120) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/COLOR][/FONT][/SIZE][B][FONT=Playfair Display][COLOR=#212529][/COLOR][/FONT][/B]
      Создать виртуальную таблицу псевдонимов

      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]> CREATE TABLE `virtual_aliases` ( `id` INT NOT NULL AUTO_INCREMENT, `domain_id` INT NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/COLOR][/FONT][/SIZE]
      Вставить виртуальный домен

      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]INSERT INTO bse01.virtual_domains (`id` ,`name`) VALUES ('1', 'sun-torrents.name');[/COLOR][/FONT][/SIZE]
      Вставить пользователя виртуальной почты

      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]> INSERT INTO `mail_server`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('support@sun-torrents.name', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'support@sun-torrents.name'),[/COLOR][/FONT][/SIZE]
    4. Настройте Postfix. В данной части статьи, объяснения конфигурации постфикс, приводится не будут. Для удобства, будет представлен, рабочий конфиг файла main.cf для реконфигурации постфикс, введите команду
      Code:
      nano /etc/postfix/main.cf
      и очистите файл полностью.
      Code:
      smtpd_banner = $myhostname ESMTP
      	#Отключаем использование comsat
      	biff = no
      	#Запрещаем автоматически дополнять неполное доменное имя в адресе письма
      	append_dot_mydomain = no
      	#Указываем имя нашего хоста
      	myhostname = smtp.sun-torrents.name
      	mynetworks = 127.0.0.0/8 10.16.10.0/29
      	# Указываем файл с псевдонимами почтовых ящиков
      	alias_maps = hash:/etc/aliases
      	#Указываем, для каких доменов будем принимать почту
      	mydestination = localhost smtp.sun-torrents.name
      	# Не будем ограничивать размер почтовых ящиков
      	mailbox_size_limit = 0
      	recipient_delimiter = +
      	#Указываем прослушивание на всех сетевых интерфейсах
      	inet_interfaces = all
      	#Указываем обязательность использование клиентами команды helo
      	smtpd_helo_required = yes
      	smtp_always_send_ehlo = yes
      	#Описываем доступ доменам, почтовым ящикам и т.д.
      	virtual_transport = dovecot
      	virtual_mailbox_domains = mysql:/etc/postfix/database-domains.cf
      	virtual_mailbox_maps = mysql:/etc/postfix/database-users.cf
      	virtual_mailbox_base = /var/vmail
      	virtual_alias_maps = mysql:/etc/postfix/database-alias.cf
      	virtual_minimum_uid = 100
      	virtual_uid_maps = static:5000
      	virtual_gid_maps = static:5000
      	policy-spf_time_limit = 3600s
      	home_mailbox = Maildir/
      	local_recipient_maps = $virtual_mailbox_maps
      	#Описываем авторизацию по SMTP для клиентов не из доверенной зоны
      	smtpd_sasl_type = dovecot
      	smtpd_sasl_auth_enable = yes
      	smtpd_sasl_path = private/auth
      	smtpd_sasl_security_options = noanonymous
      	#broken_sasl_auth_clients = yes
      	#Указываем каталог очереди для Postfix
      	queue_directory = /var/spool/postfix
      	################################################## #
      	header_checks = pcre:/etc/postfix/header_checks
      	disable_vrfy_command = yes
      	additional_config_dir = /etc/postfix/config
      	white_client = pcre:/etc/postfix/config/white_client
      	block_dsl = regexp:$additional_config_dir/block_dsl
      	white_client_ip = check_client_access pcre:$additional_config_dir/white_client_ip
      	helo_access = check_helo_access pcre:$additional_config_dir/helo_checks
      	mx_access = check_sender_mx_access cidr:$additional_config_dir/mx_access, check_sender_access hash:/etc/postfix/domain_mx_whitelist
      	invalid_hostname_reject_code = 550
      	non_fqdn_reject_code = 550
      	unknown_address_reject_code = 550
      	unknown_client_reject_code = 550
      	unknown_hostname_reject_code = 550
      	unverified_recipient_reject_code = 550
      	unverified_sender_reject_code = 550
      	smtpd_reject_unlisted_recipient = yes
      	smtpd_restriction_classes = block_dsl, helo_access, mx_access, white_client_ip, white_client
      	smtpd_client_restrictions = block_dsl, helo_access, mx_access, white_client_ip, white_client, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_unknown_address, reject_unauth_pipelining, reject_unknown_sender_domain, permit
      	smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access, check_sender_access hash:/etc/postfix/domain_mx_whitelist
      	smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, check_recipient_access regexp:/etc/postfix/recipient_access, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname, check_sender_access hash:/etc/postfix/domain_mx_whitelist, check_policy_service unix:private/policy-spf permit
      	proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
      	smtp_use_tls = yes
      	smtpd_use_tls = yes
      	smtp_tls_note_starttls_offer = yes
      	smtpd_tls_key_file = /etc/dovecot/sun-torrents.key
      	smtpd_tls_cert_file = /etc/dovecot/sun-torrents.cert
      	smtpd_tls_loglevel = 1
      	smtpd_tls_received_header = yes
      	smtpd_tls_session_cache_timeout = 1s
      	smtp_skip_5xx_greeting = no
      	smtpd_reject_unlisted_sender = yes
      	tls_random_source = dev:/dev/urandom
      	milter_protocol = 2
      	milter_default_action = accept
      	smtpd_milters = inet:localhost:12301
      	non_smtpd_milters = inet:localhost:12301
      	content_filter = smtp-amavis:[127.0.0.1]:10024
      	opendmarc_milter = unix:var/run/opendmarc/opendmarc.sock
      	smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, check_recipient_access regexp:/etc/postfix/recipient_access, reject_unknown_client_hostname, reject_unknown_reverse_client_hostname, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname, check_sender_access hash:/etc/postfix/domain_mx_whitelist, check_policy_service unix:private/policy-spf permit
      	[B][FONT=Playfair Display][COLOR=#212529][/COLOR][/FONT][/B]
    5. Создайте mysql-virtual-mailbox-domains.cf

      Code:
      	nano /etc/postfix/mysql-virtual-mailbox-domains.cf
      Вставить конфигурацию
      Code:
      user = terra
      	password =
      	hosts = 127.0.0.1
      	dbname = base0
      	query = SELECT 1 FROM virtual_domains WHERE name='%s'
    6. Создайте mysql-virtual-mailbox-maps.cf

      Code:
      	nano /etc/postfix/mysql-virtual-mailbox-maps.cf
      Вставить конфигурацию
      Code:
      user = terra
      	password =
      	hosts = 127.0.0.1
      	dbname = base01
      	query = SELECT 1 FROM virtual_users WHERE email='%s'
    7. Создайте mysql-virtual-alias-maps.cf

      Code:
      	nano /etc/postfix/mysql-virtual-alias-maps.cf
      Code:
      user = terra
      	password =
      	hosts = 127.0.0.1
      	dbname = base01
      	query = SELECT destination FROM virtual_aliases WHERE source='%s'
    8. Настроить master.cf

      Code:
      	nano /etc/postfix/master.cf
      Вставить конфигурацию.
      Code:
      #
      	# Postfix master process configuration file. For details on the format
      	# of the file, see the master(5) manual page (command: "man 5 master").
      	#
      	# Do not forget to execute "postfix reload" after editing this file.
      	#
      	# ================================================== ========================
      	# service type private unpriv chroot wakeup maxproc command + args
      	# (yes) (yes) (yes) (never) (100)
      	# ================================================== ========================
      	#smtp inet n - - - 1 postscreen
      	#smtpd pass - - - - - smtpd
      	#dnsblog unix - - - - 0 dnsblog
      	#tlsproxy unix - - - - 0 tlsproxy
      	#submission inet n - - - - smtpd
      	# -o syslog_name=postfix/submission
      	# -o smtpd_tls_security_level=encrypt
      	# -o smtpd_sasl_auth_enable=yes
      	# -o smtpd_client_restrictions=permit_sasl_authenticate d,reject
      	# -o milter_macro_daemon_name=ORIGINATING
      	#smtps inet n - - - - smtpd
      	# -o syslog_name=postfix/smtps
      	# -o smtpd_tls_wrappermode=yes
      	# -o smtpd_sasl_auth_enable=yes
      	# -o smtpd_client_restrictions=permit_sasl_authenticate d,reject
      	# -o milter_macro_daemon_name=ORIGINATING
      	#628 inet n - - - - qmqpd
      	smtp inet n - y - - smtpd
      	pickup fifo n - y 60 1 pickup
      	cleanup unix n - y - 0 cleanup
      	qmgr fifo n - n 300 1 qmgr
      	#qmgr fifo n - n 300 1 oqmgr
      	tlsmgr unix - - y 1000? 1 tlsmgr
      	rewrite unix - - y - - trivial-rewrite
      	bounce unix - - y - 0 bounce
      	defer unix - - y - 0 bounce
      	trace unix - - y - 0 bounce
      	verify unix - - y - 1 verify
      	flush unix n - y 1000? 0 flush
      	proxymap unix - - n - - proxymap
      	proxywrite unix - - n - 1 proxymap
      	smtp unix - - y - - smtp
      	# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
      	relay unix - - y - - smtp
      	showq unix n - y - - showq
      	error unix - - y - - error
      	retry unix - - y - - error
      	discard unix - - y - - discard
      	local unix - n n - - local
      	virtual unix - n n - - virtual
      	lmtp unix - - y - - lmtp
      	anvil unix - - y - 1 anvil
      	#
      	# ================================================== ==================
      	# Interfaces to non-Postfix software. Be sure to examine the manual
      	# pages of the non-Postfix software to find out what options it wants.
      	#
      	# Many of the following services use the Postfix pipe(8) delivery
      	# agent. See the pipe(8) man page for information about ${recipient}
      	# and other message envelope options.
      	# ================================================== ==================
      	#
      	# maildrop. See the Postfix MAILDROP_README file for details.
      	# Also specify in main.cf: maildrop_destination_recipient_limit=1
      	#
      	scache unix - - y - 1 scache
      	maildrop unix - n n - - pipe
      	flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
      	#
      	# ================================================== ==================
      	#
      	# Recent Cyrus versions can use the existing "lmtp" master.cf entry.
      	#
      	# Specify in cyrus.conf:
      	# lmtp cmd="lmtpd -a" listen="localhost:lmtp" proto=tcp4
      	#
      	# Specify in main.cf one or more of the following:
      	# mailbox_transport = lmtp:inet:localhost
      	# virtual_transport = lmtp:inet:localhost
      	#
      	# ================================================== ==================
      	#
      	# Cyrus 2.1.5 (Amos Gouaux)
      	# Also specify in main.cf: cyrus_destination_recipient_limit=1
      	#
      	#cyrus unix - n n - - pipe
      	# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
      	#
      	# ================================================== ==================
      	# Old example of delivery via Cyrus.
      	#
      	#old-cyrus unix - n n - - pipe
      	# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
      	#
      	# ================================================== ==================
      	#
      	# See the Postfix UUCP_README file for configuration details.
      	#
      	uucp unix - n n - - pipe
      	flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
      	#
      	# Other external delivery methods.
      	#
      	ifmail unix - n n - - pipe
      	flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
      	bsmtp unix - n n - - pipe
      	flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
      	scalemail-backend unix - n n - 2 pipe
      	flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
      	mailman unix - n n - - pipe
      	flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
      	${nexthop} ${user}
      	#DOVECOT
      	dovecot unix - n n - - pipe
      	flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -d ${recipient}
      	submission inet n - y - - smtpd
      	-o smtpd_tls_security_level=encrypt
      	-o smtpd_sasl_auth_enable=yes
      	-o smtpd_sasl_type=dovecot
      	-o smtpd_sasl_path=private/auth
      	-o smtpd_sasl_security_options=noanonymous
      	-o smtpd_sasl_local_domain=$myhostname
      	-o smtpd_client_restrictions=permit_sasl_authenticate d,reject
      	-o smtpd_sender_login_maps=hash:/etc/postfix/virtual
      	-o smtpd_sender_restrictions=reject_sender_login_mism atch
      	-o smtpd_recipient_restrictions=reject_non_fqdn_recip ient,reject_unknown_recipient_domain,permit_sasl_a uthenticated,reject
      	-o content_filter=spamassassin
      	smtps inet n - n - - smtpd
      	-o syslog_name=postfix/smtps
      	-o smtpd_tls_wrappermode=yes
      	-o smtpd_sasl_auth_enable=yes
      	policy-spf unix - n n - 0 spawn
      	user=nobody argv=/usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf
      	smtp-amavis unix - - y - 2 smtp
      	-o smtp_data_done_timeout=1200
      	-o smtp_send_xforward_command=yes
      	-o disable_dns_lookups=yes
      	-o max_use=20
      	127.0.0.1:10025 inet n - y - - smtpd
      	-o content_filter=
      	-o local_recipient_maps=
      	-o relay_recipient_maps=
      	-o smtpd_restriction_classes=
      	-o smtpd_delay_reject=no
      	-o smtpd_client_restrictions=permit_mynetworks,reject
      	-o smtpd_helo_restrictions=
      	-o smtpd_sender_restrictions=
      	-o smtpd_recipient_restrictions=permit_mynetworks,rej ect
      	-o smtpd_data_restrictions=reject_unauth_pipelining
      	-o smtpd_end_of_data_restrictions=
      	-o mynetworks=127.0.0.0/8
      	-o smtpd_error_sleep_time=0
      	-o smtpd_soft_error_limit=1001
      	-o smtpd_hard_error_limit=1000
      	-o smtpd_client_connection_count_limit=0
      	-o smtpd_client_connection_rate_limit=0
      	-o receive_override_options=no_header_body_checks,no_ unknown_recipient_checks
      	#smtp inet n - - - - smtpd
      	# -o content_filter=spamassassin
      	#submission inet n - - - - smtpd
      	# -o content_filter=spamassassin
      	spamassassin unix - n n - - pipe
      	user=debian-spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
    9. Создаем группу vmail и пользователя vmail, входящего в эту группу.
      Code:
      	sudo groupadd -g 5000 vmail sudo useradd -g vmail -u 5000 vmail
    10. Создадим каталог, где будут размещаться почтовые ящики:
      Code:
      	sudo mkdir /var/vmail
      сменим имя и группу владельца созданной директории на vmail:vmail
      Code:
      	sudo chown vmail:vmail /var/vmail
      дадим владельцу и его группе полные права на каталог, а другим все запретим
      Code:
      	sudo chmod 770 /var/vmail
    11. Задаем сообщение, которое будет выводить Postfix в случае, если отправитель будет представляться именем нашего сервера
      Code:
      	sudo nano /etc/postfix/helo.list example.org 550 Don't use my hostname
      прохешируем
      Code:
      	sudo postmap /etc/postfix/helo.list
    12. Задаем сообщение, которое будет выводить Postfix в случае, если отправитель извне будет говорить, что он из нашей сети
      Code:
      	sudo nano /etc/postfix/ext_sender example.org 450 Do not use my domain in your envelope sender
      прохешируем
      Code:
      	sudo postmap /etc/postfix/ext_sender
    13. Настраиваем демон saslauthd для взаимодействия с Postfix
      Code:
      	sudo mkdir -p /var/spool/postfix/var/run/saslauthd sudo nano /etc/default/saslauthd
      необходимо проверить, чтобы были закомментированы все строки, и написать следующее:
      Code:
      	START=yes DESC="SASL Authentication Daemon" NAME="saslauthd" MECHANISMS="pam" MECH_OPTIONS="" THREADS=5 OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
    14. Настраиваем pam-аутентификацию
      Code:
      	sudo nano /etc/pam.d/smtp
      Пишем туда следующее:
      Code:
      	auth required pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=user passwdcolumn=password crypt=1 account sufficient pam_mysql.so user=mail_admin passwd=mail_admin_password host=127.0.0.1 db=mail table=users usercolumn=user passwdcolumn=password crypt=1
    15. Настраиваем Postfix для взаимодействия с saslauthd
      Code:
      	sudo nano /etc/postfix/sasl/smtpd.conf
      Пишем туда следующее:
      Code:
      	pwcheck_method: saslauthd mech_list: plain login allow_plaintext: true auxprop_plugin: mysql sql_hostnames: 127.0.0.1 sql_user: root sql_passwd: 12345 sql_database: base0 sql_select: SELECT password FROM users WHERE user = '%u'
    16. Владельцем данных файлов должен быть root
      Code:
      	sudo chown root /etc/pam.d/smtp /etc/postfix/sasl/smtpd.conf
    17. Добавляем пользователя postfix в группу sasl
      Code:
      	sudo adduser postfix sasl
    18. Настроить dovecot.conf
      Code:
      	nano /etc/dovecot/dovecot.conf
      Изменить конфигурацию
      Code:
      	!include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp
    19. Настроить 10-mail.conf
      Code:
      	nano /etc/dovecot/conf.d/10-mail.conf
      Изменить конфигурацию
      Code:
      	#mail_location = mbox:~/mail:INBOX=/var/mail/%u  на mail_location = maildir:/var/vmail//%d/%n
      Code:
      	mail_privileged_group = vmail
    20. Настроить 10-auth.conf

      Code:
      	nano /etc/dovecot/conf.d/10-auth.conf
      Изменить конфигурацию c
      Code:
      	#disable_plaintext_auth = yes
      на
      Code:
      	disable_plaintext_auth = yes
      Code:
      	auth_mechanisms = plain login
      Code:
      	#!include auth-system.conf.ext !include auth-sql.conf.ext]
    Last edited by terra; 2 weeks ago.
    IPv6 Certification Badge for terra2039

  • #2
    Почтовый сервер Postfix Dovecot SASL Amavis OpenDKIM OpenDMARC SPF postgrey MySQL 8.0 debian 11 ubuntu 20.04

    Часть 2
    1. Настроить auth-sql.conf.ext

      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]passdb { driver = sql # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=vmail gid=vmail home=/var/vmail/%d/%n } [/COLOR][/FONT][/SIZE]
    2. Настройте dovecot-sql.conf.ext

      Code:
      	nano /etc/dovecot/dovecot-sql.conf.ext
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]# Database driver: mysql, pgsql, sqlite driver = mysql[/COLOR][/FONT][/SIZE]
      Code:
      	connect = host=127.0.0.1 dbname=base0 user=terra password=
      Code:
      	default_pass_scheme = SHA512-CRYPT
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]password_query = \ SELECT email as user, password \ FROM virtual_users WHERE email='%u'; [/COLOR][/FONT][/SIZE]
    3. Настроить 10-master.conf

      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } }[/COLOR][/FONT][/SIZE]
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]service lmtp { unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix }[/COLOR][/FONT][/SIZE]
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]unix_listener auth-userdb { mode = 0600 user = vmail group = vmail}[/COLOR][/FONT][/SIZE]
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]# Postfix smtp-auth unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix }[/COLOR][/FONT][/SIZE]
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]# Auth process is run as this user. #user = $default_internal_user user = dovecot }[/COLOR][/FONT][/SIZE]
      Изменить параметр авторизации службы
      Code:
      	[SIZE=14px][FONT=SFMono-Regular][COLOR=#212529]service auth-worker { # Auth worker process is run as root by default, so that it can access # /etc/shadow. If this isn't necessary, the user should be changed to # $default_internal_user. user = vmail }[/COLOR][/FONT][/SIZE]
    4. Создадим сертификат и ключ для SSL
      Code:
      	cd /etc/dovecot
      Code:
      	sudo openssl req -new -outform PEM -out example.cert -newkey rsa:2048 -nodes -keyout example.key -keyform PEM -days 365 -x509
      В итоге в каталоге /etc/dovecot будет создан сертификат
      Code:
      	example.cert и ключ example.key
    5. Владельцем ключа должен быть root
      Code:
      	sudo chown root /etc/dovecot/example.key
    6. Dovecot.conf
      Code:
      !include_try /usr/share/dovecot/protocols.d/*.protocol
      	protocols = imap lmtp
      	#!include conf.d/*.conf
      	#!include_try local.conf
      	#Разрешаем авторизацию в plaintext
      	disable_plaintext_auth = no
      	# Журнал будем писать в файл /var/log/dovecot/dovecot.err
      	log_path = /var/log/dovecot/dovecot.err
      	# Формат даты и времени для регистрируемых событий
      	log_timestamp = "%Y-%m-%d %H:%M:%S "
      	#Включаем SSL
      	#ssl = yes
      	#ssl_cert =< /etc/dovecot/sun-torrents.cert
      	#ssl_key =< /etc/dovecot/sun-torrents.key
      	#Строка приветствия при ответе сервера
      	login_greeting = Dovecot ready.
      	#Описываем тип (maildir) и местонахождения почтовых ящиков (/var/vmail/%d/%n) %d - имя сервера, %n - имя пользователя
      	mail_location = maildir:/var/vmail/%d/%n
      	#Задаем идентификатор пользователя и группы, с которыми будет работать dovecot
      	mail_uid = 5000
      	mail_gid = 5000
      	mail_privileged_group = vmail
      	valid_chroot_dirs = /var/vmail
      	#Настраиваем вывод отладочных сообщений
      	auth_verbose = yes
      	auth_debug = yes
      	auth_debug_passwords = yes
      	#Типы допустимых вариантов аутентификации
      	#auth_mechanisms = plain login digest-md5
      	#Задаем параметры аутентификации
      	passdb {
      	driver = sql
      	args = /etc/dovecot/dovecot-sql.conf.ext
      	}
      	service auth {
      	unix_listener auth-userdb {
      	mode = 0660
      	user = vmail
      	group = vmail
      	}
      	unix_listener /var/spool/postfix/private/auth {
      	mode = 0660
      	# Assuming the default Postfix user and group
      	user = postfix
      	group = postfix
      	}
      	}
      	service imap-login {
      	inet_listener imap {
      	port = 143
      	}
      	inet_listener imaps {
      	port = 993
      	ssl = yes
      	}
      	}
    IPv6 Certification Badge for terra2039

    Comment


    • #3
      Почтовый сервер Postfix Dovecot SASL Amavis OpenDKIM OpenDMARC SPF postgrey MySQL 8.0 debian 11 ubuntu 20.04
      Часть 3 фильтрация почты
      1. Установка и настройка займет у Вас не более 5 минут, пакет имеется в стандартных репозиториях Ubuntu, Debian, и в других дистрибутивах Linux.
        Code:
        	apt-get install postgrey
        Проверим работает ли демон
        Code:
        	netstat -pan |grep 10023
        Если все хорошо то вы увидите примерно следующее:
        Code:
        	tcp 0 0 127.0.0.1:10023 0.0.0.0:* LISTEN 20345/postgrey.pid
        Далее вы можете отредактировать конфиг файлы postgrey, они находятся в каталоге
        Code:
        /etc/postgrey
        вы найдете там два файла whitelist_clients и whitelist_recipients в первом файле содержится список хостов которым разрешено присылать вам почту без пятиминутной задержки, во втором файле хранятся ящики на которые письма будут так же приходить без всяких задержек. В принципе программа готова к работе сразу после установки, настроить дополнительные разрешенные сети можно позже.Для объединения postfix и postgrey необходимо добавить одну строку в конфигурационный файл postfix Отредактируйте файл /etc/postfix/main.cf откройте его в редакторе, найдите строку smtpd_recipient_restrictions = и добавьте в ее конец запятую и check_policy_service inet:127.0.0.1:60000 что бы в результате у вас вышло примерно так.
        Code:
        	smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject _unauth_destination,check_policy_service inet:127.0.0.1:10023
        Теперь перезапустим postfix и postgrey
        Code:
        	/etc/init.d/postfix reload /etc/init.d/postgrey restart
        После этого заглянем в логи, там видны результаты работы postgrey
        Code:
        	Apr 14 13:46:46 gw0 postgrey[18518]: Process Backgrounded Apr 14 13:46:46 gw0 postgrey[18518]: 2012/04/14-13:46:46 postgrey (type Net::Server::Multiplex) starting! pid(18518) Apr 14 13:46:46 gw0 postgrey[18518]: Binding to TCP port 10023 on host localhost#012 Apr 14 13:46:46 gw0 postgrey[18518]: Setting gid to "125 125" Apr 14 13:46:46 gw0 postgrey[18518]: Setting uid to "120"
      2. В дебиан 11 изменились правила работы службы, для корректной работы службы postgrey необходимо выполнить следующие действия.
        Code:
        	mkdir /var/run/postgrey chown postgrey postgrey /var/run/postgrey
        Code:
        	/etc/init.d/postgrey stop rm /var/run/postgrey.pid /etc/init.d/postgrey start
      3. Настройка Spamassassin

        Code:
        apt-get install spamassassin spamc
        Во время установки автоматически создался пользователь «debian-spamd» В файле /etc/default/spamassassin укажем:
        Code:
        ENABLED=0
        	#OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
        	OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username debian-spamd -s /var/log/spamd.log"
        	CRON=1
        В файле /etc/spamassassin/local.cf укажем:
        Code:
        rewrite_header Subject *****SPAM*****
        	report_safe 0
        	required_score 5.0
        	use_bayes 1
        	use_bayes_rules 1
        	bayes_auto_learn 1
        	skip_rbl_checks 0
        	use_razor2 0
        	use_pyzor 0
        В файле /etc/postfix/master.cf найдем строку:
        Code:
        smtp      inet  n       -       y       -       -       smtpd
        И под ней через пробел добавим строку:
        Code:
        -o content_filter=spamassassin
        А также добавим в конце файла (перед двумя последними строками добавим пробелы):
        Code:
        spamassassin unix -     n       n       -       -       pipe
        	user=debian-spamd argv=/usr/bin/spamc -f -e
        	/usr/sbin/sendmail -oi -f ${sender} ${recipient}
        Проверим конфигурацию Postfix и перезапустим его чтобы применить изменения:
        Code:
        postfix check
        	systemctl status postfix.service
        	systemctl restart postfix.service
      4. Для дебиан 11 необходимо выполнить, две дополнительные операции.
        Code:
        adduser --system spamd systemctl enable spamassassin.service
      5. Install Amavisd and Clamav Server, and start Clamav Server first.
        Code:
        [URL="https://www.server-world.info/en/command/html/apt.html"]apt[/URL] -y install clamav-daemon amavisd-new
        Code:
        nano /etc/amavis/conf.d/15-content_filter_mode
        Code:
        # uncomment to enable virus scanning
        	
        	@bypass_virus_checks_maps = ( \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
        Code:
        nano /etc/postfix/main.cf
        Code:
        # add to the end
        	content_filter=smtp-amavis:[127.0.0.1]:10024
        Code:
        nano /etc/postfix/master.cf
        	# add to the end
        	
        	smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,rej ect -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000
      6. Затем открываем на редактирование:
        Code:
        nano /etc/amavis/conf.d/50-user
        50-user.conf
        Code:
         use strict;
        	
        	#
        	# Place your configuration directives here. They will override those in
        	# earlier files.
        	#
        	# See /usr/share/doc/amavisd-new/ for documentation and examples of
        	# the directives you can use in this file
        	#
        	
        	@bypass_virus_checks_maps = (1); # controls running of anti-virus code
        	$myhostname = 'smtp.sun-torrents.name';
        	@local_domains_acl = ( "smtp.sun-torrents.name", "sun-torrents.name" );
        	$virus_admin = 'amavis@sun-torrents.name';
        	# This policy will perform virus checks only.
        	read_hash(\%whitelist_sender, '/etc/amavis/whitelist');
        	@whitelist_sender_maps = (\%whitelist_sender);
        	
        	$interface_policy{'10026'} = 'VIRUSONLY';
        	$policy_bank{'VIRUSONLY'} = { # mail from the pickup daemon
        	bypass_spam_checks_maps => ['@whitelist_sender_maps'], # don't spam-check this mail
        	bypass_banned_checks_maps => ['@whitelist_sender_maps'], # don't banned-check this mail
        	bypass_header_checks_maps => ['@whitelist_sender_maps'], # don't header-check this mail
        	};
        	$sa_tag_level_deflt = -999; # add spam info headers if at, or above that level
        	$sa_tag2_level_deflt = 6.2; # add 'spam detected' headers at that level
        	$sa_kill_level_deflt = 6.9; # triggers spam evasive actions (e.g. blocks mail)
        	$sa_spam_subject_tag = '**Spam**';
        	$clean_quarantine_to = undef; # local quarantine
        	$virus_quarantine_to = undef; # traditional local quarantine
        	$banned_quarantine_to = undef; # local quarantine
        	$bad_header_quarantine_to = undef; # local quarantine
        	$spam_quarantine_to = undef; # local quarantine
        	$final_spam_destiny=D_PASS;
        	$final_virus_destiny=D_PASS;
        	#------------ Do not modify anything below this line -------------
        	1; # ensure a defined return
      7. Разрешаем запуск антивируса и amavis:
        Code:
        systemctl enable clamav-daemon clamav-freshclam amavis
        Перезапускаем сервисы:
        Code:
        systemctl restart amavis clamav-daemon clamav-freshclam
      8. Установить OpenDKIM

        Установите OpenDKIM и его зависимости:
        Code:
        	sudo apt-get install opendkim opendkim-tools
        Начнем с основного файла конфигурации:
        Code:
        	sudo nano /etc/opendkim.conf
        Code:
        # This is a basic configuration that can easily be adapted to suit a standard
        	# installation. For more advanced options, see opendkim.conf(5) and/or
        	# /usr/share/doc/opendkim/examples/opendkim.conf.sample.
        	
        	# Log to syslog
        	Syslog yes
        	SyslogSuccess Yes
        	LogWhy Yes
        	# Required to use local socket with MTAs that access the socket as a non-
        	# privileged user (e.g. Postfix)
        	UMask 002
        	
        	# Sign for example.com with key in /etc/mail/dkim.key using
        	# selector '2007' (e.g. 2007._domainkey.example.com)
        	#Domain sun-torrents.name
        	#KeyFile /etc/mail/dkim.key
        	#Selector 2007
        	
        	# Commonly-used options; the commented-out versions show the defaults.
        	Canonicalization relaxed/relaxed
        	Mode sv
        	SubDomains yes
        	#ADSPDiscard no
        	
        	# Always oversign From (sign using actual From and a null From to prevent
        	# malicious signatures header fields (From and/or others) between the signer
        	# and the verifier. From is oversigned by default in the Debian pacakge
        	# because it is often the identity key used by reputation systems and thus
        	# somewhat security sensitive.
        	OversignHeaders From
        	
        	# List domains to use for RFC 6541 DKIM Authorized Third-Party Signatures
        	# (ATPS) (experimental)
        	
        	#ATPSDomains example.com
        	AutoRestart Yes
        	AutoRestartRate 10/1h
        	ExternalIgnoreList refile:/etc/opendkim/TrustedHosts
        	InternalHosts refile:/etc/opendkim/TrustedHosts
        	KeyTable refile:/etc/opendkim/KeyTable
        	SigningTable refile:/etc/opendkim/SigningTable
        	PidFile /var/run/opendkim/opendkim.pid
        	SignatureAlgorithm rsa-sha256
        	
        	#UserID opendkim opendkim
        	
        	Socket inet:12301@localhost
      9. Подключите milter к Postfix:
        Code:
        	sudo nano /etc/default/opendkim
        Добавьте следующую строку, редактируйте номер порта, только если используется настраиваемый:
        Code:
        	SOCKET="inet:12301@localhost"
        Настройте postfix для использования этого milter:
        Code:
        	sudo nano /etc/postfix/main.cf
        Убедитесь, что эти две строки присутствуют в конфигурационном файле Postfix и не закомментированы:
        Code:
        	[SIZE=14px][COLOR=#545454][FONT=Consolas]milter_protocol = 2 milter_default_action = accept[/FONT][/COLOR][/SIZE]
        Создайте структуру каталогов, которая будет содержать доверенные хосты, таблицы ключей, таблицы подписи и криптоключи:
        Code:
        	[SIZE=14px][COLOR=#545454][FONT=Consolas]sudo mkdir /etc/opendkim sudo mkdir /etc/opendkim/keys[/FONT][/COLOR][/SIZE]
        Укажите доверенные хосты:
        Code:
        	sudo nano /etc/opendkim/TrustedHosts
        Мы будем использовать этот файл для определения обоих ExternalIgnoreListи InternalHosts, сообщения, исходящие от этих хостов, доменов и IP-адресов, будут доверенными и подписанными.
        Поскольку наш основной файл конфигурации объявлен как файл TrustedHostsрегулярного выражения ( refile), мы можем использовать шаблоны с подстановочными знаками, *.example.comчто означает, что сообщения, поступающие с поддоменов example.com, также будут доверенными, а не только сообщения, отправленные из корневого домена.
        Настройте и добавьте следующие строки во вновь созданный файл. Можно указать несколько доменов, не редактируйте первые три строки:
        Code:
        127.0.0.1
        	localhost
        	10.16.10.0/29
        	yandex.ru
        	mail..ru
        	google.ru
        	*.sun-torrents.name
        Создайте ключевую таблицу:
        Code:
        	sudo nano /etc/opendkim/KeyTable
        Таблица ключей содержит каждую пару селектор / домен и путь к их закрытому ключу. В качестве селектора можно использовать любую буквенно-цифровую строку, в этом примере mailиспользуется, и менять ее не нужно.
        Code:
        mail._domainkey.sun-torrents.name sun-torrents.name:mail:/etc/opendkim/keys/sun-torrents.name/mail.private
        	smtp._domainkey.smtp.sun-torrents.name smtp.sun-torrents.name:smtp:/etc/opendkim/keys/smtp.sun-torrents.name/smtp.private
        	[COLOR=#333333][FONT=Inter-Regular][SIZE=16px][/SIZE][/FONT][/COLOR]
        Создайте таблицу подписи:
        Code:
        	sudo nano /etc/opendkim/SigningTable
        Этот файл используется для объявления доменов / адресов электронной почты и их селекторов.
        Code:
        *@sun-torrents.name mail._domainkey.sun-torrents.name
        	*@smtp.sun-torrents.name smtp._domainkey.smtp.sun-torrents.name
        	*@mvdgai.su gai._domainkey.mvdgai.su
      10. Сгенерируйте открытый и закрытый ключи

        Создайте отдельную папку для домена, в которой будут храниться ключи:
        Code:
        mkdir
        	/etc/opendkim/keys
        Создайте отдельную папку для домена, в которой будут храниться ключи:
        Code:
        	[SIZE=14px][COLOR=#545454][FONT=Consolas]sudo mkdir example.com cd example.com[/FONT][/COLOR][/SIZE]
        Сгенерируйте ключи:
        Code:
        	opendkim-genkey -d
        	example.com -b 2048 -r -s 201611
        -s указывает селектор и -d домен, эта команда создаст два файла, mail.private это наш закрытый ключ и mail.txt содержит открытый ключ.
      11. Добавить запись DNS TXT

        Следующим шагом является kofler.txtсохранение общедоступной части ключа DKIM, то есть в логике этого примера содержимое в записи TXT в конфигурации DNS вашего имени хоста. Используйте строку символов перед ключевым словом INдля поля Hostname записи DNS и весь текст между круглыми скобками для поля Destination . В веб-интерфейсе моего хоста диалоговое окно для настройки новой записи DNS типа выглядит следующим TXTобразом:
        Новая запись DNS типа »TXT« содержит открытую часть ключа DKIM.Чтобы изменения в данных DNS стали общедоступными в Интернете, может потребоваться несколько часов. Вы можете host -t TXTпрочитать записи TXT хоста с помощью команды , при этом вы должны указать имя <selector>._domainkey перед своим доменным именем здесь example._domainkey.
        Code:
        	[SIZE=15px][FONT=monospace][COLOR=#2b2b2b]host -t TXT 201611._domainkey.example.com 201611._domainkey.kofler.info descriptive text "v=DKIM1\; k=rsa\; s=email\; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2iA MG1lvjfnXmJKFsfLDCt+PYFc16Q4aQz/dKnpQXSuSvejqb9qGidz0XXItRHXvnzsD7yOly3iconl+kCfY1 JbONPKXaObWep7GIXNPIW4tL/jbd886oUd/wTonK50ScCuejelWAQTHs25Q6zH6/ZWWy1vCVIet/+dsqkeJpZ1NFoQrk2uEcx8Yz7NAHcvSt/73Qzl5Czna79" "7955/zX7Bp10e/lATZbVtP6Qu6eC2TMpWx06bEDRZwE4mK0T1iCSHb0wnjLurvKo uSnbXAoT+q/dLApTAohIqsmhK0O6z/2Gmo+f8g9JH+PVtyzY4zfvjxsXgWn6kmhdoAtNNuhQIDAQAB"[/COLOR][/FONT][/SIZE][SIZE=16px][FONT=Lato][COLOR=#2b2b2b][FONT=inherit][SIZE=16px][FONT=inherit][SIZE=16px][/SIZE][/FONT][/SIZE][/FONT][/COLOR][/FONT][/SIZE]
      12. Настройка OpenDMARC с SMTP-сервером Postfix в Ubuntu 16.04, Ubuntu 18.04 или 20.04 debian11

        OpenDMARC - это программное обеспечение с открытым исходным кодом, которое может выполнять проверку и составление отчетов DMARC. Он уже находится в репозитории Ubuntu, поэтому вы можете выполнить следующую команду, чтобы установить его.
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]sudo apt install opendmarc[/COLOR][/FONT][COLOR=#000000][FONT=Fira Sans][/FONT][/COLOR][/SIZE]
        Если вас попросят настроить базу данных для OpenDMARC с помощью dbconfig-common, вы можете спокойно выбрать Нет .


        После установки он будет автоматически запущен. Проверьте его статус с помощью:
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]systemctl status opendmarc[/COLOR][/FONT][COLOR=#000000][FONT=Fira Sans][/FONT][/COLOR][/SIZE]
        Выход:
        Code:
        	opendmarc.service - OpenDMARC Milter Loaded: loaded (/lib/systemd/system/opendmarc.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2018-10-30 19:49:52 CST; 23s ago Docs: man opendmarc(8) man opendmarc.conf(5) Main PID: 14858 (opendmarc) Tasks: 6 (limit: 1110) CGroup: /system.slice/opendmarc.service └─14858 /usr/sbin/opendmarc
      13. Обратите внимание, что автоматический запуск при загрузке системы отключен. Мы можем включить его:
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]sudo systemctl enable opendmarc[/COLOR][/FONT][/SIZE][COLOR=#000000][FONT=Fira Sans][SIZE=16px][/SIZE][/FONT][/COLOR]
        Затем отредактируйте основной файл конфигурации с помощью текстового редактора.
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]sudo nano /etc/opendmarc.conf[/COLOR][/FONT][/SIZE]
        opendmarc.conf
        Code:
        # This is a basic configuration that can easily be adapted to suit a standard
        	# installation. For more advanced options, see openmarc.conf(5) and/or
        	# /usr/share/doc/opendmarc/examples/opendmarc.conf.sample.
        	
        	## AuthservID (string)
        	## defaults to MTA name
        	##
        	## Sets the "authserv-id" to use when generating the Authentication-Results:
        	## header field after verifying a message. If the string "HOSTNAME" is
        	## provided, the name of the host running the filter (as returned by the
        	## gethostname(3) function) will be used.
        	#
        	# AuthservID name
        	
        	## FailureReports { true | false }
        	## default "false"
        	##
        	## Enables generation of failure reports when the DMARC test fails and the
        	## purported sender of the message has requested such reports. Reports are
        	## formatted per RFC6591.
        	#
        	# FailureReports false
        	
        	## PidFile path
        	## default (none)
        	##
        	## Specifies the path to a file that should be created at process start
        	## containing the process ID.
        	#
        	PidFile /run/opendmarc/opendmarc.pid
        	
        	## PublicSuffixList path
        	## default (none)
        	##
        	## Specifies the path to a file that contains top-level domains (TLDs) that
        	## will be used to compute the Organizational Domain for a given domain name,
        	## as described in the DMARC specification. If not provided, the filter will
        	## not be able to determine the Organizational Domain and only the presented
        	## domain will be evaluated.
        	#
        	PublicSuffixList /usr/share/publicsuffix/public_suffix_list.dat
        	
        	## RejectFailures { true | false }
        	## default "false"
        	##
        	## If set, messages will be rejected if they fail the DMARC evaluation, or
        	## temp-failed if evaluation could not be completed. By default, no message
        	## will be rejected or temp-failed regardless of the outcome of the DMARC
        	## evaluation of the message. Instead, an Authentication-Results header
        	## field will be added.
        	#
        	# RejectFailures false
        	
        	## Socket socketspec
        	## default (none)
        	##
        	## Specifies the socket that should be established by the filter to receive
        	## connections from sendmail(8) in order to provide service. socketspec is
        	## in one of two forms: local:path, which creates a UNIX domain socket at
        	## the specified path, or inet:port[@host] or inet6:port[@host] which creates
        	## a TCP socket on the specified port for the appropriate protocol family.
        	## If the host is not given as either a hostname or an IP address, the
        	## socket will be listening on all interfaces. This option is mandatory
        	## either in the configuration file or on the command line. If an IP
        	## address is used, it must be enclosed in square brackets.
        	#
        	Socket local:/run/opendmarc/opendmarc.sock
        	
        	## Syslog { true | false }
        	## default "false"
        	##
        	## Log via calls to syslog(3) any interesting activity.
        	#
        	Syslog true
        	
        	## SyslogFacility facility-name
        	## default "mail"
        	##
        	## Log via calls to syslog(3) using the named facility. The facility names
        	## are the same as the ones allowed in syslog.conf(5).
        	#
        	# SyslogFacility mail
        	
        	## TrustedAuthservIDs string
        	## default HOSTNAME
        	##
        	## Specifies one or more "authserv-id" values to trust as relaying true
        	## upstream DKIM and SPF results. The default is to use the name of
        	## the MTA processing the message. To specify a list, separate each entry
        	## with a comma. The key word "HOSTNAME" will be replaced by the name of
        	## the host running the filter as reported by the gethostname(3) function.
        	#
        	# TrustedAuthservIDs HOSTNAME
        	
        	## UMask mask
        	## default (none)
        	##
        	## Requests a specific permissions mask to be used for file creation. This
        	## only really applies to creation of the socket when Socket specifies a
        	## UNIX domain socket, and to the HistoryFile and PidFile (if any); temporary
        	## files are normally created by the mkstemp(3) function that enforces a
        	## specific file mode on creation regardless of the process umask. See
        	## umask(2) for more information.
        	#
        	UMask 0002
        	
        	## UserID user[:group]
        	## default (none)
        	##
        	## Attempts to become the specified userid before starting operations.
        	## The process will be assigned all of the groups and primary group ID of
        	## the named userid unless an alternate group is specified.
        	#
        	UserID opendmarc
      14. Создайте каталог для хранения файла сокета OpenDMARC и измените владельца, чтобы opendmarc пользователь и opendmarc группа могли получить к нему доступ.
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]sudo mkdir -p / var / spool / postfix / opendmarc sudo chown opendmarc: opendmarc / var / spool / postfix / opendmarc -R[/COLOR][/FONT][/SIZE][COLOR=#000000][FONT=Fira Sans][SIZE=16px][/SIZE][/FONT][/COLOR]
        Измените разрешение на 750, чтобы ограничить доступ, чтобы пользователи, не входящие в группу, opendmarcне могли получить доступ к этому каталогу.
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]sudo chmod 750 / var / spool / postfix / opendmarc / -R[/COLOR][/FONT][/SIZE][COLOR=#000000][FONT=Fira Sans][SIZE=16px][/SIZE][/FONT][/COLOR]
        Добавить пользователя postfixв группу opendmarc.
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]sudo adduser postfix opendmarc[/COLOR][/FONT][/SIZE][COLOR=#000000][FONT=Fira Sans][SIZE=16px][/SIZE][/FONT][/COLOR]
        Затем перезапустите OpenDMARC.
        Code:
        	[SIZE=16px][FONT=Roboto Mono][COLOR=#000000]sudo systemctl перезапуск opendmarc[/COLOR][/FONT][/SIZE]
      15. Создайте файл игнорирования хостов, определенный в конфигурации:
        Code:
        	[SIZE=14px][FONT=SFMono-Regular][COLOR=#666666]# mkdir / etc / opendmarc # nano /etc/opendmarc/ignore.hosts[/COLOR][/FONT][/SIZE]
        Файл должен содержать список сетей и хостов, которым вы доверяете.
        Их почта не будет проходить проверку openDMARC:
        Code:
        localhost
        	10.16.10.0/29
        	[COLOR=#212529][FONT=Roboto][SIZE=19px][/SIZE][/FONT][/COLOR]
        16. Отчетность DMARC

        Сервер выполняет проверки DMARC, но еще не поддерживает DMARC. Нам не хватает возможностей отчетности. Чтобы реализовать этот недостающий сегмент, вам понадобится доступ к базе данных MySQL.
        Схему DMARC DB можно найти на:
        Code:
        	/usr/share/doc/opendmarc/schema.mysql
        По умолчанию все в порядке, но если вы не хотите создавать базу данных пользователей вручную, раскомментируйте:
        Code:
        	-- CREATE USER 'opendmarc'@'localhost' IDENTIFIED BY 'changeme'; -- GRANT ALL ON opendmarc.* to 'opendmarc'@'localhost';
        Эти две строки создадут пользователя и назначат соответствующие права. При необходимости отрегулируйте (по крайней мере, выберите свой пароль вместо «changeme»).
        Импортировать базу данных:
        Code:
        	[SIZE=14px][FONT=SFMono-Regular][COLOR=#666666]mysql -u root -p </path/to/schema.mysql/schema.sql[/COLOR][/FONT][/SIZE]
        Как только этот шаг будет выполнен, мы создадим сценарий для ввода файла истории в БД и отправки отчетов.
        Code:
        	/etc/opendmarc/dmarc_report
        В паке /etc/opendmarc находится report_script
        report_script config
        Code:
        #!/bin/bash
        	
        	DB_SERVER='localhost'
        	DB_USER='root'
        	DB_PASS='*12345'
        	DB_NAME='opendmarc'
        	WORK_DIR='/var/run/opendmarc'
        	REPORT_EMAIL='dmarc [at] sun-torrents [dot] name'
        	REPORT_ORG='smtp.sun-torrents.name'
        	
        	mv ${WORK_DIR}/opendmarc.dat ${WORK_DIR}/opendmarc_import.dat -f
        	cat /dev/null > ${WORK_DIR}/opendmarc.dat
        	
        	/usr/sbin/opendmarc-import --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose < ${WORK_DIR}/opendmarc_import.dat
        	/usr/sbin/opendmarc-reports --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose --interval=86400 --report-email $REPORT_EMAIL --report-org $REPORT_ORG
        	/usr/sbin/opendmarc-expire --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose
        	
        	[B][/B]

        Сделайте скрипт исполняемым:
        Code:
        	[SIZE=14px][FONT=SFMono-Regular][COLOR=#666666]chmod + x / и т.д. / opendmarc / dmarc_report[/COLOR][/FONT][/SIZE]
      Last edited by terra; 2 weeks ago.
      IPv6 Certification Badge for terra2039

      Comment


      • #4
        Почтовый сервер Postfix Dovecot SASL Amavis OpenDKIM OpenDMARC SPF postgrey MySQL 8.0 debian 11 ubuntu 20.04
        Часть 4 фильтрация почты
        1. Для дополнительной защиты от СПАМ, создадим папку config в папке постфикс.
          Code:
          mkdir /etc/postfix/config
        2. Далее создадим следующие файлы
          Code:
          nano /etc/postfix/config/block_dsl nano /etc/postfix/config/helo_checks nano /etc/postfix/config/mx_access nano /etc/postfix/config/white_client nano /etc/postfix/config/white_client_ip
        3. Конфигурационные файлы block_dsl
          Code:
          /^dsl.*\..*/i 553 AUTO_DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/.*\.dsl\..*/i 553 AUTO_DSL2 We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/[a|x]dsl.*\..*\..*/i 553 AUTO_[A|X]DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/client.*\..*\..*/i 553 AUTO_CLIENT We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/cable.*\..*\..*/i 553 AUTO_CABLE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/pool\..*/i 553 AUTO_POOL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/.*dial(\.|-).*\..*\..*/i 553 AUTO_DIAL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/ppp.*\..*/i 553 AUTO_PPP We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/dslam.*\..*\..*/i 553 AUTO_DSLAM We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/dslb.*\..*\..*/i 553 AUTO_DSLB We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/node.*\..*\..*/i 553 AUTO_NODE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/.*\.dynamicIP\..*/i 553 AUTO_DYNAMIC We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/[ax]dsl.*\..*\..*/i REJECT Your message looks like SPAM 01
          	/\.dsl.*\..*\..*/i REJECT Your message looks like SPAM 02
          	/cable.*\..*\..*/i REJECT Your message looks like SPAM 03
          	/client.*\..*\..*/i REJECT Your message looks like SPAM 04
          	/dhcp.*\..*\..*/i REJECT Your message looks like SPAM 05
          	/dial.*\..*\..*/i REJECT Your message looks like SPAM 06
          	/dialup.*\..*\..*/i REJECT Your message looks like SPAM 07
          	/dslam.*\..*\..*/i REJECT Your message looks like SPAM 08
          	/node.*\..*\..*/i REJECT Your message looks like SPAM 09
          	/pool.*\..*\..*/i REJECT Your message looks like SPAM 10
          	/ppp.*\..*\..*/i REJECT Your message looks like SPAM 11
          	/user.*\..*\..*/i REJECT Your message looks like SPAM 12
          	/[0-9]+-[0-9]+/ REJECT Invalid hostname (D-D) (dsl)
          	/(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer |user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)
          helo_checks
          Code:
          /^dsl.*\..*/i 553 AUTO_DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/.*\.dsl\..*/i 553 AUTO_DSL2 We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/[a|x]dsl.*\..*\..*/i 553 AUTO_[A|X]DSL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/client.*\..*\..*/i 553 AUTO_CLIENT We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/cable.*\..*\..*/i 553 AUTO_CABLE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/pool\..*/i 553 AUTO_POOL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/.*dial(\.|-).*\..*\..*/i 553 AUTO_DIAL We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/ppp.*\..*/i 553 AUTO_PPP We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/dslam.*\..*\..*/i 553 AUTO_DSLAM We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/dslb.*\..*\..*/i 553 AUTO_DSLB We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/node.*\..*\..*/i 553 AUTO_NODE We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/.*\.dynamicIP\..*/i 553 AUTO_DYNAMIC We aren't accept direct connection not from dedicated SMTP servers. Please use your internet provider SMTP Server.
          	/[ax]dsl.*\..*\..*/i REJECT Your message looks like SPAM 01
          	/\.dsl.*\..*\..*/i REJECT Your message looks like SPAM 02
          	/cable.*\..*\..*/i REJECT Your message looks like SPAM 03
          	/client.*\..*\..*/i REJECT Your message looks like SPAM 04
          	/dhcp.*\..*\..*/i REJECT Your message looks like SPAM 05
          	/dial.*\..*\..*/i REJECT Your message looks like SPAM 06
          	/dialup.*\..*\..*/i REJECT Your message looks like SPAM 07
          	/dslam.*\..*\..*/i REJECT Your message looks like SPAM 08
          	/node.*\..*\..*/i REJECT Your message looks like SPAM 09
          	/pool.*\..*\..*/i REJECT Your message looks like SPAM 10
          	/ppp.*\..*\..*/i REJECT Your message looks like SPAM 11
          	/user.*\..*\..*/i REJECT Your message looks like SPAM 12
          	/[0-9]+-[0-9]+/ REJECT Invalid hostname (D-D) (dsl)
          	/(modem|dia(l|lup)|cp[ce]|dsl|p[cp]p|cable|catv|poo(l|les)|pppoe|dhcp|client|customer |user|host|[0-9]{4,})(-|_|\.|[0-9])/ REJECT Invalid hostname (client)
          mx_access
          Code:
          127.0.0.1 DUNNO
          	127.0.0.2 550 Domains not registered properly. Can't assign requested address
          	0.0.0.0/8 REJECT Domain MX in broadcast network
          	10.0.0.0/8 REJECT Domain MX in RFC 1918 private network
          	169.254.0.0/16 REJECT Domain MX in link local network
          	172.16.0.0/12 REJECT Domain MX in RFC 1918 private network
          	192.0.2.0/24 REJECT Domain MX in TEST-NET network
          	192.168.0.0/16 REJECT Domain MX in RFC 1918 private network
          	224.0.0.0/4 REJECT Domain MX in class D multicast network
          	240.0.0.0/5 REJECT Domain MX in class E reserved network
          	248.0.0.0/5 REJECT Domain MX in reserved network[B][/B]
          white_client
          Code:
          /webmin@serv03\./i OK
          	/webmin@serv\.sun-torrents\.name/ OK[B][/B]
          white_client_ip
          Code:
          /95\.216\.9\.190/ PERMIT
          	/144\.76\.172\.73/ PERMIT
          	/148\.251\.135\.140/ PERMIT
          	/82\.140\.78\.62/ PERMIT
          	/10\.16\.10\.1/ PERMIT
          	[B][/B]
        IPv6 Certification Badge for terra2039

        Comment

        Working...
        X