Выборочный релеинг с tcpserver и qmail-smtpd

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

Во-первых, поместите в control/rcpthosts список всех доменов, для которых Ваш сервер является главным (то есть те домены, которые уже указаны в control/locals и control/virtualdomains). Туда же впишите все домены, для которых Ваш сервер действует как вторичный почтовый релей. Домены, указанные в control/rcpthosts - это те домены, для которых Ваш сервер будет всегда принимать входящую почту, независимо от того, откуда она исходит. Ваш сервер обязательно должен иметь файл rcpthosts, иначе он окажется в состоянии open-relay и будет принимать к пересылке любую почту от любого стороннего сервера, безо всяких органичений.

Затем скачайте и установите пакет ucspi-tcp Дэна Бернштэйна. Текущая версия доступна на http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz.

Вы можете прочитать обо всех программах, входящих в пакет, на ftp://koobera.math.uic.edu/www/ucspi-tcp.html. Специфическая программа, которую мы будем использовать - это tcpserver, который принимает входящие сетевые подключения, устанавливает различные переменные среды и затем выполняет программу по Вашему выбору.

Теперь создайте файл правил, который tcpserver будет использовать, чтобы решить, в каких случаях установливать RELAYCLIENT при подключении. Пусть в нашей вымышленной сети мы имеем единственный блок /24 адресов, 192.168.10.0/24. Создайте файл в /etc (или в /usr/local/etc, или там, где Вы предпочитаете) с именем tcp.smtp. Файл должен выглядеть следующим образом:

192.168.10.:allow,RELAYCLIENT=""
:allow
Пробелов в строках быть не должно! (прим. перев.)

Эти правила говорят: "Если подключение - от 192.168.10.*, позволить его, и установить RELAYCLIENT; иначе позволить подключение (но не устанавливать RELAYCLIENT)." Обратите внимание, что последняя строка ":allow" избыточна, так как значение по умолчанию должно позволять любое подключение. Но это помогает проиллюстрировать то, что мы делаем: мы хотим позволить любому соединяться с нашим сервером, чтобы получать почту для наших доменов. Но устанавливать при подключении переменную RELAYCLIENT (и таким образом позволять релеинг - пересылку почты) нужно только тогда, когда подключение идет с адресов 192.168.10.*.

Теперь откомпилируйте этот файл с правилами в cdb-файл (делается это в каталоге, в котором мы создали файл tcp.smtp):

# tcprules tcp.smtp.cdb tcp.smtp.temp <tcp.smtp

Чтобы принимать SMTP-подключения с tcpserver, используя эти правила управления доступом, tcpserver запускают примерно так:

# tcpserver -x/etc/tcp.smtp.cdb -u102 -g101 0 smtp /var/qmail/bin/qmail-smtpd &

Замените 102 на UID пользователя qmaild, а 101 - на GID группы nofiles, и удостоверьтесь, что путь к Вашему файлу tcp.smtp.cdb указан верно.
Эту строку нужно поместить в стартовые скрипты вашей системы. (прим. перев.)

ОБРАТИТЕ ВНИМАНИЕ: Если Вы уже запускаете службу qmail-smtpd под tcpserver в стартовых скриптах, то не нужно запускать ее второй раз с помощью вышеупомянутой строки; достаточно убедиться, что ваши скрипты запуска qmail-smtpd содержат опцию -x/etc/tcp.smtp.cdb.

Это все! Только замените IP-адреса в примере на Ваши реальные IP-адреса. Обратите внимание, что Вы можете иметь больше чем одну строку в вашем файле правил, чтобы позволить релеить с различных адресов, например:

192.168.10.0-31:allow,RELAYCLIENT=""
172.16.:allow,RELAYCLIENT=""
10.0.10.100:allow,RELAYCLIENT=""
:allow
Крис Джонсон (Chris Johnson)
dcj-qmaildoc@palomine.net

---
Перевод документа был осуществлен
Романом Бондаревым (Roman Bondarev) <pomah@kemsu.ru>
и Андреем Малышевым (Andrey Malyshev) <amal@icm.krasn.ru>
в рамках проекта Русский qmail (http://www.ru.qmail.org).
Кемерово - Красноярск, 17 июня 2003 г.