Архив / mail

RSS-канал этого раздела

Mail server в Ubuntu

http://blog.laptev.info/2009/ubuntu-mail-server-1.html

Я постараюсь подробно описать, как я настраивал mail server, чтобы обеспечить поддержку нескольких доменов, доступ по IMAP и POP3, защищеное соединение, веб-доступ к почте и многое другое. Это будет полезно новичкам в этом деле, да и мне самому, если потребуется повторить процесс…

 

1. ИМЯ ХОСТА И RDNS

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

Для примера, я буду использовать названия доменов domen1.com и domen2.ru. Оба этих домена должны быть зарегистрированы и иметь соответствующие ДНС записи (в частности MX записи, необходимые для корректного функционирования почтового сервера)

Проверим имя хоста:

1.hostname -f

Если оно отличается от доменного имени вашего будущего сервера — требуется его поменять.

Для этого отредактируем два файла:

1.sudo nano /etc/hostname

Замените существующее имя на mail.domen1.com.

И второй файл:

1.sudo nano /etc/hosts

Так же убедитесь, что старое название хоста изменено на новое.

После изменения названия хоста — перегрузите вашу систему.

Теперь снова проверим имя хоста:

1.hostname -f

На экран выводится:

1.mail.domen1.com

Замечательно. Первый шаг выполнен.

Теперь нужно проверить RDNS (reverse DNS). У разных провайдеров это настраивается по разному, в зависимости от особенностей реализации панели управления.

Вы должны прописать соответствие вашего внешнего IP-адреса имени почтового сервера, например mail.domen1.com — 231.123.134.12

Проверить настройки RDNS просто. Установите пакет dnsutils.

1.sudo aptitude install dnsutils

После установки, выполните проверку:

1.dig -x 231.123.134.12

Если вывод имеет такие строки,

1.dig -x 231.123.134.12
2....
3....
4.;; QUESTION SECTION:
5.;231.123.134.12.in-addr.arpa.     IN      PTR
6.;; ANSWER SECTION:
7.231.123.134.12.in-addr.arpa. 3477 IN      PTR     mail.domen1.com.

то все нормально. Можем продолжать.

2. НАСТРОЙКА МЕСТА ФИЗИЧЕСКОГО РАСПОЛОЖЕНИЯ ПОЧТЫ НА СЕРВЕРЕ

Самый простой способ настроить место для хранения почты — создать пользователя vmail с соответствующей группой и назначить ему специфичный userID.

Конечно, в будущем мы настроим MySQL для обеспечения работы сервера с многочисленными пользователями и доменами, но почта не будет храниться в базе данных. База будет использоваться только для поиска соответствующих пользователей и определения деталей доставки почты.

Пользователь vmail создается как обычно, но с некоторым отличием: мы указываем, что пользователь не может логиниться в систему.

Для начала создадим группу vmail:

1.sudo groupadd -g 5000 vmail

Это команда создает группу vmail и присваивает ее GID (group ID) 5000.

Затем создаем пользователя vmail:

1.sudo useradd -s /usr/sbin/nologin -g vmail -u 5000 vmail -d /home/vmail -m

Эта команда создает пользователя vmail, чтобы он не мог логиниться в систему, присваивает его группе vmail, а так же создает ему домашнюю директорию /home/vmail

3. УСТАНОВКА СЕРВЕРА POSTFIX И MYSQL

Выполните команду:

1.sudo aptitude install postfix postfix-mysql mysql-server postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl telnet mailx

Эта команда дополнительно к Postfix и MySQL установит пакеты mailx и telnet, которые будут очень удобны в процессе тестирования настроек.

В процессе установки MySQL сервера потребуется установить (и подтвердить) пароль для администратора (пользователь root).

В процессе установки Postfix сервера вначале система выведет на экран окно с информацией, после чего потребуется выбрать пункт ‘Internet Site’.

postfix1

На следующем окне

postfix2

введите имя вашего почтового домена mail.domen1.com.

Можно протестировать установку почтового сервера. Для этого отправим себе с него постовое сообщение.

