Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SET-Lab-06.doc
Скачиваний:
16
Добавлен:
04.05.2019
Размер:
4.18 Mб
Скачать

2.2.3. Сетевые средства ос Linux

Рассматриваемые ниже функции являются важными в плане безопасности и защиты среды ОС Linux. Поэтому для их выполнения требуется вход в систему в качестве root-а и достаточно привилегий для работы в этом режиме [].

Распознавание сетевой карты. В общем случае компьютер может быть связан с сетевой средой через одну или две сетевые карты. Первая карта делает компьютер сетевым, обеспечивая выход в локальную (внутреннюю) сеть, вторая – превращает сетевой компьютер в шлюз, обеспечивая связь со второй сетью (внешней). Ядро ОС Linux рассматривает ваши сетевые карты как eth0 и eth1. При этом eth0 обычно считается карта, установленная в слот, расположенный ближе к разъему материнской платы ПК. Конечно, лучше знать и иметь под рукой названия производителей и моделей обеих карт, что не всегда удобно.

Поэтому можно проверить, распознаются ли eth0 и eth1 ядром Linux автоматически c помощью команд ifconfig eth0 и ifconfig eth1. В обоих случаях, если ядро распознало вашу сетевую карту, вы должны увидеть примерно следующий текст (цифры могут быть другими):

eth0 Link encap: Ethernet HWaddr 00:60:67:4A:02:0A

inet addr:0.0.0.0 Bcast:0.0.0.0 Mask:255.255.255.255

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:466 errors:0 dropped:0 overruns:0 frame:0

TX packets:448 errors:0 dropped:0 overruns:0 carrier:0 collisions:85 txqueuelen:100

Interrupt:10 Base address:0xe400

Если ядро ОС Linux не смогло распознать сетевую карту, то сообщение примет следующий вид:

eth0: error fetching interface information: Device not found.

Настройка драйвера сетевой карты. Она выполняется, если обе сетевые карты не были успешно распознаны ядром. В этом случае пользователь должен дать ядру немного более подробную информацию о том, как обнаружить ваши карты. С учетом наличия множества всевозможных сертифицированных и «не очень» сетевых карт решение этого вопроса может стать не тривиальным. В конечном счете, следует обратиться к "Ethernet HOWTO". Но известны типовые варианты и некоторые общие рекомендации [2]:

  • если это новая сетевая карта на шине PCI, то, скорее всего причина в том, что несмотря на то, что карта новая (и популярная), драйверов к ней в ядре до сих пор нет. Много интересного можно узнать, прочитав о сетевой карте (и других устройствах) в каталоге /proc/pci, записывая их производителей и модели;

  • если это устаревшая сетевая карта на шине ISA, то видимо, придется узнать адрес и IRQ (Interruption Request – линию запросов прерываний), на которых работает карта. Необходима документация по заводским настройкам сетевого устройства, иначе стоит посетить Web-сайт производителя карты (или чипа на ней). Кроме того, должна быть DOS-дискета, с которой можно загрузить DOS и запустить программу настройки, которая и укажет либо настроит необходимые адрес и IRQ сетевой карты пользователя;

  • если это сетевая карта ISA PnP (Plug and Play – «вставил и работай»). Как настроить эту карту, подробно описано в "Plug'n'Play HOWTO". К счастью, когда пользователь настроит карту, он будет точно знать адрес порта и IRQ сетевой карты.

Теперь, когда производитель и модель сетевой карты известны для eth0 и eth1, можно переходить к разделу «Совместимость» документа «Ethernet HOWTO» и найти в нем свою карту. На этом этапе следует выписать название рекомендуемого драйвера и любую информацию о дополнительных параметрах, которые могут понадобиться для дальнейшей настройки.

Следующим шагом является редактирование имеющихся конфигурационных файлов. Мы будем исправлять файл /etc/conf.modules, предназначенный для настройки аппаратной части.

