настраиваем получение почты через UUCP и SSH
Когда я открывал новую фирму, мне пришлось несколько недель провести без 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 и т.д.);- и теперь 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 и запущен sshd. На FreBSD это сделано по умолчанию.6. Я использую Postfix 2.1.
сетевые настройки
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 следующим образом:
В этих строках устанавливаются переменные Postfix (возможно, они уже были установлены, если вы пользовались им ранее).Добавляем в /usr/local/etc/posftix/main.cf строку:
Эта опция указывает Postfix не использовать DNS при посылке писем на сервер, так как в этом случае письма посылались бы по SMTP вместо UUCP. Создаем файл /etc/postfix/transport, содержащий следующие строки:
В этом файле мы указываем в качестве средства доставки протокол UUCP. Это означает, что вся почта, отправленная не в something@hosted-domain.tld или something@.hosted-domain.tld, будет пересылаться через UUCP. Для доменов hosted-domain.tld и .hosted-domain.tld будет применяться локальная доставка.Теперь уведомим Postfix о произведенных изменениях:
Создаем файл /usr/local/etc/postfix/virtual, содержащий:
Теперь уведомим Postfix о произведенных изменениях:
$ postmap /usr/local/etc/postfix/virtual && postfix reload
Создаем /usr/local/etc/postfix/mynetworks, содержащий список IP-адресов хостов/сетей, которым доставка почты осуществляется через SMTP, перед тем как поставить письма в очередь на отправку почты через UUCP. Строки могут выглядеть следующим образом (не забудьте вписать ваши адреса ;)
Возможно вы захотите отредактировать файл canonical для того, чтобы изменять отправителя при отправке почты с локальной машины. Будет это выглядеть примерно так:
Для вступления изменений в силу:
В случае, если вы модифицируете псевдонимы(aliases), хорошей идеей будет выполнить команды newaliases и затем postfix reload. Это также можно сделать, используя простейший скрипт:
Используйте postcheck для проверки корректности конфигурации.
конфигурирование клиента UUCP
Для настройки UUCP у клиента необходимо создать несколько файлов в каталоге /etc/uucp. Начнем мы с /etc/uucp/sys, содержащего:
Затем создаем /etc/uucp/port:
В заключение устанавливаем права доступа к файлам. SSH очень критичен в этих вопросах.
конфигурирование SSH-клиента
Пришло вермя конфигурирования клиента SSH. От пользователя root запускаем команду vipw uucp и редактируем домашний каталог пользователя с:
Затем генерируем ключи для клиента:
В последней команде вас попросят ввести кодовую фразу. Не делайте этого, просто нажмите Enter. Хотя это и походит на брешь в системе сетевой защиты, пользователь uucp не имеет пароля в /etc/passwd. Нам в дальнейшем потребуется файл id_dsa.pub.
настройка сервера
На сервере также требуется конфигурирование Postfix, UUCP и SSH.
настройка сервера Postfix
Будем считать, что это - основной почтовый сервер.Вы уже знаете, как конфигурировать Postfix для получения и отправки почты из и в Интернет. Postfix должен знать, что всю почту для клиента необходимо отправлять через UUCP. Поэтому в файле /usr/local/etc/postfix/transport должна быть строка:
Postfix также должен осуществлять маршрутизацию почты для нашего домена, поэтому в /usr/local/etc/postfix/relay_domains указываем:
Затем активируем изменения:
настройка UUCP
Как и для клиента, используя vipw uucp, сделайте изменения в /etc/password. Заменим
Затем создаем файл /etc/uucp/sys, содержащий:
конфигурация SSH
В финале необходимо сконфигурировать SSH. Воспользуемся командой
и создадим файл authorized_keys:
Скопируем содержимое клиентского файла id_dsa.pub(располагающегося в /var/spool/uucp/.ssh/) в /var/spool/uucp/.ssh/authorized_keys на сервере. Установим права доступа:
Затем редактируем authorized_keys, вставив в начало файла команду:
Все это должно быть в одну строку. И последняя команда:
заключительная наладка и тестирование
Финал. Зарегистрируем DSA ключ для клиентской машины в /var/spool/uucp/.ssh/known_hosts. Для этого необходимо переключиться в пользователя uucp (командой su -m uucp), выполнить команду
и ответить "yes".В этой точке вся входящая почта для hosted-domain.tld будет помещена в очередь и сохранена в каталоге var/spool/uucp/client. UUCP с удовольствием будет ее посылать, всякий раз создавая SSH-туннель.Если что-то не работает, то проверьте порядок действий еще раз.Проверим реальную работу. Дозваниваемся до провайдера Интернет и выполняем:
Для наблюдения процесса доставки почты введем:
Для просмотра обработки почты Postfix воспользуйтесь командой:
Запускаем любимый почтовый клиент и отправляем почту. Вы должны будете увидеть ее в очереди UUCP (uustat -sserver) и отослана она будет при следующем запуске uucico.Вы можете использовать команду
Для автоматизации работы воспользуемся услугами демона cron. Для предотвращения ошибок, необходимо иметь постоянное подключение к Интернет. Выполним команду
и введем следующую команду для проверки почты каждые пять минут:
Christophe Prevotaux, перевод Сгибнева Михаила.¶
Сетевые решения. Статья была опубликована в номере 03 за 2005 год в рубрике sysadmin