Linux-сервер своими руками — страница 75 из 119

17.3.1. Что такое callback?

Первоначально обратный звонок был предназначен для снижения стоимости международных телефонных переговоров. Стоимость разговора определяется так: отсчет начинается с момента, когда вызываемый абонент поднял трубку или после пятого гудка, если абонент не отвечает, интервал тарификации – 1 минута, то есть каждая неполная минута будет оплачиваться как полная. Стоимость самого разговора зависит от страны, из которой мы звоним. Например, в Украине 1 минута связи с США вам обойдется в 2,5…3,3 доллара США в зависимости от типа линии, которую вы используете: обыкновенную или Utel. Звонок из США в Украину вам обойдется 1…2 доллара. На этом и основана идея callback (callback — обратный звонок).

Рассмотрим небольшой пример: звонок из Украины в США:

1. Украинский абонент набирает выделенный ему номер в США и после первого вызова кладет трубку. Этим звонком он активирует специальное оборудование системы callback. Естественно, этот звонок не оплачивается, потому что оплата начинается с момента поднятия трубки вызываемым абонентом или после пятого вызова. Украинский абонент должен быть подключен к линии с тональным набором.

2. Через 5…20 секунд система callback перезванивает абоненту Украины и приглашает его набрать номер, по которому он хочет позвонить. Система callback набирает этот номер. При этом соединение устанавливается из США, а не из Украины, что в конечном итоге ведет к снижению стоимости всего звонка. При этом интервал тарификации не одна минута, как при звонке из Украины, а всего 6 секунд.

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

Работает callback примерно так: клиент сети как обычно устанавливает соединение с сервером и проходит аутентификацию. Если аутентификация прошла успешно, сервер обрывает соединение (кладет трубку). Естественно, если аутентификация не прошла, сервер кладет трубку и не предпринимает никаких дальнейших действий. Кроме логина пароля, клиент также передает некоторое «волшебное» слово. Если сервер получил это слово, то через определенное время (обычно 25…30 секунд) сервер обратного звонка перезвонит по заранее запрограммированному номеру клиента и установит соединение. После этого можно работать в сети как обычно. Как видите, если раньше для доступа в сеть достаточно было знать имя пользователя и пароль, то сейчас нужно, чтобы компьютер, который пытается войти в сеть, был подключен к телефонной линии с заранее запрограммированным номером.

Например, ваш сосед купил пакет неограниченного доступа к Интернет, а вы каким-то образом узнали его имя пользователя и пароль. При обычном соединении (не callback) вы можете работать в Интернет так же, как и сосед, но, естественно, в разное время. При использовании технологии callback подобное уже не пройдет, потому что система callback перезвонит не к вам домой, а к вашему соседу. Таким образом, система callback является дополнительным барьером для нежелательных гостей нашей сети.

В этой главе будут рассмотрены два варианта настройки системы callback. Второй вариант более простой и удобный для клиентов: для установления соединения не нужно никаких скриптов, но этот способ почему-то не всегда корректно работает. Первый требует специальной настройки клиентов, но работает в большинстве случаев. Я рекомендую вам поступить следующим образом: ознакомиться с обоими способами, а начать настройку сначала со второго способа и, если он у вас не будет работать, перейти к настройке первого.

17.3.2. Настройка сервера. Способ1

Приступим к настройке по первому способу. Как я уже отмечал, этот способ предполагает дополнительную настройку клиентов, что не очень удобно. Например, если вы являетесь администратором компании-провайдера Интернет, и у вас несколько сотен пользователей, настраивать все машины, даже если эта работа оплачивается, не очень хочется. Можно, конечно, распечатать подробные инструкции для клиентов, но ведь существуют и такие пользователи, которые и обычный доступ настроить не в состоянии.

Я предполагаю, что программы mgetty и pppd у вас уже настроены и сам сервер удаленного доступа нормально функционирует. Напомню, что установка и настройка программы mgetty была подробно рассмотрена в предыдущем п. 17.2.

