Журнал Системный Администратор, Апрель 2003

Журнал Системный Администратор

Апрель 2003

Цена: $4.5 US

  Подписаться

Зарегистриванные пользователи, пожалуйста следуйте этой ссылке

Версия для печати Вернуться к оглавлению

Настройка Incoming Connections в Linux

Сергей Ропчан

В любой фирме наверняка найдётся один-два человека, которым жизненно необходимо получать почту за пределами «офисной сети». Хорошо, если ваш шеф человек с понятием и свято чтит КЗОТ, тогда он просто скажет: «Ребята, в воскресенье нужно отдыхать!». А если нет? Тогда не остается ничего другого, кроме как отвлечься на пару минут от раскладывания пасьянса и сделать это. Для тех, кто еще не понял – в статье пойдет речь о том, как настроить удаленный доступ к серверу.

Во избежание всевозможных вопросов, в том числе и системных (и да не нарветесь вы на kernel panic), на всякий случай уточняю:

n  В качестве модема использовалась покрытая пылью коробочка с надписью «ZyXEL 228S».

n  Подключалось это к серийному порту почтового сервера.

n  В качестве операционной системы стоял, стоит и будет стоять ASPLinux версии 7.2.

Что ж, приступим.

Шаг 1

После того, как модем должным образом подключен и сконфигурирован, например, утилитой kudzu, попробуем его для начала протестировать на предмет поднятия трубки. Для этого запускаем программу /sbin/mgetty (не путать с mingetty!) следующим образом:

mgetty -D -s 38400 -n 4 ttyS1

То есть указываем mgetty работать с модемом на линии /dev/ttyS1 только в режиме DATA (-D) со скоростью 38400 (-s), а трубку поднимать только после четвертого гудка (-n). Если модем действительно подключен к этой линии (а не к ttyS0, например), то при попытке дозвона вы услышите ровно четыре длинных гудка, прежде чем модем «поднимет трубку».

Шаг 2

Все устройства, с помощью которых можно получить доступ на линуксовый сервер, должны быть должным образом прописаны в файле /etc/inittab. Программа init считывает этот файл и «принуждает» определенные программы отслеживать попытки регистрации в системе через эти устройства. Чтобы каждый раз не запускать mgetty руками, переложим это занятие на широкие плечи init.

Открываем файл inittab и дописываем туда вышеуказанную командную строку следующим образом:

s1:2345:respawn:/sbin/mgetty -D -s 38400 -n 4 ttyS1

То есть даем init ценное указание под кодовым названием s1: активизировать mgetty на четырех уровнях запуска (2345) и «держать его постоянно» (respawn).

Даем команду ps fax|less, чтобы узнать PID процесса init (а вдруг он не равен 1?) и PID mgetty (а вдруг он остался висеть после «ручного» запуска?). Процесс mgetty, если он подгружен, убиваем обычным образом (kill <PID>), а вот init ненавязчиво просим перечитать свой конфигурационный файл при помощи сигнала «SIGHUP»: kill -SIGHUP <PID>. После этого можно попробовать тестирования ради убить несколько раз mgetty – он все равно будет появляться автоматически под новыми PID’ами. Именно подобное поведение процесса, кстати говоря, и подразумевается под параметром respawn в inittab.

Шаг 3

Теперь необходимо сконфигурировать mgetty так, чтобы при успешном коннекте инициировалось PPP-соединение. Для этого открываем конфигурационный файл /etc/mgetty+sendfax/login.conf и пишем там следующее (остальные строчки конфига лично я удалил):

/AutoPPP/ --ppp /usr/sbin/pppd auth -chap +pap login modem crtscts lock proxyarp

 

/AutoPPP/ расшифровывается как «обнаруживать PPP-соединение автоматически». Далее следует путь к программе, которую нужно запустить при обнаружении попытки установить PPP-соединение и её параметры:

n  auth означает, что перед тем как пустить клиента в сетку, необходимо провести авторизацию;

