Введение в администрирование 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
Дополнительные материалы
править- Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы. – СПб.: Питер, 2002. – 672 с.: ил.
- Курячий Г.В., Маслинский К.А. Операционная система Linux. – М.: Интуит.Ру, 2005. – 392 с.: ил.
Вопросы
править- Какие уровни входят в модель ISO OSI? Какие можно провести аналогии с реально существующими протоколами?
- Что такое сетевой интерфейс в UNIX? Для чего он используется и каким образом конфигурируется?
- Как управлять IP-маршрутизацией в UNIX?
- Что такое служба доменных имён в UNIX? Как она конфигурируется?
- Какие функции выполняет межсетевой экран? Каковы принципы управления межсетевым экраном 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
Дополнительные материалы
править- Курячий Г.В. Операционная система UNIX. – М.:Интуит.Ру, 2004. – 292 с.: ил.
- Рейчард К., Фостер-Джонсон Э. UNIX: справочник. – СПб.: Питер Ком, 1999. – 384 с.: ил.