При сборке программы mgetty нужно включить опцию автоматического распознания pap-авторизации. Если вы этого не сделали, сейчас самое время это сделать. Если вы установили mgetty из пакетов RPM, то можете пропустить инструкции по включению этой функции. Хотя если у вас все-таки функция DAUTO_PPP работать не будет, даже при установке из пакетов RPM, вам придется пересобрать программу самостоятельно. Исходные тексты программы mgetty доступны по адресу http://alpha.greenie.net/mgetty/. После распаковки копируем файл policy.h-Dist в файл policy.h. В этом файле нужно сделать определенные изменения, которые подходят для вашей системы. В большинстве случаев нужно изменить расположение каталогов или же вообще ничего не изменять.

Теперь нужно включить автоматическое распознавание pap-авторизации. Для этого в файле Makefile найдите строку:

CFLAGS=-02 -Wall -pipe

и измените ее на:

CFLAGS=-02 –Wall –pipe –DOFIDO –DOAUTO_PPP

В этом же файле можно изменить установочные каталоги, но я не рекомендую этого делать. Оставьте все как есть: SBINDIR=/sbin, BINDIR=/bin

После этого выполните две команды, которые откомпилируют и установят mgetty:

make all 

make install

Теперь перейдите в каталог callback каталога, который содержит исходные тексты mgetty. Скопируйте программу callback в каталог /usr/sbin, а файл callback, config — в каталог /etc/mgetty+sendfax. Отредактируем файл /etc/mgetty+sendfax/login.conf. Раньше (при условии, что вы настраивали сервер удаленного доступа) он у вас содержал примерно такую строку:

/AutoPPP/– a_ppp /etc/ppp/ppplogin

Сейчас эту строку нужно изменить на следующую:

/AutoPPP/ – а_ррр /usr/sbin/pppd noauth –chap +pap –detach

При обнаружении входящего звонка mgetty передаст управление демону pppd. Добавим в файл mgetty.config описание порта, к которому подключен модем (см. листинг 17.13).

Листинг 17.13. Файл mgetty.config

port ttyS0

# режим для приема только данных

# (отключает факсимильные возможности)

dataonly у

# Строка инициализации модема

init-chat "" AT OK 

# Здесь можно задать строку инициализации модема

# Реинициализация модема

force-init-chat "" AT OK

Теперь нужно отредактировать файл /etc/ppp/options.ttyS0 (см. листинг 17.14). В этом файле вы укажите параметры порта ttyS0.

Листинг 17.14. Файл /etc/ppp/options.ttyS0

# Максимальная скорость передачи данных

38400

# Аппаратный контроль передачи

crtscts

# Блокировка устройства ttyS0

lock

# Режим коммутируемой линии

modem

# IP-адреса сервера и клиента соответственно

192.168.1.1:192.168.1.207

# IP-адрес сервера DNS. Этот параметр обязателен для Windows-клиентов

ms-dns 192.168.1.1

# Интервал отправления LCP-пакетов

lcp-echo-interval 20

# Количество не принятых LCP-пакетов

lcp-echo-fallure 6

# Размеры пакетов

mtu 576

mru 576

Интервал отправления LCP-пакетов и количество не принятых LCP-пакетов нужны серверу для определения функционирования клиента, то есть с помощью этих параметров pppd определяет «жив» или нет клиент. Если на протяжении последних 120 секунд (20*6) клиент не прислал подтверждения, то сервер разорвет связь.

Запустите mgetty, как обычно — через файл /etc/inittab:

S0:35:respawn:/sbin/mgetty –D –n 1 /dev/ttyS0 38400

Напомню, что S0 — это просто идентификатор, и вы можете использовать любое другое значение. 3,5 — это уровни запуска. Параметр –D программы mgetty указывает ей отключить все факсимильные возможности модема, а параметр –n 1 заставляет mgetty подымать трубку после первого звонка.

Теперь нужно запустить (перезапустить) mgetty. Для этого выполните команду init q. Также можно воспользоваться командой killall –1 init.

После этого на вашем модеме должна загореться лампочка DTR. Если этого не произошло, смотрите файл /var/log/messages — вы что-то сделали неправильно.

Помните, в самом начале я упомянул некоторое «волшебное» слово. Допустим, что этим «волшебным» словом будет слово «пожалуйста» (please). Вот его-то и нужно записать в файл login.config:

please – – /usr/sbin/callback –s 38400

Я позволил себе немного пошутить относительно выбора этого самого слова. Разницы, конечно, нет никакой — вы можете в качестве этого слова установить все, что вам угодно — даже свое имя. Обычно используются слова «callback» или «cbuser» (callback user). После этого снова следует перезапустить mgetty.

Вот, собственно, в чем заключается первый способ настройки. Сейчас рассмотрим второй способ, а в пункте «Настройка клиентов» будем настраивать Windows-клиенты.

17.3.3. Настройка сервера.Способ 2

Второй способ, как я уже говорил, обладает неоспоримыми преимуществами. Во-первых, вам не нужно будет писать никакие сценарии для Windows-клиентов. Во-вторых, вы сможете самостоятельно определить, какие пользователи будут использовать функцию callback, а какие — нет.

Но и этот способ имеет свои недостатки. Хорошо, что существенный недостаток только один — невозможна авторизация, основанная на сценариях, как в первом способе, а иногда она бывает очень даже полезной. И еще один небольшой недостаток: нужно установить дополнительный патч к демону pppd, а так как патчи не всегда успевают за версиями pppd, то приходится использовать более старую версию pppd.

Сначала нужно выкачать патч к pppd, который реализует поддержку callback. Он доступен по адресу: http://www.pbko.sk/~bobovsky/archiv/pppd-cbcpS-callback/ine-contrib/ppp-2.x.n.CBCP.patch. Числа х и n — это номера версии демона pppd. Выкачивайте самую последнюю версию. Если у вас версии pppd старше, чем версия патча, вам придется установить более старую версию pppd. Различные версии pppd доступны по адресу ftp://ftp.linuxcare.com.au/pub/ppp/

Для обновления pppd (установки патча) используйте команду:

patch –pi < ррр-2.3.10.СВСР.patch

Данная команда обновляет исходные тексты pppd (предварительно их нужно выкачать и установить). Эта же команда создает файлы:

/etc/ppp/callback-users

/etc/ppp/callback-client

/etc/ppp/callback-server

В первом из них нужно будет прописать всех пользователей, которым будет доступна функция обратного звонка. Второй нужен для работы у Linux-клиента функции callback. А третий управляет сервером обратного звонка.

Затем перейдите в каталог с исходными текстами pppd и введите три команды:

./configure 

make 

make install

После установки pppd нужно настроить mgetty. Напомню, что программа mgetty должна быть собрана с поддержкой функции –DAUTO_PPP (автоматическая ррр-авторизация).

Далее отредактируйте файл /etc/mgetty+sendfax/login.conf. Он должен содержать одну строку:

/AutoPPP/ — а_ррр /usr/sbin/pppd auth –chap +pap login callback-server

После этого пропишите своих пользователей в файле callback-users (см. листинг 17.15).

Листинг 17.15. Файл /etc/ppp/callback-users

# User list for callback

# Username option

# option — no callback

# option * or empty user defined

# option other admin defined: this number

# in username * and ? wildcards valid, callback uses the best fit

# Examples:

# zotyo 67435 # user zotyo admin defined, number 67453

# gates – # gates not called back may *

cbuser *

user 320779

* –

Первый пользователь — cbuser. Согласно опции * — это пустое определение пользователя — для тестирования. Второй пользователь user — это реальное определение пользователя, телефон для обратного звонка — 320779. Все остальные пользователи не будут использовать функцию callback — опция «-».

С помощью команды chmod сделайте сценарии callback-server и callback-client исполнимыми. После этого необходимо немного отредактировать скрипт callback-server (см. листинг 17.16).

Листинг 17.16. Файл /etc/ppp/callback-users

#!/bin/sh

# Script callback-server

# Script parameters: delay time in seconds, callback number

DELAY="$1"

NUMBER="$2"

/usr/sbin/chat –v –t 2 "" ATH0

sleep $DELAY

/usr/sbin/chat –v "" AT OK ATS39=5DT$NUMBER CONNECT

Данная конфигурация уже должна работать, но иногда модем не успевает инициализироваться, поэтому после команды sleep $DELAY следует добавить еще одну команду sleep, например, sleep 25. Обратите внимание: используется тональный набор (АТ-команда DT). Напомню, что для импульсного набора используется команда DP (ATDP).

Вот и все, осталось только проверить корректность работы сервера.

17.3.4. Настройка клиентов. Способ 1

 Создайте новое соединение и приступите к его конфигурации. При этом, на вкладке «Тип сервера» выключите все параметры, кроме программного сжатия данных. Единственный допустимый сетевой протокол — TCP/IP (см. рис. 17.2). 

Рис. 17.2. Свойства соединения

Затем создайте в любом текстовом редакторе, например, в Блокноте, сценарий для обратного звонка (листинг 17.17).

Листинг 17.17. Сценарий для callback

proc main

 delay 1

# это ваше «волшебное» слово

 transmit "please^M"

# Ожидание запроса номера

# телефона

 waitfor "phone"

# Передача номера

 transmit "123456^М"

# Ожидание вызова

 waitfor "RING"

# Ожидание соединения модемов

 waitfor "CONNECT" 

endproc

Сохраните свое творение как файл callback.scp. В операционной системе Windows NT данный файл нужно записать в каталог \WINNT\SYSTEM32\RAS. После этого перейдите на вкладку Сценарии и выберите только что созданный сценарий (см. рис. 17.3).

Рис. 17.3. Сценарий callback.scp


Затем перейдите на вкладку Общие и нажмите на кнопку «Настройка». В появившемся окне перейдите на вкладку Подключение и нажмите на кнопку «Дополнительно». Далее, в строке инициализации модема необходимо ввести AT&C1SO=1 (см. рис. 17.4). Команда &С1 устанавливает сигнал CD — без него этот способ работать не будет. Команда SO устанавливает количество звонков, после которых модем клиента будет снимать трубку (1 звонок). Для модема Motorola Premier 33.6 установите такую строку инициализации:

AT&F&C0S0=1Q0V1&D3\V4

Рис. 17.4. Дополнительные параметры связи


Более серьезный пример файла сценария callback вы найдете на прилагаемом компакт-диске в каталоге /mnt/cdrom/doc/callback.

В операционной системе Windows NT обратный вызов настраивается несколько иначе. С этой целью откройте окно запуска удаленного доступа: Пуск→Программы →Стандартные→Удаленный доступ (Start→Programs→Accessories→Remote access). Нажмите на кнопку «Другое» («More»). Выберите пункт меню «Параметры пользователя» («Users preferences») и перейдите на вкладку Ответный вызов («Callback»). Отметьте пункт «Да, требуется ответный вызов по указанным номерам». Номер телефонной линии, на которой установлен модем, можно изменить, нажав на кнопку «Изменить».

17.3.5. Настройка клиентов. Способ 2

Как я уже говорил, для второго способа не нужно создавать никаких сценариев для Windows-клиентов. И, как правило, никаких проблем с настройкой Windows здесь не возникает — нужно просто использовать обыкновенное соединение. Базовая настройка соединения производится так же, как и в первом случае (см. рис. 17.2).

Однако при использовании второго способа могут возникнуть проблемы с настройкой Linux-клиентов. На Linux-клиентах должна быть установлена та же версия pppd, что и на серверах. И так же, как и на сервере, ее необходимо пропатчить. После обновления демона pppd нужно настроить файл /etc/ppp/callback-client (см. листинг 17.18).

Листинг 17.18. Файл /etc/ppp/callback-client

#!/bin/sh

# Script callback-client

# Script parameters: delay time in seconds

DELAY="$1"

# Кладем трубку

/usr/sbin/chat –v –t 2 "" \d+++\d\c OK ATH0 OK

# Вместо параметра $DELAY установите значение, которое подходит

# для вашего модема

# Подойдет delay 2 5 или даже delay 3 0

sleep $DELAY

# Ожидание callback

/usr/sbin/chat –v "" ATZ OK "" RING ATA CONNECT

В файле ppp-on нужно вызывать демон pppd, что можно сделать следующим способом:

/usr/sbin/pppd auth –chap +pap login callback

18