• 17.1. Настройка шлюза
  • 17.1.1. Настройка ядра
  • 17.1.2. Настройка сети
  • 17.1.3. Конфигурирование IpChains
  • 17.1.4. Настройка DNS
  • 17.1.5. Настройка Squid
  • 17.2. Настройка Dial-In сервера
  • 17.2.1. Установка программного обеспечения
  • 17.2.2. Настройка mgetty
  • 17.2.3. Настройка ррр
  • 17.2.4. Включение IP Forwarding
  • 17.2.5. Второй вариант настройки
  • 17.2.6. Если что-то не работает…
  • 17.2.7. Настройка Windows-клиентов
  • 17.2.8. Дополнительная литература
  • 17.3. Обратный звонок
  • 17.3.1. Что такое callback?
  • 17.3.2. Настройка сервера. Способ1
  • 17.3.3. Настройка сервера.Способ 2
  • 17.3.4. Настройка клиентов. Способ 1
  • 17.3.5. Настройка клиентов. Способ 2
  • 17

    Практические примеры.

    Обратный звонок

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

    17.1. Настройка шлюза

    Сначала определим функции, которые должен выполнять шлюз:

    1. Поддержка связи с провайдером.

    2. Маршрутизация IP-пакетов между локальной сетью и сетью Интернет для выхода пользователей локальной сети в Интернет.

    3. Обеспечение IP-сервиса.

    4. Защита локальной сети от несанкционированного доступа из Интернет.

    Конфигурирование шлюза в операционной системе Linux состоит из следующих этапов:

    1. Настройка ядра.

    2. Настройка сети.

    3. Конфигурирование IpChains.

    4. Настройка DNS.

    5. Настройка Squid.

    Для определенности будет использоваться два сетевых интерфейса — eth0, идущий к провайдеру, и eth1 — во внутренней сети. Пусть интерфейсу eth0 назначен IP-адрес 111.111.111.111, a eth1 — 192.168.1.1

    17.1.1. Настройка ядра

    Скорее всего, вам придется перекомпилировать ядро. При этом должны быть активизированы следующие опции:

    Networking support (CONFIG_NET) [у]

    TCP/IP networking (CONFIG_INET) [у]

    IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y]

    IP multicasting (CONFIG_IP_MULTICAST) [у]

    IP firewalling (CONFIG_IP_FIREWALL) [у]

    IP accounting (CONFIG_IP_ACCT) [y]

    Можно также поэкспериментировать с набором опций Advanced Router, если данные функции есть в вашем ядре. Более подробно о процессе компилирования ядра вы можете прочитать в следующей главе.

    17.1.2. Настройка сети

    После перекомпилирования ядра нужно включить IP-forwarding. Сделайте это при помощи следующей команды:

    # echo "1" > /proc/net/ip_forward

    Настройку сетевых карт произведите с помощью программы netconf. О том, как это сделать, было рассказано в гл. 8.

    17.1.3. Конфигурирование IpChains

    Теперь приступим к настройке IPChains. Создайте цепочку, через которую пойдет весь трафик от провайдера:

    ipchains –N prov

    ipchains –A input –i eth0 –j prov

    Запретите ip-spoofing:

    ipchains –A prov –s 192.168.1.1/16 –1 –j DENY

    ipchains –A prov –s 127.0.0.1/8 –1 –j

    DENY Запретите Telnet снаружи:

    ipchains –A prov –p tcp –destination-port 23 –j REJECT

    Если вы не хотите, чтобы samba «светилась» наружу, запретите порты 137-139:

    ipchains –A prov –p tcp –destination-port 137 –j REJECT

    ipchains –A prov –p udp –destination-port 137 –j REJECT

    To же самое проделайте для портов 138 и 129.

    О настройке samba вы можете прочитать в Samba-HOWTO.

    Создайте цепочку для подсчета трафика:

    ipchains –N trafin

    ipchains –I input –i eth0 –s ! 123.123.123.0/24 –p all –j trafin

    ipchains –A trafin –d 123.123.123.123

    Для того, чтобы ваши правила были постоянными (при перезагрузке машины правила IpChains теряются), используйте скрипты ipchains-save и ipchains-restore. Настройте свои правила, а затем выполните команду:

    # ipchains-save > /etc/ipchains.rules

    Далее создайте скрипт, подобный тому, что приведен в листинге 17.1.

    Листинг 17.1. Скрипт управления пакетной фильтрацией

    #!/bin/sh

    # Скрипт управления пакетной фильтрацией.

    # Если правил нет, то ничего не делать.

    [-f /etc/ipchains. rules] || exit 0

    case "$1" in

    start)

     echo –n "Включение пакетной фильтрации:"

     /sbin/ipchains-restore </etc/ipchains.rules || exit 1

     echo 1 > /proc/sys/net/ipv4/ip_forward

     echo "." ;;

    stop)

     echo –n "Отключение пакетной фильтрации:"

     echo 0 >/proc/sys/net/ipv4/ip_forward

     /sbin/ipchains –X

     /sbin/ipchains –F

     /sbin/ipchains –P input ACCEPT

     /sbin/ipchains –P output ACCEPT

     /sbin/ipchains –P forward ACCEPT

     echo "." ;;

    *)

     echo "Использование: /etc/init.d/packetfilter {start|stop}"

     exit 1 ;;

    esac

    exit 0

    Этот скрипт добавьте в сценарии загрузки системы.

    17.1.4. Настройка DNS

    Напомню, что основной задачей сервера доменных имен (Domain Name System) является преобразование мнемонических имен машин в IP-адреса и обратно. Обычно сервер DNS устанавливается на шлюзе, который используется для выхода в Интернет.

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

    # ps –ax | grep named

    Если он запущен, его нужно остановить (с помощью ndc), а если он вообще не установлен, то придется установить пакет bind. Для работы сервера должен быть активизирован сервис network.

    Теперь приступим к непосредственной настройке сервера. Основная информация о параметрах сервера содержится в файле /etc/named.conf (см. листинг 17.2).

    Листинг 17.2. Файл named.conf

    logging {

     category cname {null; } ;

    };

    options {

     directory "/var/named";

    };

    zone "." {

     type hint;

     file "named.ca";

    };

    zone "dhsilabs.com" {

     type master;

     file "dhsilabs.com";

     notify no;

    };

    zone "0.0.127.in-addr.arpa" {

     type master;

     file "named. local";

    };

    zone "1.168.192.in-addr.arpa" {

     type master;

     file "192.168.1";

     notify yes;

    };

    Основной каталог сервера — /var/named. В нем сервер будет искать файлы dhsilabs.com.named.local, 192.168.1, named.ca (см. листинги 17.3, 17.4, 17.5). Обслуживаемая нашим сервером зона (домен) — dhsilabs.com (см. листинг 17.3). Файл named.са — корневой кэш — содержит информацию о корневых серверах DNS. Позже займемся его обновлением.

    Листинг 17.3. Файл dhsilabs.com (для преобразования имен в IP-адреса)

    @    IN SOA den.dhsilabs.com. hostmaster.dhsilabs.com. (

            93011120 ; серийный номер

            10800 ; обновление каждые 3 часа

            3600 ; повтор каждый час

            3600000 ; хранить информацию 1000 часов

            86400 ) ; TTL записи — 24 часа

         IN NS delden.dhsilabs.com.

         IN А 192.168.1.1

         IN MX 150 den.dhsilabs.com.

    den  IN A 19:192.168.1.1

         IN HINFO INTEL CELERON (LINUX)

         IN MX 100 den

         IN MX 150 evg.dhsilabs.com.

    ns   IN CNAME den.dhsilabs.com.

    www  IN CNAME den.dhsilabs.com.

    ftp  IN CNAME den.dhsilabs.com.

    mail IN CNAME den.dhsilabs.com.

    evg  IN A 19:192.168.1.2

         IN MX 100 den.dhsilabs.com.

    localhost IN A 12'127.0.0.1

    где: NS — обозначает name server;

     A — IP-адрес;

     MX — почтовик <приоритет>. Чем ниже значение, тем выше приоритет;

     HINFO — сведения об аппаратном обеспечении (заполнять не рекомендую);

     ТХТ — прочие сведения;

     CNAME — каноническое имя, т.е. если вы в окне браузера введете http://www.dhsilabs.com, то обращение будет произведено к den.dhsilabs.com. Обратите внимание на точку в конце:

    @ IN SOA den.dhsilabs.com. hostmaster.dhsilabs.com.

    (Если точка не указана, то к имени будет добавлено имя домена (т.е. dhsilabs.com)).

    Листинг 17.4. Файл named.local

    @ IN SOA dhsilabs.com. root.dhsilabs.com. (

         199609203 ; серийный номер

         28800 ; обновление каждые 8 часов

         7200 ; повтор каждые 2 часа

         604800 ; хранить информацию 168 часов (7 дней)

         86400) ; TTL записи — 24 часа

         NS dhsilabs.com.

    1    PTR localhost.

    Листинг 17.5. Файл 192.168.1 или файл обратного соответствия

    @ IN SOA den.dhsilabs.com. hostmaster.dhsilabs.com. (

         93011120 ; серийный номер

         10800 ; обновление каждые 3 часа

         3600 ; повтор каждый час

         3600000 ; хранить информацию 1000 часов

         86400 ) ; TTL записи — 24 часа

    @ IN NS den.dhsilabs.com

    1 IN PTR den.dhsilabs.com

    2.1.168.192 IN PTR evg.dhsilabs.com

    Запись PTR используется для преобразования IP-адреса в имя. Если указан не весь IP:

    1 IN PTR den.dhsilabs.com

    то к нему будет добавлен адрес подсети 1.168.192. Обратите внимание: IP-адреса указываются в обратном порядке!

    17.1.5. Настройка Squid

    Установите пакет squid. Осталось настроить и запустить его. Для этого нужно отредактировать файл конфигурации /etc/squid/squid.conf. Сначала укажите адрес прокси провайдера:

    cach_peer proxy.your_isp.com

    Задайте объем ОЗУ, который будет использовать прокси-сервером:

    cache_mem

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

    Далее укажите, где будет располагаться кэш (первое число — это количество Мб для кэша):

    cache_dir /usr/local/squid 2048 16 256

    Затем укажите хосты, из которых разрешен доступ к прокси-серверу:

    acl allowed_hosts src 192.168.1.0/255.255.255.0

    acl localhost src 127.0.0.1/255.255.255.255

    После этого пропишите пользователей, которым разрешено пользоваться squid (в приведенном примере это den, admin, developer):

    ident_lookup on

    acl allowed_users user den admin developer

    http_access allow allowed_users

    http_access deny all

    Тэги maxium_object_size и maxium_object устанавливают ограничения на размер передаваемых объектов.

    В заключении хочу дать один хороший совет: из соображений безопасности отредактируйте свои /etc/services и /etc/inetd.conf и отключите неиспользуемые сервисы – это уменьшит вероятность взлома вашей системы. Вот, в общем-то, и все.

    17.2. Настройка Dial-In сервера

    17.2.1. Установка программного обеспечения

    В качестве операционной системы, естественно, будем использовать ОС Linux. Метод настройки, рассмотренный в этой главе, подойдет для любого дистрибутива. Также вам потребуются пакет ррр версии 2.3.x (желательно самая новая версия) и пакет mgetty-1.1.x. Пакет mgetty должен быть собран с опцией –DAUTO_PPP. Если это не так, то его нужно пересобрать.

    Я использую ppp-2.4.0-3mdk.i586.rpm и mgetty-1.1.22-2mdk.i586.rpm, ОС Linux Mandrake 7.2. Если вы используете RedHat/Mandrake, установить ррр и mgetty можно с помощью команд:

    # mount –t iso9660 /dev/hdd /mnt/cdrom

    # cd /mnt/cdrom/Mandrake/RPMS

    # rpm –Uvh mgetty*

    # rpm –Uvh ppp*

    Некоторые замечания:

    1. CD-ROM является устройством /dev/hdd (или Secondary Slave).

    2. Используется Linux Mandrake. При использовании Red Hat пакеты находятся в /mnt/cdrom/RedHat/RPMS.

    3. He используется supermount. Если у вас supermount активен, первую команду вводить не нужно.

    4. Третья и четвертая команды устанавливают все семейство mgetty и ррр. При использовании такого подхода устанавливаются все файлы — и никакой заботы! Но при этом вы можете установить и только то, что вам нужно.

    17.2.2. Настройка mgetty

    При корректной сборке или установке пакетов mgetty и ррр у вас должны быть следующие файлы:

    Каталог /etc/mgetty+sendfax:

    dialin.config

    login.config

    mgetty.config

    Каталог /etc/ppp:

    auth-up

    auth-down

    chap-secrets

    ip-up

    ip-down

    options

    pap-secrets

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

    Файл /etc/mgetty+sendfax/dialin.config обычно пустой — в нем все закомментировано. Файл /etc/mgetty+sendfax/login.config должен содержать строчку:

    /AutoPPP/– a_ppp /etc/ppp/ppplogin

    Убедитесь, что эта строчка не закомментирована. Если вы хотите, чтобы имена пользователей записывались в журналы (log-файлы), отредактируйте

    эту строку следующим образом:

    /AutoPPP/– /etc/ppp/ppplogin

    Затем создайте файл /etc/ppp/ppplogin (см. листинг 17.6).

    Листинг 17.6. Файл/etc/ppp/ppplogin

    mesg n

    tty –echo

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

    В некоторых версиях ррр вместо –chap нужно писать refuse-chap, а вместо +рар писать require-pap. Продолжая настройку, сделайте /etc/ppp/ppplogin исполняемым:

    # chmod +x /etc/ppp/ppplogin

    В приведенном примере используется РАР-аутентификация с использованием пароля из файла /etc/passwd (см. ниже). Файл /etc/mgetty+sendfax/mgetty.config должен быть примерно такой, как в листинге 17.7.

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

    # For US Robotics Sportster 28.8 with speaker off

    port ttyS0

    speed 28800

    data-only у debug 3

    init-chat "" ATZ OK AT&F1M0E1Q0S0=0 OK

    answer-chat "" ATA CONNECT \c \r

    # For Practical Peripheral 14.4 with fax disabled and prolonged

    # carrier wait time (90 sec)

    port ttyS1

    speed 14400

    data-only у

    debug 3

    init-chat "" ATZ OK AT&F1M0E1Q0S0=0S7=90+FCLASS=0 OK

    answer-chat "" ATA CONNECT \c \r

    # For USRobotics V.Everything

    port ttyS2

    speed 57600

    data-only у

    debug 3

    init-chat "" AT OK ATS7=50S0=1+S62=3+S64=2S39=10 OK

    В нем определены параметры для трех модемов: US Robotics Sportster 28.8, Practical Peripheral 14.4, USRobotics V.Everything. Для ZyXEL U336E можно использовать такие параметры:

    init-chat "" ATZ OK AT&F1M0E1Q0S0=0S OK

    answer-chat "" ATA CONNECT \c \r

    Данные параметры вы можете узнать из документации по вашему модему. Очень рекомендую прочитать ее перед установкой сервера входящих звонков. Теперь нужно изменить файл /etc/inittab, как это показано в листинге 17.8.

    Листинг 17.8. Фрагмент файла inittab

    # Run gettys in standard runlevels

    1:2345:respawn:/sbin/mingetty tty1

    2:2345:respawn:/sbin/mingetty tty2

    3:2345:respawn:/sbin/mingetty tty3

    4:2345:respawn:/sbin/mingetty tty4

    5:2345:respawn:/sbin/mingetty tty5

    6:2345:respawn:/sbin/mingetty tty6

    # эти строки нужно добавить

    S0:2345:respawn:/sbin/mgetty –x 3 ttyS0

    S1:2345:respawn:/sbin/mgetty –x 3 ttyS1

    S2:2345:respawn:/sbin/mgetty /dev/ttyS2

    S0, S1, S2 — это просто идентификаторы. Вы можете использовать вместо них любое имя. Нужно только назначить отдельное имя для каждого порта. Имена S0…S2 я использовал для наглядности.

    Теперь запустите mgetty (перед выполнением этой команды следует включить модемы):

    # init q

    Если при выполнении этой команды модемы не подключены или выключены, в файле /var/log/mesages вы получите сообщение об этом. Если на модеме загорелась лампочка TR, то все настройки выполнены правильно и mgetty «подхватил» модем.

    17.2.3. Настройка ррр

    Обычно для каждого порта в каталоге /etc/ррр создается файл options.ttySx, где х — номер порта (см. листинг 17.9).

    Листинг 17.9. Файл options

    lock login

    auth

    netmask 255.255.255.0

    modem

    crtscts

    refuse-chap

    require-pap

    mtu 576

    mru 576

    proxyarp

    myhost:ppp01

    ms-dns CCC.CCC.CCC.CCC

    Общие настройки для всех портов можно вынести в файл /etc/ppp/options. Имя myhost замените на реальное имя вашего сервера входящих звонков.

    ppp01 — это произвольно выбранное имя виртуального узла абонента. Вы можете использовать другие имена, например, igor, denis и тому подобное.

    Имена узлов должны быть уникальными, т.е. если вы используете ррр0 в options.ttyS0, то в options.ttyS1 нужно использовать ррр01 и так далее.

    Опция ms-dns определяет сервер DNS для клиентов Microsoft. Укажите здесь IP-адрес сервера DNS вашей сети.

    Используйте опцию proxyarp, так как IP-адреса будут назначаться внутри broadcast ваших сетевых карт локальной сети. При этом демон pppd будет делать вид, что виртуальный хост находится внутри вашего сегмента ethernet. Небольшая деталь: вместо опции refuse-chap можно писать –chap, а вместо require-pap писать +рар.

    Теперь отредактируйте файл /etc/ppp/pap-secrets (см. листинг 17.10).

    Листинг 17.10. Файл /etc/ppp/pap-secrets

    # Secrets for authentication using PAP

    # client server secret IP addresses

      *      *      ""     192.168.0.11

      *      *      ""     192.168.0.12

      *      *      ""     192.168.0.13

    В приведенном примере используются три модема для входящих звонков, поэтому нужно сделать три записи. Пароли пользователей находятся в файле/etc/passed(или /etc/shadow). Соответственно внесите изменения в свой /etc/hosts (см. листинг 17.11).

    Листинг 17.11. Файл /etc/hosts

    192.168.0.11 ppp01 ppp01.mydomain.com

    192.168.0.12 ррр02 ppp02.mydomain.com

    192.168.0.13 ррр03 ppp03.mydomain.com

    Имя mydomain.com замените на реальное имя домена. По большому счету эти записи не мешало бы также внести и в локальную зону DNS. Теперь осталось установить нужные права доступа для /usr/sbin/pppd:

    # chmod u+s /usr/sbin/pppd

    17.2.4. Включение IP Forwarding

    Разрешение пересылки IP устанавливается в файле /etc/sysconfig/network примерно так: FORWARD_IPV4=yes. При этом ваше ядро должно быть скомпилировано для поддержки IP_FORWARD.

    Для включения IP Forwarding введите команду:

    # echo "1" > /proc/net/ip_forward

    В некоторых дистрибутивах IP Forwarding включается несколько иначе. Если в вашем дистрибутиве есть программа netconf, используйте ее для включения IP Forwarding, если ее нет, изучите документацию по вашему дистрибутиву.

    Теперь вы готовы к работе!

    17.2.5. Второй вариант настройки

    Этот вариант может оказаться даже более простым, чем первый. Настройки файлов /etc/options и /etc/options.ttySx остаются прежними, но строку myhost:pp01 нужно заменить на строку вида:

    Server_IP:Client_IP

    например,

    192.168.0.1:192.168.0.11

    Теперь нужно изменить содержание файла /etc/ppp/pap-secrets (листинг 17.12).

    Листинг 17.12. Фрагмент файла /etc/ppp/pap-secrets

    #

    user1 сервер.домен "" *

    user2 сервер.домен "" *

    #

    где: user1 — это имя пользователя, зарегистрированного в системе;

     сервер.домен — это имя сервера входящих звонков;

     "" — пароли брать из /etc/passwd (/etc/shadow);

     * – абонент может аутентифицироваться с любого IP.

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

    Внимание!

    Пароли в /etc/ppp/pap-secrets содержатся в открытом виде и не кодируются с помощью алгоритма MD5 (или DES), как в файле /etc/shadow  (/etc/passwd). Файл /etc/hosts править не нужно.

    Вот, собственно, и все.

    17.2.6. Если что-то не работает…

    Лучший совет в этом случае — смотрите файл /var/log/messages. В нем много всего интересного. Если у вас появляются сообщения вида:

    modprobe: can't locate module char-major-24

    то надо прописать в файле /etc/conf.modules следующие строки:

    alias ppp-compress-21 bsd_comp

    alias ppp-compress-24 ppp_deflate

    alias ppp-compress-26 ppp_deflate

    17.2.7. Настройка Windows-клиентов

    Рассмотрим наиболее распространенную ситуацию, когда для подключения к нашему серверу используется обыкновенное удаленное соединение. IP-адрес клиента и адрес сервера DNS назначается провайдером, то есть нашим сервером. При этом в свойствах соединения нужно указать следующие данные (см. рис. 17.1):

    • Тип сервера удаленного доступа: РРР.

    • Дополнительные параметры: только «Программное сжатие данных».

    • Допустимые протоколы: только «TCP/IP». 

    Рис. 17.1. Параметры РРР 

    17.2.8. Дополнительная литература

    Из дополнительной литературы рекомендую эту книгу, если вы ее еще не прочитали, а также руководства по протоколу РРР, системе доменных имен DNS, и руководство NET3-HOWTO. Все эти руководства доступны на моей домашней страничке — http://dkws.narod.ru, а также на прилагаемом компакт-диске.

    17.3. Обратный звонок

    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








    Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх