The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Безопасное получение почты через UUCP и SSH (uucp ssh mail)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: uucp, ssh, mail,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-13 16:41:53 Subject: Безопасное получение почты через 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. Я буду рад получить от вас письмо, для того чтобы составить некую карту стран и пользователей.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:




  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor