Мини-HOWTO: Защита информации в протоколе POP при помощи SSH

Manish Singh

Перевод: Станислав Рогин, ASPLinux

Аннотация

В этом документе описывается возможность защиты информации в протоколе POP при помощи ssh.


Содержание
Введение
Способ решения
Использование ваших почтовых программ
Разное

Введение

Обычные почтовые связи, производимые при помощи протокола POP, по своей природе абсолютно не защищены. Пароль передается по сети в открытом виде, и каждый находящийся в сети может его увидеть. Конечно, это не является проблемой в полностью надежной сети или сети, защищенной от внешнего мира, при помощи firewall. Но в открытой сети, например, сети университета, или просто при подключении к вашему внешнему провайдеру, любой человек, взяв обычный сетевой перехватчик (sniffer - программа, позволяющая просматривать содержимое пакетов в сети) может узнать ваш пароль без какой-либо расшифровки. Это, к тому же, складывается с тем фактом, что многие настраивают свои компьютеры на регулярную доставку почты, и в результате этого, пароль достаточно часто появляется в незащищенном виде в сети, и его очень просто перехватить.

Имея ваш пароль, хакер может получить доступ к вашему почтовому входу, в котором может находится важная личная информация. А если пароль совпадает с общим паролем входа в систему (что, к сожалению, достаточно часто происходит), последствия могут быть значительно серьезнее.

Если весь трафик протокола POP пустить по шифрованному каналу, ничего не будет идти по сети в незашифрованном виде. Мы также можем использовать защищенные методы авторизации ssh, вместо простого незащищенного пароля. Это один из главных плюсов этого метода - мы получаем не только защищенное содержимое протокола (что не так критично: скорее всего эта почта шла до вас по многим системам в незащищенном виде; защита этих данных - скорее работа PGP, чем ssh), но и защищенную шифрованную авторизацию.

Существуют, правда, другие способы достичь защищенной авторизации, такие как APOP, KPOP, или IMAP. Однако, использование ssh имеет одно преимущество - оно работает с обычными конфигурациями протокола POP, без необходимости устанавливать специального почтового клиента (не все почтовые клиенты поддерживают дополнительные протоколы) или дополнять сервер (кроме запуска на нем sshd). К тому же, ваш провайдер может не иметь желания или возможности установить более защищенный почтовый протокол. В дополнение к этому, при использовании ssh данные еще и компрессуются при передаче по сети, что может помочь на медленных сетях.


Способ решения

Решение проблемы основывается на одном из основных свойств ssh: переназначение портов

Существует много различных вариаций на эту тему, зависящих от необходимой вам настройки почты. Все они требуют ssh, который можно найти по адресу http://www.ssh.fi/ и его зеркалах. RPM-вариант находится по адресу ftp://ftp.replay.com/pub/crypto/ , а Debian-пакеты находятся по адресу ftp://non-us.debian.org/debian-non-US/ (и его глубоко уважаемых зеркалах).


Настройка переназначения портов

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

ssh -C -f popserver -L 11110:popserver:110 sleep 5

Давайте подробнее разберем содержимое этой команды:

ssh

Собственно программа ssh - та самая волшебная программа, которая все и делает.

-C

Опция, включающая компрессию потока данных. Это необязательный параметр, но достаточно полезный, особенно для пользователей, соединяющихся по телефонным линиям.

-f

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

popserver

Адрес POP-сервера, к которому мы подключаемся.

-L 11110:popserver:110

Переназначить локальный порт 11110 на порт 110 на удаленном сервере popserver. Мы используем большое число (11110), чтобы любой пользователь мог использовать переназначение.

sleep 5

После того, как ssh перейдет в фоновый режим, он запускает команду. Мы используем sleep, чтобы соединение поддерживалось достаточное для установки почтового соединения время. 5 секунд обычно бывает достаточно.

Вы также можете использовать другие опции ssh, если это необходимо. Обычно бывает нужно еще имя пользователя, так как оно может различаться на разных POP-серверах.

Для этого обязательно на сервере popserver должен быть запущен sshd. Однако, вам не обязательно на нем иметь стандартный вход в оболочку. Времени, за которое выводится сообщение "Вы не можете использовать команду telnet на этот сервер" обычно бывает достаточно для установки почтового соединения.


Проверка результата

После того как вы полностью определитесь с параметрами команды, запускающей переназначение портов, вы можете ее испытать. Например:

$ ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 1000

popserver - это наш POP-сервер. На моей локальной машине имя пользователя - manish, поэтому я должен отдельно указывать имя msingh, то есть то, которое имею на сервере. (Если ваше локальное имя и имя на сервере совпадают, то часть вида msingh@ необязательна).

Затем эта команда выводит:

msingh@popserver's password:

Я набираю свой пароль для POP (ваши пароли для системы и POP могут различаться, поэтому используйте системный пароль). Теперь у нас все настроено! Испытаем нашу систему:

$ telnet localhost 11110

и мы должны увидеть примерно следующее:

QUALCOMM POP v3.33 ready.