Выполните команду:

1.mail address@example.com

address@example.com должен быть реальным действующим адресом, который вы можете проверить на предмет новой почты.

После нажатия на клавишу ввода потребуется ввести тему сообщения. После следующего нажатия — текст письма. Тест письма любой, можно сколько угодно пользоваться клавишей ввода. Признаком окончания тела письма является символ точки с начала новой строки, с последующим нажатием на клавишу ввод.

Далее система спросит адрес для копий письма, последний ввод, — и письмо отправлено.

1.mail adress@example.com
2.Subject: test email from domen1.com
3.Это, собственно
4.письмо
5.с уважением,
6.Я
7..
8.Cc:

Удобная штучка для отсылки писем в терминале, да? Рекомендую! Это пакет mailx, который мы установили чуть ранее.

Проверяйте ящик adress@example.com. Пришло письмо? Замечательно! Можем двигаться дальше.

4. НАСТРОЙКА БАЗЫ ДАННЫХ MYSQL

Далее будет много текстового ввода в терминале — не пугаемся. Всегда можно воспользоваться копированием через буфер обмена ;)

Для начала создадим базу данных с оригинальным названием — mail.

1.mysqladmin -u root -p create mail

В процессе выполнения команды система вас попросит ввести пароль администратора MySQL (вы его ввели при инсталляции MySQL).

Далее залогинимся в MySQL и создадим несколько таблиц.

1.mysql -u root -p

Для начала создадим пользователя БД, для наших целей…

1.CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY'MyPasswordHere';

Замените MyPasswordHere на свой собственный пароль.

Далее, дадим этому пользователю необходимые привелегии: SELECT, INSERT, UPDATE, DELETE.

1.FLUSH PRIVILEGES;
2.GRANT SELECTINSERTUPDATEDELETE ON `mail` . * TO'mailadmin'@'localhost';
3.FLUSH PRIVILEGES;

Теперь мы можем выбрать нашу БД mail и создать необходимые таблицы.

1.USE mail;

Необходимо создать три таблицы для хранения почтовых доменов, пользователей и деталей доставки сообщений (форвардинг сообщений).

Таблица доменов. В Mysql введите следующие команды:

1.CREATE TABLE domains (
2.domain varchar(50) NOT NULL,
3.PRIMARY KEY (domain)
4.)
5.TYPE=MyISAM;

Не забываем вводить точку с запятой (;) в конце команды SQL, иначе она не будет выполнена.

Таблица пользователей. Как раньше, введите в MySQL:

1.CREATE TABLE users (
2.email varchar(80) NOT NULL,
3.password varchar(20) NOT NULL,
4.PRIMARY KEY (email)
5.)
6.TYPE=MyISAM;

Таблица форвардинга:

1.CREATE TABLE forwards (
2.source varchar(80) NOT NULL,
3.destination TEXT NOT NULL,
4.PRIMARY KEY (source)
5.)
6.TYPE=MyISAM;

Теперь можно выйти из MySQL:

Вы вернулись обратно в командную строку терминала.

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

5. НАСТРОЙКА POSTFIX ДЛЯ ИСПОЛЬЗОВАНИЯ БАЗЫ ДАННЫХ MYSQL

Для того, чтобы Postfix мог использовать таблицы MySQL, необходимо создать несколько настроечных файлов.

Каждый из этих файлов достаточно прост: он содержит название БД, имя, пароль, SQL-запрос и название хоста. Эти файлы подсказывают Postfix-у, как выбирать данные из созданных нами ранее таблиц.

Домены.

Создадим текстовый файл:

1.sudo nano /etc/postfix/mysql-domains.cf

Введем следующие строки:

1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT domain AS virtual FROM domains WHERE domain='%s'
5.hosts = 127.0.0.1

Помним: MyPasswordHere надо заменить на введенный при создании пользователя БД mailadmin пароль.

Форвардинг.

Создаем файл:

1.sudo nano /etc/postfix/mysql-forwards.cf

Заполняем его:

1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT destination FROM forwards WHERE source='%s'
5.hosts = 127.0.0.1

Почтовые ящики.

Каждый домен имеет множество различных почтовых ящиков. Этот скрипт получает правильные характеристики почтового ящика.

1.sudo nano /etc/postfix/mysql-mailboxes.cf

Содержимое:

1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'
5.hosts = 127.0.0.1

E-Mail адреса.

И наконец создадим файл адресов.

1.sudo nano /etc/postfix/mysql-email.cf

Содержимое:

 

1.user = mailadmin
2.password = MyPasswordHere
3.dbname = mail
4.query = SELECT email FROM users WHERE email='%s'
5.hosts = 127.0.0.1

с файлами все.

Эти четыре файла позволят Postfix-у получить доступ к информации в базе данных mail и присвоить корректные данные каждому письму.

Полномочия на файлы

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

1.sudo chmod o= /etc/postfix/mysql-*

(другие группы не имеют доступа к файлам.

И сменим владельца:

1.sudo chgrp postfix /etc/postfix/mysql-*

Postfix должен иметь к ним доступ.

Настройки Postfix

Отредактируем файл настроек Postfix:

1.sudo nano /etc/postfix/main.cf

Обычно нижняя часть файла выглядит так:

01.myhostname = mail.domen1.com
02.alias_maps = hash:/etc/aliases
03.alias_database = hash:/etc/aliases
04.myorigin = /etc/mailname
05.mydestination =
06.relayhost =
07.mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
08.mailbox_size_limit = 0
09.recipient_delimiter = +
10.inet_interfaces = all

Убедитесь, что mydestination не сделано присвоение.

Добавим ссылки на созданные файлы настроек, чтобы Postfix использовал их в процессе работы. В конец файла добавьте строки:

1.virtual_alias_domains =
2.virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf
3.virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf
4.virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf
5.virtual_mailbox_base = /home/vmail
6.virtual_uid_maps = static:5000
7.virtual_gid_maps = static:5000
8.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

6. БЕЗОПАСНОЕ СОЕДИНЕНИЕ — НАСТРАИВАЕМ SASLAUTHD

Saslauthd требуется для того, чтобы устанавливать безопасные соединения с вашим почтовым сервером.

Saslauthd

Посмотрим основной файл настроек программы:

1.sudo nano /etc/default/saslauthd

Первым делом надо установить автоматический запуск демона (поменяйте значение на ‘yes’. По умолчанию стоит ‘no’):

1.# Should saslauthd run automatically on startup? (default: no)
2.START=yes

Далее нужно изменить некоторые опции в конце файла. По умолчанию они выглядят так:

1.#
2.# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
3.OPTIONS="-c -m /var/run/saslauthd"

Изменим их следующим образом (мы же запускаем Postfix):

1.#
2.# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
3.OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Кстати…Мы только что указали каталог, который не существует в природе. Непорядок. Устраним это:

1.sudo mkdir -p /var/spool/postfix/var/run/saslauthd

MySQL

Мы же используем MySQL для хранения наших идентификационных данных. Точнее не наших, а пользователей сервера. Значит процесс авторизации должен знать, где брать данные.
Создадим два файла, чтобы процесс мог получить доступ к базе данных и добыть необходимую ему информацию:

1.sudo nano /etc/pam.d/smtp

Добавим в этот файл следующий текст:

1.auth    required   pam_mysql.so user=mailadminpasswd=MyPasswordHere host=127.0.0.1 db=mail table=usersusercolumn=email passwdcolumn=password crypt=1
2.account sufficient pam_mysql.so user=mailadminpasswd=MyPasswordHere host=127.0.0.1 db=mail table=usersusercolumn=email passwdcolumn=password crypt=1

Это позволит процессу авторизации иметь доступ к БД для проверки пароля и e-mail-а.

И второй файл:

1.sudo nano /etc/postfix/sasl/smtpd.conf

Его содержимое следующее:

01.pwcheck_method: saslauthd
02.mech_list: plain login
03.allow_plaintext: true
04.auxprop_plugin: mysql
05.sql_hostnames: 127.0.0.1
06.sql_user: mailadmin
07.sql_passwd: MyPasswordHere
08.sql_database: mail
09.sql_select: select password from users where email = '%u'

По моему, тут ничего особо не надо пояснять, текст говорит сам за себя.

Для того, чтобы Postfix мог получить доступ к процессу Saslauthd, добавим пользователя Postfix в группу Saslauthd (Это же Лииинукс!!!) ;) ).

