настраиваем получение почты через 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:
Теперь /etc/uucp/call:
В заключение устанавливаем права доступа к файлам. 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, содержащий:
Создаем /etc/uucp/passwd:
конфигурация 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, перевод Сгибнева Михаила.¶
У меня уже было зарегистрировано доменное имя, но провайдером 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 следующим образом:
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, содержащий следующие строки:
hosted-domain.tld
.hosted-domain.tld
* uucp:server
В этом файле мы указываем в качестве средства доставки протокол 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, содержащий:
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, содержащий список IP-адресов хостов/сетей, которым доставка почты осуществляется через SMTP, перед тем как поставить письма в очередь на отправку почты через UUCP. Строки могут выглядеть следующим образом (не забудьте вписать ваши адреса ;)
192.168.0.3 OK
192.168.8.0/24 OK
Возможно вы захотите отредактировать файл canonical для того, чтобы изменять отправителя при отправке почты с локальной машины. Будет это выглядеть примерно так:
@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, содержащего:
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:
port ssh
type pipe
command /usr/bin/ssh -x -o batchmode=yes server.domain.tld
Теперь /etc/uucp/call:
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 должна быть строка:
hosted-domain.tld uucp:client
Postfix также должен осуществлять маршрутизацию почты для нашего домена, поэтому в /usr/local/etc/postfix/relay_domains указываем:
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, содержащий:
system client
time any
port tcp
protocol t
remote-send /var/spool/uucppublic
remote-receive /var/spool/uucppublic
Создаем /etc/uucp/passwd:
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
Для автоматизации работы воспользуемся услугами демона cron. Для предотвращения ошибок, необходимо иметь постоянное подключение к Интернет. Выполним команду
crontab -u uucp –e
и введем следующую команду для проверки почты каждые пять минут:
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
Christophe Prevotaux, перевод Сгибнева Михаила.¶
Сетевые решения. Статья была опубликована в номере 03 за 2005 год в рубрике sysadmin