Ура! Все работает! Данные, передаваемые по сети, шифруются, и единственное место, где присутствует нешифрованный текст - это внутри сервера и моей машины.


Использование ваших почтовых программ

В этом разделе описывается настройка вашего почтового клиента на использование зашифрованного соединения при помощи ssh. В основном мы остановимся на fetchmail (прекрасная утилита приема и передачи почты от ESR), потому что это, пожалуй, самая гибкая почтовая программа, работающая в POP. fetchmail можно найти по адресу http://www.tuxedo.org/~esr/fetchmail/. Вы сделаете очень полезное дело, прочитав великолепную документацию, поставляемую вместе с fetchmail.


Настройка fetchmail

Ниже приведен мой файл .fetchmailrc

defaults
        user msingh is manish
        no rewrite

poll localhost with protocol pop3 and port 11110:
        preconnect "ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 5"
        password foobar;

Достаточно просто, не так ли? fetchmail богат на команды, но ключевыми здесь являются preconnect и опция poll.

Мы соединяемся не напрямую с POP-сервером, а с нашей локальной машиной и портом 11110. Команда preconnect запускает переназначение ssh каждый раз при запуске fetchmail, оставляя соединение в работе на 5 секунд, за которые fetchmail должен установить свое собственное соединение. Остальное делает сам fetchmail.

Таким образом, при каждом запуске fetchmail будет запрашиваться ssh-пароль, необходимый для авторизации. Это не очень удобно, если вы запускаете fetchmail в фоновом режиме (как это делаю я). Это нас приводит к следующей главе.


Автоматизация

В ssh встроено много различных методов авторизации. Одним из них является использование пары открытых/закрытых ключей RSA. Вы можете сгенерировать авторизационный ключ, используя команду ssh-keygen. К этому ключу может быть привязана ключевая фраза, или она может быть пустой. Использовать или нет эту фразу зависит от того, насколько защищенной вы считаете вашу локальную систему.

Если вы считаете, что машина достаточно защищена, не вводите ключевую фразу. Тогда выше приведенный .fetchmailrc будет работать при обычном запуске fetchmail. Таким образом, вы сможете запускать fetchmail в фоновом режиме, и почта будет доставляться автоматически. У вас все готово.

Однако, если вам все-таки требуется ключевая фраза, то все немного усложняется. ssh может запускаться под управлением агента, который может регистрировать ключи и авторизовать все ssh-соединения, производимые под его управлением. Поэтому у меня имеется скрипт getmail.sh:

#!/bin/sh
ssh-add
while true; do fetchmail --syslog --invisible; sleep 5m; done

Я запускаю следующее каждый раз, когда я дозваниваюсь до провайдера:

$ ssh-agent getmail.sh

При таком варианте, моя ключевая фраза запрашивается один раз, затем почта проверяется каждые 5 минут. После того, как я закрываю соединение, отключаю и ssh-agent. (Это автоматизировано в моих скриптах ip-up и ip-down)


Если не использовать fetchmail

Что делать, если у вас нет возможности/желания использовать fetchmail? Pine, Netscape и некоторые другие клиенты имеют свои встроенные POP-механизмы. Во-первых, я все-таки советую использовать fetchmail! Он значительно более гибок, и многие почтовые клиенты вообще не могут делать то, что может fetchmail. И Pine, и Netscape можно настроить на использование локальной почты.

Но вам придется, если только в ваш клиент не встроена функция, аналогичная preconnect fetchmail-а, поддерживать переназначение портов ssh в течение всего времени подключения. Это означает примерно следующую команду: sleep 100000000 для того, чтобы ssh продолжал поддерживать соединение. С этим, правда, могут не согласиться администраторы вашей сети.

Второй проблемой является то, что в некоторые клиенты (например в Netscape) жестко вписан номер порта 110. Поэтому вам придется быть root-ом, для того чтобы переназначать привилегированные порты. Это, конечно, не совсем правильно. Но должно работать.


Разное

Ответственность

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

Криптографические программы, такие как ssh, могут быть использованы с ограничениями - это зависит от места вашего проживания. В некоторых странах такие программы подлежат лицензированию. Если вы не уверены в положениях ваших местных законов, проконсультируйтесь с тем, кто более осведомлен в этой области.

Ваш провайдер, вряд ли ожидает, что вы будете использовать способы, описанные в этом документе. Автор не несет ответственности за любые формы неверного или запрещенного использования сетевых сервисов, и предоставляет этот документ исключительно как источник информации. Если вы не знаете, попадает ли использование подобных механизмов под условия соглашения между вами и провайдером, проясните этот вопрос ДО начала использования приведенных здесь советов.


Copyright

This document is copyright ╘ 1998 Manish Singh <yosh@gimp.org>

Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that this copyright notice is included exactly as in the original, and that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this document into another language, under the above conditions for modified versions.

Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions.

All trademarks used in this document are acknowledged as being owned by their respective owners.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу


Благодарности

Огромное спасибо Seth David Schoen за консультации по вопросу переназначения портов при помощи ssh <schoen@uclink4.berkeley.edu>.