В этом файле может существовать много различных вариантов настроек и их комбинаций, поэтому ниже приводится пример, основанный на одном из реально работающих сетевых шлюзов. Допустим, что в шлюзе установлено следующее оборудование: карта PCI (производительностью 10/100Мбит/с) на чипе VIA Rhine, и обычная ISA NE2000-совместимая карта (10Мб/с). Мы используем 100-мегабитную карту для внутренней сети, а 10-мегабитную – для внешнего соединения. В этом случае файл /etc/conf.modules может иметь следующий вид:

alias parport_lowlevel parport_pc

alias eth0 ne

options ne io=0x300 irq=10

alias eth1 via-rhine .

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

Вторая строка указывает ядру использовать драйвер “ne” для устройства eth0.

В третьей строке сообщается, какой порт и IRQ использовать драйверу "ne" для работы с ISA-картой. Если на настраиваемом шлюзе тоже установлена ISA-карта, то на нем также придется использовать эту директиву. В этом случае просто подставляется имя драйвера, соответствующий порт и номер IRQ вместо приведенных в примере.

В четвертой строке указано использовать для устройства eth1 драйвер "via-rhine". В нашем примере карта eth1 установлена на шине PCI. Поэтому номер порта или IRQ не указываются, такт как шина PCI настраивает карту автоматически.

Пользователю необходимо убедиться в наличии строк в файле conf.modules для обеих карт, а также строк, задающих опции ISA-карт. Эти строки уже могут присутствовать в файле conf.modules, если пользователь задал их параметры в процессе инсталляции системы.

Когда редактирование conf.modules будет завершено, можно попробовать снова запустить команды ifconfig eth0 и ifconfig eth1. На экране будут присутствовать различные предупреждения или ошибки, если мы перепутали адреса портов ввода-вывода или IRQ.

Может случиться и так, что для Linux-шлюза используются две одинаковые сетевые карты, и пользователь не может заставить их работать совместно. Но и в этом случае работа сетевых карт зависит лишь от написания правильных опций в файле /etc/conf.modules. В следующем примере мы использовали придуманные адреса портов и номера IRQ и предположили, что используется пара NE2000-совместимых карт (что очень распространено). Файл /etc/conf.modules должен выглядеть примерно так:

alias eth0 ne

alias eth1 ne

options ne io=0x330,0x360 irq=7,9

Опции адреса порта (io=) и номера IRQ (irq=) задаются парами в одной строке, причем каждое первое число соответствует eth0, а второе – eth1.

Настройка внутренней сети. «Внутренняя сеть» – это ЛС, в которой будут общаться домашние или офисные компьютеры, в нашем случае – сеть университета. «Внешняя сеть» – это глобальная Сеть Internet по другую сторону от Linux. В общем и целом внутренняя сеть будет полностью защищена от внешней при помощи Linux, который будет играть роль защитного экрана (firewall) среднего класса. Предположим, что наша внутренняя сеть подключена к eth1, а внешнее устройство подключено к eth0.

Наша внутренняя сеть будет частной (созданной искусственно в рамках локальной сети ТРТУ), и поэтому мы используем для нее специальный номер сети, зарезервированный для внутренних частных сетей: 192.168.1.0. Это будет «частная сеть класса C».

Сначала необходимо убедиться в том, что поддержка сети включена. Для этого в файле /etc/sysconfig/network следует найти, а если их нет, то создать следующие строки:

NETWORKING=yes

FORWARD_IPV4=yes

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

Замечание для пользователей Red Hat Linux версии 6.x. Чтобы система Red Hat Linux 6.x нормально поддерживала IP-пересылку и маскарадинг, необходимо отредактировать файл /etc/sysctl.conf. Следует убедиться в наличии в нем следующих строк и проставить в них соответствующие значения:

net.ipv4.ip_forward = 1

net.ipv4.ip_always_defrag = 1

Все настройки сетевых интерфейсов в Red Hat Linux и его производных находятся в файлах в каталоге /etc/sysconfig/network-scripts. Для того, что бы правильно конфигурировать параметры сетевого интерфейса eth1, в указанном каталоге нужно создать файл ifcfg-eth1 вида:

DEVICE=eth1

IPADDR=192.168.1.1

ONBOOT=yes

Таким образом, загрузочный скрипт (сценарий), отвечающий за настройку сети, будет инициализировать eth1 в процессе загрузки и отведет ему конкретный IP-адрес. Теперь активизируем нашу сеть с учетом этих новых настроек командой /etc/rc.d/init.d/network restart .

Клиентские компьютеры под управлением Windows. Для настройки клиентского компьютера открываем папку «Сеть» в окне «Панель Управления» и выберем опцию «свойства протокола TCP/IP». Мы можем давать нашим компьютерам любые адреса в сети 192.168.1.0, кроме адресов 192.168.1.0 (сама данная подсеть), 192.168.1.255 (широковещательный адрес) и 192.168.1.1 (наш Linux-сервер). Никогда не следует давать двум компьютерам одинаковые IP-адреса! Установим значение «Шлюз по умолчанию» – 192.168.1.1, чтобы весь исходящий трафик шел через Linux-шлюз.

В документе «HOWTO: IP-маскарадинг» в главе Configuration Section приведена очень подробная информация о настройке клиентских компьютеров.

Одним словом, чтобы настроить клиентский компьютер, нам необходимо вручную указать любой адрес в сети 192.168.1.X и шлюз 192.168.1.1. Адресом сервера доменных имен (Domain Name Server, DNS) будет 192.168.1.1 (см. ниже) или адрес DNS-сервера, данный вашим сетевым администратором (или провайдером).

DNS-сервер. Организация DNS-сервера не является обязательным условием для нормального функционирования Linux-сервера, работающего в режиме рабочей станции. В этом случае достаточно только исправить файл /etc/resolv.conf и внести в него строки, соответствующие адресам DNS-серверов вышестоящих провайдеров, например, для DNS-серверов Internet-провайдера – Таганрогского узла электросвязи:

nameserver 213.24.85.11

nameserver 213.24.85.12

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

Для работы с DNS клиентские машины должны использовать Linux-шлюз в качестве своего главного DNS-сервера.

Для установки DNS-сервера, сначала необходимо установить RPM-пакет bind, а затем RPM-пакет caching-nameserver. К этому моменту у нас почти все готово.

После стандартной установки кэширующий DNS-сервер будет работать. Но если мы знаем IP-адрес DNS-сервера своего провайдера, то можно немного ускорить работу сети, слегка изменив файл /etc/named.conf, и добавив в него следующую строку после опции directory (x.x.x.x и y.y.y.y – это первичный и вторичный DNS-серверы провайдера):

forwarders { x.x.x.x; y.y.y.y; };

После этих изменений наш DNS-сервер сначала будет запрашивать адрес у DNS-серверов провайдера, и только затем в Internet. У провайдера обычно бывает большой запас готовой DNS-информации, и он может ответить значительно быстрее, чем на обычный запрос.

При работе демона named раньше возникали проблемы с безопасностью. Поэтому очень важно иметь наиболее свежую его версию и внести некоторые изменения в стандартные настройки для повышения безопасности:

  1. версия пакета bind должна быть не ниже 8.2.2;

  2. следует ограничить доступ к DNS-серверу только для локальной сети, добавив строку

allow-query { 192.168.1/24; 127.0.0.1/32; };

в файл /etc/named.conf после строки с опцией forwarders ;

    1. следует избегать запуска DNS-сервера в качестве root-а. Если DNS-сервер запущен из-под root-а, то при его использовании запрашивающему будут даны привилегии администратора. Если же сервер будет работать с правами «безобидного пользователя», такого как nobody, то можно снизить риск недопустимого использования DNS-сервера. Чтобы ваш DNS-сервер запускался с правами пользователя nobody, надо отредактировать файл /etc/rc.d/init.d/named, исправив в нем строку

daemon named

на daemon named -u nobody -g nobody.

Убедиться в том, что DNS-сервер запустится в процессе загрузки, можно с помощью команды:

chkconfig named on.

Таким образом, DNS-сервер будет автоматически запускаться на стандартных уровнях (3 и 5). Теперь вы можете запустить свой DNS-сервер:

/etc/rc.d/init.d/named start start

Проверка внутренней сети. Пока мы не настроим внешнюю сеть, DNS-сервер работать не будет (ему надо связываться с внешними DNS-серверами), но мы можем проверить простое подключение командой ping.

Попросите соседа открыть окно MS-DOS на одном из клиентских компьютеров, затем набрать: ping 192.168.1.1. Эта команда будет посылать пакеты на ваш Linux-компьютер через определенные интервалы, а ваш Linux будет посылать их обратно. Если все работает нормально, то на клиентском компьютере будет виден список ответов со временем хождения пакетов по сети.

Настройка внешней сети. Иногда процесс настройки внешней сети бывает довольно сложным, что зависит от того, насколько хорошо Internet-провайдер поддерживает Linux.

Одной из основных проблем, возникающей с внешними соединениями, является получение IP-адреса. Некоторые провайдеры выделяют статические IP-адреса кабельным или ADSL-клиентам. В этом случае настройка будет достаточно простой. Однако, большинство провайдеров перешло на динамическую настройку при помощи DHCP. Это означает, что скорее всего наш Linux будет DHCP-клиентом на интерфейсе eth0. Более того, некоторые провайдеры применяют специализированные нестандартные методы, предполагая, что их клиенты будут использовать ОС MS Windows 98/NT/2000/XP. Рассмотрим действия при настройке в каждом из этих случаев.

1. Статический IP-адрес. Сначала надо создать новый файл конфигурации интерфейса /etc/sysconfig/network-scripts/ifcfg-eth0 вида:

DEVICE=eth0

IPADDR=x.x.x.x

NETMASK=y.y.y.y

ONBOOT=yes

Вместо x.x.x.x и y.y.y.y следует подставить значения, данные провайдером.

Затем надо отредактировать файл /etc/resolv.conf, внеся в него следующее:

search provider_domain_here

nameserver n.n.n.n

nameserver m.m.m.m

Здесь значение поля "домен_провайдера" должно быть предоставлено провайдером. Вместо m.m.m.m и n.n.n.n надо подставить адреса первичного и вторичного DNS-сервера провайдера соответственно. Так как мы настроили свой Linux в качестве кэширующего DNS-сервера, то надо добавить перед строками nameserver строку nameserver 127.0.0.1. В результате этого наш Linux-компьютер будет обращаться к своему кэширующему DNS-серверу перед обращением к внешним серверам.

2. Использование DHCP. Если провайдер использует автоконфигурирование при помощи DHCP, то нам надо создать новый файл конфигурации интерфейса /etc/sysconfig/network-scripts/ifcfg-eth0 следующего вида:

DEVICE=eth0

BOOTPROTO=dhcp

ONBOOT=yes

Теперь убедимся в том, что клиентский демон dhcpcd установлен в нашей системе.

(Для RH: надо перейти на CD с дистрибутивом нашего Linux и установить RPM-пакет dhcpcd.)

Наступило время испытать нашу новую конфигурацию сети. Для этого следует использовать команду /etc/rc.d/init.d/network restart. После этого можно попробовать отыскать внешний компьютер в Internet, например, по адресу www.yahoo.com.

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