1.sudo adduser postfix sasl

Поменяли кучу настроек. Время перезапустить демоны:

1.sudo /etc/init.d/postfix restart
2.sudo /etc/init.d/saslauthd restart

Создаем SSL-сертификат

Создадим сертификат безопасности. По умолчанию он будет создан в каталоге /etc/ssl/certs.

1.sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/mailcert.pem

В процессе создания, вам зададут несколько вопросов. Ответить можно, например так:

1.Country Name - RU
2.State or Province -
3.Locality name - Moscow
4.Organisation Name - MyGreat Company
5.Organisational Unit Name - Mail
6.Hostname - mail.domen1.com
7.Email address - admin@domen1.com

Важно, чтобы Hostname совпадал с именем mail server-а — hostname. В нашем случае, это mail.domen1.com.
Мы создали самоподписанный сертификат здесь:

1./etc/ssl/certs/mailcert.pem

Настраиваем Postfix

Теперь требуется отредактировать главный файл настроек Postfix:

1.sudo nano /etc/postfix/main.cf

Найдите секцию TLS parameters. Настройки по умолчанию в ней выглядят так:

1.smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
2.smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
3.smtpd_use_tls=yes
4.smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
5.smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Стираем их полностью. И вставляем вместо них следующие:

1.smtpd_sasl_auth_enable = yes
2.broken_sasl_auth_clients = yes
3.smtpd_sasl_authenticated_header = yes
4.smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
5.smtpd_use_tls = yes
6.smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem
7.smtpd_tls_key_file = $smtpd_tls_cert_file

Тем самым мы активировали безопасные соединения, перечислили, какие соединения будем принимать, и, наконец, указали путь к сертификату.

7. УСТАНАВЛИВАЕМ COURIER

Courier позволит нам получить POP3 и IMAP доступ к нашей почте.

Установка Courier

Установка достаточна проста, с использованием aptitude:

1.sudo aptitude install courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl

Во время установки вам будет задан вопрос, нужно ли создать директории. Правильный ответ — НЕТ (это ответ по умолчанию, так что можете просто нажать клавишу ввода)!

Настройка Courier

Для начала отредактируем файл:

1.sudo nano /etc/courier/authdaemonrc

Поменяйте строку

1.authmodulelist="authpam"

на

1.authmodulelist="authmysql"

Понятно для чего, да? Мы же используем MySQL!

Далее редактируем файл с деталями БД:

1.sudo nano /etc/courier/authmysqlrc

Чтобы не заморачиваться — удалите в нем все содержимое, и вставьте следующее:

01.MYSQL_SERVER localhost
02.MYSQL_USERNAME mailadmin
03.MYSQL_PASSWORD MyPasswordHere
04.MYSQL_PORT 0
05.MYSQL_DATABASE mail
06.MYSQL_USER_TABLE users
07.MYSQL_CRYPT_PWFIELD password
08.MYSQL_UID_FIELD 5000
09.MYSQL_GID_FIELD 5000
10.MYSQL_LOGIN_FIELD email
11.MYSQL_HOME_FIELD "/home/vmail"
12.MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')

Сохраните файл.
После изменения файлов настроек, требуется рестартовать демоны:

1.sudo /etc/init.d/courier-authdaemon restart
2.sudo /etc/init.d/courier-imap restart
3.sudo /etc/init.d/courier-imap-ssl restart
4.sudo /etc/init.d/courier-pop restart
5.sudo /etc/init.d/courier-pop-ssl restart

8. НАСТРАИВАЕМ FIREWALL

