root.elima.ru
Мертвечина
Статьи и книгиЛокальные вычислительные сети (ЛВС)

Сборка локальной сети

Часто одной из целей создания локальной сети может быть совместный доступ нескольких пользователей в Internet – в противном случае придется по очереди садиться за ПК с модемом, либо, что ничуть не лучше, таскать модем с машины на машину.

Использовать "голую" Windows для организации доступа в Internet – чересчур смелое решение.

Куда лучше установить на клиентскую машину с модемом какой-нибудь прокси-сервер для Windows 9x. Однако как бы хорошо ни была написана подобная программа, она неизбежно будет мешать пользователю данного ПК – тем более на машинах со слабым процессором и недостаточным объемом памяти. А ведь это отнюдь не редкость в офисных компьютерах. К тому же медленный стек TCP/IP и полудуплексный режим работы с COM-портом не способствуют эффективности использования Windows в качестве Internet-шлюза.

Соберем металлолом!

В любом офисе найдется старая "четверка" или Pentium, в силу малого объема и устаревшего типа памяти (SIMM-модули) непригодная к использованию и модернизации. Ставить Windows на нее бессмысленно; кроме того, на таком антиквариате и винчестер обычно соответствующий – когда он вообще есть. Но именно такое "ржавое железо" превосходно подойдет на роль Internet-шлюза, если на нее поставить Linux (или FreeBSD – дело вкуса) и настроить соответствующие службы и приложения.

Определим функциональность нашего Internet-шлюза. Во-первых, нужна трансляция сетевых адресов для коллективного доступа в Сеть. Во-вторых, фильтрация IP-пакетов (фильтрующий брандмауэр) с целью защиты внутренней сети от несанкционированного доступа из Internet. Если нужно, ограничивается доступ в Сеть для внутренних пользователей. В-третьих, кэширование DNS-запросов с целью снижения загрузки внешнего канала. И, наконец, для удаленного управления системой необходим Telnet, а лучше – SSH-сервер. Это, пожалуй, необходимый минимум.

Для сетей, в которых десяток или более клиентов имеют доступ в Web, предпочтительно использование кеширующего HTTP-прокси-сервера SQUID. Кроме того, в роли кеширующего HTTP-прокси может выступать HTTP-сервер Apache.

В сетях с большим количеством клиентов (особенно если среди пользователей есть владельцы ноутбуков) иногда применяется динамическое выделение IP-адресов. Для этого используется DHCP-сервер – он не отнимет у Linux-машины много ресурсов.

Сделать или научиться?

Задачу создания Internet-шлюза на базе Linux можно решить, используя два подхода. Первый – как можно быстрее получить работающее решение, не углубляясь в детали настройки. Этот подход предполагает применение однодискетных мини-дистрибутивов Linux, которые не требуют от пользователя героических усилий по компиляции ядра Linux, настройке пакета PPP, пакетного фильтра и маскарадинга. Наличие в таких дистрибутивах меню-ориентированной утилиты предварительной настройки системы позволяет свести к нулю общение пользователя с "голой" Linux.

Протоколы и порты

Протокол IP

Протокол межсетевого уровня, в иерархии сетевых протоколов он следует сразу за физическим и канальным уровнями (например Ethernet). Обеспечивает передачу данных в сетях, состоящих из подсетей с разными физическими параметрами.

Протокол UDP

UDP (User Datagram Protocol – протокол пользовательских датаграмм) – один из двух основных протоколов транспортного уровня, расположенных непосредственно над IP. Не гарантирует доставку данных от отправителя к получателю, обеспечивает лишь проверку целостности переданных данных.

Протокол TCP

TCP (Transmission Control Protocol – протокол управления передачей данных) – протокол транспортного уровня. В отличие от UDP, обеспечивает гарантированную доставку данных, устанавливая двухстороннее соединение "отправитель-получатель".

Порты

Взаимодействие между прикладными процессами и модулями TCP и UDP осуществляется через TCP– и UDP-порты. Порты нумеруются, начиная с нуля. Прикладной процесс, предоставляющий некоторые услуги другим прикладным процессам (сервер), ожидает поступления запросов на предоставление услуг в порт, специально выделенный для этих услуг. В принципе одни и те же порты могут использоваться разными приложениями, однако существует общепринятый список соответствий номеров TCP– и UDP-портов различным приложениям (RFC1700, a в Linux – файл /etc/services).

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

Подготовка сети

Internet построен на протоколе IP, точнее, семействе протоколов TCP/IP. Обеспечивая доступ в Internet из локальной сети, логично начать с перевода на TCP/IP самой локальной сети.

Обычно в локальных сетях используются специально зарезервированные диапазоны IP-адресов, не предназначенные для использования в Internet (подробности – в RFC 1918).

Чаще всего в локальных сетях используются следующие параметры: адрес сети 192.168.0.0 и маска подсети 255.255.255.0. При этом широковещательный адрес (для обращения ко всем хостам сети) – 192.168.255.255, а адреса хостов – любые от 192.168.0.1 до 192.168.0.254.

Обычно, когда несколько ПК с Win9x стихийно объединяют в сеть, по умолчанию используется протокол Microsoft NetBEUI. В этом случае самый простой (но не самый лучший) вариант "внедрения" TCP/IP – задать IP-адрес машины-шлюза и маску подсети (обычно по умолчанию – 192.168.0.1, маска 255.255.255.0), остальные адреса раздавать с помощью сервера DHCP.

Хлопот – минимум. Протокол NetBEUI останется для обмена файлами, а в настройках TCP/IP Windows-машин нужно будет лишь указать IP-адрес DNS-сервера Internet-провайдера и включить опцию Obtain an IP-address automatically.

Однако лучший вариант – удалить в клиентских Windows поддержку NetBEUI, раздать машинам постоянные IP-адреса (например, из подсети 192.168.0.0), создать на одной из машин в каталоге C:\Windows по образцу lmhosts.sam файл С:\Windows\lmhosts и скопировать его на остальные машины. (Файлы lmhosts необходимы, чтобы Windows-машины видели друг друга в Сетевом окружении при использовании TCP-IP без NetBEUI и без WINS-сервера в сети.) При этом Ethernet-интерфейсу нашего мини-маршрутизатора можно дать любой из указанных выше адресов, например 192.168.0.1.

"Пять в одной"

Вернемся к базовому набору функций шлюза. И трансляция сетевых адресов, и фильтрация пакетов реализованы внутри ядра Linux. Кеширующий DNS-сервер, Telnet– или SSH-сервер и простой HTTP-сервер также не занимают много дискового пространства. В результате с помощью определенных ухищрений Linux-систему с описанной функциональностью и достаточным выбором драйверов сетевых плат можно в упакованном виде уместить на дискету.

Первым таким мини-дистрибутивом, ориентированным на решение практических задач, стал Linux Router Project (LRP). Он предназначался для создания маршрутизатора на базе компьютера без жесткого диска.

Как он работает? Дискета с файловой системой FAT содержит загрузчик, ядро Linux с необходимыми драйверами устройств (в том числе сетевых плат), упакованную файловую систему root (конфигурационные файлы и системные утилиты) и архив lrp-пакетов, обеспечивающих дополнительные функции (в частности, пакет PPP и сетевые сервисы). Когда дискета загружается, архивы распаковываются на созданный в процессе загрузки системы виртуальный диск (/dev/ram0), а затем виртуальный диск монтируется как root.

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

LRP и подобные ему системы самодостаточны. Linux требуется лишь для сборки дистрибутива и настройки/компиляции ядра. Необязательно знать команды оболочек Linux, чтобы использовать хорошо собранный мини-дистрибутив, – система меню имеет подробные комментарии к каждому пункту. Хотя неплохо хотя бы в общих чертах понимать, как работают Unix и стек TCP/IP.

Читатель может подыскать мини-дистрибутив на свой вкус на сайте linux.org/dist/english.html, в разделе Mini and Specialty Distributions. Под нашу задачу подходят, к примеру, Coyote Linux и Freesco.

Бесплатная "киска"

Лучшим мини-дистрибутивом для начинающего, пожалуй, можно назвать Freesco Сергея Сторожевых. (Название не имеет отношения к SCO Unix, это акроним от Free Cisco router.) Freesco не имеет конфигуратора загрузочной дискеты, как Coyote Linux, и устанавливается на дискету "как есть", с помощью командного файла make_fd.bat. Вся настройка – после загрузки Linux (в приглашении нужно ввести команду setup).

Помимо маскарадинга и пакетного фильтра, DHCP– и Telnet-сервера (только одно соединение – для администрирования), во Freesco есть кеширующий DNS-сервер, HTTP-сервер для удаленного администрирования через Web-браузер, сервер печати и сервер удаленного доступа для дозвона в сеть "извне".

Прежде чем загружать Freesco и запускать setup, определитесь с функциональностью вашего Internet-шлюза. Для небольшой сети вам вряд ли понадобится DHCP, Time-сервер и сервер удаленного доступа (Remote Access Server, RAS). Выпишите все, что вам понадобится: IP-адрес, выделенный для Ethernet-интерфейса нашего шлюза, адрес и маску подсети, IP-адреса DNS-серверов провайдера, логин и пароль для доступа к провайдеру.

Естественно, нужен номер телефона провайдера. Перед номером необходимо ввести T или P в зависимости от типа набора номера (тоновый или импульсный). Если вы звоните из офиса через мини-АТС через "девятку" или "единицу", то используйте символ W: например, T9W4900490 или P1W4900490.

В качестве метода аутентификации пользователя Freesco (точнее, стандартный пакет PPP) предлагает три опции: script, PAP и CHAP. Провайдеры за редким исключением применяют протокол аутентификации PAP.

Еще один момент – режим работы сервера diald, с помощью которого Freesco осуществляет дозвон провайдеру для установки PPP-соединения. Можно использовать соединение по запросу и разрыв его через заданный промежуток времени отсутствия сетевой активности.

Однако для обслуживания маленькой локальной сети лучше определить "вечное" соединение, а при отсутствии необходимости в Internet-доступе просто отключать модем. Сервер diald будет повторять попытки дозвона до следующего включения модема. В результате администрирование однажды настроенной с помощью Freesco setup системы сведется к включению модема при необходимости открытия доступа в Сеть.

Freesco может работать не только маршрутизатором доступа в Internet по дозвону (Modem-to-Ethernet router in dial-on-demand mode). В ней есть поддержка выделенной линии и режима моста (Bridge mode), когда Freesco соединяет две или три Ethernet-сети, пропуская в соседнюю сеть только те Ethernet-кадры, которые адресованы машинам этой сети.

Кстати, Freesco можно запросто установить на жесткий диск – для этого нужно создать ту же самую загрузочную дискету, но после загрузки Linux ввести в приглашении не setup, а move2hdd. Предварительно на жестком диске нужно создать и сделать активным раздел с файловой системой FAT (не FAT32) – именно на него будут записаны файлы Freesco. Удалите из дисковода дискету Freesco и перегрузитесь. В приглашении введите setup и действуйте, как описано выше.

Если все, что вам нужно, – быстро создать работающий Internet-шлюз, Freesco вполне соответствует этой задаче. Если помимо этого есть желание ознакомиться с Linux и Unix, подойдет упомянутый уже Coyote Linux. Еще один любопытный вариант – однодискетный мини-дистрибутив системы FreeBSD – PicoBSD. Вместе с мини-дистрибутивами Linux его можно найти на CHIP-CD 10/2001.

Сделай сам!

Перенос однодискетной Linux на жесткий диск – вещь удобная, ведь вы получаете работающую систему с возможностью расширения ее функциональности. Однако если у вас есть свободный жесткий диск, то почему не потратить время на самостоятельную установку и настройку Linux-системы?

Выбор дистрибутива не представляет трудностей. В сущности, для нашей задачи тип дистрибутива безразличен, поскольку отличаются они друг от друга лишь подбором ПО для X Window, и графическими/псевдографическими программами настройки/администрирования системы. Исключение составляет лишь Slackware, имеющий структуру каталогов и имена файлов инициализации системы "как в BSD".

При выборе пакетов для установки не забудьте про исходники ядра – его придется перекомпилировать. Зачем? Удалить лишние драйверы устройств, включить в код ядра драйвер установленной на данной машине сетевой платы. Кроме того, необходимо включить в ядре поддержку маскарадинга и фильтрации пакетов. Список опций, необходимых для этого, приводится в документе IP-Masquerade-HOWTO (см. CHIP-CD).

Кстати, там же находится PDF-документ Linux Security Quick Reference Guide. Несмотря на малый объем – 2 страницы, он абсолютно необходим любому начинающему (и не только) администратору Linux как справочное пособие по обеспечению приемлемой безопасности системы. В числе прочего в нем приведены опции конфигурирования ядра, необходимые для защиты от распространенных атак и перекрытия известных слабых мест в сетевой подсистеме Linux.

Linux Security Quick Reference Guide проведет вас по всему процессу послеинсталляционной настройки Linux-системы, – от защиты паролем загрузчика LILO и ограничения прав доступа к критически важным системным файлам до обеспечения безопасности DNS– и Web-сервера.

Одним из необходимых этапов настройки системы (с точки зрения безопасности) является отключение неиспользуемых сетевых служб Linux. Запуском сетевых демонов управляет супер-сервер inetd, файл конфигурации которого /etc/inetd.conf содержит строки, инициализирующие вызываемые клиентами сетевые службы. Закомментируйте символом '#' все, что не используется (перечень примерно соответствует набору служб, активных в описанных выше мини-маршрутизаторах). Кроме того, сценарии в каталогах /etc/rc*.d/ (Red Hat) и /etc/rc.d/ (Slackware) содержат строки запуска постоянно загруженных сетевых служб и приложений. Если вы знаете, что данная программа в вашей системе не используется – закомментируйте вызывающие ее строки или переименуйте файл сценария.

Важным элементом защиты системы от несанкционированного доступа является система TCP Wrappers, реализованная с помощью демона tcpd. В числе прочего он проверяет при установке TCP-соединений, находится ли запрашивающий соединение хост в числе тех, которым разрешен доступ к данной системе. Установка TCP Wrappers обязательна в системе, обеспечивающей доступ в Internet и особенно из Internet в локальную сеть.

Посторонним вход запрещен

Главной целью нашего Linux-шлюза является раздача доступа в Internet пользователям локальной сети – то, что в Windows делает прокси-сервер, а в нашей системе – модуль маскарадинга и IP-фильтрации ядра Linux.

Внешняя разница между маскарадингом и прокси-сервером в том, что маскарадинг прозрачен для пользователя – клиентские приложения ничего не знают о нем и работают, "как в Internet". Все, что должен сделать пользователь, – это указать в сетевых настройках Windows Linux-машину в качестве Internet-шлюза (Gateway | New Gateway). Для поддержки FTP, ICQ, IRC, RealAudio и других приложений, использующих UDP-порты, используются соответствующие модули (их необходимо откомпилировать из исходников той же версии ядра, что используется в вашей Linux-системе).

В ядрах версий 2.0 для настройки маскарадинга и фильтрации использовалась программа ipfwadm. В ядрах версий 2.2 ей на смену пришла система ipchains с несколько иным синтаксисом, а с ядрами 2.4 может использоваться, помимо ipchains, новая утилита IP-Tables, синтаксис правил которой отличается от ipchains еще больше, чем ipchains от ipfwadm. Пожалуй, лучше использовать ipchains, тем более что она хорошо документирована (см. PDF-файл IPCHAINS-HOWTO на CHIP-CD 10/2001).

Помимо HOWTO мы настоятельно рекомендуем ознакомиться с еще одним документом – TrinityOS. Это поэтапное руководство по настройке безопасной Linux-системы в стиле HOWTO с примерами конфигурационных файлов.

В частности, в нем очень хорошо описан пример файла /etc/rc.d/rc.firewall с директивами маскарадинга и фильтрации пакетов, причем в двух вариантах – со "слабым" набором правил (без фильтрации, только проверка работоспособности маскарадинга) и с полноценным набором правил, обеспечивающим надежную защиту Linux-системы и Windows-машин в локальной сети.

Понятие "цепочек" (chains) проиллюстрировано на рисунке. Каждой цепочке соответствует своя политика (что по умолчанию делать с пакетами, поступающими в данную цепочку). Затем следуют отдельные правила, описывающие исключения из политики.

В варианте без фильтрации в цепочках input и output используется политика ACCEPT (принять), а в цепочке forward – политика REJECT (отвергнуть). В полноценном же rc.firewall все иначе: во всех трех цепочках принимается политика REJECT, после чего последовательно разрешаются все типы пакетов, необходимые для функционирования системы.

В сценарии rc.firewall обычно широко используются переменные, инициализируемые в начале файла, например (в TrinityOS): INTIF (внутренний сетевой интерфейс, обычно eth0); EXTIF (внешний интерфейс, ppp0); IP-адреса интерфейсов EXTIP и INTIP, INTNET, INTBROAD и др. EXTIP и INTIP присваиваются значения, вырезанные из текста вывода команды /sbin/ ifconfig, которая, будучи введена без параметров, выдает данные о работающих в данный момент сетевых интерфейсах. Особенно это удобно для внешнего, PPP-интерфейса, который, как правило, не имеет постоянного IP-адреса (поскольку провайдеры обычно дают клиентам динамически выделяемые адреса).

Будьте осторожны в редактировании приведенных в документации примеров rc.firewall. Ошибка в синтаксисе или формулировке некоторых правил может привести к недоступности системы из сети.