Сборник практических заданий по МДК 02. 01 спец. 09. 02. 03. Программирование в компьютерных системах

Раздел Информатика
Класс 12 класс
Тип Другие методич. материалы
Автор
Дата
Формат doc
Изображения Есть
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

Государственное бюджетное образовательное учреждение

среднего профессионального образования

«Дзержинский педагогический колледж»







КОМПЬЮТЕРНЫЕ СЕТИ







Дзержинск - 2015

Андрианов А.В. Компьютерные сети: рекомендации для студентов специальностей «Программирование в компьютерных системах», «Прикладная информатика»/А.В.Андрианов. - Дзержинск, ГБОУ СПО «Дзержинский педагогический колледж», 2015. - с.

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











Содержание



  1. Примеры таблиц маршрутизации разных форматов……………………………..2

  2. Технология бесклассовой междоменной маршрутизации ………………………6

  3. Фильтрация…………………………………………………………………………..9

4. Использование iptables для фильтрации пакетов………………………………….12















Примеры таблиц маршрутизации разных форматов

Структура реальных таблиц маршрутизации стека TCP/IP в целом соответствует упрощенной структуре таблиц, рассмотренных выше. Отметим, однако, что вид таблицы IP-маршрутизации зависит от конкретной реализации стека TCP/IP. Приведем пример нескольких вариантов таблицы маршрутизации, с которыми мог бы работать маршрутизатор R1 в сети, представленной на рис. 1.

Начнем с «придуманного», предельно упрощенного варианта таблицы маршрутизации (табл. 1). Здесь имеются три маршрута к сетям (записи 56.0.0.0, 116.0.0.0 и 129.13.0.0), две записи о непосредственно подсоединенных сетях (129.13.0.0 и 213.34.12.0), а также запись о маршруте по умолчанию.

Таблица 1. Упрощенная таблица маршрутизации маршрутизатора R1

Адрес сети назначения

Адрес следующего маршрутизатора

Адрес выходного интерфейса

Расстояние до сети назначения

56.0.0.0

213.34.12.4

213.34.12.3

15

116.0.0.0

213.34.12.4

213.34.12.3

13

129.13.0.0

198.21.17.6

198.21.17.5

2

129.13.0.0

198.21.17.5

198.21.17.5

1

213.34.12.0

213.34.12.3

213.34.12.3

1

Маршрут по умолчанию

198.21.17.7

198.21.17.5

-

Более сложный вид имеют таблицы, которые генерируются в промышленно выпускаемом сетевом оборудовании.

Если представить, что в качестве маршрутизатора R1 в данной сети работает штатный программный маршрутизатор операционной системыMicrosoft Windows 2000, то его таблица маршрутизации могла бы выглядеть так, как табл. 2.

Если на месте маршрутизатора R1 установить один из популярных аппаратных маршрутизаторов, то его таблица маршрутизации для этой же сети может выглядеть совсем иначе (табл. 3).

И, наконец, табл. 4 представляет собой таблицу маршрутизации для того же маршрутизатора R1, реализованного в виде программного маршрутизатора одной из версий операционной системы Unix.


Таблица 2. Таблица программного маршрутизатора ОС Windows 2000

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

Маска

Адрес шлюза

Интерфейс

Метрика

127.0.0.0

255.0.0.0

127.0.0.1

127.0.0.1

1

0.0.0.0

0.0.0.0

198.21.17.7

198.21.17.5

1

56.0.0.0

255.0.0.0

213.34.12.4

213.34.12.3

15

116.0.0.0

255.0.0.0

213.34.12.4

213.34.12.3

13

129.13.0.0

255.255.0.0

198.21.17.6

198.21.17.5

2

198.21.17.0

255.255.255.0

198.21.17.5

198.21.17.5

1

198.21.17.5

255.255.255.255

127.0.0.1

127.0.0.1

1

198.21.17.255

255.255.255.255

198.21.17.5

198.21.17.5

1

213.34.12.0

255.255.255.0

213.34.12.3

213.34.12.3

1

213.34.12.3

255.255.255.255

127.0.0.1

127.0.0.1

1

213.34.12.255

255.255.255.255

213.34.12.3

213.34.12.3

1

224.0.0.0

224.0.0.0

198.21.17.6

198.21.17.6

1

224.0.0.0

224.0.0.0

213.34.12.3

213.34.12.3

1

255.255.255.255

255.255.255.255

198.21.17.6

198.21.17.6

1


Таблица 3. Таблица маршрутизации аппаратного маршрутизатора

Адрес назначения

Маска

Шлюз

Метрика

Статус

TTL

Источник

198.21.17.0

255.255.255.0

198.21.17.5

0

Up

-

Подключена

213.34.12.0

255.255.255.0

213.34.12.3

0

Up

-

Подключена

56.0.0.0

255.0.0.0

213.34.12.4

14

Up

-

Статическая

116.0.0.0

255.0.0.0

213.34.12.4

12

Up

-

Статическая

129.13.0.0

255.255.0.0

198.21.17.6

1

Up

160

RIP


Таблица 4. Таблица маршрутизации Unix-маршрутизатора

Адрес назначения

Шлюз

Флаги

Число ссылок

Загрузка

Интерфейс

127.0.0.0

127.0.0.1

UH

1

154

lo0

Маршрут по умолчанию