Не буду здесь описывать настройки файрволла. Они у всех разные… Я например, использую Shorewall, кто-то IPTables… Дело вкуса.
Нужно дать доступ по портам: 25 (SMTP), 110, 995 (POP, POPS), 143, 993 (IMAP, IMAPS).

9. ДОБАВЛЯЕМ ДОМЕНЫ И ПОЛЬЗОВАТЕЛЕЙ В ТАБЛИЦЫ БД

Нужно заполнить таблички в MySQL, чтобы все то, что мы настроили ранее заработало.

Логинимся в MySQL:

1.mysql -u root -p

Выбираем базу данных:

1.USE mail;

Заполняем таблицу доменов:

1.INSERT INTO `domains` (`domain`) VALUES ('domen1.com');

Чтобы ввести любой другой домен, выполните аналогичную команду:

1.INSERT INTO `domains` (`domain`) VALUES ('domen2.ru');

Заполняем таблицу пользователей:

1.INSERT INTO `users` (`email`, `password`) VALUES('admin@domen1.com', ENCRYPT('secretpassword'));

Остальные пользователи вводятся аналогично:

1.INSERT INTO `users` (`email`, `password`) VALUES('kot@domen2.ru', ENCRYPT('secretpassword'));

Когда все таблицы заполнены — выходим из ведения БД:

Перегружаем postfix:

1.sudo postfix reload

Проверим, работает или нет?
Давайте отправим почтовое сообщение по одному из введенных адресов: admin@domen1.com

1.mail admin@domen1.com

Введите тело и тему письма и отправьте его адресату. Через какое-то время проверьте папку /home/vmail:

1.ls /home/vmail

Увидите новый каталог:

1./home/vmail/domen1.com

А для каждого пользователя домена domen1.com в папке /home/vmail/domen1.com будет создан собственный каталог с письмами.

Почта уже работает. Остались небольшие дополнения, но о них в следующей статье. Так же в конце мы убедимся, что наш сервер не используется спамерами для несанкционированных рассылок — об этом еще одна статья
Спасибо за внимание.

При подготовке статьи использовались материалы сайта slicehost.com

Безопасное получение почты через UUCP и SSH

by Christophe Prevotaux
Перевод: Сгибнев Михаил

Когда я открывал новую фирму, мне пришлось несколько недель провести без ADSL, оптики или какого иного способа получения скоростного Интернет. Единственное, что оставалось использовать — это старый модем USR 33.6Kbps и учетная запись dial-up. Так как электронная почта была необходима как воздух, пришлось сеть и поискать решение проблемы.

У меня уже было зарегистрировано доменное имя, но провайдером dial-up назначался динамический IP адрес. Моя домашняя машина была подключена через HNS Direcway Satellite Link 128/2048Kbps и имела постоянный IP адрес. Естественным шагом было использовать ее в своих целях.

Когда-то давно, в прежней жизни, я настраивал системы UUCP, когда еще не было Интернета и протоола ppp. Припомнив былое, я посчитал, что UUCP может мне помочь.

UUCP это the Land Rover передачи данных. Это старейший протокол, живущий в Unix, Arpanet, Usenet, и Internet. Лично я использовал его на:

  • ISDN адаптерах
  • Радио связь
  • Спутниковая связь
  • Прямая линия
  • GSM
  • в сетях X.25
  • в сетях TCP/IP с различной физикой
  • VPN (IPSEC, PPTP, OPENVPN etc.)
  • и теперь, SSH

Как вы можете видеть — UUCP нечто вроде внедорожника и это вызывает определенное уважение, поскольку я не знаю ни одного протокола (кроме TCP/IP, естественно), который был бы так универсален и долговечен. ри поиске документации я наткнулся на статью, написанную в 2001 году, моим соотечественником, Фабианом Пансо на uucpssh.org. Фабиан описал работу UUCP поверх SSH, что мне, собственно и требовалось. В статье было очень много недостказанностей из-за того, что использовались старые версии Linux и SSH, а я работаю с FreeBSD, но все равно она мне очень помогла.

