Введение в администрирование UNIX/Сетевые средства UNIX

Материал из Викиучебника — открытых книг для открытого мира
Перейти к навигации Перейти к поиску

Современные вычислительные системы невозможно представить без наличия сетей. Технологии взаимодействия между информационными системами развиваются с 70-х годов, не намного опередив развитие UNIX. Операционная система UNIX почти с самого рождения интегрировала в себя технологии локальных сетей, на её основе затем была построена сеть Internet, распространившаяся ныне по всему миру.

Сеть в UNIX[править]

Презентация 5-01: введение в сети

Введение в сети[править]

Организация взаимодействия между устройствами и программами в сети является сложной задачей. Сеть объединяет разное оборудование, различные операционные системы и программы – это было бы невозможно без принятия общепринятых правил, стандартов.

В области компьютерных сетей существует множество международных и промышленных стандартов, среди которых следует особенно выделить международный стандарт OSI и набор стандартов IETF (Internet Engineering Task Force). Семиуровневая модель OSI

Презентация 5-02: взаимодействие открытых систем

В модели OSI, называемой также моделью взаимодействия открытых систем (Open Systems Interconnection – OSI) и разработанной Международной Организацией по Стандартам (International Organization for Standardization – ISO), средства сетевого взаимодействия делятся на семь уровней, для которых определены стандартные названия и функции (см. Рисунок 4.1, «Уровни ISO OSI»).

Рисунок 4.1. Уровни ISO OSI Уровни ISO OSI

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

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

Рассмотрим подробнее назначения каждого из уровней: Физический уровень

Физический уровень выполняет передачу битов по физическим каналам, таким, как витая пара, оптоволоконный кабель или радиоволны. На этом уровне определяются характеристики физических сред передачи данных и параметров электрических сигналов. Канальный уровень

Канальный уровень обеспечивает передачу кадра данных между любыми узлами в сетях с типовой топологией либо между двумя соседними узлами в сетях с произвольной топологией, отвечает за установление соединения и корректность доставки данных по физическим каналам. В протоколах канального уровня заложена определенная структура связей между компьютерами и способы их адресации. Адреса, используемые на канальном уровне в локальных сетях, часто называют МАС-адресами (Media Access Control, управление доступом к среде). Часть канального уровня требует аппаратной реализации, в операционной системе он, как правило, представлен драйвером сетевой карты. Сетевой уровень

Сетевой уровень в первую очередь должен предоставлять средства для решения следующих задач:

  • доставки пакетов в сети с произвольной топологией;
  • структуризации сети путем надежной локализации трафика;
  • согласования различных протоколов канального уровня.

Сетевой уровень позволяет передавать данные между любыми, произвольно связанными узлами сети (при этом не берёт на себя никаких обязательств по надежности передачи данных). Это достигается благодаря наличию адресации – каждый узел в сети имеет свой уникальный идентификатор.

Реализация протокола сетевого уровня подразумевает наличие в сети специального устройства – маршрутизатора. Маршрутизаторы объединяют отдельные сети в общую составную сеть. К каждому маршрутизатору могут быть присоединены несколько сетей (по крайней мере две). Транспортный уровень

Транспортный уровень обеспечивает передачу данных между любыми узлами сети с требуемым уровнем надежности. Для этого на транспортном уровне имеются средства установления соединения, нумерации, буферизации и упорядочивания пакетов. Сеансовый уровень

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

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

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

Существует несколько групп протоколов (называемые также «стеки протоколов»), которые частично или полностью соответствуют уровням эталонной модели OSI. Для нас наибольший интерес представляет набор протоколов TCP/IP. Протоколы Internet: TCP/IP

Презентация 5-03: протоколы Internet: TCP/IP

Протоколы TCP/IP (Transmission Control Protocol / Internet Protocol) были разработаны по заказу Министерства обороны США 30 лет назад для связи экспериментальной сети ARPAnet и представляет собой набор общих протоколов для разнородной вычислительной среды. Большой вклад в развитие стека TCP/IP внёс университет Беркли, реализовав этот протокол для операционнной системы UNIX. Популярность UNIX и удачные идеи, заложенные в TCP/IP, привели к образованию и бурному развитию международной сети Internet. Все протоколы семейства TCP/IP и связанные с ними проходят стандартизацию в организации IETF через выпуск так называемых RFC (Request For Comment) документов.

Протоколы, входящие в TCP/IP частично соответствуют модели OSI (см. Рисунок 4.2, «Соответствие стека TCP/IP модели OSI»). Стек TCP/IP поддерживает на нижнем уровне все популярные стандарты физического и канального уровней: для локальных сетей – Ethernet, Token Ring, FDDI, для глобальных – PPP, ISDN. Основными протоколами стека, давшими ему название, являются протоколы IP и TCP, относящиеся соответственно к сетевому и транспортному уровню. IP обеспечивает продвижение пакета по сети, TCP гарантирует надёжность его доставки.

За долгие годы использования стек TCP/IP обзавёлся множеством протоколов прикладного уровня: FTP, SMTP, HTTP и т.п..

Рисунок 4.2. Соответствие стека TCP/IP модели OSI Соответствие стека TCP/IP модели OSI

Поскольку стек TCP/IP изначально создавался для глобальной сети, он имеет много особеностей, дающих ему преимущество перед другими протоколами, когда речь заходит о глобальных связях. Это способности фрагментации пакетов, гибкая система адресации, простота широковещательных запросов.