198.21.17.7

UG

5

43270

le0

198.21.17.0

198.21.17.5

U

35

246876

lе0

213.34.12.0

213.34.12.3

U

44

132435

le1

129.13.0.0

198.21.1.7.6

UG

6

16450

le0

56.0.0.0

213.34.12.4

UG

12

5764

le1

116.0.0.0

213.34.12.4

UG

21

23544

le1

ПРИМЕЧАНИЕ

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

Несмотря на достаточно заметные внешние различия, во всех трех «реальных» таблицах присутствуют все рассмотренные выше ключевые данные, которые необходимы протоколу IP для маршрутизации пакетов.

К таким данным, во-первых, относятся адреса сети назначения (столбцы адреса назначения в аппаратном маршрутизаторе и маршрутизаторе Unix или столбец сетевой адрес в маршрутизаторе ОС Windows 2000).

Вторым обязательным полем таблицы маршрутизации является адрес следующего маршрутизатора (столбцы «Шлюз» в аппаратном маршрутизаторе и маршрутизаторе Unix или столбец «Адрес шлюза» в маршрутизаторе ОС Windows 2000).

Третий ключевой параметр - адрес порта, на который нужно направить пакет, в некоторых таблицах указывается прямо (столбец «Интерфейс» в таблице маршрутизатора ОС Windows 2000), а в некоторых - косвенно. Так, в таблице Unix-маршрутизатора вместо адреса порта задается его условное наименование - lе0 для порта с адресом 198.21.17.5, le1 для порта с адресом 213.34.12.3 и lо0 для внутреннего порта с адресом 127.0.0.1. В аппаратном маршрутизаторе поле, обозначающее выходной порт в какой-либо форме, вообще отсутствует. Это объясняется тем, что адрес выходного порта всегда можно косвенно определить по адресу следующего маршрутизатора. Например, определим по табл. 18.6 адрес выходного порта для сети 56.0.0.0. Из таблицы следует, что следующим маршрутизатором для этой сети будет маршрутизатор с адресом 213.34.12.4. Адрес следующего маршрутизатора должен принадлежать одной из непосредственно присоединенных к маршрутизатору сетей, и в данном случае это сеть 213.34.12.0. Маршрутизатор имеет порт, присоединенный к этой сети, и адрес этого порта 213.34.12.3 мы находим в столбце «Шлюз» второй строки таблицы маршрутизации, которая описывает непосредственно присоединенную сеть 213.34.12.0. Для непосредственно присоединенных сетей адресом следующего маршрутизатора всегда является адрес собственного порта маршрутизатора. Таким образом, для сети 56.0.0 адресом выходного порта является 213.34.12.3.

Стандартным решением сегодня является использование поля маски в каждой записи таблицы, как это сделано в таблицах маршрутизатора ОС Windows 2000 и аппаратного маршрутизатора (столбцы «Маска»). Обработка масок при принятии решения маршрутизаторами будет рассмотрена далее. Отсутствие поля маски говорит о том, что либо маршрутизатор рассчитан на работу только с тремя стандартными классами адресов, либо для всех записей используется одна и та же маска, что снижает гибкость маршрутизации.

Поскольку в таблице маршрутизации Unix-маршрутизатора каждая сеть назначения упомянута только один раз, а, значит, выбор маршрута отсутствует, то поле метрики является необязательным параметром. В остальных двух таблицах поле метрики используется только для указания на то, что сеть подключена непосредственно. Метрика 0 для аппаратного маршрутизатора или 1 для маршрутизатора ОС Windows2000 говорит маршрутизатору, что эта сеть непосредственно подключена к его порту, а другое значение метрики соответствует удаленной сети. Выбор метрики для непосредственно подключенной сети (1 или 0) является произвольным, главное, чтобы метрика удаленной сети отсчитывалась с учетом этого выбранного начального значения. В Unix-маршрутизаторе используется поле признаков, где флаг G (Gateway- шлюз) отмечает удаленную сеть, а его отсутствие - непосредственно подключенную.

Признак непосредственно подключенной сети говорит маршрутизатору, что пакет уже достиг своей сети, поэтому протокол IP активизирует ARP-запрос относительно IР-адреса узла назначения, а не следующего маршрутизатора.

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

Флаги записей присутствуют только в таблице Unix-маршрутизатора.

  • U - маршрут активен и работоспособен. Аналогичный смысл имеет поле статуса в аппаратном маршрутизаторе.

  • H - признак специфического маршрута к определенному хосту.

  • G - означает, что маршрут пакета проходит через промежуточный маршрутизатор (шлюз). Отсутствие этого флага отмечает непосредственно подключенную сеть.

  • D - означает, что маршрут получен из перенаправленного сообщения протокола ICMP. Этот признак может присутствовать только в таблице маршрутизации конечного узла. Признак означает, что конечный узел в какой-то предыдущей передаче пакета выбрал не самый рациональный следующий маршрутизатор на пути к данной сети, и этот маршрутизатор с помощью протокола ICMP сообщил конечному узлу, что все последующие пакеты к данной сети нужно отправлять через другой маршрутизатор.

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

В записях таблиц аппаратного маршрутизатора также имеется два справочных поля. Поле времени жизни записи (TTL) в данном случае никак не связано со временем жизни пакета. Здесь оно показывает время, в течение которого значение данной записи еще действительно. Поле источника говорит об источнике появления записи в таблице маршрутизации.