Несомненно, имеются другие пути решения проблемы, например перенаправление портов в SSH, но я решил пойти этим путем. Все замечания и дополнения приветствуются.

Преимущества решения UUCP поверх SSH

Протокол POP не обеспечивает эффективного способа работать с электронной почтой из нескольких мест, поэтому мне показалось, что UUCP поверх SSH предоставляем мобильным пользователям больше удобства.

Протокол UUCP является пакетным, поэтому вы можете не бояться потерь данных. В случае неудачного соединения возможна повторная передача почты с места обрыва. Я не знаю больше ни одного почтового протокола, способного на это, обычно передается сообщение полностью. UUCP не требует постоянного подключения к Интернет. Однако, есть один недостаток — вы не будете немедленно получать ответы и сообщения об ошибках, в лучшем случае, это произойдет при следующем сеансе связи.

Протокол UUCP может иметь широкий диапазон интервалов опроса наличия почты и может передавать файлы не только в почтовых вложениях, вы можете выбрать службу рассылки новостей в Usenet и/или создать ваши собственные конференции. Впрочем, мне нужна только электронная почта.

Вводная

Вот список необходимых нам вещей:

  1. Вы должны иметь привилегии root на двух FreeBSD системах. В этой статье описывается работа на FreeBSD 4.10, но будет работать и на FreeBSD 5.х, если UUCP установлен из дерева портов. Также это будет работать на NetBSD и OpenBSD с некоторыми модификациями.
  2. Соответственно, две системы, далее обозначаемые как «клиент» и «сервер»
  3. Сервер имеет статический IP адрес или этот вопрос улажен с помощью DynDNS FQDN. Скорость и время задержки в канале не имеет принципиального значения.
  4. Опрос протокола UUCP будет осуществляться от «клиента» к «серверу» а не наоборот. Было бы просто сделать обмен server-to-server в случае наличия постоянных IP адресов, но это не тема сегоднящней статьи.
  5. На машинах должен быть установлен OpenSSH installed и запущен sshd. На FreBSD это сделано по умолчанию.
  6. Я использую Postfix -> 2.1. Для определения своей версии выполните команду:
     postfconf | grep mail_version 

Сетевые настройки:

  • UUCP сервер «server» с адресом FQDN server.domain.tld и именем UUCP — server.
  • UUCP клиент «client» с адресом FQDN client.domain.tld и именем UUCP — client.
  • почтовое доменное имя машины «client» — hosted-domain.tld.
  • локальное доменное имя «client» — localdomain.local.

Настройка клиента

Установите Postfix на клиентской машине из коллекции портов /usr/ports/mail/postfix/. Отредактируйте /usr/local/etc/posftix/main.cf следующим образом:

 myhostname = machine.localdomain.local myorigin = $mydomain inet_interfaces = $myhostname, localhost mydestination = $myhostname, localhost.$mydomain, $mydomain local_recipient_maps = unix:passwd.byname $alias_maps mynetworks = $config_directory/mynetworks relay_domains = $config_directory/relay_domains transport_maps = hash:$config_directory/transport alias_maps = hash:$config_directory/aliases alias_database = hash:/etc/aliases 

В этих строках устанавливаются переменные Postfix и возможно они уже были установлены, если пользовались им ранее.

Добавляем в /usr/local/etc/posftix/main.cf строку:

 disable_dns_lookups=yes 

Эта опция указывает Postfix не использовать DNS при посылке писем на сервер, так как в этом случае письма посылались бы по SMTP вместо UUCP.

Создаем файл /etc/postfix/transport, содержащий следующие строки:

 ################### this is POSTFIX 'transport' file ############################# # Every time this file is modified it need a 'postmap' and postfix needs a reload# ################################################################################## hosted-domain.tld : # this domain emails are delivered locally .hosted-domain.tld : # this domain emails are delivered locally # in case you need subdomains or machine routing * uucp:server # All other emails get transported by UUCP 

В этом файле мы указываем в качестве средства доставки протокол UUCP. Это означает, что вся почта, отправленная не в something@hosted-domain.tld или something@.hosted-domain.tld будет пересылаться через UUCP. Для доменов hosted-domain.tld и .hosted-domain.tld будет применяться локальная доставка.