Сегодня набор протоколов TCP/IP самый распространённый протокол вычислительных сетей, к тому же он является наиболее «оригинальным» для UNIX-систем. Рассмотрим, как производится администрирование этих протоколов в UNIX.

Сетевой интерфейс в UNIX[править]

Презентация 5-04: сетевой интерфейс в UNIX

Основной сетевой подсистемы UNIX является сетевой интерфейс. Сетевой интерфейс – это абстракция, используемая для представления связи канального уровня сети с протоколом TCP/IP в UNIX.

Каждый сетевой интерфейс в системе имеет уникальное имя, сотстоящее из типа устройства и номера (0 или больше для однотипных устройств). Под типами устройств в различных UNIX-системах может пониматься вид протокола канального уровня (Ethenet – eth) или название драйвера устройства (Realtek – rl).

Интерфейс имеет набор параметров, большинство которых относятся к сетевому уровню (IP-адрес, маска сети и т.п.). Важным параметром сетевого интерфейса является аппаратный адрес (В Ethernet аппаратный адрес называется MAC-адрес и состоит из шести байтов, которые принято записывать в шестнадцатеричной системе исчисления и разделять двоеточиями).

Узнать параметры интерфейса можно с помощью команды ifconfig, указав в качестве аргумента его имя:

Пример 4.1. Пример выполнения команды ifconfig

desktop ~ # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0D:60:8D:42:AA  
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5327 errors:0 dropped:0 overruns:0 carrier:0
          collisions:1006 txqueuelen:1000 
          RX bytes:3500059 (3.3 Mb)  TX bytes:2901625 (2.7 Mb)
          Base address:0x8000 Memory:c0220000-c0240000
desktop ~ # ifconfig lo
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:188 errors:0 dropped:0 overruns:0 frame:0
          TX packets:188 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:14636 (14.2 Kb)  TX bytes:14636 (14.2 Kb)

Создание сетевого интерфейса производится в момент загрузки драйвера сетевой карты или создания логического соединения (например, в PPP). Настройка сетевых параметров, связанных с интерфейсом производится той же командой ifconfig, о чем будет сказано далее.

Для диагностики трафика на канальном уровне применяется специальные программы. Самыми распространёнными в UNIX являются tcpdump и ethereal. При «прослушивании» канала, эти программы взаимодействуют с заданным сетевым интерфейсом.

Конфигурация IP-сетей[править]

Сетевой адрес

Презентация 5-05: сетевой адрес

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

Адрес, определяемый протоколом IP, состоит из четырех байтов, записываемых традиционно в десятичной системе счисления и разделяемых точкой. Адрес сетевого интерфейса eth0 из примера – 192.168.1.5.

Второй сетевой интерфейс из примера, lo, – так называемая заглушка (loopback), которая используется для организации сетевых взаимодействий компьютера с самим собой: любой посланный в заглушку пакет немедленно обрабатывается как принятый оттуда. Заглушка обычно имеет адрес 127.0.0.1.

Для установления связи между интерфейсом и IP-адресом необходимо выполнить команду:

desktop ~ # ifconfig eth0 192.168.1.1 up

Маршрутизация

Презентация 5-06: маршрутизация

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

Более сложный вопрос встает, если IP-адрес компьютера-адресата не входит в локальную сеть компьютера-отправителя. Ведь и в этом случае пакет необходимо отослать какому-то абоненту локальной сети, с тем, чтобы тот перенаправил его дальше. Этот абонент, маршрутизатор, подключен к нескольким сетям, и ему вменяется в обязанность пересылать пакеты между ними по определенным правилам. В самом простом случае таких сетей две: «внутренняя», к которой подключены компьютеры, и «внешняя», соединяющая маршрутизатор со всей глобальной сетью. Таблицу, управляющую маршрутизацией пакетов, можно просмотреть с помощью команды netstat -r или route (обе команды имеют ключ -n, заставляющий их использовать в выдаче IP-адреса, а не имена компьютеров):

Пример 4.2. Пример выполнения команды route

desktop ~ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

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

Задавать параметры маршрутизации можно с помощью той же команды route. Служебный протокол ICMP

Презентация 5-07: протокол ICMP

Есть такие протоколы уровня IP, действие которых этим уровнем и ограничивается. Например, служебный протокол ICMP (Internet Control Message Protocol), предназначенный для передачи служебных сообщений.

Примером применения ICMP является утилита ping, которая позволяет проверить работоспособность узлов в сети. Другое применение ICMP – сообщать отправителю, почему его пакет невозможно доставить адресату, или передавать информацию об изменении маршрута, о возможности фрагментации и т. п.

Протоколом ICMP пользуется утилита traceroute, позволяющая приблизительно определять маршрут следования пакета:

Пример 4.3. Пример выполнения команды traceroute

desktop ~ # traceroute ya.ru
traceroute to ya.ru (213.180.204.8), 64 hops max, 40 byte packets
 1  195.91.230.65 (195.91.230.65)  0.890 ms  1.907 ms  0.809 ms
 2  cs7206.rinet.ru (195.54.192.28)  0.895 ms  0.769 ms  0.605 ms
 3  ix2-m9.yandex.net (193.232.244.93)  1.855 ms  1.519 ms  2.95 ms
 4  c3-vlan4.yandex.net (213.180.210.146)  3.412 ms  2.698 ms  2.654 ms
 5  ya.ru (213.180.204.8)  2.336 ms  2.612 ms  3.482 ms

