Linux и Windows: помощь админам и пользователям

Администрируем и настраиваем Windows, Linux.



Настройка почтового шлюза на базе Postfix

Рубрика: Разное -> Perl
Метки: |
Вторник, 15 июня 2010 г.
Просмотров: 30035
Подписаться на комментарии по RSS

Обзор

В данной статье рассматривается настройка почтового сервера Postfix в качестве почтового шлюза организации. Самой распространенной причиной для данных действий является повышение безопасности, даже в случае, если вы не используете Exchange. Улучшение безопасности достигается за счет того, что на шлюзе не открыты никакие порты, за исключением SMTP и на нем не хранятся почтовые сообщения пользователей. Худшее что может произойти - атакующий получит список адресов электронной почты вашего домена. Также шлюз используется для фильтрации спама, грейлистинга, сканирования на вирусы и некоторые другие полезные действия.



В интернете существует большое количество "статей", которые очень упрощают процесс использованием директивы "relayhost = internalsmtp.example.com". В данном случае возникает проблема с тем, что шлюз незнает ничего о внутренний адресах (даже в случае если он настроен на прием почты только для домена @example.com). Может возникнуть, и обязательно возникнет ситуация во время спам атаки, когда будет идти поток писем на неверные адреса, которые внешний шлюз перешлет на внутренний почтовый сервер, тот потратит время на обработку, отклонит письмо и отправит обратно на шлюз и т.д. Большое количество таких сообщений существенно снизят производительность почтового сервера.

Для корректной настройки почтового шлюза необходимо чтобы он знал правильные внутренние адреса. В данном случае любое сообщение, содержащее несуществующий адрес немедленно отсекается сервером, ещё до момента приема данных.

 

Настройка

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

 

/etc/postfix/main.cf

Как должно быть понятно из названия, это основной конфигурационный файл Postfix.

Совет: Команда ниже покажет вам все конфигурационные директивы, значения которых отличаются от дефолтных:

postconf -n

Так как на шлюзе требуется только пересылка почты, отключаем локальную доставку сообщений (Замечание: пустое значение конфигурациооной директивы означает её отключение):

mydestination =
	local_recipient_maps =
	local_transport = error:local mail delivery is disabled

Установите директиву myorigin в значение домена, на который пересылается почта:

myorigin = example.com

Директива mynetworks = определите сети, которым разрешено выполнять пересылку через данный сервер. Обычно сюда включают только внутреннюю локальную сеть, или вообще только IP внутреннего почтового сервера:

mynetworks =
	    127.0.0.0/8,
	    172.16.42.0/24

Данная секция предотвращает прием сообщений для адресов вида username@subdomain.example.com to match. Мы явно определим домены, для которых необходимо принимать почту в директиве relay_domains ниже.

parent_domain_matches_subdomains =
	    debug_peer_list,
	    smtpd_access_maps

relay_domains = в данной директиве определяем домены, для которых необходимо принимать почту.

relay_domains =
	    example1.com,
	    example2.com,
	    subdomain.example.com

smtpd_recipient_restrictions = контролируем действия сервера после команды RCPT TO.

smtpd_recipient_restrictions =
	    permit_mynetworks,
	    reject_unauth_destination

transport_maps = указываем связь между доменами и SMTP серверами, на которые будет пересылаться почта.

transport_maps = hash:/etc/postfix/transport

relay_recipient_maps = указатель на файл, который будет содержать спискок адресов электронной почты, для которых Postfix будет принимать сообщения.

relay_recipient_maps = hash:/etc/postfix/relay_recipients

show_user_unknown_table_name = в установленном значении no возвращает сообщение "User unknown" если адрес электронной почты не найден. Используется в связке с relay_recipient_maps.

show_user_unknown_table_name = no

Хотя локальная доставка почты отлючена, почтовый шлюз должен принимать почты для адресов postmaster и abuse. Для этого определите виртуальные алиасы.

virtual_alias_maps = hash:/etc/postfix/virtual

 

/etc/postfix/master.cf

Данный файл определяет определяет обслуживаемые Postfix службы. Для полного отключения локальной доставки, отредактируйте данный файл и вставьте символ # в начале следующей строки:

#local     unix  -       n       n       -       -       local

 

/etc/postfix/virtual

В случае типичной настройки Postfix файл /etc/aliases используется для пересылки почты на другие аккаунты или внешние адреса. Однако, так как локальная доставка отключена, модификация файла etc/aliases не принесет результатат. Поэтому нам нужно использовать файл /etc/postfix/virtual. 