Теперь уведомим Postfix о произведенных изменениях:

 $ postmap /usr/local/etc/postfix/transport && postfix reload 

Создаем файл /usr/local/etc/postfix/virtual, содержащий:

 #################### This is POSTFIX 'virtual' file ############################## # Every time this file is modified it need a 'postmap' and postfix needs a reload# ################################################################################## ########### hosted-domain.tld virtual users table ############## postmaster@hosted-domain.tld postmaster@localdomain.local virtualuser1@hosted-domain.tld localuser1@localdomain.local 

Теперь уведомим Postfix о произведенных изменениях:

 $ postmap /usr/local/etc/postfix/virtual && postfix reload 

Создаем /usr/local/etc/postfix/mynetworks, содержащий:

 #################### This is POSTFIX 'mynetworks' file ########################### # Every time this file is modified it need a 'postmap' and postfix needs a reload# ################################################################################## xxx.xxx.xxx.xxx/xx OK # where xxx.xxx.xxx.xxx is your local private IP address # and /xx is the mask for your networks for exple # 192.168.1.1/24 xxx.xxx.xxx.xxx OK # single host for exemple 192.168.2.1 127.0.0.0/8 OK # this is localhost interface(s) 

Это список IP адресов, которым доставка почты осуществляется через SMTP, перед тем как поставить письма в очередь на отправку почты через UUCP.

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

 #################" This is POSTFIX 'canonical' file ############################## # Every time this file is modified it need a 'postmap' and postfix needs a reload# ################################################################################## @localdomain.local @hosted-domain.tld 

Для вступления изменений в силу:

 $ postfix stop && postfix start 

В случае, если вы модифицируете псевдонимы(aliases), хорошей идеей будет выполнить команды newaliases и затемpostfix reload. Это также можно сделать, используя простейший скрипт:

 #! /bin/sh postmap virtual postmap transport postmap mynetworks postmap relays_domains postmap access postmap canonical newaliases postfix reload 

Используйте postcheck для проверки корректности конфигурации.

Конфигурирование клиента UUCP

Для настройки UUCP у клиента необходимо создать несколько файлов в каталоге /etc/uucp. Начнем мы с /etc/uucp/sys, содержащего:

 ###### this is the 'sys' file for Taylor UUCP ###### system server alias server-ssh call-login * call-password * time any address server.domain.tld port ssh protocol t remote-send /var/spool/uucppublic remote-receive /var/spool/uucppublic 

Затем создаем /etc/uucp/port:

 ###### this is the 'port' file for Taylor UUCP ###### port ssh type pipe command /usr/bin/ssh -x -o batchmode=yes server.domain.tld 

Теперь /etc/uucp/call:

 ###### this is the 'call' file for Taylor UUCP ###### server login password 

В заключение устанавливаем права доступа к файлам. SSH очень критичен в этих вопросах.

 % cd /var/spool/ && chmod go-w uucp % cd /etc/uucp && chown root:uucp * && chmod 550 * 

Конфигурирование SSH клиента

Пришло вермя конфигурирования клиента SSH. От пользователя root запускаем команду vipw uucp и редактируем домашний каталог пользователя с:

 uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico 

на

 uucp:*:66:66:UUCP pseudo-user:/var/spool/uucp:/usr/libexec/uucp/uucico 

Затем генерируем ключи для клиента:

 % su -m uucp $ export HOME=/var/spool/uucp $ cd /var/spool/uucp $ ssh-keygen -t dsa 

В последней команде вас попросят ввести кодовую фразу. Не делайте этого, просто нажмите Enter. Хотя это и походит на брешь в системе сетевой защиты, пользователь uucp не имеет пароля в /etc/passwd. Нам в дальнейшем потребуется файлid_dsa.pub

Настройка сервера

На сервере также требуется конфигурирование Postfix, UUCP и SSH.

Настройка сервера Postfix

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