Утилита traceroute показывает список абонентов, через которых проходит пакет по пути к адресату, и потраченное на это время. Однако список этот приблизительный. Строго говоря, неизвестно, каким маршрутом шла очередная группа пакетов, потому что с тех пор, как посылалась предыдущая группа, какой-нибудь из промежуточных маршрутизаторов мог передумать и послать новые пакеты другим путем. Информация о соединениях

Презентация 5-08: сетевые соединения

Транспортных протоколов в TCP/IP два – это TCP (Transmission Control Protocol, протокол управления соединением) и UDP (User Datagram Protocol). UDP устроен просто. Пользовательские данные помещаются в единственный транспортный пакет-датаграмму, которой приписываются обычные для транспортного уровня данные: адреса и порты отправителя и получателя, после чего пакет уходит в сеть искать адресата. Проверять, был ли адресат способен этот пакет принять, дошел ли пакет до него и не испортился ли по дороге, предоставляется следующему – прикладному – уровню.

В UNIX существует прозрачный механизм именования сетевых протоколов. Согласно стандартам Internet для большинства приложений существуют стандартные порты, на которых соответствующие приложения должны принимать соединения. В файле /etc/services можно увидеть список соответствия имён протоколов номерам портов. Благодаря этому файлу, в UNIX можно во всех утилитах вместо номера порта писать имя соответствующего протокола.

Другое дело – TCP. Этот протокол очень заботится о том, чтобы передаваемые данные дошли до адресата в целости и сохранности. Для этого предпринимаются следующие действия:

  • установление соединения;
  • обработка подтверждения корректной доставки;
  • отслеживание состояния абонентов.

Для просмотра всех существующих в настоящий момент сетевых соединений можно воспользоваться командой netstat:

Пример 4.4. Пример выполнения команды netstat

desktop ~ # netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:32769           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:32770           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 192.168.11.5:34949      83.149.196.70:5223      ESTABLISHED
tcp        0      0 192.168.11.5:39833      213.248.55.180:5223     ESTABLISHED
tcp        0      0 192.168.11.5:59577      192.168.11.1:22         TIME_WAIT
udp        0      0 0.0.0.0:32768           0.0.0.0:*
udp        0      0 0.0.0.0:32769           0.0.0.0:*
udp        0      0 0.0.0.0:111             0.0.0.0:*

Настройка сети при загрузке системы

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

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

Сервисы Internet[править]

Служба доменных имён

Презентация 5-09: служба доменных имён

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

Когда-то имена всех компьютеров в сети, соответствующие IP-адресам, хранились в файле /etc/hosts. Пока абоненты Internet были наперечет, поддерживать правильность его содержимого не составляло труда. Как только сеть начала расширяться, неувязок стало больше. Трудность была не только в том, что содержимое hosts быстро менялось, но и в том, что за соответствие имен адресам в различных сетях отвечали разные люди и разные организации. Появилась необходимость структурировать глобальную сеть не только топологически (с помощью IP и сетевых масок), но и административно, с указанием, за какие группы адресов кто отвечает.

Проще всего было структурировать сами имена компьютеров. Вся сеть была поделена на домены – зоны ответственности отдельных государств («us», «uk», «ru», «it» и т. п.) или независимые зоны ответственности («com», «org», «net», «edu» и т. п.). Для каждого из таких доменов первого уровня должно присутствовать подразделение, выдающее всем абонентам имена, заканчивающиеся на «.домен» Подразделение обязано организовать и поддерживать службу, заменяющую файл hosts: любой желающий имеет право узнать, какой IP-адрес соответствует имени компьютера в этом домене или какому доменному имени соответствует определенный IP-адрес.

Такая служба называется DNS (Domain Name Service, служба доменных имен). Она имеет иерархическую структуру. Если за какую-то группу абонентов домена отвечают не хозяева домена, а кто-то другой, ему выделяется поддомен (или домен второго уровня), и он сам распоряжается именами вида «имя_компьютера.поддомен.домен». Таким образом, получается нечто вроде распределенной сетевой базы данных, хранящей короткие записи о соответствии доменных имен IP-адресам.

В самом простом случае для того, чтобы сказать системе, какой сервер доменных имён использовать, необходимо изменить файл /etc/resolv.conf. В более сложных системах можно установить и настроить собственный сервер доменных имён.

Для проверки работы системы DNS используются утилиты dig и host.

Удалённый терминал

Презентация 5-10: удалённый терминал

Концепция терминала, описанная в главе «Терминал», может быть расширена на сеть. Действительно, было бы удобно получить доступ к удалённой машине и работать с ней как за обычными монитором и клавиатурой. Отпадает необходимость иметь аппаратный терминал к каждому хосту, можно зайти терминалом на один хост, затем удаленным терминалом по сети на любой другой хост. В современных условиях повсеместности сети Internet, удалённые терминалы становятся основным рабочим инструментом администратора системы.

В сетях TCP/IP существует несколько приложений, позволяющих осуществить терминальный заход. Рассмотрим два из них: telnet и ssh. Оба построены по единому клиент-серверному принципу.

Telnet – стандартное приложение, которое присутствует практически в каждой реализации TCP/IP. Оно может быть использовано для связи между хостами, работающими под управлением различных операционных систем. Telnet использует согласование опций клиента и сервера, чтобы определить, какие характеристики присутствуют с той и с другой стороны.