postmaster      postmaster@example.com
	abuse           abuse@example.com
	root		guru@example.com

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

virtualuser@example.com      actualuser@example1.com
	distribution@example.com     user1@example.com,user2@example.com,user3@example.com
	ex_user@example2.com         forwarding_address@dom.ain
	user@example.com             user@example.com,spy@example.com

 

/etc/postfix/transport

Данный файл определяет отношения между доменами и серверами, куда должна пересылаться почта для данных доменов.

example1.com              smtp:insidesmtp.example.com
	example2.com              smtp:insidesmtp.example.com
	subdomain.example.com     smtp:insidesmtp.example.com

 

/etc/postfix/relay_recipients

Данный файл содержит полный списко адресов электронно почты, для которых шлюз будет принимать сообщения.

user1@example1.com OK
	user2@example1.com OK
	user1@example2.com OK
	user2@example2.com OK
	user1@subdomain.example.com OK
	user2@subdomain.example.com OK

 

 

Заполняем файл relay_recipients адресами из Active Directory

Данный скрипт требует установленного perl и модуля Net::LDAP.

  • Скачайте скрипт с http://www-personal.umich.edu/~malth/gaptuning/postfix/getadsmtp.pl
  • Отредактируйте скрипт в соответствии с своими значениями:
$VALID = "/etc/postfix/relay_recipients";
	$dc1="domaincontroller1.example.com";
	$dc2="domaincontroller2.example.com";
	$hqbase="cn=Users,dc=example,dc=com";
	$user="cn=user,cn=Users,dc=example,dc=com";
	$passwd="password";

Создаем базы

Для завершения нам необходимо сделать хэшированные базы данных из наполненных нами файлов:

postmap hash:/etc/postfix/virtual
	postmap hash:/etc/postfix/transport
	postmap hash:/etc/postfix/relay_recipients

Заметка: помните, что необходимо перехэшировать базу после каждого изменения файла..

 

Перезапуск Postfix

Предпочитаемый способ для того, чтобы Postfix перечитал конфигурационные файлы следующий:

postfix reload

 

Проверка

Как вы можете видеть из следующего примера, данная конфигурация работает:

<strong>	telnet emailgateway.example.com smtp</strong>
	220 emailgateway.example.com ESMTP Postfix
<strong>	EHLO localhost</strong>
	250-emailgateway.example.com
	250-PIPELINING
	250-SIZE 10240000
	250-VRFY
	250-ETRN
	250 8BITMIME
<strong>	MAIL FROM: <testadmin@example1.com></strong>
	250 Ok
<strong>	RCPT TO: <unknown@unknowndomain.com></strong>
	554 <unknown@unknowndomain.com>: Relay access denied
<strong>	RCPT TO: <unknown@example1.com></strong>
	554 <unknown@example.com>: Relay access denied
<strong>	RCPT TO: <user1@example1.com></strong>
	250 Ok
<strong>	DATA</strong>
	354 End data with <CR><LF>.<CR><LF>
<strong>	Subject: test</strong>
<strong>	test 1 2 3</strong>
<strong>	.</strong>
	250 Ok: queued as 5152A39097
<strong>	QUIT</strong>
	221 Bye

 

 

Полезные ссылки:

Надоели беспомощные отечественные врачи с устаревшим оборудованием. Я рекомендую обратиться в Medical Travel GmbH и выбрать клинику за границей по своему вкусу и денежным возможностям.

В качестве примера - мой отец долго мучался с такой неприятной болезнью как геморрой. Если вы не знаете что это, вам повезло. Вот такие они - признаки геморроя. В наших больницах долго не могли решить проблему, в немецкой же клинике с этим справились довольно быстро.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Комментариев: 6

  1. И причем тут категория Перл??

  2. У меня тоже есть интересные статьи по Postfix. Возможно будет интересно http://plutonit.ru/view_categories.php?categories=7

  3. BorisMaksimov | 2011-11-01 в 15:25:35

    Здесь сэндвич панели по приемлемой цене

  4. Сергей | 2015-01-16 в 14:38:37

    Спасибо тебе добрый человек за статью.

  5. Господа, что делать, если основной почтовый сервер требует парольную авторизацию для отправки почты, а когда пользователь оказывается не в локально сети, за relay, postfix его бреет. Если при этом клиент отключает вход на сервер при отправке - почта уходит нормально

  6. Александр | 2015-09-21 в 13:57:59

    Спасибо за статью очень помогла!!!

Оставьте комментарий!

Используйте нормальные имена.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

(обязательно)