Postfix должен знать, что всю почту для клиента необходимо отправлять через UUCP. Поэтому в файле /usr/local/etc/postfix/transport должна быть строка:

 ####### this is POSTFIX 'transport' file ######### hosted-domain.tld uucp:client 

Postfix также должен осуществлять маршрутизацию почты для нашего домена, поэтому в /usr/local/etc/postfix/relay_domains указываем:

 ####### this is POSTFIX 'relay_domains file ######### hosted-domain.tld OK hosted-domain.tld OK 

Затем активируем изменения:

 % postmap transport relay_domains && postfix reload 

Настройка UUCP

Как и для клиента, используя vipw uucp сделайте изменения в /etc/password:

 uucp:*:66:66:UUCP pseudo-user:/var/spool/uucp:/usr/libexec/uucp/uucico 

на

 uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucp:/bin/sh 

Затем, создаем файл /etc/uucp/sys, содержащий:

 ###### this is the UUCP 'sys' file for Taylor UUCP ####### # client system client time any port tcp protocol t remote-send /var/spool/uucppublic remote-receive /var/spool/uucppublic # other clients use the same lines 

Создаем /etc/uucp/passwd:

 ###### this is the UUCP 'passwd' file for Taylor UUCP ####### yourlogin yourpassword 

Конфигурация SSH

В финале необходимо сконфигурировать SSH. Воспользуемся командой su -m uucp и создадим файл authorized_keys:

 $ touch /var/spool/uucp/.ssh/authorized_keys 

Скопируем содержимое клиентского файла id_dsa.pub(располагающегоса в /var/spool/uucp/.ssh/) в /var/spool/uucp/.ssh/authorized_keys на сервере. Установим права доступа:

 chmod go-rwx && chown uucp:uucp 

Затем редактируем authorized_keys, вставив в начало файла команду:

 command="/usr/libexec/uucp/uucico -l 

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

 command="/usr/libexec/uucp/uucico -l" ssh-dss AAAAB3NzaC1kc3MAAACBA... 

Все это должно быть в одну строку. Затем заключительная команда:

 cd /var/spool/ && chmod go-w uucp. 

Заключительная наладка и тестирование

Финал. Зарегистрируем DSA ключ для клиентской машины в /var/spool/uucp/.ssh/known_hosts. Для этого необходимо переключиться в пользователя uucp (командой su -m uucp), выполнить команду ssh -v uucp@server.domain.tld и ответить «yes».

В этой точке вся входящая почта для hosted-domain.tld будет помещена в очередь и сохранена в каталоге var/spool/uucp/client. UUCP с удовольствием будет ее посылать, всякий раз создавая SSH туннель.

Если что то не работает, то проверьте порядок действий еще раз. На этом, собственно и все.

Проверим реальную работу.

Дозваниваемся до провайдера Интернет и выполняем:

 su -m uucp /usr/libexec/uucp/uucico -f -sserver 

Для наблюдения процесса доставки почты введем:

 uulog -f -sserver 

Для просмотра обработки почты Postfix воспользуйтесь командой:

 tail -f /var/lo/maillog 

Запускаем любимый почтовый клиент и отправляем почту. Вы должны будете увидеть ее в очереди UUCP (uustat -sserver) и отослана при следующем запуске uucico.

Вы можете использовать команду uustat -k <jobid> на сервере или клиенте для прекращения работы, которую можно просмотреть командой using uusat -s <system>:

 server.NI8whUuAALf1 server uucp 10-06 10:35 Executing rmail \ user@domain.tld (sending 1452 bytes) 

В этом примере необходимо будет ввести uustat -k system.NI8whUuAALf1 для удаления работы.

Для автоматизации работы воспользуемся услугами демона cron. Для предотвращения ошибок, необходимо иметь постоянное подключение к Интернет. Выполним команду crontab -u uucp -e и введем следующую команду для проверки почты каждые пять минут:

 # This is Taylor UUCP crontab file PATH=/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/libexec/uucp 0-55/5 * * * * /usr/libexec/uucp/uucico -f -sserver 

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