Настройка PPP и почты под Linux
Вопросы по настройке сети в Linux постоянно всплывают в новостях, поэтому
я решил поделиться своим опытом.
Надеюсь что приведенная настройка поможет вам.
Для настройки Linux я использую текстовый редактор и файловые утилиты,
никаких диалоговых конфигураторов.
Вся настройка должна производиться привилегированным пользователем
(
root).
В можете прочитать файлы настройки в он-лайн режиме или загрузить
все в виде архива :
ppp-conf.tar.bz2
Описание ситуации
В данной статье приводится конкретный пример настройки.
-
Операционная система Slackware Linux.
О версии судить сложно, так как она обновлялась вручную от третьей до седьмой
и что-то возможно осталось от старой версии.
-
Модем USR Courier с дягилевской прошивкой ("Русский курьер"), один.
-
Два провайдера, логины с различными способами начисления стоимости.
-
Бесплатный почтовый ящик на samara21 от Крафт-С.
-
Во всех случаях используется коммутируемая линия и динамический
IP-адрес.
Нам понадобится
-
Ядро версии не старее 2.0.36 , лучше последнее из серии 2.2.х
с включенной поддержкой ppp
-
pppd версии не старее 2.3.10 (более старый можно настроить,
но некоторые параметры придется переименовать)
-
командный интерпретатор bash или ash
-
sudo для разрешения выхода винтернет определенным пользователям
-
modutils: insmod, kerneld (только для 2.0.x) соответствующие
ядру.
-
minicom - для проверки работоспособности модема и линии
-
ftp для закачки ip-адреса на свою страницу у провайдера
-
sendmail - версии 8.x для отправки почты
-
fetchmail - для ее получения
Файлы настроийки
Упоминаемые здесь файлы размещены в следующих каталогах:
/etc
sendmail.cf
sendmail.cf2
/etc/ppp
pap-secrets
ftpparm
ip-down
ip-up
ppp-hang
options
hippo
dial-hippo
/usr/bin
ppp
Настройка PPP
Cначала убедитесь в функционировании модема
Установите ссылку /dev/modem на устройство к которому подключен модем
обычно это /dev/ttyS0 или /dev/ttyS1
# ln -sf /dev/ttyS0 /dev/modem
Загрузите minicom
# minicom
если minicom неправильно сконфигурирован он может не запуститься,
тогда воспользуйтесь ключом -s:
# minicom -s
и установите параметры модема
после чего проинициализируйте модем и наберите
AT
модем должен ответить
OK
после этого можно набрать номер сервера доступа провайдера и посмотреть коннект
ATDP430000
CONNECT 33333/ARQ
если вы добились похожего сообщения - можно переходить к настройке ppp.
Файлы настройки pppd собраны в директории
/etc/ppp
Запишите сюда указанные выше файлы и отредактируйте их для вашего
случая.
Начнем по-порядку
pap-secrets содержит все пароли для протокола авторизации PAP
Замените логины и пароли на ваши
вторая строка :
albina - логин провайдера samtel (Телеграф) и имя компьютера
дальше:
albina - первый логин провайдера hippo (Крафт-С)
belaya - второй логин того же провайдера
khlut - третий логин (бесплатная почта на Крафт-С)
testuser - тестовый логин
guest - входной логин на ваш компьютер
server - имя вашего компьютера
ftpparm содержит команды ftp для записи полученного динамического
IP на вашу страницу у провайдера
Этим можно пользоваться например для удаленной настройки компьютера
через интернет
Замените
ftp.kraft-s.ru - адрес вашего ftp сервера для доступа к домашней странице
albina - ваш логин
ftppassword - ваш пароль
public_html/IP/albina - путь, где должен лежать файл с IP адресом
hippo это файл дополнительных настроек ориентированных на конкретного
провайдера
для другого провайдера его можно скопировать и подкорректировать
debug - запись в системный лог отладочной информации - иногда помогает
при определении причины отказа в соединении
nobsdcomp, nodeflate - отключается программное сжатие, т.к. оно обычно
не поддерживается серверами удаленного доступа - можно включить, если на
другом конце linux или BSD
connect - имя файла со скриптом установки соединения с данным провайдером
idle - время бездействия линии в секундах после которого pppd разорвет
связь. В старой версии pppd было использовано другое название данного параметра.
dial-hippo - скрипт дозвона. Функция att вызывается с набираемым
номером, если связь установить не удалось - пробуется другой номер и т.д.
Лучший номер стоит поставить в начало. Номера здесь соответствуют серверам
доступа Крафт-С.
В самой функции можно подрегулировать пределы скорости &N - максимум, &U
- минимум. Числа можно получить от модема в minicom по команде AT&$.
ip-up - сердце настройки. Этот скрипт pppd вызывает после установки
IP-соединеия с дополнительным аргументом, который можно задать с
помощью опции pppd ipparam. Этот аргумент используется здесь для выбора
режима работы соединения. Скрипт использует каталог
/var/run/ip для записи выданного ip-адреса, так что
не забудьте создать этот каталог
Логика обработки установки и разрыва соединения
Скрипты ip-up и ip-down специальным образом обрабатывают
повторную выдачу одинаковых ip-адресов.
При первом получении адреса перезапускается демон sendmail и
очищается каталог /var/run/ip.
Далее в нем создается файл с именем соответствующим выданному адресу, куда
записывается pid порождаемого фонового процесса, который ждет 5
секунд и за тем запускает sendmail в режиме обработки очереди.
По разрыву соединения данный процесс не уничтожается, в надежде на то
что может быть выдан тот же ip-адрес повторно.
Если выдается повторно тот же адрес, что определяется по существованию
файла с таким именем, то ip-up быстро завершается.
Если разрыв соединения происходит после завершения процесса обработки
почтовой очереди, производятся другие завершающие действия.
В случае если связь рвется до завершения sleep, то sendmail -q
быстро определит недоступность сети и завершится.
Таким образом удается обойти повторную выдачу ip адреса с трехсекундной
задержкой, которую я наблюдал при соединении с сервером USR, и случаи
быстрого разрыва связи.
Данный алгоритм конечно не идеален, и я с удовольствием приму ваши
предложения по его улучшению, но вполне работоспособен.
Режимы работы соединения
После проверки выделенного адреса в ip-up обрабатывается аргумент $6
содержащий параметр передаваемый через ipparam в pppd.
Поддерживается несколько режимов:
g - полный доступ с периодическим получением и отправкой почты.
gm - забрать почту и закрыть соединение.
u - отправить почту из очереди и закрыть соединение
ug - забрать почту из бесплатного почтового ящика и закрыть
соединение
другое - только запустить обработку почтовой очереди. Это для
режима прокси и других вариантов неполного доступа.
Режимы доступа рассмотренных файлов
Скрипты необходимо сделать исполняемыми:
# chmod 744 /ppp/dial-* /ppp/ip-*
Обратите так же внимание на замечания об информационной безопасности
в конце данной статьи
Запуск pppd
Для запуска pppd с данной настройкой используйте следующую
команду:
# pppd /dev/modem 115200 file /etc/ppp/hippo user USER ipparam MODE
где:
/etc/ppp/hippo - настройка под конкретного провайдера
USER - PAP login
MODE - режим соединения, как описано выше.
Для упрощения запуска pppd можно использовать скрипт вроде
следующего:
ppp
который следует запускать с одним аргументом, указывающим требуемый
режим.
Назначение режимов ясно из содержимого файла. Логины конечно надо
заменить на свои.
Записав данный файл в общедоступный системный каталог вроде
/usr/bin можно позволить непривилегированным пользователям устанавливать
соединение через команду sudo.
Настройка Sendmail
Sendmail - универсальная и гибкая программа, но к сожалению ни одна
из ее стандартных настроек не подходит для диалапа с динамическими адресами,
и с каждой версией авторы ужесточают проверки адресов из-за которых почтовые
серверы становятся все более несговорчивыми. В то же время докуметация
не успевает за развитием программы. Тем не менее мне кажется удалось на текущий
момент решить проблему настройки sendmail для рядового пользователя.
В данной настройке используется 2 конфигурационных файла sendmail:
один обычный и /etc/sendmail.cf2 с настройкой на другой почтовый
сервер, который используется в режиме отправки почты "u".
Он ничем не отличается от /etc/sendmail.cf возможно кроме установки
smart host.
Найдите в sendmail.cf следующие строки:
# my official domain name
# ... define this only if sendmail cannot automatically determine your domain
Dj
добавьте после Dj имя вашего компьютера которое будет использовано
при общении с smtp сервером провайдера и в mime-заголовках.
Это доменное имя должно существовать, иначе удаленный
сервер может отказать в соединении, в то же время нельзя здесь
использовать имя почтового сервера провайдера. Универсального решения
наверно не существует. Сейчас я использую имя dial-up.kraft-s.ru. Некоторые
серверы требуют чтобы данное имя имело ip адрес, тогда надо поставить
что-то другое, может помочь вариант с одним из динамических адресов
# "Smart" relay host (may be null)
DS
Добавьте после DS имя smtp сервера который будет принимать и отправлять
далее всю вашу исходящую почту.
# default delivery mode
O DeliveryMode=d
Поставьте режим d (deferred) чтобы sendmail не пытался сразу отправить письмо,
а без проверок клал его в очередь.
В такой конфигурации sendmail может работать как релейный хост вашей
локальной сети, но если почта исходит от localhost sendmail подставит
имя указанное в макропеременной, определенной строкой Dj. Это может не
понравится некоторым особо придирчивым почтовым серверам. Для решения этой
проблемы нужно изменить файл следующим образом:
добавить новые макросы (после Dj):
DAимя
DJхост
где имя@хост - адрес вашего ящика у провайдера.
За тем найдите следующие строки:
###################################################################
### Ruleset 94 -- convert envelope names to masqueraded form ###
###################################################################
S94
R$* < @ *LOCAL* > $* $: $1 < @ $j . > $2
последнюю из них замените на:
R$* < @ *LOCAL* > $* $: $A < @ $J . > $2
Настройка Fetchmail
fetchmail настраивается через файл .fetchmailrc у пользователя,
получающего всю почту из почтового ящика у провайдера. В данном случае
это - root.
Ниже приведен пример файла /root/.fetchmailrc
poll mail.samaramail.ru protocol pop3 username albina password ***** is boss here
skip samara21.ru protocol pop3 username khlut password ***** is sergey here
skip означает что fetchmail будет работать с этим сервером только при
указании его в строке запуска
Безопасность
Установите правильные режимы доступа к файлам
с вашими паролями:
# chown -R root.root /etc/ppp
# chmod 0600 /etc/ppp/pap-secrets /etc/ppp/ftpparm /root/.fetchmail
Автоматизация
Проверив работоспособность скриптов, можно заставить компьютер периодически
выполнять их в режиме получения и отправки почты. Для этого добавьте
в файл /var/spool/cron/crontabs/root следующие строки :
30 * * * * /usr/bin/ppp gm
0,15,45 * * * * /usr/bin/ppp u
Теперь каждый час будет забираться почта и каждые 15 минут отправляться.
Если очередь пуста, то pppd запускаться не будет - в скрипте ppp есть проверка.
Обратная связь
Отзывы, комментарии и замечания о данной статье присылайте по адресу:
khlut@samaramail.ru
Если вы столкнулись с трудностями при использовании предложенной настройки,
обращайтесь за помощью в конференцию
kraft.os.linux
© 2000 Сергей Хлутчин
Распространение данной
статьи и всех прилагаемых файлов разрешается с обязательной
ссылкой на автора и источник:
http://www.hippo.ru/~khlut