Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014-01 ГОРБАЧЕВСКАЯ Защита информации / лаб работы / Метод по лаб работам по МСЗИ_2013.doc
Скачиваний:
188
Добавлен:
20.02.2016
Размер:
2.57 Mб
Скачать

Лабораторная работа № 5

Тема: Утилита iptables

Цель работы

Получение навыков построения программного межсетевого экрана на базе ОС Linux с использованием утилиты iptables

Используемое оборудование

Типовой комплект учебного оборудования «Корпоративные компьютерные сети» производства Научно-производственного предприятия «Учебная техника – Профи» г. Челябинск

Теоретический материал

Утилита iptables

IPTables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) NETFilter для ядер Linux, начиная с версии 2.4. Для использования утилиты IPTables требуются привилегии суперпользователя (root).

Основные понятия

Ключевыми понятиями iptables являются:

1. Правило — состоит из критерия, действия и счетчика. Если пакет соответствует критерию, к нему применяется действие, и он учитывается счетчиком. Критерия может и не быть — тогда неявно предполагается критерий «все пакеты». Указывать действие тоже не обязательно — в отсутствие действия правило будет работать только как счетчик.

Критерий — логическое выражение, анализирующее свойства пакета и/или соединения и определяющее, подпадает ли данный конкретный пакет под действие текущего правила.

Действие — описание действия, которое нужно проделать с пакетом и/или соединением в том случае, если они подпадают под действие этого правила. О действиях более подробно будет рассказано ниже.

Счетчик — компонент правила, обеспечивающий учет количества пакетов, которые попали под критерий данного правила. Также счетчик учитывает суммарный объем таких пакетов в байтах.

2. Цепочка — упорядоченная последовательность правил. Цепочки можно разделить на пользовательские и базовые.

Базовая цепочка — цепочка, создаваемая по умолчанию при инициализации таблицы. Каждый пакет, в зависимости от того, предназначен ли он самому хосту, сгенерирован им или является транзитным, должен пройти положенный ему набор базовых цепочек различных таблиц. Кроме того, базовая цепочка отличается от пользовательской наличием «действия по умолчанию» (default policy). Это действие применяется к тем пакетам, которые не были обработаны другими правилами этой цепочки и вызванных из нее цепочек. Имена базовых цепочек всегда записываются в верхнем регистре (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING).

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

3. Таблица — совокупность базовых и пользовательских цепочек, объединенных общим функциональным назначением. Имена таблиц (как и модулей критериев) записываются в нижнем регистре, так как в принципе не могут конфликтовать с именами пользовательских цепочек. При вызове команды iptables таблица указывается в формате -t имя_таблицы. При отсутствии явного указания, используется таблица filter.

Принцип работы

Все пакеты пропускаются через определенные для них последовательности цепочек (см. рис.). При прохождении пакетом цепочки, к нему последовательно применяются все правила этой цепочки в порядке их следования. Под применением правила понимается: во-первых, проверка пакета на соответствие критерию, и во-вторых, если пакет этому критерию соответствует, применение к нему указанного действия. Под действием может подразумеваться как элементарная операция (встроенное действие, например, ACCEPT, MARK), так и переход в одну из пользовательских цепочек. В свою очередь, действия могут быть как терминальными, то есть прекращающими обработку пакета в рамках данной базовой цепочки (например, ACCEPT, REJECT), так и нетерминальными, то есть не прерывающими процесса обработки пакета (MARK, TOS). Если пакет прошел через всю базовую цепочку и к нему так и не было применено ни одного терминального действия, к нему применяется действие по умолчанию для данной цепочки (обязательно терминальное). Например,

iptables -F # Очищаем все цепочки таблицы filter

# Ко всем пакетам, которые относятся к уже установленным соединениям, применяем терминальное действие ACCEPT — пропустить

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -P INPUT DROP # В качестве действия по умолчанию устанавливаем DROP — блокирование пакета

iptables -P OUTPUT ACCEPT # Разрешаем все исходящие пакеты

Теперь цепочка INPUT таблицы filter содержит единственное правило, которое пропускает все пакеты, относящиеся к уже установленным соединениям. Ко всем остальным входящим пакетам будет применено действие по умолчанию — DROP. Цепочка же OUTPUT вообще не содержит правил, поэтому ко всем исходящим пакетам будет применяться действие по умолчанию ACCEPT. Таким образом хост, настроенный согласно этому примеру и подключенный к Интернету, будет недоступен извне (все попытки установить соединение снаружи блокируются), однако с самого хоста доступ к Интернету будет свободный (исходящие пакеты разрешены, а ответы на них уже относятся к установленным соединениям).