Клиент telnet взаимодействует и с пользователем, находящимся за терминалом, и с протоколами TCP/IP. Обычно, все что пользователь вводит с клавиатуры отправляется по TCP соединению, а все что приходит по соединению попадает на терминал.

Сервер telnet обычно взаимодействует с так называемыми псевдотерминальными устройствами в UNIX системах. Это делает его похожим на командный интерпритатор (shell), который запускается на сервере, или на любую программу, которая запускается из командной оболочки, так как именно они общаются с терминальными устройствами. Некоторые приложения, например, полноэкранные редакторы, считают, что они общаются с терминальным устройством.

Клиент telnet имеет еще одно полезное преминение. С его помощью можно тестировать стандартные сетевые протоколы – если в качестве порта назначения назначить порт соответствующего приложения. Telnet отправляет текстовые строки, разделённые знаками переноса строки, что делает его совместимым со многими протоколами Internel (SMTP, HTTP и т.п.).

Программа telnet обладает значительным недостатком – вся информация в ней (в том числе аутентификация пользователей) производится открытым текстом. В современных условиях глобальной сети это уже небезопасно. Решением этой проблемы является программа ssh, которая, будучи аналогичной по функциональности программе telnet, устанавливает защищённое соединение и предоставляет удалённый терминал с шифрацией всего промежуточного трафика.

В настоящее время для удалённого администрирования серверами в Internet применяется исключительно команда ssh.

Прокси-серверы

Прокси-сервер – специальная служба, расположенная между локальной сетью и Internet, которая обеспечивает доступ в Internet по протоколам HTTP, FTP и т.п. всем локальным компьютерам.

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

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

Межсетевой экран[править]

Презентация 5-11: межсетевой экран iptables

В UNIX существует мощный механизм анализа сетевых и транспортных пакетов, позволяющий избавляться от нежелательной сетевой активности, манипулировать потоками данных и даже преобразовывать служебную информацию в них. Обычно такие средства носят название firewall («fire wall» – противопожарная стена, брандмауэр), общепринятый русский термин – межсетевой экран.

В различных версиях UNIX функциональность и управление межсетевым экраном может значительно отличаться. В данных лекциях будет рассматриваться приложение iptables, которое используется для организации межсетевого экрана в Linux. Концепции iptables

Суть iptables в следующем. Обработка сетевого пакета системой представляется как его конвейерная обработка. Пакет нужно получить из сетевого интерфейса или от системного процесса, затем следует выяснить предполагаемый маршрут этого пакета, после чего отослать его через сетевой интерфейс либо отдать какому-нибудь процессу, если пакет предназначался нашему компьютеру. Налицо три конвейера обработки пакетов: «получить – маршрутизировать – отослать» (действие маршрутизатора), «получить – маршрутизировать – отдать» (действие при получении пакета процессом) и «взять – маршрутизировать – отослать» (действие при отсылке пакета процессом).

Между каждыми из этих действий системы помещается модуль межсетевого экрана, именуемый цепочкой. Цепочка обрабатывает пакет, исследуя, изменяя и даже, возможно, уничтожая его. Если пакет уцелел, она передает его дальше по конвейеру. В этой стройной схеме есть два исключения. Во-первых, ядро Linux дает доступ к исходящему пакету только после принятия решения о его маршрутизации, поэтому связка «взять – маршрутизировать» остается необработанной, а цепочка, обрабатывающая исходящие пакеты (она называется OUTPUT) вставляется после маршрутизации. Во-вторых, ограничения на «чужие» пакеты, исходящие не от нас и не для нас предназначенные, существенно отличаются от ограничений на пакеты «свои», поэтому после маршрутизации транзитные пакеты обрабатываются еще одной цепочкой (она называется FORWARD). Цепочка, обслуживающая связку «получить – маршрутизировать», называется PREROUTING, цепочка, обслуживающая связку «маршрутизировать – отдать» – INPUT, а цепочка, стоящая непосредственно перед отсылкой пакета – POSTROUTING (см. Рисунок 4.3, «Обработка пакета в iptables»).

Рисунок 4.3. Обработка пакета в iptables Обработка пакета в iptables

Если пакет не имеет свойств, требуемых первым правилом, к нему применяется второе, если второе также не подходит – третье, и так вплоть до последнего, правила по умолчанию, которое применяется к любому пакету. Если свойства пакета удовлетворяют правилу, над ним совершается действие. Действие DROP уничтожает пакет, а действие ACCEPT немедленно выпускает его из таблицы, после чего пакет движется дальше по конвейеру. Некоторые действия, например LOG, никак не влияют на судьбу пакета, после их выполнения он остается в таблице: к нему применяется следующее правило, и т. д. до ACCEPT или DROP.

Одной из важных функций сетевого экрана является подмена адресов и модификация сетевых пакетов. NAT (Network Address Translation – подмена сетевых адресов) – это механизм, позволяющий организовать передачу пакетов между сетями, не имеющими сведений о сетевых адресах друг друга. Этот процесс, чем-то схожий с маршрутизацией, позволяет организовывать шлюзы локальных сетей в Internet, распределять внешние соединения на отдельные машины внутри сети и т.п..

Следует помнить, что чем больше транспортных соединений отслеживается межсетевым экранам, тем больше требуется оперативной памяти ядру Linux и тем медленнее работает процедура сопоставления проходящих пакетов таблице. Впрочем, мощность современных компьютеров позволяет без каких-либо затруднений обслуживать преобразование адресов для сети с пропускной способностью 100Мбит/с и даже выше.

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

Резюме[править]

Презентация 5-12: резюме

Сеть состоит из различных аппаратно-программных узлов, для объединения которых используются стандартные протоколы. Эталонной моделью взаимодействия таких систем является семиуровневая модель OSI.

Протокол TCP/IP частично реализует уровни OSI. Основные протоколы IP (сетевого уровня) и TCP (транспортного уровня) позволили объединить разрозненные локальные сети в глобальную сеть Internet.

В UNIX основной сетевого взаимодействия является интерфейс, который находится между канальным и сетевым уровнем. Конфигурация TCP/IP включает в себя настройку интерфейса, маршрутизации и сервисов Internet, в первую очередь сервера доменных имен.

Для удаленного управления компьютерами используется программа telnet и её современный защищённый аналог – ssh.

Важным элементом сетевой инфраструктуры является межсетевой экран, который позволяет ограничить сетевой трафик и изменить его свойства. На лекции был рассмотрен межсетевой экран Linux – iptables.

Ключевые термины:OSI, физический уровень, канальный уровень, МАС-адрес, сетевой уровень, маршрутизатор, транспортный уровень, сеансовый уровень, уровень представления, прикладной уровень, сетевой интерфейс, IP-адрес, шлюз, служба доменных имен, удалённый терминал, прокси-сервер, межсетевой экран, цепочка, NAT

Дополнительные материалы[править]

  1. Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы. – СПб.: Питер, 2002. – 672 с.: ил.
  2. Курячий Г.В., Маслинский К.А. Операционная система Linux. – М.: Интуит.Ру, 2005. – 392 с.: ил.

Вопросы[править]

  1. Какие уровни входят в модель ISO OSI? Какие можно провести аналогии с реально существующими протоколами?
  2. Что такое сетевой интерфейс в UNIX? Для чего он используется и каким образом конфигурируется?
  3. Как управлять IP-маршрутизацией в UNIX?
  4. Что такое служба доменных имён в UNIX? Как она конфигурируется?
  5. Какие функции выполняет межсетевой экран? Каковы принципы управления межсетевым экраном iptables?

Презентация[править]

Рисунок 4.4. Презентация 5-01: введение в сети Презентация 5-01: введение в сети

Рисунок 4.5. Презентация 5-02: взаимодействие открытых систем Презентация 5-02: взаимодействие открытых систем

Рисунок 4.6. Презентация 5-03: протоколы Internet: TCP/IP Презентация 5-03: протоколы Internet: TCP/IP

Рисунок 4.7. Презентация 5-04: сетевой интерфейс в UNIX Презентация 5-04: сетевой интерфейс в UNIX

Рисунок 4.8. Презентация 5-05: сетевой адрес Презентация 5-05: сетевой адрес

Рисунок 4.9. Презентация 5-06: маршрутизация Презентация 5-06: маршрутизация

Рисунок 4.10. Презентация 5-07: протокол ICMP Презентация 5-07: протокол ICMP

Рисунок 4.11. Презентация 5-08: сетевые соединения Презентация 5-08: сетевые соединения

Рисунок 4.12. Презентация 5-09: служба доменных имён Презентация 5-09: служба доменных имён

Рисунок 4.13. Презентация 5-10: удалённый терминал Презентация 5-10: удалённый терминал

Рисунок 4.14. Презентация 5-11: межсетевой экран iptables Презентация 5-11: межсетевой экран iptables

Рисунок 4.15. Презентация 5-12: резюме Презентация 5-12: резюме

Методические указания по командам управления сетью в UNIX[править]

Команды по конфигурированию сети[править]

ifconfig
Команда используется для настройки сетевых интерфейсов
Команда ifconfig имеет следующий синтаксис:
ifconfig [-L] [-m] interface [create] [address_family] [address [dest_address]] [parameters] ifconfig interface destroy ifconfig -a [-L] [-d] [-m] [-u] [address_family] ifconfig -l [-d] [-u] [address_family] ifconfig [-L] [-d] [-m] [-u] [-C]
Команда ifconfig используется для настройки сетевых интерфейсов. Команда должна использоваться при загрузке системы для настройки адресов каждого сетевого интерфейса, а также может использоваться после загрузки для изменения параметров сетевых интерфейсов. Если команда введена без аргументов, ifconfig выдает информацию о состоянии активных интерфейсов. Если в качестве аргумента указан какой-либо интерфейс, то выдается информация только о состоянии этого интерфейса; если указан один аргумент -a, выдается информация о состоянии всех интерфесов, даже отключенных. Пример:
    user@desktop$ ifconfig rl0
    rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
               options=8<VLAN_MTU>
               inet6 fe80::250:22ff:febb:5f1%rl0 prefixlen 64 scopeid 0x3
               inet 192.168.19.86 netmask 0xffffff00 broadcast 192.168.19.255
               ether 00:50:22:bb:05:f1
               media: Ethernet autoselect (100baseTX <full-duplex>)
               status: active
Иначе команда конфигурирует указанный интерфейс. Изменить настройки какого-либо интерфейса может только суперпользователь.
Опции:
интерфейс
имя интерфейса (например, rl0 в BSD или eth0 в Linux).
up
вызывает активизацию интерфейса. Задается неявно при присвоении адреса интерфейсу.
down
вызывает остановку работы драйвера для интерфейса.
[-]arp
включает или отключает использование протокола ARP для интерфейса.
[-]promisc
включает или отключает неразборчивый режим (promiscuous mode) работы интерфейса. В этом режиме все проходящие по сети пакеты будут приниматься интерфейсом.
[-]allmulti
включает или отключает режим all-multicast. В этом режиме все многоадресные (multicast) пакеты в сети будут приниматься интерфейсом.
metric N
устанавливает метрику интерфейса.
mtu N
устанавливает максимальный размер пакета (Maximum Transfer Unit - MTU) для интерфейса.
address
IP-адрес, присваиваемый интерфейсу.
netmask адрес
устанавливает маску сети IP для этого интерфейса. По умолчанию используется обычная маска сети класса A, B или C (что определяется по IP-адресу интерфейса), но можно усановить любое значение.
add адрес/длина_префикса
добавляет адрес IPv6 для интерфейса.
del адрес/длина_префикса
удаляет адрес IPv6 для интерфейса.
irq адрес
устанавливает аппаратное прерывание, используемое устройством. Не для всех устройств можно динамически менять значение IRQ.
media тип
устанавливает физический порт или тип носителя, используемый устройством. Не для всех устройств можно менять этот параметр, и для разных устройств могут поддерживаться различные значения. Типичные значения типа - 10base2 (коаксиальный кабель Ethernet), 10baseT (витая пара Ethernet 10 Мбит/сек), AUI (внешний передатчик) и т.д. Специальный тип носителя auto можно использовать, чтобы потребовать от драйвера автоматически обпределять тип носителя. Не все драйверы могут это делать.
[-]broadcast [адрес]
если указан аргумент адрес, задает соответствующий протоколу широковещательный адрес для интерфейса. В противном случае устанавливает (или сбрасывает) флаг IFF_BROADCAST для интерфейса.
Пример. изменение IP-адреса интерфейса rl0:
    user@desktop ~ $ ifconfig rl0
    rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
               options=8<VLAN_MTU>
               inet6 fe80::250:22ff:febb:5f1%rl0 prefixlen 64 scopeid 0x3
               inet 192.168.19.86 netmask 0xffffff00 broadcast 192.168.19.255
               ether 00:50:22:bb:05:f1
               media: Ethernet autoselect (100baseTX <full-duplex>)
               status: active
    user@desktop ~ $ ifconfig rl0 192.168.0.1
    user@desktop ~ $ ifconfig rl0
    rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
               options=8<VLAN_MTU>
               inet6 fe80::250:22ff:febb:5f1%rl0 prefixlen 64 scopeid 0x3
               inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.19.255
               ether 00:50:22:bb:05:f1
               media: Ethernet autoselect (100baseTX <full-duplex>)
               status: active
arp
Команда arp отображает ARP-таблицу данного хоста. С помощью параметра -i можно специфицировать сетевой интерфейс, информация о котором интересует.
    desktop ~ # arp -i eth0
    Address                  HWtype  HWaddress           Flags Mask            Iface
    DIMON.mshome.net         ether   00:50:BF:12:8A:9E   C                     eth0
Таблица с информацией о канальном уровне содержит связь IP- и MAC-адресов. При использовании параметра -n IP-адреса не будут заменяться символьными именами хостов.
route
Эта команда используется для просмотра и изменения таблицы маршрутизации хоста. Для этой команды также работает параметр -n, при использовании которого IP-адреса не будут заменяться символьными именами хостов.
Пример обычной таблицы маршрутизации для отдельного компьютера в сети:
    desktop ~ # route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.5.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
    127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
    0.0.0.0         192.168.5.254   0.0.0.0         UG    0      0        0 eth1
Особый интерес представляет адрес 0.0.0.0, который соответствует хосту назначения по умолчанию.
Для добавление нового маршрута к определённому хосту используются параметры add и -host:
    desktop ~ # route add -host 192.168.0.1 eth0
Эта команда создаёт новую строку в таблице маршрутизации, согласно которой все пакетыы к узлу 192.168.0.1 должны отправляться в сетевой интерфейс eth0.
Также можно добавлять шлюз для отправки пакетов в определённую сеть или к хосту:
    desktop ~ # route add -net 192.168.1.0 gw 192.168.0.5
Таким образом, все пакеты для сети 192.168.1.0 будут направляться на узел 192.168.0.5.
Аналогично, маршруты удаляются параметром del с указанием всей информации о маршруте:
    desktop ~ # route del default gw 192.168.0.1
Эта команда удаляет маршрут по умолчанию через хост 192.168.0.1.

Команды по диагностике сети[править]

ping
Команда используется для посылки пакетов ICMP ECHO_REQUEST сетевым хостам.
Команда ping имеет следующий синтаксис:
ping [-AaDdfnoQqRrv] [-c число_пакетов] [-i секунд] [-l preload] [-M mask | time] [-m ttl] [-P policy] [-p pattern] [-S src_addr] [-s packetsize] [-t timeout] [-z tos] host ping [-AaDdfLnoQqRrv] [-c число_пакетов] [-I iface] [-i секунд] [-l preload] [-M mask | time] [-m ttl] [-P policy] [-p pattern] [-S src_addr] [-s packetsize] [-T ttl] [-t timeout] [-z tos] mcast-group
Команда ping использует датаграмму ECHO_REQUEST протокола ICMP, чтобы вызвать ответ ICMP ECHO_RESPONSE указанного хоста или сетевого шлюза. Если хост отвечает, ping выдает сообщение, что хост включен (хост is alive), в стандартный выходной поток.
Для проверки наличия хоста в сети достаточно ввести команду ping с аргументом - именем или адресом хоста:
    user@desktop$ ping yandex.ru
    64 bytes from 213.180.204.11: icmp_seq=0 ttl=48 time=5.659 ms
    64 bytes from 213.180.204.11: icmp_seq=1 ttl=48 time=5.404 ms
    64 bytes from 213.180.204.11: icmp_seq=2 ttl=48 time=4.889 ms
    ^C
    --- yandex.ru ping statistics ---
    3 packets transmitted, 3 packets received, 0% packet loss
    round-trip min/avg/max/stddev = 4.889/5.317/5.659/0.320 ms
Для отправки определенного числа пакетов необходимо указать опцию -c число_пакетов. Для установки интервала между отправкой пакетов используется опция -i секунд.
traceroute
Команда traceroute служит для отладки сетевых соединений посредством построения маршрута следования пакетов к хосту назначения. Для этой команды также работает параметр -n, при использовании которого IP-адреса не будут заменяться символьными именами хостов.
Пример следования пакетов до хоста ya.ru:
    desktop ~ # traceroute ya.ru
    traceroute to ya.ru (213.180.204.8), 64 hops max, 40 byte packets
     1  195.91.230.65 (195.91.230.65)  0.890 ms  1.907 ms  0.809 ms
     2  cs7206.rinet.ru (195.54.192.28)  0.895 ms  0.769 ms  0.605 ms
     3  ix2-m9.yandex.net (193.232.244.93)  1.855 ms  1.519 ms  2.95 ms
     4  c3-vlan4.yandex.net (213.180.210.146)  3.412 ms  2.698 ms  2.654 ms
     5  ya.ru (213.180.204.8)  2.336 ms  2.612 ms  3.482 ms
netstat
Команда используется для показа состояния сети.
Команда netstat имеет следующий синтаксис:
netstat [-AaLnSW] [-f protocol_family | -p protocol] [-M core] [-N system]
Команда netstat показывает содержимое различных структур данных, связанных с сетью, в различных форматах в зависимости от указанных опций. Первая форма команды показывает список активных сокетов (sockets) для каждого протокола. Вторая форма выбирает одну из нескольких других сетевых структур данных. Третья форма показывает динамическую статистику пересылки пакетов по сконфигурированным сетевым интерфейсам; аргумент интервал задает, сколько секунд собирается информация между последовательными показами.
Опции:
-a
показывать состояние всех сокетов; обычно сокеты, используемые серверными процессами, не показываются.
-A
показывать адреса любых управляющих блоков протокола, связанных с сокетами; используется для отладки.
-i
показывать состояние автоматически сконфигурированных (auto-configured) интерфейсов. Интерфейсы, статически сконфигурированные в системе, но не найденные во время загрузки, не показываются.
-n
показывать сетевые адреса как числа. netstat обычно показывает адреса как символы. Эту опцию можно использовать с любым форматом показа.
-r
показать таблицы маршрутизации. При использовании с опцией -s, показывает статистику маршрутизации.
-s
показать статистическую информацию по протоколам. При использовании с опцией -r, показывает статистику маршрутизации.
-f семейство_адресов
ограничить показ статистики или адресов управляющих блоков только указанным семейством_адресов, в качестве которого можно указывать:
inet − Для семейства адресов AF_INET
unix − Для семейства адресов AF_UNIX
-I интерфейс
выделить информацию об указанном интерфейсе в отдельный столбец; по умолчанию (для третьей формы команды) используется интерфейс с наибольшим объемом переданной информации с момента последней перезагрузки системы. В качестве интерфейса можно указывать любой из интерфейсов, перечисленных в файле конфигурации системы, например, emd1 или lo0.
-p имя_протокола
Ограничить показ статистики или адресов управляющих блоков только протоколом с указанным именем_протокола, например, tcp.
Пример. показ таблицы маршрутизации:
    user@desktop ~$ netstat -r
    Routing tables                  
    Internet:
    Destination        Gateway            Flags    Refs      Use  Netif Expire
    default            19-101.local       UGS         0  1373769    rl0
    localhost          localhost          UH          1      290    lo0
    192.168.0          link#1             UC          0        0    dc0
    192.168.19         link#3             UC          0        0    rl0
    19-86.local        localhost          UGHS        0        0    lo0
    19-101.local       00:0d:bc:e4:27:bf  UHLW        1        0    rl0    116

    Internet6:
    Destination        Gateway            Flags      Netif Expire
    localhost.prov.ru  localhost.prov.ru  UH          lo0
    fe80::%dc0         link#1             UC          dc0
    fe80::2a0:ccff:fe3 00:a0:cc:3d:1f:bd  UHL         lo0
    fe80::%rl0         link#3             UC          rl0
    fe80::250:22ff:feb 00:50:22:bb:05:f1  UHL         lo0
    fe80::%lo0         fe80::1%lo0        U           lo0
    fe80::1%lo0        link#5             UHL         lo0
    ff01::             localhost.prov.ru  U           lo0
    ff02::%dc0         link#1             UC          dc0
    ff02::%rl0         link#3             UC          rl0
    ff02::%lo0         localhost.prov.ru  UC          lo0
host
Команда host служит для получения доменной информации о хосте: IP-адрес, MX-записи и другой информации, связанной с данным символьным именем. Имя хоста указывается в качестве аргумента команды.
Пример работы команды:
    user@desktop ~$ host yandex.ru
    yandex.ru has address 213.180.204.11
    yandex.ru mail is handled by 10 mx2.yandex.ru.
    yandex.ru mail is handled by 0 mx1.yandex.ru.