n  -chap – не проводить chap-авторизацию;

n  +pap – проводить pap-авторизацию;

n  login – использовать для pap-авторизации базу зарегистрированных в системе пользователей;

n  modem – «общаться с модемом» (ждать CD, подавать DTR);

n  crtscts – использовать хардварный flow control (RTS/CTS) при работе с серийным портом;

n  lock – создавать lock-файл, дабы доступ к устройству был эксклюзивным;

n  proxyarp – «добавлять» хост клиента в локальную сеть.

Шаг 4

Чтобы клиент успешно прошел авторизацию, необходимо сделать две вещи: добавить пользователя в систему (adduser <username>, passwd <username>) и добавить регистрационную информацию в файл /etc/ppp/pap-secrets.

#Secrets for authentication using PAP

#client   server secret   IP addresses

dialup    *      qwerty   192.168.1.254

Под client подразумевается имя пользователя; * server говорит о том, что пользователь под этим именем может подключаться к любым сервисам; secret – это пароль (он должен быть тем же самым, что и при добавлении пользователя в систему); IP addresses – IP-адрес, под которым дозвонившийся клиент будет работать в сети.

Все, теперь можно тестировать mgetty по полной программе.

Шаг 5

Лог mgetty находится в файле mgetty.log.ttyS1 каталога /var/log и выглядит он следующим образом (я пронумеровал строки, чтобы было легче их комментировать).

00 —

01 09/23 14:34:28 yS1  mgetty: experimental test release 1.1.26-Apr16

02 09/23 14:34:28 yS1  check for lockfiles

03 09/23 14:34:28 yS1  locking the line

04 09/23 14:34:28 yS1  lowering DTR to reset Modem

05 09/23 14:34:29 yS1  send: \dATQ0V1H0[0d]

06 09/23 14:34:29 yS1  waiting for «OK» ** found **

07 09/23 14:34:30 yS1  send: ATS0=0Q0&D3&C1[0d]

08 09/23 14:34:30 yS1  waiting for «OK» ** found **

09 09/23 14:34:30 yS1  waiting...

10 09/23 14:35:25 yS1  wfr: waiting for «RING»

11 09/23 14:35:25 yS1  wfr: waiting for «RING»

12 09/23 14:35:30 yS1  wfr: waiting for «RING»

13 09/23 14:35:35 yS1  wfr: waiting for «RING»

14 09/23 14:35:40 yS1  send: ATA[0d]

15 09/23 14:35:40 yS1  waiting for «CONNECT» ** found **

16 09/23 14:35:59 yS1  send:

17 09/23 14:35:59 yS1  waiting for «_» ** found **

18 09/23 14:36:01 yS1  clean_line: only 500 of 5277 bytes logged

19 09/23 14:36:11 yS1  login.config: max. 9 command line arguments possible

20 09/23 14:36:11 ##### data dev=ttyS1, pid=2307, caller=’none’, conn=’38400/V.34 28800/None’, name=’’, cmd=’/usr/sbin/pppd’, user=’/AutoPPP/’

 

n  01–03 – блокировка линии.

n  04–08 – инициализация модема.

n  09 – ждем-c, пока кто-нибудь позвонит.

n  10–14 – поднятие трубки после четырех гудков.

n  15–18 – обмен информацией.

n  19 – считывание конфига.

n  20 – поднятие PPP и, собственно, клиент получил доступ к серверу.

Теперь, когда поставленная задача решена, самое время подумать о «наворотах».

Во-первых, давать ли пользователю доступ ко всей «офисной сети» или ограничить его коннектом с почтовым сервером?

Во-вторых, если в вашей сети есть пользователи, считающие себя хакерами, то хранение паролей в открытом виде – не очень хороший способ.

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




Все права зарезервированы. Этот материал принадлежит или лицензирован компании PLARANA INC. Только для частного использования. Любое распространение запрещено без письменного разрешения PLARANA INC
Версия для печати Вернуться к оглавлению