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

В этом разделе описывается настройка вашего почтового клиента на использование зашифрованного соединения при помощи 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-ом, для того чтобы переназначать привилегированные порты. Это, конечно, не совсем правильно. Но должно работать.