Вторым аргументом можно указать DNS-сервер, который будет использоваться при получении этой информации:
    user@desktop ~$ host yandex.ru ns1.aiya.ru
    Using domain server:
    Name: ns1.aiya.ru
    Address: 85.142.20.152#53
    Aliases:

    yandex.ru has address 213.180.204.11
    Using domain server:
    Name: ns1.aiya.ru
    Address: 85.142.20.152#53
    Aliases:

    Using domain server:
    Name: ns1.aiya.ru
    Address: 85.142.20.152#53
    Aliases:

    yandex.ru mail is handled by 0 mx1.yandex.ru.
    yandex.ru mail is handled by 10 mx2.yandex.ru.
tcpdump
Команда tcpdump используется для мониторинга сети на канальном и более высоких уровнях. Программа «слушает» на одним или нескольких сетевых интерфейсах и выводит дамп пакетов, проходящих через этот интерфейс.
Параметр -i задаёт имя сетевого интерфейса, на котором запускается прослушивание. При просмотре захватываемых данных удобно использовать ключ -l, который буферезует вывод построчно. Для этой команды также работает параметр -n, при использовании которого IP-адреса не будут заменяться символьными именами хостов. Пример работы команды:
    desktop ~ # tcpdump -i eth0 -l -n
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
    12:51:07.486755 arp who-has 0.0.0.0 (00:30:48:2b:6d:6a) tell 0.0.0.0
    12:51:12.486606 arp who-has 0.0.0.0 (00:30:48:2b:6d:6a) tell 0.0.0.0
    12:51:14.457608 IP 192.168.5.23.56385 > 194.91.250.11.443: P 3645922938:3645923156(218) ack 2092518729 win 10086
    12:51:14.491343 IP 194.91.250.11.443 > 192.168.5.23.56385: . ack 218 win 10720
Для вывода расширенной информации о пакетах исплюзуются ключи -v или -vv.
    desktop ~ # tcpdump -i eth1 -l -n -vv
    tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
    12:57:53.043797 IP (tos 0x0, ttl  51, id 46031, offset 0, flags [DF], proto: TCP (6),
      length: 286) 194.91.250.11.5190 > 192.168.5.23.38993: P 2517343058:2517343292(234)
      ack 2346573376 win 2202 <nop,nop,timestamp 2713588760 497668>
    12:57:53.043865 IP (tos 0x0, ttl  64, id 52382, offset 0, flags [DF], proto: TCP (6),
      length: 52) 192.168.5.23.38993 > 194.91.250.11.5190: ., cksum 0x1fd7 (correct),
      1:1(0) ack 234 win 11945 <nop,nop,timestamp 506366 2713588760>
    12:57:53.401516 IP (tos 0x0, ttl  48, id 45237, offset 0, flags [DF], proto: TCP (6),
      length: 210) 194.91.250.11.443 > 192.168.5.23.56385: P 2092522043:2092522213(170)
      ack 3645927446 win 10720
    ...
Команда tcpdump обладает очень богатым интерфейсом, включающем условные выражения, по которым должны выделяться интересующие пакеты. Например, можно использовать условия удалённого порта (равно 80):
    desktop ~ # tcpdump -i eth1 -l -n -vv dst port 80
    tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
    13:55:36.563959 IP (tos 0x0, ttl  64, id 3936, offset 0, flags [DF], proto: TCP (6),
      length: 60) 192.168.5.23.52348 > 213.180.204.11.80: S, cksum 0x2766 (correct),
      3855548287:3855548287(0) win 5840 <mss 1460,sackOK,timestamp 1372191 0,nop,wscale 2>
    13:55:36.592654 IP (tos 0x0, ttl  64, id 3937, offset 0, flags [DF], proto: TCP (6),
      length: 40) 192.168.5.23.52348 > 213.180.204.11.80: ., cksum 0xebc5 (correct),
      3855548288:3855548288(0) ack 3869420799 win 5840
    13:55:36.592731 IP (tos 0x0, ttl  64, id 3938, offset 0, flags [DF], proto: TCP (6),
      length: 627) 192.168.5.23.52348 > 213.180.204.11.80: P 0:587(587) ack 1 win 5840
    ...
nmap
Команда nmap – сетевой сканер, с помощью которого можно определить уязвимость удалённых хостов. Основное назначение этой программы – определение состояние портов удалённого хоста (закрыты они, открыты или заблокированны). Также программа может на основании собственной базы знаний определить по поведению удалённого хоста, какая операционная система запущена на нём.

Команды удалённого терминала[править]

telnet
telnet – программа сетевого терминала.
ssh
Программа ssh является более современным и защищённым аналогом программы telnet.

Команды по управлению сетевым экраном[править]

iptables
Команда iptables является интерфейсом к межсетевому экрану ядра Linux.

Резюме[править]

В этом разделе описываются основные команды по управлению и диагностике сети в UNIX.

Ключевые термины:ifconfig, arp, route, ping, traceroute, netstat, host, tcpdump, nmap, telnet, ssh, iptables

Дополнительные материалы[править]

  1. Курячий Г.В. Операционная система UNIX. – М.:Интуит.Ру, 2004. – 292 с.: ил.
  2. Рейчард К., Фостер-Джонсон Э. UNIX: справочник. – СПб.: Питер Ком, 1999. – 384 с.: ил.