Статьи

Postfix як граничний поштовий сервер

  1. Всім привіт, задача проста - організувати резервний канал для прийому / відправки пошти в зв'язці з...
  2. 1. Налаштування порт-форвардинга
  3. Власне кажучи, процедуру організації вищевикладеного реально конфігурувати на будь-якому маломальской...
  4. berkdb
  5. Add support for the CDB database engine from the author of qmail
  6. Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
  7. Enable net-mail / dovecot protocol version 1 (server only) SASL implementation
  8. Add support for SMTPUTF8
  9. Activate default security enhancements for toolchain (gcc, glibc, binutils)
  10. Add LDAP support (Lightweight Directory Access Protocol)
  11. Add support for binding to LDAP backend using dev-libs / cyrus-sasl
  12. Use dev-libs / libressl as SSL provider (might need ssl USE flag), packages should not depend on this USE flag
  13. Add support for using dev-db / lmdb for lookup tables
  14. Add support for mbox (/ var / spool / mail) style mail spools
  15. Add support for using net-misc / memcached for lookup tables
  16. Add mySQL Database support
  17. Support for NIS / YP services
  18. Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
  19. Add support for the postgresql database
  20. Add support for the Simple Authentication and Security Layer
  21. !! internal use only !! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
  22. Add support for sqlite - embedded sql database
  23. Add support for Secure Socket Layer connections
  24. Додаємо необхідні USE-прапори або як глобальний параметр:
  25. з правкою параметра USE = "libressl sasl dlz berkdb caps ipv6 ssl threads" (Приклад)
  26. Або конкретно вказати для пакета підтримуваний функціонал:
  27. і додаємо рядок типу mail-mta / postfix berkdb eai pam sasl ssl (Приклад)
  28. Потім інсталюючи:
  29. # COMPATIBILITY
  30. #luser_relay = [Email protected]
  31. smtpd_client_restrictions =
  32. #smtpd_helo_restrictions:
  33. #smtpd_etrn_restrictions:
  34. # Smtpd_etrn_restrictions:
  35. smtpd_recipient_restrictions =
Всім привіт, задача проста - організувати резервний канал для прийому / відправки пошти в зв'язці з Exchange 2010 на випадок неприємностей з основним.
Як водиться - ми просимо коштів на закупівлю обладнання щоб піднімати роль прикордонного сервера засобами Microsoft Exchange, але на жаль і ах - крутись як хочеш.
Вихід - використовувати поточні потужності і логічну топологію, організувавши резервний поштовий сервер у віртуальному середовищі. Всі параметри будуть описані, щоб більш точно викласти хід моїх думок.
Що нам знадобиться:
  • Cisco-router як пристрій дивиться в інтернет
  • Hyper-v server як платформа для віртуального Postfix
  • Поточна структура AD + Exchange (з легкими поправками)
  • Панель управління нашим доменом (A, MX, SPF)
  • Оформити заявку на предмет створення ptr-записи
1. Налаштування порт-форвардинга
Для початку необхідно реалізувати форвард портів на маршрутизаторі, щоб необхідні сервіси були видні з інтернету і могли правильно функціонувати.
C урахуванням налаштованої маршрутизації і перетворення мережевих адрес виконуємо:

ip nat inside source static tcp ip_server_postfix 25 ext_ip 25 extendable

(Для smtp)

ip nat inside source static tcp ip_server_exchange 443 ext_ip 443 extendable

(Для owa)

Власне кажучи, процедуру організації вищевикладеного реально конфігурувати на будь-якому маломальской обладнанні. Також варто пам'ятати, що шлюзом для postfix служить цей же маршрутизатор, так само як і для Exchange (в разі аварії на основному каналі).
2. Встановлення та налаштування postfix
В якості платформи вибираємо Gentoo linux - так уже повелося J, попередньо сконфігуровані настройки мережі. Не забуваємо про встановлення необхідних прапорів для отримання необхідного функціоналу:

berkdb
Add support for sys-libs / db (Berkeley DB for MySQL)
global
cdb
Add support for the CDB database engine from the author of qmail
global
doc
Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
global
dovecot-sasl
Enable net-mail / dovecot protocol version 1 (server only) SASL implementation
local
eai
Add support for SMTPUTF8
local
hardened
Activate default security enhancements for toolchain (gcc, glibc, binutils)
global
ldap
Add LDAP support (Lightweight Directory Access Protocol)
global
ldap-bind
Add support for binding to LDAP backend using dev-libs / cyrus-sasl
local
libressl
Use dev-libs / libressl as SSL provider (might need ssl USE flag), packages should not depend on this USE flag
global
lmdb
Add support for using dev-db / lmdb for lookup tables
local
mbox
Add support for mbox (/ var / spool / mail) style mail spools
global
memcached
Add support for using net-misc / memcached for lookup tables
local
mysql
Add mySQL Database support
global
nis
Support for NIS / YP services
global
pam
Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip
global
postgres
Add support for the postgresql database
global
sasl
Add support for the Simple Authentication and Security Layer
global
selinux
!! internal use only !! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
global
sqlite
Add support for sqlite - embedded sql database
global
ssl
Add support for Secure Socket Layer connections
global

Додаємо необхідні USE-прапори або як глобальний параметр:

nano /etc/portage/make.conf

з правкою параметра USE = "libressl sasl dlz berkdb caps ipv6 ssl threads" (Приклад)

Або конкретно вказати для пакета підтримуваний функціонал:

nano /etc/portage/package.use/postfix

і додаємо рядок типу mail-mta / postfix berkdb eai pam sasl ssl (Приклад)

Потім інсталюючи:
і приступаємо до редагування:

nano /etc/postfix/main.cf (Головного конфігураційного файлу)

# COMPATIBILITY
compatibility_level = 2 # Зворотна сумісність з конфігурацією Postfix 3
# SOFT BOUNCE
soft_bounce = yes # Намагатися повторно відправити проблемне повідомлення
# LOCAL PATHNAME INFORMATION # Стандартні директорії для розміщення компонентів поштового сервісу
queue_directory = / var / spool / postfix
command_directory = / usr / sbin
daemon_directory = / usr / libexec / postfix
data_directory = / var / lib / postfix
# QUEUE AND PROCESS OWNERSHIP
mail_owner = postfix # Визначає власника поштової черги
# INTERNET HOST AND DOMAIN NAMES
myhostname = mx.test.com # Ім'я сервера
mydomain = test.com # Належність до домену
# SENDING MAIL
myorigin = $ mydomain # Служить для додавання суфікса домена при локальної відправці
# RECEIVING MAIL
inet_interfaces = all # Слухати всі інтерфейси для прийому пошти
mydestination = $ mydomain, $ myhostname, localhost. $ mydomain, localhost
# Приймати пошту для цих доменів
# REJECTING MAIL FOR UNKNOWN LOCAL USERS
local_recipient_maps =
# Вказує де шукати локальних користувачів для відправки (залишаємо порожнім)
#unknown_local_recipient_reject_code = 550
# TRUST AND RELAY CONTROL
mynetworks_style = subnet # За замовчуванням - дозвіл доступу з мережевого ознакою
mynetworks = 192.168.0.2, 192.168.0.50, 192.168.0.70, 127.0.0.0/8, # Список довірених адрес і підмереж
relay_domains = $ mydestination # В які поштові домени пересилати пошту
# INTERNET OR INTRANET (не використовуємо додаткових хостів для пересилання)
#The relayhost parameter specifies the default host to send mail to when no entry is matched in the optional transport table
#relayhost = $ mydomain
#relayhost = [gateway.my.domain]
#relayhost = [mailserver.isp.tld]
#relayhost = uucphost
#relayhost = [an.ip.add.ress]
# REJECTING UNKNOWN RELAY USERS
#relay_recipient_maps = hash: / etc / postfix / relay_recipients
# INPUT RATE CONTROL
#in_flow_delay = 1s
# ADDRESS REWRITING
# Username-> Firstname.Lastname mapping.
# TRANSPORT MAP
transport_maps = hash: / etc / postfix / transport # Розташування транспортних відповідностей
# ALIAS DATABASE
# Рассположенних бази локальних алиасов
alias_maps = hash: / etc / mail / aliases
alias_database = hash: / etc / mail / aliases
# ADDRESS EXTENSIONS (eg, user + foo)
#recipient_delimiter = +
# DELIVERY TO MAILBOX
#home_mailbox = Mailbox
#home_mailbox = Maildir /
mail_spool_directory = / var / mail # Каталог зберігання локальної пошти
#mail_spool_directory = / var / spool / mail
#mailbox_command = / some / where / procmail
#mailbox_command = / some / where / procmail -a "$ EXTENSION"
# Cyrus IMAP over LMTP. Specify "lmtpunix cmd =" ​​lmtpd "
# Listen = "/ var / imap / socket / lmtp" prefork = 0 "in cyrus.conf.
#mailbox_transport = lmtp: unix: / var / imap / socket / lmtp
# Cyrus IMAP via command line. Uncomment the "cyrus ... pipe" and
# Subsequent line in master.cf.
#mailbox_transport = cyrus
#fallback_transport = lmtp: unix: / file / name
#fallback_transport = cyrus
#fallback_transport =
#luser_relay = [Email protected]
#luser_relay = [Email protected]
#luser_relay = admin + $ local
# JUNK MAIL CONTROLS
#header_checks = regexp: / etc / postfix / header_checks # Параметри вбудованих обмежень заголовка листа
# FAST ETRN SERVICE
#fast_flush_domains = $ relay_domains
# SHOW SOFTWARE VERSION OR NOT
smtpd_banner = $ myhostname ESMTP $ mail_name (Gentoo Postfix-gateway) # Перша частина вітання
biff = no # Відключаємо про надходження нових повідомлень
# PARALLEL DELIVERY TO THE SAME DESTINATION
local_destination_concurrency_limit = 2
# Ліміт на кількість паралельних процесів відправлення локальним одержувачам
default_destination_concurrency_limit = 10
# Ліміт на кількість паралельних процесів відправлення за замовчуванням
# DEBUGGING CONTROL
debug_peer_level = 2 # Вказуємо рівень журналювання і дебага
#debug_peer_list = 127.0.0.1
#debug_peer_list = some.domain
debugger_command =
PATH = / bin: / usr / bin: / usr / local / bin: / usr / X11R6 / bin
ddd $ daemon_directory / $ process_name $ process_id & sleep 5
# INSTALL-TIME CONFIGURATION INFORMATION
# Параметри цього блоку залишаємо без змін
#The full pathname of the Postfix sendmail command
sendmail_path = / usr / sbin / sendmail
#This is the Sendmail-compatible command to build alias databases
newaliases_path = / usr / bin / newaliases
# Is the Sendmail-compatible mail queue listing command
mailq_path = / usr / bin / mailq
#This is the Sendmail-compatible command to build alias databases.
setgid_group = postdrop
# Html_directory: The location of the Postfix HTML documentation.
html_directory = no
# Manpage_directory: The location of the Postfix on-line manual pages.
manpage_directory = / usr / share / man
# Sample_directory: The location of the Postfix sample configuration files.
sample_directory = / etc / postfix
# Readme_directory: The location of the Postfix README files.
readme_directory = /usr/share/doc/postfix-3.0.2/
inet_protocols = ipv4 # Явно використовуємо ipv4
meta_directory = / etc / postfix # Стандартне розташування файлів
shlib_directory = / usr / lib / postfix / $ {mail_version} # Стандартне розташування для плагінів
message_size_limit = 314572800 # Дозволений розмір повідомлень
strict_rfc821_envelopes = yes
# Заборона некоректного синтаксису в командах MAIL FROM або RCPT TO
disable_vrfy_command = yes
# Забороняємо перевірку відправником існування адреси одержувача на етапі передачі заголовка
smtpd_delay_reject = yes
Дозволяємо додаткові перевірки поки відправник передає RCPT TO: і MAIL FROM: заголовки
smtpd_helo_required = yes # Вимагаємо від відправника представитися
smtpd_reject_unlisted_recipient = yes # Відхилення листів з неіснуючим адресою одержувача