Практическое задание

Разработать таблицу маршрутизации для своего маршрутизатора в соответствии со своим вариантом. Таблица маршрутизации должна включать в себя адреса сетей на расстоянии не более 2х хопов. Остальные сети должны входить в маршрут по умолчанию. Необходимо разработать:

  • упрощенную таблицу маршрутизации

  • аппаратную таблицу маршрутизации

  • таблицу маршрутизации Windows

  • таблицу маршрутизации UNIX

Сборник практических заданий по МДК 02.01 спец. 09.02.03. Программирование в компьютерных системах


2. Технология бесклассовой междоменной маршрутизации За последние несколько лет в Интернете многое изменилось: резко возросло число узлов и сетей, повысилась интенсивность трафика, изменился характер передаваемых данных. Из-за несовершенства протоколов маршрутизации обмен сообщениями об обновлении таблиц стал приводить к сбоям магистральных маршрутизаторов, происходящим из-за перегрузок при обработке большого объема служебной информации. Так, сегодня таблицы магистральных маршрутизаторов в Интернете могут содержать до нескольких сотен и даже тысяч маршрутов.

На решение этой проблемы направлена, в частности, и технология бесклассовой междоменной маршрутизации (Classless Inter-Domain Routing, CIDR).

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

Ранее мы рассматривали примеры, где администраторы корпоративных сетей использовали маски для деления непрерывного пула адресов, полученного от поставщика услуг, на несколько частей, чтобы использовать их для структуризации своей сети. Такой вариант использование масок называется разделением на подсети (subnetting).

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

Вернемся к рис, на котором показано адресное пространство поставщика услуг с участками S1, S2, S3 и S, переданными в пользование четырем клиентам. Этот пример также иллюстрирует рис. 1. В результате агрегирования сетей клиентов в табл. 1 маршрутизатора RISP поставщика услуг для каждого клиента будет выделено по одной строке независимо от количества подсетей, организованных ими в своих сетях. Так, вместо четырех маршрутов к четырем сетям клиента S в таблице задан только один общий для всех них маршрут (выделенный жирным шрифтом).

Таблица 1. Таблица маршрутизатора RISP поставщика услуг

Адрес назначения

Маска

Следующий маршрутизатор

Номер выходного интерфейса

Расстояние

131.57.0.0 (S1)

255.255.255.0

-

1

Подключена

131.57.2.0 (S2)

255.255.255.0

R3

3

1

131.57.6.0 (S3)

255.255.254.0

R3

3

1

131.57.8.0 (S)

255.255.252.0

-

2

1

Маршрут по умолчанию

0.0.0.0

Rexternal

4

-

Сборник практических заданий по МДК 02.01 спец. 09.02.03. Программирование в компьютерных системах

Рис. 1. Объединение подсетей

Итак, внедрение технологии CIDR позволяет решить две основные задачи.

  • Более экономное расходование адресного пространства. Благодаря технологии CIDR поставщики услуг получают возможность «нарезать» блоки из выделенного им адресного пространства в точном соответствии с требованиями каждого клиента, при этом у клиента остается пространство для маневра на случай будущего роста.

  • Уменьшение числа записей в таблицах маршрутизации за счет объединения маршрутов - одна запись в таблице маршрутизации может представлять большое количество сетей. Если все поставщики услуг Интернета будут придерживаться стратегии CIDR, то особенно заметный выигрыш будет достигаться в магистральных маршрутизаторах.

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

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

Технология CIDR уже успешно используется в текущей версии протокола IP (IPv4) и поддерживается такими протоколами маршрутизации, как OSPF, RIP-2, BGP4 (в основном магистральными маршрутизаторами Интернета). Особенности применения технологии CIDR в новой версии протокола IP (IPv6) будут рассмотрены далее.

Практическое задание

Имеется блок из 2048 адресов класса C, начинающийся с сети 192.24.0.0 и заканчивающийся сетью 192.31.255.0, который выделен одному провайдеру. Разработать агрегированный маршрут к этому блоку адресов.

Ответ должен быть с решением!


3. Фильтрация

Протоколы IР-маршрутизации создают таблицы маршрутизации, на основе которых любой узел составной сети может обмениваться информацией с любым другим узлом. Благодаря этому принципу дейтаграммных сетей каждый пользо-ватель Интернета может получать доступ к любому публичному сайту.
Напомним, что в сетях, основанных не технике виртуальных каналов, взаимодействие произвольных узлов невозможно без предварительной процедуры установления между ними виртуального канала.
Однако такая всеобщая достижимость узлов и сетей не всегда отражает потребности их владельцев. Поэтому многие маршрутизаторы поддерживают развитые средства фильтрации пользовательского трафика. а также фильтрации объявлений протоколов маршрутизации, что позволяет дифференцированно управлять достижимостью узлов.


Фильтрация пользовательского трафика


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

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

  • IР-адрес источника и приемника;

  • МАС-адреса источника и приемника;

  • идентификатор интерфейса, с которого поступил пакет;

  • тип протокола, сообщение которого несет IР-пакет (то есть TCP. UDP. ICMP или OSPF);

  • номер порта TCP/UDP (то есть тип протокола прикладного уровня).

При наличии фильтра маршрутизатор сначала проверяет совпадение условия, описанного этим фильтром. с признаками пакета, и при положительной проверке выполняет над пакетом ряд нестандартных действий. Например, пакет можетбыть отброшен (drop); направлен к следующему маршрутизатору, отличающемуся от того, который указан в таблице маршрутизации; помечен, как вероятный кандидат на отбрасывание при возникновении перегрузки. Одним из таких действий может быть и обычная передача пакета в соответствии с записями таблицы маршрутизации. Рассмотрим примеры фильтров, написанных на командном языке маршрутизаторов Cisco. Эти фильтры, называемые списками доступа, сегодня в IР-маршрутизаторах являются очень распространенным средством ограничения пользовательского трафика. Наиболее простым является стандартный список доступа, который учитываетв качестве условия фильтрации только IР-адрес источника. Общая форма такого условия выглядит следующим образом:


access-list номер_списка_доступа {deny | permit} {адрес_источника [ метасимволы_источника ] | any}


Стандартный список доступа определяет два действия c пакетом, который удовлетворяет описанному в фильтре условию: deny, то есть отбросить. и permit, то есть передать для стандартной обработки в соответствии с таблицей маршрутизации. Условием выбора того или иного действия в стандартном списке доступаявляется совпадение IР-адреса источника пакета с адресом источника, заданным в списке. Совпадение проверяется в том же стиле, что и при проверке таблицы маршрутизации, при этом метасимволы являются аналогом маски, но в несколько модифицированном виде. Двоичный нуль в поле метасимволов источника означает, что требуется совпадение значения этого разряда в адресе пришедшего пакета и в адресе, заданном в списке доступа. Двоичная единица означает, что совпадения в этом разряде не требуется. Практически, если вы хотите задать условие для всех адресов некоторой подсети, то должны использовать инвертированное значение маски этой подсети. Параметр any означает любое значение адреса, это просто более понятная и краткая форма записи значения 255.255.255.255 в поле метасимволов источника. Пример стандартного списка доступа:


access-1ist 1 deny 192.78.46.0 0.0.0.255

Здесь:

  • 1 - номер списка доступа;

  • deny - действие с пакетом. который удовлетворяет условию данного списка доступа;

  • 192.78.46.0 - адрес источника;

  • 0.0.0.255 - метасимволы источника.

Этот фильтр запрещает передачу пакетов, у которых в старших трех байтах адреса источника имеется значение 192.78.46.0. Список доступа может включать более одного условия. В этом случае он состоит из нескольких строк с ключевым словом access-list и одним и тем же номером списка доступа. Так, если мы хотим разрешить прохождение через маршрутизатор пакетов хоста 192.78.46.12, запрещая передачу пакетов одному из хостов сети 192.78.46.0/24, то список доступа будет выглядеть следующим образом:

access-list 1 permit 192.78.46.12 0.0.0.0

access-list 1 deny 192.78.46 0 0.0.0.255

access-list 1 permit any

Условия списка доступа проверяются по очереди, если какое-либо из них дает совпадение, то выполняется действие permit или deny, определенное в этом условии. После этого остальные условия списка уже не проверяются. Считается по умолчанию, что в конце каждою списка имеется неявное условие вида: [access-list 1 deny any] Однако, если вам все же требуется пропускать все пакеты, не определенные явно в условиях, необходимо добавить в последней строке условие: access-list 1 permit any Список доступа можно применять к любому интерфейсу маршрутизатора и в любом направлении: если список применяется c ключевым словом in, то он действует на входящие в интерфейс пакеты, а если с ключевым словом out - то на выходящие. Например, написанный нами список доступа 1 можно применить к некоторому интерфейсу для обработки входящего трафика, используя следующую команду: access-group 1 in Существуют также и более мощные типы списков доступа для маршрутизаторов Cisco, например расширенные списки доступа. Общий формат этих списков следующий:

ассеss-list номер_списка_доступа {deny | permit} {protocol | ключевое_слово_протокола} {адрес_источника [ метасимволы_источника ] [ порт__источника ] | any} [адрес_приемника [ метасинволы_приеиника ]] [ порт_приенника]

Пользуясь расширенными списками доступа, можно запретить прохождение вовнутреннюю сеть предприятия FТР-пакетов. Как известно, FTP задействует для приема запросов от клиентов протокол ТСР с хорошо известным портом 21. Для этого в список доступа нужно включить условие:

access-list 102 deny TCP any 21 any

Затем можно применить его к интерфейсу маршрутизатора. к которому подключена внутренняя сеть, с ключевым словом out. Администраторы корпоративных сетей часто запрещают возможность трассировки извне внутренних хостов утилитой ping. Это делается с помощью условия:

access-list 101 deny ICMP any 192.78.46.8 0.0 0.0 eq 8

Как видно из условия, его синтаксис для протокола ICMP несколько отличается от общего синтаксиса расширенных списков доступа. Параметр eq 8 означает, что запрещается передача IСМР-сообщений типа 8, соответствующего эхо-запросам, на основе которых разработана утилита ping. Еще более гибким является язык фильтров программного маршрутизатора. работающего во многих версиях Unix. Синтаксис этого языка близок к синтаксису языка С, что позволяет строить весьма сложные логические конструкции с поощью условных операторов if, then, else. Необходимо отметить, что фильтрация пользовательского трафика может существенно замедлять работу маршрутизатора, так как обработка каждого пакета требует проверки дополнительных условий. Для того чтобы не создавать еще большую нагрузку на маршрутизатор и «не отвлекать его от выполнения основных обязанностей. в фильтрах маршрутизато-ров не используется информация o предыстории сеансов. Сколько бы ни было сложным условие фильтрации маршрутизатора, в нем учитываются только параметры текущего пакета и не могут учитываться параметры предыдущих пакетов, уже обработанных маршрутизатором. Это ограничение является главным отличием маршрутизаторов от брандмауэров, специальных программных систем, которые, используя информацию о предыстории сеансов, выполняют более качест-венную фильтрацию.


Фильтрация маршрутных объявлений

Для контроля достижимости узлов и сетей можно, наряду с фильтрацией пользовательского трафика, ограничить распространение объявлений протоколов маршрутизации. Такая мера предотвращает автоматическое появление в таблице маршрутизации записей о некоторых сетях. Этот способ требует гораздо меньших затрат вычислительной мощности маршрутизатора, так как маршрутные объявления поступают в маршрутизатор гораздо реже, чем пользовательские пакеты. Пусть. например, маршрутизаторы Cisco должны ограничить распространениемаршрутных объявлений о какой-нибудь сети. Для этого нужно включить описание данной сети в стандартный список доступа, а затем применить к интерфейсу специальную команду с ключевым словом distribute-list (вместо access-group. как в случае фильтрации пользовательского трафика). Например, если администратор не хочет, чтобы информация о внутренних сетях предприятия 194.12.34.0/24 и 132.7.0.0/ 16 распространялась по внешним сетям, ему достаточно написать следующий стандартный список доступа:
access-list 2 deny 194 12.34.0 0.0.0.255
access-list 2 deny 132.7.0.0 0.0.255.255
access-list 2 permit any

После этого достаточно применить его к интерфейсу с помощью команды


distribute-Iist 2 out serial 1




4.Использование iptables для фильтрации пакетов

iptables: сетевая безопасность и фильтрация пакетов

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

В Linux файрвол является модулем ядра, называемым netfilter и представляет собой набор хуков (hooks) для работы с сетевым стеком. Интерфейсом для модификации правил, по которым файрвол обрабатывает пакеты, служит утилита iptables для IPv4 и утилита ip6tables для IPv6.

Всю работу по фильтрации трафика выполняет ядро системы. Iptables не является демоном и не создает новых процессов в системе. Включение или выключение iptables это всего лишь отправка сигнала в ядро. Большая скорость фильтрации достигается за счёт анализа только заголовков пакетов.

К основным возможностям iptables относиться:

  • фильтрация трафика на основе адресов отправителя и получателя пакетов, номеров портов;

  • перенаправление пакетов по определенным параметрам;

  • организация доступа в сеть (SNAT);

  • проброс портов из глобальной сети в локальную (DNAT);

  • ограничение числа подключений;

  • установление квот трафика;

  • выполнение правил по расписанию;

Процесс работы iptables

Рассмотрим основной процесс работы iptables (источник картинки rigacci.org).

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

В iptables используется три вида таблиц:

  1. mangle - используется для внесения изменений в заголовок пакета;

  2. nat - используется для трансляции сетевых адресов;

  3. filter - для фильтрации трафика;

Таблица mangle

Основное назначение таблицы mangle - внесение изменений в заголовок пакета. В этой таблице могут производиться следующие действия:

  • установка бита Type Of Service;

  • установка поля Time To Live;

  • установка метки на пакет, которая может быть проверена в других правилах;

Цепочки в таблице mangle:

  • PREROUTING - используется для внесения изменений в пакеты на входе в iptables, перед принятием решения о маршрутизации;

  • POSTROUTING - используется для внесения изменений в пакеты на выходе из iptables, после принятия решения о маршрутизации;

  • INPUT - используется для внесения изменений в пакеты, перед тем как они будут переданы локальному приложению;

  • OUTPUT - используется для внесения изменений в пакеты, поступающие от приложения внутри iptables;

  • FORWARD - используется для внесения изменений в транзитные пакеты;

Таблица nat

Таблица используется для преобразования сетевых адресов (Network Address Translation) и когда встречается пакет, устанавливающий новое соединение. В этой таблице могут производиться следующие действия:

  • DNAT (Destination Network Address Translation) - преобразование адреса назначения в заголовке пакета;

  • SNAT (Source Network Address Translation) - изменение исходного адреса пакета;

  • MASQUERADE - используется в тех же целях, что и SNAT, но позволяет работать с динамическими IP-адресами;

Цепочки в этой таблице:

  • PREROUTING - используется для внесения изменений в пакеты на входе в iptables;

  • OUTPUT - используется для преобразования адресов в пакетах, перед дальнейшей маршрутизацией;

  • POSTROUTING - используется для преобразования пакетов, перед отправкой их в сеть;

Таблица filter

Таблица используется для фильтрации пакетов. В этой таблице есть три цепочки:

  1. INPUT - цепочка для входящих пакетов;

  2. FORWARD - цепочка для пересылаемых (транзитных) пакетов;

  3. OUTPUT - цепочка для исходящих пакетов;

Пакет, проходящий через эти цепочки, может подвергаться действиям: ACCEPT, DROP, REJECT, LOG.

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

Утилита iptables

Установка iptables

# под Arch Linux

yaourt -S iptables

# под Ubuntu

sudo apt-get install iptables

Запуск iptables

# под Arch Linux

sudo systemctl enable iptables

sudo systemctl start iptables

# под Ubuntu

sudo service iptables start

Сохранение правил

# под Arch Linux

sudo sh -c "iptables-save > /etc/iptables/iptables.rules"

# под Ubuntu

sudo sh -c "iptables-save > /etc/iptables.rules"

Восстановление правил из файла

iptables-restore < firewall-config

Каждое правило в iptables - это отдельная строка, сформированная по определенным правилам и содержащая критерии и действия. В общем виде правило имеет такой формат:

iptables [-t table] command [match] [target/jump]

  • t table - задает имя таблицы, для которой будет создано правило;

  • command - команда, которая определяет действие iptables - добавить правило, удалить правило и т. д.;

  • match - задает критерии проверки, по которым определяется, попадает ли пакет под действие правила или нет;

  • target/jump - какое действие должно быть выполнено при выполнении критерия;

Команды iptables:

  • -A - добавление правила в цепочку, правило будет добавлено в конец цепочки;

  • -D - удаление правила из цепочки;

  • -R - заменить одно правило другим;

  • -I - вставить новое правило в цепочку;

  • -L - вывод списка правил в заданной цепочке;

  • -F - сброс всех правил в заданной цепочке;

  • -Z - обнуление всех счетчиков в заданной цепочке;

  • -N - создание новой цепочки с заданным именем;

  • -X - удаление цепочки;

  • -P - задает политику по умолчанию для цепочки;

  • -E - переименование пользовательской цепочки;

Примеры команд iptables

Пакеты можно фильтровать по таким параметрам:

Источник пакета

Для фильтрации по источнику используется опция -s. Например запретим все входящие пакеты с узла 192.168.1.95:

iptables -A INPUT -s 192.168.1.95 -j DROP

Можно использовать доменное имя для указания адреса хоста:

iptables -A INPUT -s test.host.net -j DROP

Также можно указать целую под сеть:

iptables -A INPUT -s 192.168.1.0/24 -j DROP

Также вы можете использовать отрицание (знак !). Например, все пакеты с хостов отличных от 192.168.1.96 будут уничтожаться:

iptables -A INPUT ! -s 192.168.1.96 -j DROP

Разрешаем хождение трафика по localhost:

iptables -A INPUT 1 -i lo -j ACCEPT

Логируем попытки спуфинга с префиксом "IP_SPOOF A: " и дропаем соединение

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: "

iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP

Адрес назначения

Для этого нужно использовать опцию -d. Например запретим все исходящие пакеты на хост 192.168.1.95:

iptables -A OUTPUT -d 192.168.156.156 -j DROP

Запретить доступ к ресурсу

iptables -A OUTPUT -d vk.com -j REJECT

Как и в случае с источником пакета можно использовать адреса под сети и доменные имена. Отрицание также работает.

Протокол

Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp или номер протокола (из /etc/protocols).

Разрешаем входящие эхо-запросы

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Порт источника

Разрешаем все исходящие пакеты с порта 80:

iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Заблокировать все входящие запросы порта 80:

iptables -A INPUT -p tcp --dport 80 -j DROP

Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.

Открыть диапазон портов

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 7000:7010 -j ACCEPT

Порт назначения

Разрешить подключения по HTTP

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Разрешить подключения по SSH

iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT

Разрешаем получать данные от DHCP-сервера

iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT

Разрешаем rsync с определенной сети

iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

Разрешаем IMAP/IMAP2 трафик

iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

Разрешить исходящие HTTP, FTP, DNS, SSH, SMTP

iptables -A OUTPUT -p TCP -o eth0 --dport 443 -j ACCEPT

iptables -A OUTPUT -p TCP -o eth0 --dport 80 -j ACCEPT

iptables -A OUTPUT -p TCP -o eth0 --dport 53 -j ACCEPT

iptables -A OUTPUT -p UDP -o eth0 --dport 53 -j ACCEPT

iptables -A OUTPUT -p TCP -o eth0 --dport 25 -j ACCEPT

iptables -A OUTPUT -p TCP -o eth0 --dport 22 -j ACCEPT

iptables -A OUTPUT -p TCP -o eth0 --dport 21 -j ACCEPT

Разрешаем mysql для локальных пользователей

iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

Разрешить CUPS (сервер печати, порт 631) для пользователей внутри локальной сети

iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT

Разрешить синхронизацию времени NTP для пользователей внутри локальной сети

iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT

Разрешить торенты

iptables -A INPUT -p TCP -i eth0 --dport 51413 -j ACCEPT

iptables -A INPUT -p UDP -i eth0 --dport 51413 -j ACCEPT

iptables -A INPUT -p TCP -i eth0 --dport 6881 -j ACCEPT

iptables -A INPUT -p UDP -i eth0 --dport 6881 -j ACCEPT

Разрешить исходящий Google Talk

iptables -A OUTPUT -p TCP -o eth0 --dport 5222 -j ACCEPT

Разрешить TeamViewer

iptables -A OUTPUT -p UDP -o eth0 --dport 5938 -j ACCEPT

Port Forwarding

Для примера направим трафик с порта 442 на 22, это значит что входящие ssh-соединения могут быть принятыми с порта 422 и 22.

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.15 --dport 422 -j DNAT --to 192.168.1.15:22

Также надо разрешить входящие соединения с порта 422

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

Как и в случае с портом источника нужно указать протокол. Можно использовать отрицание.

Действия над пакетами

Для указания действия (цели) с пакетом служит опция -j. Основные действия:

  • ACCEPT - разрешить пакет;

  • DROP - уничтожить пакет;

  • REJECT - будет отправлено ICMP сообщение, что порт недоступен;

  • LOG - информация об этом пакете будет добавлена в системный журнал. Не прерывает цепочку.

  • RETURN - возвращает пакет в ту цепочку, из которой он прибыл;

  • SNAT - применить source NAT ко всем удовлетворяющим условию пакетам. Может использоваться только в цепочках POSTROUTING и OUTPUT таблицы NAT;

  • DNAT - применить destination NAT ко всем удовлетворяющим условию пакетам. Может использоваться только в цепочке POSTROUTING таблицы NAT*.

  • MASQUERADE - может применяться только в цепочке POSTROUTING таблицы NAT. Используется при наличии соединения с динамическим IP. Похож на SNAT, однако имеет свойство забывать про все активные соединения при потере интерфейса. Это полезно при наличии соединения, на котором время от времени меняется IP-адрес, но при наличии постоянного IP это только доставит неудобства. В том числе поэтому рекомендуется для статических IP использовать SNAT.

Разница между DROP и REJECT (источник)

DROP - просто закрывает соединение и не отправляет ничего в ответ отправителю. Как итог имеем "мертвое"" соединение, которое потом убивается по таймауту. Но зато при сканировании закрытых портов, они будут помечаться как filtered, что потенциально говорит, что что-то всё-таки слушает порт.

REJECT - сбрасывает соединение и отправляет в ответ сообщение, указанное в опции -reject-with. По умолчанию отправляется host is unreachable. Зато при сканировании (если установлено -reject-with icmp-port-unreachable) порт светится не будет.

И так, что же всё-таки использовать? На мой взгляд, лучше DROP, так как при больших атаках, вы просто перекроете себе кислород, отвечая всем «host is unreachable«. Этот ответ будет потреблять больше ресурсов, нежели мёртвое соединение (при желаении время таймаута можно сократить).

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

iptables -A INPUT -s 192.168.1.0/24 -j LOCAL_NET

Пример базового набора правил

В большинстве случаев конечному пользователю (рабочая станция) достаточно выполнить такую последовательность команд:

iptables -P FORWARD DROP

iptables -P OUTPUT ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -P INPUT DROP

Модули

В iptables есть возможность подключать модули, для этого используется опция -m.

Модуль limit предназначен для ограничения нагрузки, например:

iptables -A INPUT -p icmp -m limit --limit 4/second -j ACCEPT

Разрешаем поддерживать открытыми уже установленные соединения

iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Другие правила

Список текущих правил

iptables -nvL --line-numbers

где

  • L - показать список правил;

  • v - отображать дополнительную информацию; *n - отображать ip адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение);

  • -line-numbers - вывод номеров строк;

Очистка всех правил

iptables -F

Очистка правил в цепочке

iptables -F INPUT

Удаления пятого правила в цепочке INPUT:

iptables -D INPUT 5

Удалить правило, в котором адрес источника (192.168.1.15)

iptables -D INPUT -s 192.168.1.15 -j DROP

Защита от DDoS с помощью iptables

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

  • Удаленная эксплуатация ошибок в ПО с целью привести его в нерабочее состояние;

  • Flood - посылка на адрес жертвы огромного количества бессмысленных пакетов. Целью флуда может быть канал связи или ресурсы машины. В первом случае поток пакетов занимает весь пропускной канал и не дает атакуемой машине возможность обрабатывать легальные запросы. Во втором - ресурсы машины захватываются с помощью многократного и очень частого обращения к какому-либо сервису, выполняющему сложную, ресурсоемкую операцию. Это может быть, например, длительное обращение к одному из активных компонентов (скрипту) web-сервера. Сервер тратит все ресурсы машины на обработку запросов атакующего, а пользователям приходится ждать. Флуд бывает разным: ICMP-флуд, SYN-флуд, UDP-флуд и HTTP-флуд

Сбор информации о сетевых соединениях

Просмотр открытых соединений

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Количество подключений к 80 порту

netstat -na | grep ":80\ " | wc -l

TCP-дамп подключений (на какой домен чаще всего идут запросы)

tcpdump -npi eth0 port domain

SYN-флуд можно проверить через подсчет числа полуоткрытых TCP-соединений

netstat -na | grep ":80 " | grep SYN_RCVD

Защита от разных видов флуда.

ICMP-флуд. Очень примитивный метод забивания полосы пропускания и создания нагрузок на сетевой стек через монотонную посылку запросов ICMP ECHO (пинг). Легко обнаруживается с помощью анализа потока трафика в обе стороны: во время атаки типа ICMP-флуд они практически идентичны. Почти безболезненный способ абсолютной защиты основан на отключении ответов на запросы ICMP ECHO:

sysctl net.ipv4.icmp_echo_ignore_all=1

Или с помощью iptabels:

iptables -A INPUT -p icmp -j DROP --icmp-type 8

SYN-флуд. Один из распространенных способов не только забить канал связи, но и ввести сетевой стек операционной системы в такое состояние, когда он уже не сможет принимать новые запросы на подключение. Основан на попытке инициализации большого числа одновременных TCP-соединений через посылку SYN-пакета с несуществующим обратным адресом. После нескольких попыток отослать ответный ACK-пакет на недоступный адрес большинство ОС ставят неустановленное соединение в очередь. И только после n-ой попытки закрывают соединение. Так как поток ACK-пакетов очень велик, вскоре очередь оказывается заполненной, и ядро дает отказ на попытки открыть новое соединение. Наиболее умные DoS-боты еще и анализируют систему перед началом атаки, чтобы слать запросы только на открытые жизненно важные порты. Идентифицировать такую атаку просто: достаточно попробовать подключиться к одному из сервисов.

Оборонительные мероприятия обычно включают в себя:

Увеличение очереди "полуоткрытых" TCP-соединений:

sysctl -w net.ipv4.tcp_max_syn_backlog=1024

Уменьшение времени удержания "полуоткрытых" соединений:

sysctl -w net.ipv4.tcp_synack_retries=1

Включение механизма TCP syncookies:

sysctl -w net.ipv4.tcp_syncookies=1

Ограничение максимального числа "полуоткрытых" соединений с одного IP к конкретному порту:

iptables -I INPUT -p tcp --syn --dport 80 -m iplimit --iplimit-above 10 -j DROP

UDP-флуд. Типичный метод захламления полосы пропускания. Основан на бесконечной посылке UDP-пакетов на порты различных UDP-сервисов. Легко устраняется за счет отрезания таких сервисов от внешнего мира и установки лимита на количество соединений в единицу времени к DNS-серверу на стороне шлюза:

iptables -I INPUT -p udp --dport 53 -j DROP -m iplimit --iplimit-above 1

HTTP-флуд. Один из самых распространенных на сегодняшний день способов флуда. Основан на бесконечной посылке HTTP-сообщений GET на 80-ый порт с целью загрузить web-сервер настолько, чтобы он оказался не в состоянии обрабатывать все остальные запросы. Часто целью флуда становится не корень web-сервера, а один из скриптов, выполняющих ресурсоемкие задачи или работающий с базой данных. В любом случае, индикатором начавшейся атаки будет служить аномально быстрый рост логов web-сервера.

Определившись с IP виновника начинаем дропать по IP-адресам

iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --destination-port http -j DROP

Или сразу по подсетям:

iptables -A INPUT -s xxx.xxx.0.0/16 -p tcp --destination-port http -j DROP

Для ограничения количества одновременных подключений к серверу для клиента по IP используется модульconnlimit. Ограничим количество параллельных подключений по SSH до трех, для одного клиента

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

Ограничим количество параллельных подключений по HTTP до трех, для одного клиента

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP

где

  • --connlimit-above 10 - условие для проверки одновременных подключенийне более 10;

  • --connlimit-mask 24 - группировка хостов по длине префикса (для IPv4 это число должно быть 0 и 32;

Также ограничить количество подключений в единицу времени можно с помощью модуля limit.

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

где

  • -m limit - подключаем модуль limit;

  • -limit 25/minute - порог в 25 подключений в минуту;

  • -limit-burst 100 - условие включения порога: после достижения 100 подключений;

Полезные советы

Добавь в /etc/sysctl.conf следующие строки:

# vim /etc/sysctl.conf

# Защита от спуфинга

net.ipv4.conf.default.rp_filter = 1

# Проверять TCP-соединение каждую минуту. Если на другой стороне - легальная машина, она сразу ответит. Дефолтовое значение - 2 часа.

net.ipv4.tcp_keepalive_time = 60

# Повторить пробу через десять секунд

net.ipv4.tcp_keepalive_intvl = 10

# Количество проверок перед закрытием соединения

net.ipv4.tcp_keepalive_probes = 5

Практическое задание

Разработать систему фильтрации с помощью оборудования cisco и с помощью утилиты iptables:

1. Запретить выход в составную сеть всем узлам сети 199.16.18.1

2. Запретить обращение к FTP-серверу 195.56.15.78 всем узлам сети 195.56.14.1

3. Запретить обращение к FTP-серверу 195.56.15.78 всем узлам сети 195.56.20.0 кроме узла 195.56.20.50

4. Разрешить обращение к FTP-серверу 195.56.15.78 всем узлам сети 195.56.17.0 кроме узла 195.56.17.10

Сборник практических заданий по МДК 02.01 спец. 09.02.03. Программирование в компьютерных системах


Практическое задание:

РСборник практических заданий по МДК 02.01 спец. 09.02.03. Программирование в компьютерных системах

азработать систему фильтрации с помощью оборудования cisco и с помощью утилиты iptables:

Список литературы


  1. Олифер В. Г., Олифер Н. А. Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов. 4-е изд. - СПб.: Питер, 2010. - 944 е.: ил.

  2. Iptables: сетевая безопасность и фильтрация пакетов. Форма доступа: proft.me/2013/06/15/iptables-setevaya-bezopasnost-i-filtraciya-paketov/#filter

© 2010-2022