Все пакеты приходящие на сетевую карту проходят все 5(7) уровней модели OSI, iptables начинает обработку пакетов с 3-го(сетевого) уровня, после того как пакет по кабелю попал на сетевую карту, он передается в ядро ОС, а именно в netfilter, далее пакет проходит ряд таблиц и только после этого попадает в приложение(или не попадает, если пакет шел транзитом), которому он был адресован. Именно таблицами и правилами netfilter`а управляет утилита iptables. Таблицы и цепочки. В iptables существуют 3 таблицы: filter - Используется для фильтрации входящего, транзитного и исходящего трафика, имеет 3 цепочки INPUT - сюда попадает все входящие пакеты FORWARD - сюда попадают пакеты предназначенные другой машине в сети OUTPUT - все исходящие пакеты Над пакетамми проходящими в таблице filter можно делать следующие действия: DROP - блокировать пакет ACCEPT - разрешить(пропустить далее) пакет. Это таблица используется по умолчанию. nat - Используется для трансляции сетевых адресов(NAT) PREROUTING - используется для DNAT(трансляция адреса назначения) POSTROUTING - тут происходит SNAT(Изменение Сетевого Адреса Отправителя) OUTPUT - Все исходящие из этой цепочки пакеты Действия, используемые в этой цепочке: DNAT - как уже упоминалось, используется для трансляции адреса назначения, использую это действие, мы можем пробросить порт, либо целую машину в другую сеть. SNAT - изменяет исходные адреса пакетов, используется для того, чтобы машины в локальной сети имели доступ в интернет(в случае если наш компьютер - роутер) MASQUERADE - по сути тоже самое, что и SNAT, только считается что больше нагружает систему. Если у вас выделенный ip - динамический, то нужно использовать именно его, если не хотите каждый раз переписывать правила SNAT. mangle - Таблица для изменения заголовков пакетов. Имеет цепочки: PREROUTING, FORWARD, OUTPUT, POSTROUTING. У всех цепочек роль одна - вносить изменения в заголовок пакета на различных стадиях движения этого пакета через цепочки iptables. Над этими пакетами можно проводить действия TOS, TTL, MARK. С точки зрения iptables трафик бывает 3х типов: Входящий Транзитный Исходящий Движение пакета происходит в следующей последовательности: После прохождения nat(PREROUTING), основываясь на записях в mangle(PREROUTING) и nat(PREROUTING), ядро принимает решение какой будет трафик, входящим или транзитным. Если трафик оказался транзитным, то идем в цепочку mangle(FORWARD), если входящим, то в mangle(INPUT). 1. Входящий трафик - данные, которые принимает приложение запущенное на компьютере 2. Исходящий трафик - трафик, который передает приложение через сеть 3. Транзитный трафик - трафик, который проходит через наш компьютер другим(в случае если наш компьютер работает как маршрутизатор)Работа с iptables. Теперь после того, как мы имеем представление как течет через нас трафик, мы можем что-нибудь с ним сделать. Основные ключи iptables: -t (--table) <таблица> - правило указывает таблицу, в которую будут вноситься изменения, без указания этого ключа используется таблица filter -A (--append) <цепочка> - добавление новой записи в конец цепочки -D (--delete) <цепочка> - удаление правила -I (--insert) <цепочка> <номер> - вставляет правило над цепочкой с указанным номером -R (--replace) <цепочка> <номер> - заменяет определенные критерии цепочки с номером <номер> -L (--list) <цепочка> - листинг правил цепочки -F (--flush) <цепочка> - удаление всех правил из цепочки -P (--policy) <цепочка> - задать действие по умолчанию, действие будет выполняться на все пакеты, которые не подошли по каким-либо параметрам в другие правила. Ключи классификации и выделения пакетов -p (--protocol) - используется для указания конкретного протокола для обработки, список всех протоколов можно посмотреть в /etc/protocols/ -s(--src, --source) - адрес исходящих пакетов для фильтрации. -d (--dst, --destination) - адрес назначения пакетов для фильтрации. -i (--in-interface) - интерфейс с которого приходит пакет -o (--out-interface) - интерфейс на который уходит пакет --sport (--source-port) (может использоваться с ключами -p tcp и -p udp) - порт с которого был отправлен пакет --dport (--destination-port) (может использоваться с ключами -p tcp и -p udp) - порт на который отправляется пакет Так же есть ключ, который указывается, когда мы работаем с протоколом icmp (-p icmp): --icmp-type <тип icmp пакета> - указывается над каким конкретно типом ICMP пакета проводить операцию. Типы ICMP описаны в RFC 792. На всех ключах классификации возможно применения специального символа !, который буквально означает “кроме”, например: правило

1

iptables -A -p tcp -s 192.168.1.7/32 --dport 80 -j DROP

указывает, что все пакеты поступающие с IP-адреса 192.168.1.7 на 80 TCP порт(обычно веб-сервер) необходимо блокировать. А правило:

1

iptables -A -p tcp -s 192.168.1.7/32 --dport !80 -j DROP

указывает, что все пакеты поступающие с IP-адреса 192.168.1.7 кроме 80 TCP порта необходимо блокировать. Строим свои правила iptables. С теорией покончено, переходим к практике. Попробуем настроить фаерволл(цепочка filter) Первым делом, когда вы настраиваете фаервол с нуля, необходимо убедиться, что все правила пусты, сделать это можно командой: iptables -L Если картина примерно следующая, то можно приступать к написанию своих правил фильтрации:

1 2 3 4 5 6 7 8 9 10

debian:~# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination debian:~#

Если в какой-то из цепочек присутствуют правило, удалим их по одной или воспользуемся ключом -F и очистим цепочку полностью пример:

1

iptables -F INPUT

Теперь правила пусты, но прежде чем писать новые необходимо установить политики, как уже было написано, политики это правила, которые обрабатывают пакет неподходящие не под одно из описанных правил в таблицах. Какой действие(ACCEPT или DROP) должно выполнятся над этими пакетами решать вам, однако хочу предостеречь, если вы настраиваете фаерволл удаленно по ssh, то прежде чем поставить политику DROP на цепочку INPUT, напишите правило, разрешающие соединения к 22 порту TCP:

1

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

После чего можно смело применять политику DROP на цепочку INPUT:

1

iptables -P INPUT DROP

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

1 2 3 4 5

debian:~# iptables -L INPUT Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:ssh debian:~#

Допустим мы имеем сеть 192.168.1.0/24, внешний ip-адрес: 65.25.2.83. Причем локальная сеть подключена к интерфейсу eth0, а интернет к eth1. Теперь поставим задачу нашему фаерволлу: Максимальная безопасность(политику DROP мы уже поставили), доступ к Веб-серверу могут иметь только IP-адрес 192.168.1.170, доступ к IMAP могут иметь все, однако доступ к smtp-серверу разрешить только локальным пользователям(сеть 192.168.1.0/24). Незабываем, что цепочка INPUT равно обрабатывает все интерфейсы, если конкретный не указан в параметре -i. Для доступа к веб-серверу напишем следующие правило:

1

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

Сервер IMAP работает на 143 TCP-порту, следовательно правило будет выглядеть следующим образом:

1

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

Правило для обработки SMTP входящх пакетов выглядит так:

1

iptables -A INPUT -p tcp --dport 25 -s 192.168.1.0/32 -j ACCEPT

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

1

iptables -R INPUT 1 -p tcp --dport 22 -s 34.1.63.169 -j ACCEPT

где 34.1.63.169 - ip-адрес, с которого мы собираемся заходить на сервер по SSH Таким образом наша цепочка INPUT таблицы filter выглядит следующим образом:

1 2 3 4 5 6 7 8

debian:~# iptables -t filter -L INPUT Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 34.1.63.169 anywhere tcp dpt:ssh ACCEPT tcp -- 192.168.1.170 anywhere tcp dpt:www ACCEPT tcp -- anywhere anywhere tcp dpt:imap2 ACCEPT tcp -- 192.168.1.0 anywhere tcp dpt:smtp debian:~#

Как видим простые правила фильтрации писать очень легко имея небольшую теоретическую основу. Поставим следующую задачу: нам необходимо организовать доступ в интернет из локальной сети по портам 80 и 110 и компьютеру с ip-адресом 192.168.1.2 по всем портам. Первым делом установим политику по умолчанию для цепочки FORWARD в DROP:

1

iptables -P FORWARD DROP

Затем нам необходимо, чтобы пакеты проходящие через цепочку FORWARD таблицы filter фильтровались таким образом, чтобы все пользователи сети 192.168.1.0/24 имели доступ к 80 и 110 портам tcp:

1

iptables -A FORWARD -s 192.168.1.0/24 -p tcp -m multiport -dports 80,110 -i eth0 -j ACCEPT

здесь -m multiport -dports указывает, что мы будем перечислять порты через запятую, а -i eth0 что трафик будет идти из интерфейса локальной сети. Следующее правило разрешает хождение в обратную сторону, когда клиенты локальной сети будут получать данные из интернета:

1

iptables -A FORWARD -d 192.168.1.0/24 -p tcp -m multiport --sports 80,110 -i eth1 -j ACCEPT

здесь -m multiport -dports указывает, что мы будем перечислять порты через запятую, а -i eth0 что трафик будет идти из интерфейса локальной сети. Следующее правило разрешает хождение в обратную сторону, когда клиенты локальной сети будут получать данные из интернета:

1

iptables -A FORWARD -d 192.168.1.0/24 -p tcp -m multiport --sports 80,110 -i eth1 -j ACCEPT

Задание

1. Собрать топологию сети, представленную на рисунке

На сервере используем ОС Linux ubuntu

На клиентских машинных Windows XP

2. Настроить рабочие станции таким образом, что бы создать две различные IP подсети а и b

2.1 Настроить интерфейсы на ОС Linux ubuntu

Ярлык в верхней правой части рабочего столаили(VPN Conection/Configure VPN)

вкладкаWired (Add)

Conection Name – 1РС

Вкладка IPV4

Mathod – Manual

Add вписываем адрес 192.168.1.1. маска 24 (255.255.255.0) (Apply)

вкладкаWired (Add)

Conection Name – 2РС

Вкладка IPV4

Mathod – Manual

Add вписываем адрес 192.168.2.1. маска 24 (255.255.255.0) (Apply)

Для проверки см. 1РС и 2РС.

2.2. Выбираем подсети на подключение:

Первая (добавленная) карточка (D-Link) - 2РС.

Вторая (встроенная) карточка (VIA) - 1РС.

2.3 Настраиваем IP адреса на клиентах так чтобы карточка маршрутизатора и подключенный ПК были в одной подсети

ПК1 192.168.1.2

ПК3 192.168.2.2

2.4 Проверить утилитой ping подключения

3. Настроить и запустить на сервере веб и файловые сервисы (SAMBA)

3.1 Перед настройкой данной топологии для начало требуется подключить сервер к интернету и установить и установить из репозиториев пакеты веб-сервера и samba

Для установки веб сервера требуется выполнить команду

*sudo добавляется если мы вошли не как root но хотим изменить настройки

sudo apt-get install apache2

sudo apt-get install samba

Далее настраиваем папку в сеть редактируем под правами суперпользователя файл используя редактор nano

sudo nano cd /etc/samba/smb.conf

пароль 123

и добавляем туда параментры

[pub] - имя общего ресурса

path = /home/имя пользователя - путь до общей папки пользователя на сервере

browseable = yes - видимость папки в сети

read only = yes - все данные папки только для чтения

Выход из файла Ctrl+X

Cохранить Y имя файла Enter

Cохраняемся перезагружаемся

sudo service smbd start

3.2. Отключаем фаервол

sudo iptables - - help

sudo iptables – L

Смотреть Chain FOERWARD (policy ACCEPT)

4. Изучить главу «Утилита iptables»

5. Используя утилиту iptables, настроить на маршрутизаторе транслятор сетевых адресов и создать два правила межсетевого экрана, согласно которым:

- клиент может обращаться к веб-серверу;

- клиент не может обращаться к файловому серверу.

5.1. Добавить разрешающее правило на доступ к веб серверу

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

* все запросы http могут идти с 80 порта

5.2. Добавляем правило на запрет всех входящих соединений (для запрещения доступа к файлам и не только)

sudo iptables –P INPUT DROP

5.3. Проверить доступ к веб-серверу: открыть на клиенте броузер и внести адрес интерфейса маршрутизатора своей подсети

В итоге получаем доступ только к веб страничке на сервере

5.4. Проверить доступ к файлам которые мы открыли: открыть окно ОС и внести адрес интерфейса маршрутизатора своей подсети. Отобразится сервис общего доступа

ОС запросит ввести логин с паролем, введите логин и пароль пользователя на ubuntu

Для дополнительных баллов

5.5. Проверить как будет работать маршрутизатор если команды в iptablesпроставить в таком порядке

sudo iptables –P INPUT DROP

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

5.6 Как настроить маршрутизатор и клиента если сервисы общего доступа и веб-сервер разместить на ПК3.

Вопросы для самоконтроля.

1. Что определяет «ПРАВИЛО» в iptables?

2. Что определяет «ЦЕПОЧКА» в iptables?

3. Что определяет «ТАБЛИЦА» в iptables?

4. Перечислить имена базовых цепочек и производимые с их помощью настройки.

5. Какое правило выполняется последним, первое в таблице или последнее?

6. Привести примеры «ПРАВИЛ» в iptables.

7. Привести примеры «ЦЕПОЧЕК» в iptables.

8. Привести примеры «ТАБЛИЦ» в iptables.

Соседние файлы в папке лаб работы