3. Подключение по протоколу «PPP через Ethernet» (PPPoE). Некоторые ADSL-провайдеры (например, Ростовский AAANet) с недавних пор начали настаивать на том, чтобы их новые пользователи подключались к ним при помощи протокола PPPoE. К этому они прилагают клиентскую программу для Windows: это не совсем удобно для пользователей Linux. К счастью, PPPoE – достаточно простой протокол, и существует несколько способов его поддержки и в Linux:

    • PPPoE-клиент "Рев пингвина" [http://www.roaringpenguin.com/pppoe.html];

    • PPPoE на Linux для Bell Sympatico [http://www.panix.com/~dfoster/prog/linux/pppoe.html];

    • PPPoE на Linux для Sympatico (Общая информация [http://www.carricksolutions.com/pppoe.htm]) (Информация по применению в Linux [http://www.carricksolutions.com/linuxpppoe.htm]).

4. Особые свойства DHCP. Одним из излюбленных трюков сетевых провайдеров является привязывание вашего сервиса к конкретному имени машины или даже к конкретной сетевой карте. Обычно это делается для того, чтобы пользователи не подключали к Internet через хаб сразу несколько компьютеров. К счастью, использование Linux и маскарадинга позволит это сделать и без ведома Internet-провайдера, к тому же значительно более защищенным образом.

Если провайдер выдал имя машины и настаивает на том, чтобы мы назвали свой Windows-компьютер именно этим именем в сети для использования сервиса подключения к Internet, то мы должны сделать так, чтобы наш Linux-компьютер посылал это имя при запросе адреса с DHCP-сервера.

Клиент DHCP в Red Hat вызывается в том случае, если вы установите в файле конфигурации интерфейса переменную BOOTPROTO в значение "dhcp", но это производится без предоставления DHCP-серверу имени машины. Чтобы предоставить ему такое имя, надо отредактировать файл /etc/sysconfig/network, изменив строку:

HOSTNAME=

на HOSTNAME=имя_выданное_тупым_ISP

В некоторых вариантах Red Hat это может и не сработать. Если такой вариант не пройдет, надо открыть скрипт: /sbin/ifup, найти в нем вызов: dhcpcd и pump, и добавить к ним опцию: -h $HOSTNAME. Если таких строк в нем не оказалось, то следует добавить их. Пример:

/sbin/dhcpcd -i $

DEVICE -h $

HOSTNAME и /sbin/pump -i $

DEVICE -h $

HOSTNAME.

«Кабельный» Internet. Многие компании, предоставляющие услуги кабельного ТВ, предоставляют так же и Internet-доступ для своих клиентов. За основу традиционно берется модель кабельного сервиса «Road Runner», когда для получения возможности использования сервера должна запускаться специальная процедура входа. К счастью, существует детально описывающий эту тему «Linux Road Runner HOWTO».

Результаты настройки сети. Чтобы увидеть настройку всех ваших сетевых устройств, достаточно использовать команду ifconfig. На описанном шлюзе это выглядит так:

eth0 Link encap:Ethernet HWaddr 00:60:67:4A:02:0A

inet addr:24.65.182.43 Bcast:24.65.182.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:487167 errors:0 dropped:0 overruns:0 frame:0

TX packets:467064 errors:0 dropped:0 overruns:0 carrier:0

collisions:89 txqueuelen:100

Interrupt:10 Base address:0xe400

eth1 Link encap:Ethernet HWaddr 00:80:C8:D3:30:2C

inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:284112 errors:0 dropped:0 overruns:0 frame:1

TX packets:311533 errors:0 dropped:0 overruns:0 carrier:0

collisions:37938 txqueuelen:100

Interrupt:5 Base address:0xe800

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:3924 Metric:1

RX packets:12598 errors:0 dropped:0 overruns:0 frame:0

TX packets:12598 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

Здесь у eth0 имеется «красивый» внешний IP-адрес, а у eth1 – частный внутренний.

Мы также можем просмотреть маршруты пакетов с помощью команды route. На нашем шлюзе это выглядит так:

Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface

255.255.255.255 * 255.255.255.255 UH 0 0 0 eth1

192.168.1.0 * 255.255.255.0 U 0 0 0 eth1

24.65.182.0 * 255.255.255.0 U 0 0 0 eth0

127.0.0.0 * 255.0.0.0 U 0 0 0

lo default 24.65.182.1 0.0.0.0 UG 0 0 0 eth0

Теперь у нас настроена внешняя и внутренняя сети, сетевые устройства, специальный широковещательный адрес 255.255.255.255, а маршрут по умолчанию указывает на шлюз провайдера.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]