Наведених нижче параметрів описані в пункті 2.1

smtpd_client_restrictions =
permit_mynetworks,
reject_unknown_client_hostname,
# Check_client_access regexp: / etc / postfix / client_access,
check_client_access regexp: / etc / postfix / dul_checks,
reject_rbl_client bl.spamcop.net,
reject_rbl_client list.dsbl.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client relays.ordb.org,
reject_rbl_client relays.ordb.org,
permit

#smtpd_helo_restrictions:
#check_helo_access,
#check_helo_mx_access,
#check_helo_ns_access,
#reject_invalid_hostname,
#reject_non_fqdn_hostname,
#reject_unknown_hostname,
# + Generic
# + Smtpd_client_restrictions

#smtpd_etrn_restrictions:
#check_etrn_access
# + Generic
# + Smtpd_client_restrictions
# + Smtpd_helo_restrictions

# Smtpd_etrn_restrictions:
#check_etrn_access
# + Generic
# + Smtpd_client_restrictions
# + Smtpd_helo_restrictions
smtpd_sender_restrictions =
check_sender_access hash: / etc / postfix / whitelist,
permit_sasl_authenticated,
permit_mynetworks,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
permit

smtpd_recipient_restrictions =
permit_mynetworks,
reject_unauth_pipelining,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
permit_sasl_authenticated,
reject_unauth_destination,
permit
smtpd_data_restrictions =
reject_unauth_pipelining,
permit

2.1 Параметри перевірки повідомлення smtpd _ * _ restriction s

Сім кіл пекла (не рахуючи антивіруса і спамфільтр) на етапі розбирання повідомлення за складовими дуже і дуже здатні захистити наш сервер від злочинних розсилок та інших не благонадійних проявів (mail *)

smtpd_client_restrictions Перевірка ip-address або доменного імені комп'ютера відправника || сервер відправника Smtpd_helo_restrictions Перевірка імені комп'ютера і (якщо можливо) його IP-address на ім'я, переданому в команді HELO / EHLO smtpd_etrn_restriction Сукупність перших двох перевірок smtpd_sender_restrictions Перевірка адреси відправника MAIL FROM: smtpd_recipient_restrictions Обробка поля одержувача RCPT TO: smtpd_data_restrictions Обробка поля DATA smtpd_end_of_data_restrictions Обробка команди END-OF-DATA

На кожному етапі може перебувати ланцюжок перевірок, яка відноситься безпосередньо до батьківського розділу, крім того існує можливість організувати структуру загальних правил (generic) см. Всю структуру в кінці розділу.

Слід пам'ятати, що повідомлення перевіряється правилами зверху-вниз, при спрацьовуванні з негативним результатом - повідомлення буде відкинуто, так само як і в зворотному випадку: при позитивній підсумку - повідомлення перевіряється наступним правилом.

І раз вже тема була порушена - схема перевірки:

загальні правила (generic):

check_policy_service
defer
defer_if_permit
defer_if_reject
permit
reject
warn_if_reject

smtpd_client_restrictions:

check_ccert_access
check_client_access
permit_inet_interfaces
permit_mynetworks
permit_sasl_authenticated
permit_tls_all_clientcerts
permit_tls_clientcerts
reject_rbl_client
reject_rhsbl_client
reject_unknown_client

smtpd_helo_restrictions:

check_helo_access
check_helo_mx_access
check_helo_ns_access
reject_invalid_hostname
reject_non_fqdn_hostname
reject_unknown_hostname

+ generic
+ smtpd_client_restrictions

smtpd_etrn_restrictions:

check_etrn_access

+ generic
+ smtpd_client_restrictions
+ smtpd_helo_restrictions

smtpd_sender_restrictions:

check_sender_access
check_sender_mx_access
check_sender_ns_access
reject_authenticated_sender_login_mismatch
reject_non_fqdn_sender
reject_rhsbl_sender
reject_sender_login_mismatch
reject_unauthenticated_sender_login_mismatch
reject_unknown_sender_domain
reject_unlisted_sender
reject_unverified_sender

+ generic
+ smtpd_client_restrictions
+ smtpd_helo_restrictions
+ smtpd_etrn_restrictions

smtpd_recipient_restrictions:

check_recipient_access
check_recipient_mx_access
check_recipient_ns_access
permit_auth_destination
permit_mx_backup
reject_non_fqdn_recipient
reject_rhsbl_recipient
reject_unauth_destination
reject_unknown_recipient_domain
reject_unlisted_recipient
reject_unverified_recipient

+ generic
+ smtpd_client_restrictions
+ smtpd_helo_restrictions
+ smtpd_etrn_restrictions
+ smtpd_sender_restrictions

smtpd_data_restrictions

reject_multi_recipient_bounce
reject_unauth_pipelining

+ generic
+ smtpd_client_restrictions
+ smtpd_helo_restrictions
+ smtpd_etrn_restrictions
+ smtpd_sender_restrictions
+ smtpd_recipient_restrictions

smtpd_end_of_data_restrictions

+ generic
+ smtpd_client_restrictions
+ smtpd_helo_restrictions
+ smtpd_etrn_restrictions
+ smtpd_sender_restrictions
+ smtpd_recipient_restrictions
+ smtpd_data_restrictions

2.2 Результати перевірки та механізм реагування smtpd _ * _ restriction s

За винятком правил check _. * _ Access всі інші правила повертають по результату перевірки коди OK, DUNNO або REJECT.

OK - він і є ок J (Перевірка пройшла успішно і в даному обмеження більше перевірок здійснюватися не буде, повідомлення переходить на перевірку нижче за списком).

DUNNO - при такому результаті перевірка переходить до наступної перевірки в поточній ланцюжку. У разі коли всі результати = DUNNO - перевірка в поточній ланцюжку правил вважається успішною.

REJECT - повідомлення відкидається, відправнику надсилається відповідне повідомлення з кодом помилки, в залежності від спрацьованого правила.

Правила формату reject _. * Повертають REJECT або DUNNO.

Правила формату permit _. * Повертають OK або DUNNO.

Правила формату check _. * _ Access можуть повертати крім OK, DUNNO і REJECT ще й цифрові коди формату 4 XX, 5 XX, DEFER_IF_REJECT, FILTER, HOLD, REDIRECT, DISCARD, DEFER_IF_PERMIT тощо, але це вже зовсім інша поштова історія.

2.3 Підготовка файлів, пов'язаних з main.cf

Створюємо улюбленим редактором файл для транспортної зв'язки поштового домену та сервера (exchange), що обслуговує цей домен:

vim / etc / postfix / transport

test.com smtp: [192.168.0.26]

і конвертуємо для коректної роботи:

postmap / etc / postfix / transport

Теж саме робимо при зміні файлу конфігурації алиасов:

postmap / etc / mail / aliases

3 Налаштування записів в dns-зоні

За всіма правилами системи розпізнавання імен та поштових сервесе нам необхідно в панелі управління нашим (реальним) доменом вказати що з'явився ще один поштовий сервер.

Природно, скільки операторів - стільки і різновидів адміністративних панелей.

Отже, нам буде потрібно:

А - Запис (Зіставлення ip-адреси до імені домена).

MX - Запис (Вказуємо що в нашому домені є поштовий сервер, прив'язуємо до А - записи і вказуємо пріоритет).

TXT + SPF Записи, які в зв'язці вказують на сервери, яким можна відправляти пошту від імені домена.

Так само слід звернутися в службу техпідтримки провайдера з проханням додавання PTR-записи (зворотна зона DNS), тим самим забезпечити правильне перетворення ip-адреси в доменне ім'я нашого поштового сервера.

Пробуємо, дебажім, концепція не нова, але поки сам не зробиш в резюме написати буде нічого.

Всім добра і коректної роботи поштових сервісів!

Новости