Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
www.lissyara.su
—> статьи
—> FreeBSD
|
|
KEY для alias обеспечит уникальность алиасов.
зависимость от значений в таблице users - невозможность создания алиаса для несуществующего ящика.
зальем это добро в мускуль
mysql < /root/workmail/addaliasestable.sql |
main.cf
|
ограничим на всякий .. recursion_limit,
набросаем сам файл
/usr/local/etc/postfix/virtual/aliases.sql
|
tail -f /var/log/maillog |
- в параллельной консоли, и
/usr/local/etc/postfix restart |
проверяем отсылку почты на test1@tstdomain.ru
Шаг 14 Postfix group
Зачем? - появится возможность слать на адреса группы - шлем на один адрес - приходит всем членам группового адреса.
Создадим дополнительную таблицу, наколбасим файлик:
/root/workmail/addgroupstable.sql
|
Значения в поле email зависят от таблицы users, тоесть мы не сможем иметь несуществующего получателя, и получать отлупы. Зальем это добро в мускуль
mysql < /root/workmail/addgroupstable.sql |
Расширим немного таблицу алиасов, добавив еще одну карту поиска.
main.cf
|
ну и сам файлик запроса
набросаем сам файл
/usr/local/etc/postfix/virtual/groups.sql
|
Нужно залить пару значений и проверить. Позже прикрутим ограничение на отсылку на/с этих адресов.
Шаг 15 Postfix BCC
Скрытые копии. Зачем? Можно подключить начальнику - параноику, или себе для сортировки спам/не спам.. На этот адрес буде приходить ВСЯ прходящая через сервер почта.
main.cf
|
Добавим такого пользователя
mysql use mail; insert into users value ( 'allusermail@tstdomain.ru' 'allusermail', '10', 'secure' ); \q |
Выборочные скрытые копии - более полезная опция. К примеру, отдел менеджеров, и их руководителю нужно контролировать переписку подчиненных. Или один из "менеджеров" заболел, и начальник сразу несется к Вам настроить себе его почту, или сделать "временный" alias, ведь там такая важная переписка!! клиента потерять низзя! Приступим:
main.cf
|
я указал один и тот же файл - и входящие и иходящие для определенных адресов будут копироваться
/usr/local/etc/postfix/virtual/bcc.sql
|
создадим еще одну табличку, значения зависят от users, - невозможно создать недействительную связку, и зальем в mysql
/root/workmail/addbcctable.sql
|
mysql < /root/workmail/addbcctable.sql /usr/local/etc/postfix restart |
Проверяем.
Шаг 16 Postfix submission
Ранее для приема почты почтовым сервером настраивался один порт, TCP 25, сейчас новый тренд - раздельная настройка для почты сервер-сервер, и для своих клиентов с аутентификацией TCP 587.
Приступим, надо раскомментить:
master.cf
|
/usr/local/etc/rc.d/postfix restart netstat -na | grep LIST tcp4 0 0 *.587 *.* LISTEN |
типа дополнительный smtpd поднялся, нужно будет сделать раздельные настройки для этих сервисов.
Шаг 17 Postfix and Dovecot SASL
Сейчас у меня в main.cf параметр mynetworks_style имеет значение subnet, значит для всех клиентов в той же подсети что и сервер, мы будем принимать почту для доставки в чужие домены. Если клиент подключится к нашему серверу из другой подсети(инет) и попытается передать сообщение для получателя, к примеру, **@yandex.ru, то получит отказ в ретрансляции. Однако для наших учетных записей это позволить необходимо. Следовательно требуется механизм опознавания «своих».
У Dovecot уже есть такой механизм, и более того, мы его уже настроили. Postfix может им воспользоваться. Для начала из клиента попробуем отправить сообщение для произвольного адресата … test@yandex.ru. Сервер нам доверяет как пользователю доверенной подсети (mynetworks_style) и принимает сообщение без лишних вопросов для попытки доставки. Изменим это поведение.
cd /usr/local/etc/postfix/ |
main.cf
|
/usr/local/etc/rc.d/postfix reload |
Проверим. Опять попытаемся отправить сообщение для test@yandex.ru. Результат — сервер отвечает отказом. Все правильно, теперь он будет принимать почту для релея в чужие домены только от себя самого. Разрешим это еще для наших виртуальных пользователей. Отметим , что почта для наших виртуальных пользователей, отправляется без ограничений, так как этот сервер конечная точка для нее.
Для справки, с другого хоста
telnet mail.tstdomain.local 25 220 mail.tstdomain.ru ESMTP Postfix ehlo test 250-mail.tstdomain.ru 250-OK 250-SIZE 10240000 250-VRFY 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
здесь видно что поддерживает сервер, на порту 578 такая же ситуация.
Аутентификация при отправке нам нужна только для своих пользователей, настроим ее только на порту 578:
cd /usr/local/etc/dovecot/conf.d |
10-master.conf
|
cd /usr/local/etc/postfix/ |
main.cf
|
smtpd_sasl_security_options возможны варианты
noanonymous — запретить аутентификацию как аноним.
noplaintext — запретить механизмы передающие пароль и имя пользователя
открытым тестом.
nodictionary - не использовать механизмы, которые являются уязвимыми для
атак по словарю.
forward_secrecy—новый секрет для каждой сессии (нарушение одной сессии
не нарушает предыдущих сессий).
mutual_auth — используется только с механизмами аутентифицирующими и
клиент и сервер.
Опция broken_sasl_auth_clients = yes позволяет Postfix повторить объявление AUTH в диалоге SMTP в форме, понятной некоторым кривым клиентам. Нужно включить для Outlook, вплоть до версии 2003 и Outlook Express до версии 6. (Не забыть про механизм LOGIN вместе с ним) Эта опция не помешает другим клиентам.
Включим эту возможность только на submission
master.cf
|
Посмотрим на некоторые SMTP ограничения postfix
grep restrictions smtpd_client_restrictions = smtpd_data_restrictions = smtpd_end_of_data_restrictions = smtpd_etrn_restrictions = smtpd_helo_restrictions = smtpd_recipient_restrictions = smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination smtpd_sender_restrictions = |
видим что если аутентифицируемся, то сможем пересылать свою почту куда угодно.
/usr/local/etc/rc.d/dovecot restart /usr/local/etc/rc.d/postfix restart |
смотрим что изменилось
telnet mail.tstdomain.local 578 220 mail.tstdomain.ru ESMTP Postfix ehlo test 250-mail.tstdomain.ru 250-OK 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
появилась возможность 250-AUTH PLAIN, на порту 25 такой возможности нет.
Проверяем, отправим сообщение для test@yandex.ru, на клиенте нужно поправить параметры smtp сервера для этой учетной записи. Сервер потребует аутентификации и попытается доставить сообщение.
dovecot вроде больше трогать не будем. Впереди postfix.
Шаг 18 Postfix TLS
Аутентификацию настроили, но пароли передаются открытым текстом. Исправим:
cd /usr/local/etc/postfix openssl req -new -nodes -x509 -out smtpd.pem -keyout smtpd.pem -days 3650 |
имеет смысл правильно задать
Common Name (e.g. server FQDN or YOUR name) []:mail.tstdomain.ru
Email Address []:postmaster@tstdomain.ru
Common Name :mail.tstdomain.ru
Email Address :postmaster@tstdomain.ru
(знаю что в dovecot мы уже чего-то там такое-же делали, статья не об этом)
ls -al smtpd.pem |
main.cf
|
скажем, что TLS использовать необxодимо (принудительно-encrypt):
master.cf
|
/usr/local/etc/rc.d/postfix restart |
Смотрим
telnet mail.tstdomain.local 587 220 mail.tstdomain.ru ESMTP Postfix ehlo test 250-mail.tstdomain.ru 250-OK 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
Появилась возможность 250-STARTTLS и пропала 250-AUTH PLAIN
Попробуем отправить письмо ... Меняем настройки, проверяем.
Включим возможность использования TLS при переправке почты от нас.
main.cf
|
/usr/local/etc/rc.d/postfix restart |
Как проверить? Отправить письмо test@tstdomain.ru -> test@yandex.ru.
смотрим чего там в логах:
Dec 10 17:18:45 mail postfix/smtp[2463]: mx.yandex.ru[93.158.134.89]:25: subject_CN=mx.yandex.ru, issuer_CN=Certum Level IV CA, fingerprint=28:B6:06:CE:92:B7:EE:67:6B:D5:8F:BA:00:F2:B8:E8, pkey_fingerprint=48:2C:D6:B7:E7:05:4D:2E:0F:7E:AC:19:91:DE:DD:C4 Dec 10 17:18:45 mail postfix/smtp[2463]: Untrusted TLS connection established to mx.yandex.ru[93.158.134.89]:25: TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits) |
хм, работает?!
теперь не забыть поставить более разумные настройки!
main.cf
|
may - может быть использовано.
/usr/local/etc/rc.d/postfix restart |
еще как то надо задействовать такую же возможность на нашем 25 порту.
но я пока не понял как проверить, вернее знаю, но лень. Сами плиз. Это если отправляют нам. Позже проверю - отпишу.
main.cf
|
Шаг 19 Postfix restrictions port submission
Далее большой раздел - настройка ограничений postfix на прием/релей почтовых сообщений.
Настройки здесь могут быть оочень разными у каждого администратора.
Мои мне кажутся логичными, если не нравится, просто пропустите этот раздел и делайте свои.
helo,vrfy,size,strict_rfc821_envelopes
задачи:
начать требовать от клиентов правильной работы - представляться.
отключим возможность проверять существование ящиков,
переопределим максимальный размер почтового сообщения.
адреса, только по документу RFC-821.
для начала
$ telnet mail.tstdomain.local 587 Trying 192.168.100.241... Connected to 192.168.100.241. Escape character is '^]'. 220 mail.testdomain.ru ESMTP Postfix ehlo test 250-mail.testdomain.ru 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
смотрим список "возможностей", и без проблем даст передать команду mail from: , без первоначального helo|ehlo
Исправим
main.cf
|
/usr/local/etc/rc.d/postfix restart |
telnet 192.168.100.241 25 Trying 192.168.100.241... Connected to 192.168.100.241. Escape character is '^]'. 220 mail.testdomain.ru ESMTP Postfix mail from: test@server.ru 503 5.5.1 Error: send HELO/EHLO first ehlo test 250-mail.testdomain.ru 250-PIPELINING 250-SIZE 51200000 250-ETRN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN |
Итак: пропала возможность 250-VRFY, изменился 250-SIZE и я не смог сразу отправить сообщение не представившись. Необходимо проверить еще и порт 587
Действует на ОБА сервиса.
Простейшие ограничения заработали. Ограничения применяются в следующем порядке:
smtpd_client_restrictions   можно привязать кучу разных проверок на host, ip ....
smtpd_helo_restrictions   смотрим на информацию HELO/EHLO
smtpd_sender_restrictions   смотрим на информацию MAIL FROM
smtpd_recipient_restrictions   смотрим на информацию RCPT TO
smtpd_data_restrictions   смотрим на информациюу DATA
smtpd_end_of_data_restrictions   Отклонять после получения команды END-OF-DATA
smtpd_etrn_restrictions   Отклонять команду ETRN
отказать в приеме можно на ранних этапах, но
postconf | grep smtpd_delay_reject smtpd_delay_reject = yes |
этот параметр означает, что отказывать будем на этапе smtpd_recipient_restrictions.
я там и буду строить всю фильтрацию. Просьба камни не кидать, и не разводить холиваров правильно/неправильно. Тут http://carantin2006.narod.ru/postfix/postfix/SMTPD_ACCESS_README.html можно почитать про возможные проблемы. Из положительных моментов - можно более тяжелые проверки поставить позже простых.
что имеем
postconf | grep smtpd | grep restrictions smtpd_client_restrictions = smtpd_data_restrictions = smtpd_end_of_data_restrictions = smtpd_etrn_restrictions = smtpd_helo_restrictions = smtpd_recipient_restrictions = smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination smtpd_sender_restrictions = |
smtpd_relay_restrictions - полностью устраивает, не трогаем.
Полностью закроем возможность неавторизованной отправки на порту 587, для чего подправим ограничения на нем.
master.cf
|
main.cf
|
/usr/local/etc/rc.d/postfix restart |
Попытаемся отправить. Ответ - неинформативый несколько, не додумался как исправить.
итого — или авторизация, или иди лесом.
далее еще прикрутим пару проверок, приведем к следующему виду наши ограничения порта 587
main.cf
|
reject_non_fqdn_recipient - отказ не fqdn получатель
reject_non_fqdn_sender - отказ не fqdn отправитель
reject_unknown_recipient_domain - отказ если не в наш(и) домен(ы) и если нет DNS A или MX записи или MX запись корявая, к примеру нулевой длины... , в общем полезная вещь.
/usr/local/etc/rc.d/postfix restart |
нужно сразу проверить ..
Далее....
Я хочу закрыть возможность отправки с скрытых ящиков типа bcc-ящика allusermail@tstdomain.ru
Для этого нужно смотреть обратный адрес, сделаем чуть больше, будем требовать совпадения адреса отправителя с аутентифицировавшимся пользователем. Из минусов - необходимость настраивать на клиентах для каждой учетной записи свой исходящий сервер (со своим пользователем для аутентификации).
main.cf
|
добавили smtpd_sender_login_maps = mysql:/usr/local/etc/postfix/virtual/sender_maps.sql - карту где смотреть наших пользователей, и требование совпадения отправителя с аутентифицирующимся reject_authenticated_sender_login_mismatch. Это правило, кстати, будет запрещать отсылать письма с обратным адресом группы.
virtual/sender_maps.sql
|
Далее сам запрет на отсылку с этих ящиков. Создадим отдельную директорию для наших будущих файлов описаний ограничений
mkdir restrictions |
restrictions/rej_int_sender.hash
|
тип файла hash -это чтоб не забыть сделать из него хэш с которым и работает postfix.
postmap restrictions/rej_int_sender.hash |
можно проконтролировать, что там появился файлик rej_int_sender.hash.db.
/usr/local/etc/rc.d/postfix restart |
можно проверить как работает.
Добавим ограничение на отправителей:
main.cf
|
/usr/local/etc/rc.d/postfix restart |
Для проверки нужно настроить ящик allusermail@tstdomain.ru и попытаться с него отправить. Прием от таких отправителей на порту 25 закроем позже, сразу для всех (там же не будет конечных пользователей).
Неплохо бы запретить не только отправку с таких ящиков, но и на них. Приступим: добавим ограничение на получателей -
main.cf
|
restrictions/rej_int_recipient.hash
|
разница с прошлым ограничением лишь в строке ответа.
создадим хэш
postmap restrictions/rej_int_recipient.hash |
/usr/local/etc/rc.d/postfix restart |
не забыть прикрутить это же ограничение и на 25 порт.
Пока хватит с 587 портом. Займемся портом 25
Шаг 20 Postfix restrictions 25
сходу можно добавить несколько ограничений
main.cf
|
Что сделали
reject_non_fqdn_recipient - отказ не fqdn получатель
reject_non_fqdn_sender -отказ не fqdn отправитель
reject_unknown_sender_domain - отказ если не в наш(и) домен(ы) и если нет DNS A или MX записи или MX запись корявая, к примеру нулевой длины... Добавил пока закомменченым, иначе проверки делать будет сложно.
check_recipient_access - известная уже карта получателей.
permit_mynetworks - важный параметр - принимать почту от хостов входящих в mynetworks. (пока там только localhost, но потом я добавлю еще).
reject_unauth_destination - отклонить, если не для нас (наших доменов)
Одно из ограничений закомментировано, его работу сложно проверить, а остальные можно.
/usr/local/etc/rc.d/postfix restart |
Добавим запрет на отсылку на наши групповые адреса извне (не аутентифицировавшимся - только на порту 25)
main.cf
|
restrictions/rej_int_recipient.hash
|
создадим хэш
postmap restrictions/rej_int_recipient.hash /usr/local/etc/rc.d/postfix restart |
можно проверять... В будущем наполнять этот файл будем автоматом, скриптом, из таблицы groups mysql.
В mynetworks будут входить сервера которым будет разрешен релей через почтовик ... Это опасная настройка, Попробуем немного урезать такие широкие возможности.
Сделаем карту адресов для серверов, которые будут слать только внутренним получателям, (без возможности релея, т. к. после reject_unauth_destination). Полезная настройка для получения почты с локальных серверов (сcron.. mail for root..).
main.cf
|
Пока это ограничение не имеет смысла, так как далее все равно permit, но будут более тяжелые, по которым не хотелось бы гонять доверенные сервера.
restrictions/permit_for_ip.cidr
|
/usr/local/etc/rc.d/postfix restart |
неплохо бы проверить....
добавим еще
main.cf
|
Что добавили:
reject_non_fqdn_helo_hostname - отказ если HELO или EHLO hostname не fully-qualified, как требует RFC. Требует "smtpd_helo_required = yes" (сделано).
reject_invalid_helo_hostname - отказ, если корявый hostname....
reject_unknown_helo_hostname - отказ, если hostname из HELO или EHLO не имеют DNS A или MX записи
reject_unknown_client_hostname - отказ, если
1) обратная запись the client IP address->name mapping fails,
2) the name->address mapping fails, или
3) the name->address mapping does not match the client IP address.
Последний довольно жесткий параметр.. трудно проверить .....
Внедрил пока закомментиным.
/usr/local/etc/rc.d/postfix restart |
запретим прием из частных сетей и проверку отправителей
main.cf
|
bogus_mx.cidr
|
у меня такой вид, это натравливается на MX записи отправителя
Следующий файлик - исключения. Дело в том что в процессе работы появятся клиенты с криво настроенными почтовиками, а письма получать от них надо. Кроме того, здесь мы отсечем хитрецов представляющимися нашим доменом. Порядок важен.
restrictions/external_sender_check.hash
|
ulmart здесь - он не potgrey-ился
postmap restrictions/external_sender_check.hash /usr/local/etc/rc.d/postfix restart |
Если получится нужно проверить - послать от test@tstdomain.ru на порт 25...
Еще пару тяжелых проверок
main.cf
|
добавили разбор привествия helo
restrictions/helo.pcre
|
Это мой чудовищный файл, что-то спер в инете, что-то сам добавил...
Внимание на перевод строк, и на концовку сообщения. В скобках код для себя, потом в логах по этому коду легко понять на каком правиле произошел отказ. Так же есть и положительные решения. Чтобы понять что здесь за бред, нужно порыть инет на тему регулярные выражения"
и а записи
restrictions/client.pcre
|
почти идентичные файлы. Последняя запись блокирует целую страну :) По концовкам легко понять на каком правиле провалилась отправка нам.
Все это большие костыли конечно, можете этого не делать.
postmap restrictions/helo.pcre postmap restrictions/client.pcre /usr/local/etc/rc.d/postfix restart |
проверить работу сложновато ...
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
вверх
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK