ЛАБОРАТОРНАЯ РАБОТА №3
Защита информации в сетях
Цель работы: Ознакомление с построением фильтров TCP/IP пакетов. Ознакомление с методами шифрования с открытым ключом на примере пакета gnupg.
Краткие теоретические сведения.
Литература См. Лекция 7,Лекция 8 (http://pogoda.nsk.su/ait)
Firewall. Во все ядра Linux, начиная с 2.0, встроено средство для фильтрации сетевых пакетов. В 2.0 это ipfwadm, в 2.2 - ipchains, а в 2.4 и 2.6 - iptables. Мы будем рассматривать последний вариант, как наиболее современный.
Принцип фильтрации: когда через ядро проходит пакет, он проверяется на совпадение с одним или несколькими правилами. При этом в зависимости от этих правил он может быть пропущен (ACCEPT), отброшен (DROP) или отклонен (REJECT). Кроме того, он может быть отправлен на проверку в следующую цепочку правил. Здесь же можно указать, что факт прохождения пакета, подходящего под определенное правило, должен быть отмечен в syslog. Правила могут включать в себя проверку адреса/порта источника/получателя, протокола, флагов TCP.
Для изменения используемого набора правил используется утилита - iptables . Все правила хранятся в памяти ядра и при перезагрузке сбрасываются. По этой причине необходимо создать файл конфигурации, из которого правила фильтрации будут считываться при загрузке машины. Обычно это /etc/rc.d/rc.firewall. Это обычный скрипт оболочки, который вызывает /sbin/iptables с определенными параметрами, соответствующими составленным правилам. Поэтому в большинстве дистрибутивов для изменения конфигурации iptables необходимо отредактировать указанный файл и запустить его (этот файл, как правило, автоматически выполняется при загрузке машины). После чего можно посмотреть обновленную таблицу правил командой iptables -L.
Изначально существуют 3 цепочки, через которые пакеты входят на фильтрацию. INPUT - для входящих пакетов, OUTPUT для исходящих и FORWARD для проходящих через данную машину к другой. По мере движения пакета по цепочке выполняется сравнение с критериями и по результатам сравнения принимается решение о действии. Часть пакетов отбрасывается (на разных этапах по разным причинам), часть (опять же лишь подходящие под определенные правила) успешно выходит из фильтра. Оставшиеся (не подошедшие ни под одно правило) следуют действию по умолчанию для этой цепочки. Обычно таким действием делают DROP или REJECT, чтобы пропускать лишь пакеты, подошедшие под вполне определенные правила. В отличие от действия DROP в случае REJECT отправителю отсылается ICMP пакет с сообщением об ошибке. Это создает дополнительный трафик, но в соответствующих случаях приводит к тому, что отправитель перестает посылать нам пакеты (DROP выглядит для отправителя как таймаут, т.е. пакеты просто уходят и не приходит никакого подтверждения, а при REJECT он может посчитать, что наш компьютер недоступен или не существует).
Формат командной строки утилиты iptables:
iptables [-t table] command [match] [target/jump]
Каждая строка, которую вы вставляете в ту или иную цепочку, должна содержать отдельное правило.
Нигде не утверждается, что описание действия (target/jump) должно стоять последним в строке, мы, однако, будем придерживаться именно такой нотации для удобочитаемости.
то по умолчанию предполагается использование таблицы filter , иначе требуется указать имя таблицы [-t ]
за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.
match задает критерии проверки.
target указывает действие, которое должно быть выполнено при условии выполнения критериев в правиле
Пример rc.firewall с типичным набором правил:
#!/bin/sh
#Все сбросили
iptables -F
iptables -X COUNT
#Правила по умолчаниию
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# разрешаем доступ к внутренней петле
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#считаем все входящие пакеты ($$$)
#Создаем цепочку счетчиков
iptables -N COUNT
iptables -A INPUT -i eth0 -j COUNT
# Разрешаем ходить пакетам icmp
iptables -A INPUT -p ICMP -j ACCEPT
iptables -A OUTPUT -p ICMP -j ACCEPT
#Разрешаем соединения "запрошенные" с нашего компьютера. Избавляет от некоторых видов атак
iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
#Разрешаем пользовательские порты
iptables -A OUTPUT -p TCP --sport 32768:65535 -j ACCEPT
iptables -A OUTPUT -p UDP --sport 32768:65535 -j ACCEPT
#Разрешаем порты SMB для доступа Windows-машин к нашему серверу
# Smb Данныые
iptables -A INPUT -i eth1 -p TCP --dport 137:139 -j ACCEPT
iptables -A INPUT -i eth1 -p UDP --dport 137:139 -j ACCEPT
iptables -A OUTPUT -o eth1 -p TCP --sport 137:139 -j ACCEPT
iptables -A OUTPUT -o eth1 -p UDP --sport 137:139 -j ACCEPT
#Smb служба имен
iptables -A INPUT -i eth1 -p UDP --sport 137 --dport 32768:65535 -j ACCEPT
#Разрешаем видеть нас как ВЕБ-сервер
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
iptables -A OUTPUT -p TCP --sport 80 -j ACCEPT
#Разрешаем видеть нас и как FTP -сервер
iptables -A INPUT -p TCP --dport 20:21 -j ACCEPT
iptables -A OUTPUT -p TCP --sport 20:21 -j ACCEPT
#Разрешаем изнутри забирать почту по протоколу POP3
#iptables -A INPUT -i eth1 -p TCP --dport 110 -j ACCEPT
iptables -A OUTPUT -o eth1 -p TCP --sport 110 -j ACCEPT
#Разрешаем обмен почтой по протоколу smtp
iptables -A INPUT -p TCP --dport smtp -j ACCEPT
iptables -A OUTPUT -p TCP --sport smtp -j ACCEPT
#Разрешаем DNS обмен
iptables -A INPUT -p UDP --dport domain -j ACCEPT
iptables -A OUTPUT -p UDP --sport domain -j ACCEPT
#Разрешаем доступ изнутри к прокси на порт 8080
iptables -A INPUT -i eth1 -p TCP --dport 8080 -j ACCEPT
iptables -A INPUT -i eth1 -p UDP --dport 8080 -j ACCEPT
iptables -A OUTPUT -o eth1 -p TCP --sport 8080 -j ACCEPT
iptables -A OUTPUT -o eth1 -p UDP --sport 8080 -j ACCEPT
#----------------------------------
#Секция счетчиков
iptables -A COUNT # Сколько всего пакетов
iptables -A COUNT -p icmp # Сколько ICMP пакетов
iptables -A COUNT -p tcp --dport smtp # Сколько напринимали спама по почте
iptables -A COUNT -j RETURN
iptables -L -v -x
Шифрование и электронные подписи.
Метод шифровки/дешифровки называют шифром (cipher). Некоторые алгоритмы шифрования основаны на том, что сам метод шифрования (алгоритм) является секретным. Ныне такие методы представляют лишь исторический интерес и не имеют практического значения. Все современные алгоритмы используют ключ для управления шифровкой и дешифровкой; сообщение может быть успешно дешифровано только если известен ключ. Ключ, используемый для дешифровки может не совпадать с ключом, используемым для шифрования.
Алгоритмы с использованием ключа делятся на два класса: симметричные (или алгоритмы секретным ключом) и асиметричные (или алгоритмы с открытым ключом). Разница в том, что симметричные алгоритмы используют один и тот же ключ для шифрования и для дешифрования (или же ключ для дешифровки просто вычисляется по ключу шифровки). В то время как асимметричные алгоритмы используют разные ключи, и ключ для дешифровки не может быть вычислен по ключу шифровки.
Смметричные алгоритмы подразделяют на потоковые шифры и блочные шифры. Потоковые позволяют шифровать информацию побитово, в то время как блочные работают с некоторым набором бит данных (обычно размер блока составляет 64 бита) и шифруют этот набор как единое целое.
Ассиметричные шифры (также именуемые алгоритмами с открытым ключом, или --- в более общем плане --- криптографией с открытым ключом) допускают, чтобы открытый ключ был доступн всем (скажем, опубликован в газете). Это позволяет любому зашифровать сообщение. Однако расшифровать это сообщение сможет только нужный человек (тот, кто владеет ключом дешифровки). Ключ для шифрования называют открытым ключом, а ключ для дешифрования - закрытым ключом или секретным ключом.
Современные алгоритмы шифровки/дешифровки достаточно сложны и их невозможно проводить вручную. Настоящие криптографические алгоритмы разработаны для использования компьютерами или специальными аппаратными устройствами. В большинстве приложений криптография производится программным обеспечением и имеется множество доступных криптографических пакетов.
Цифровые подписи
Некоторые из асимметричных алгоритмов могут использоваться для генерирования цифровой подписи. Цифровой подписью называют блок данных, сгенерированный с использованием некоторого секретного ключа. При этом с помощью открытого ключа можно проверить, что данные были действительно сгенерированы с помощью этого секретного ключа. Алгоритм генерации цифровой подписи должен обеспечивать, чтобы было невозможно без секретного ключа создать подпись, которая при проверке окажется правильной.
Цифровые подписи используются для того, чтобы подтвердить, что сообщение пришло действительно от данного отправителя (в предположении, что лишь отправитель обладает секретным ключом, соответствующим его открытому ключу). Также подписи используются для проставления штампа времени (timestamp) на документах: сторона, которой мы доверяем, подписывает документ со штампом времени с помошью своего секретного ключа и, таким образом, подтверждает, что документ уже существовал в момент, объявленный в штампе времени.
Цифровые подписи также можно использовать для удостоверения (сертификации --- to certify) того, что документ принадлежит определенному лицу. Это делается так: открытый ключ и информация о том, кому он принадлежит подписываются стороной, которой доверяем. При этом доверять подписывающей стороне мы можем на основании того, что ее ключ был подписан третьей стороной. Таким образом возникает иерархия доверия. Очевидно, что некоторый ключ должен быть корнем иерархии (то есть ему мы доверяем не потому, что он кем-то подписан, а потому, что мы верим a-priori, что ему можно доверять). В централизованной инфраструктуре ключей имеется очень небольшое количество корневых ключей сети (например, облеченные полномочиями государственные агенства; их также называют сертификационными агенствами --- certification authorities). В распределенной инфраструктуре нет необходимости иметь универсальные для всех корневые ключи, и каждая из сторон может доверять своему набору корневых ключей (скажем своему собственному ключу и ключам, ею подписанным). Эта концепция носит название сети доверия (web of trust) и реализована, например, в PGP.
Gnupg
GnuPG (GNU Privacy Guard, «Страж безопасности GNU», или просто GPG) – это открытый эквивалент PGP (Pretty Good Privacy), известной и широкоиспользуемой программы для Windows, DOS и других операционных систем. Он распространяется в открытых исходниках и имеет те же самые функции, что и PGP, основанные на стандарте OpenPGP. У GnuPG есть несколько применений – он может использоваться либо для шифрования писем и файлов, либо для их цифровой подписи. Первый вариант применения GnuPG – шифрование писем и файлов на вашем жестком диске – очевиден, и он обычно применяется для защиты секретных сообщений или документов. Цифровая подпись информации необходима для сохранения целостности сообщений и файлов, особенно при передаче их через незащищенный канал. Она гарантирует, что: 1) Письмо было отправлено именно этим человеком, и 2) Что информация по пути не была изменена.
Gpg – консольная программа, однако известно множество оконных оболочек, делающих работу с ней еще проще. GPG основан на принципе открытых ключей (Public Key Infrastructure) – то есть, существуют 2 ключа: закрытый ключ используется для подписи и шифрования, а открытый ключ – для расшифровки и проверки правильности подписи.
Порядок выполнения работы
Фильтрация пакетов в сетях.
Создать таблицу фильтрации согласно варианту задания.
Шифрование и электронные подписи
Создать пару ключей (публичный и секретный) для каждого из членов бригады. Вывести отпечатки (fingerprint) ключей.
Импортировать 2 публичных ключа преподавателя (ключи и электронные подписи на дискете преподавателя)
Проверить отпечаток ключей, удалить неверный ключ.
Подписать верный ключ преподавателя ключами членов вашей бригады.
Создать файл с текстом, содержащим информацию о номере группы, номере бригады, фамилиях и инициалах членов бригады. Зашифровать его при помощи публичного ключа преподавателя. Подписать цифровой подписью одного из членов бригады, предоставить на проверку преподавателю.
Проверить файлы с цифровой подписью (согласно варианту задания), выяснить: в каких файлах цифровая подпись нарушена.
Содержание отчета
Титульный лист.
Цель работы.
Текст файла rc.firewall, согласно пп. 1.1 .
«Отпечатки» (fingerprint) каждого из ключей членов бригады.
Цепочку сети доверия, согласно п.п. 3.5
Имя, путь, размер файлов (исходного и зашифрованного) согласно п.п.3.6
Информация из цифровых подписей файлов, согласно п.п. 3.7.
Варианты заданий
Вариант 1
|
Входящие
|
Исходящие
|
Транзитные
|
Разрешить
|
http(80)
domain
ftp,ftp-data
icmp
|
http(80)
domain
ftp,ftp-data
icmp
|
|
Запретить
|
icmp c 192.168.1.2
c портов 20,21 192.168.1.2
|
|
|
По умолчанию
|
запретить
|
разрешить
|
запретить
|
Счетчик- входящие icmp
|
Вариант 2
|
Входящие
|
Исходящие
|
Транзитные
|
Разрешить
|
http(80)
domain
smpt
ftp,ftp-data
icmp
|
http(80)
domain
smpt
icmp
|
|
Запретить
|
icmp c 192.168.1.7
c портов 17:30 192.168.1.2
|
|
|
По умолчанию
|
запретить
|
разрешить
|
запретить
|
Счетчик- исходящие icmp
|
Вариант 3
|
Входящие
|
Исходящие
|
Транзитные
|
Разрешить
|
http(80)
domain
pop3
smtp
icmp
ftp,ftp-data
порты 2048:65535
|
http(80)
domain
smpt
pop3
icmp
|
|
Запретить
|
icmp c 192.168.1.7
c портов 17:30 192.168.1.2
|
|
|
По умолчанию
|
запретить
|
разрешить
|
запретить
|
Счетчик- входящие icmp c адреса 192.168.1.1
|
Вариант 4
|
Входящие
|
Исходящие
|
Транзитные
|
Разрешить
|
ftp,ftp-data
domain
pop3
smtp
icmp
порты 2048:65535
|
ftp,ftp-data
smpt
pop3
icmp
порты 2048:65535
|
|
Запретить
|
icmp c 192.168.1.23
tcp на наш хост к портам 3312,2234
|
|
|
По умолчанию
|
запретить
|
запретить
|
разрешить
|
Счетчик- icmp, исходящие на 192.168.1.1
|
Вариант 5
|
Входящие
|
Исходящие
|
Транзитные
|
Разрешить
|
telnet
domain
ntp
smtp
icmp
ftp,ftp-data
1024:65535
|
telnet
domain
ntp
smtp
icmp
1024:65535
|
|
Запретить
|
icmp c 192.168.1.15/30
udp на наш хост к портам 1456,3333
|
|
|
По умолчанию
|
запретить
|
запретить
|
запретить
|
Счетчик- входящие UDP
|
Вариант 6
|
Входящие
|
Исходящие
|
Транзитные
|
Разрешить
|
ssh
domain
ftp,ftp-data
smtp
icmp
1024:65535
|
Ssh
domain
ftp,ftp-data
smtp
icmp
1024:65535
|
|
Запретить
|
icmp c 192.168.1.15/30
udp на наш хост к портам 1456,3333
|
|
|
По умолчанию
|
запретить
|
запретить
|
разрешить
|
Счетчик - исходящие UDP
|
Вариант 7
|
Входящие
|
Исходящие
|
Транзитные
|
Разрешить
|
ssh
domain
ftp,ftp-data
smtp
icmp
2048:65535
|
Ssh
domain
ftp,ftp-data
smtp
icmp
2048:65535
|
|
Запретить
|
Pop3 c 192.168.1.15/30
tcp на наш хост к портам 456,3128
|
|
|
По умолчанию
|
запретить
|
запретить
|
разрешить
|
Счетчик - исходящие smtp
|
Справочник команд
iptables
iptables [ключи] [-t table] command [match] [target/jump]
-t table – задает таблицу (см. таблицу 1)
Таблица 1 Типы таблиц firewall
Таблица
|
Назначение
|
цепочки
|
nat
|
Network Adderss Translation
|
PREROUTING
POSTROUTING
|
mangle
|
Изменяет заголовки пакетов
|
1. PREROUTING, POSTROUTING
2.INPUT,OUTPUT,
FORWARD
|
filter
|
Фильтрация пакетов
|
INPUT,OUTPUT,
FORWARD
|
command – команда (см. таблица 3)
Таблица 2 Команды
команда
|
пример
|
действие
|
-L, --list
|
iptables -L INPUT
|
Вывод всех правил
|
-A, --append
|
iptables -A INPUT
|
Добавляет новое правило в цепочку
|
-D, --delete
|
iptables -D INPUT --dport 80 -j DROP;
iptables -D INPUT 1
|
Удаление правила из цепочки
|
-R, --replace
|
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
|
заменяет одно правило другим
|
-I, --insert
|
iptables -I INPUT 1 --dport 80 -j ACCEPT
|
Вставляет новое правило в цепочку. Номер-перед чем вставлять
|
-F, --flush
|
iptables -F INPUT
|
Сброс правил (если без указания цепочки - действует на все)
|
-Z, --zero
|
iptables -Z INPUT
|
Обнуление всех счетчиков в заданной цепочке
|
-N, --new-chain
|
iptables -N allowed
|
Создается новая цепочка с заданным именем в заданной таблице
|
-P, --policy
|
iptables -P INPUT DROP
|
Определяет политику по умолчанию для заданной цепочки. DROP, ACCEPT и REJECT.
|
-E, --rename-chain
|
iptables -E allowed disallowed
|
выполняет переименование пользовательской цепочки
|
ключи
Таблица 3 Ключи
Ключ
|
к команде
|
действие
|
--v, --verbose
|
--list, --append, --insert, --delete, --replace
|
Повышает информативность вывода
|
-x, --exact
|
--list
|
Выводятся точные значения (без округления)
|
-n,
--numeric
|
--list
|
Запрещает DNS разбор
|
--line-numbers
|
--list
|
Выводит line numbers
|
match – критерий
Таблица 4 Критерии проверки
Критерий
|
-p, --protocol
|
Пример
|
iptables -A INPUT -p tcp
|
Описание
|
Указывает тип протокола. tcp,udp,icmp,all. Логическая инверсия ‘!’
|
Критерий
|
-s, --src, --source
|
Пример
|
iptables -A INPUT -s !192.168.1.1/24
|
Описание
|
IP-адрес(а) источника пакета.
|
Критерий
|
-d, --dst, --destination
|
Пример
|
iptables -A INPUT -d 192.168.1.1
|
Описание
|
IP-адрес(а) получателя.
|
Критерий
|
-p, --protocol
|
Пример
|
iptables -A INPUT -p tcp
|
Описание
|
Указывает тип протокола. tcp,udp,icmp,all. Логическая инверсия ‘!’
|
Критерий
|
-s, --src, --source
|
Пример
|
iptables -A INPUT -s !192.168.1.1/24
|
Описание
|
IP-адрес(а) источника пакета.
|
Критерий
|
-d, --dst, --destination
|
Пример
|
iptables -A INPUT -d 192.168.1.1
|
Описание
|
IP-адрес(а) получателя.
|
Критерий
|
-i, --in-interface
|
Пример
|
iptables -A INPUT -i eth0
|
Описание
|
Интерфейс, с которого был получен пакет. Допускается только в цепочках INPUT, FORWARD и PREROUTING,. Если имя интерфейса завершается символом +, то критерий задает все интерфейсы, начинающиеся с заданной строки, например -i PPP+ обозначает любой PPP интерфейс, а запись -i ! eth+ -- любой интерфейс, кроме любого eth.
|
Критерий
|
-o, --out-interface
|
Пример
|
iptables -A FORWARD -o eth0
|
Описание
|
Задает имя выходного интерфейса.
|
Критерий
|
-f, --fragment
|
Пример
|
iptables -A INPUT -f
|
Описание
|
Правило распространяется на все фрагменты фрагментированного пакета, кроме первого.
|
Критерий
|
--sport, --source-port
|
Пример
|
iptables -A INPUT -p tcp --sport 22
|
Описание
|
Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы, а также интервал: 22:80
|
Критерий
|
--dport, --destination-port
|
Описание
|
Порт назначения
|
Критерий
|
iptables -p tcp --syn
|
Описание
|
Блокирует попытки соединений.
|
Критерий
|
--tcp-option
|
Пример
|
iptables -p tcp --tcp-option 16
|
Описание
|
Опции пакета
|
Критерий
|
--sport, --source-port
|
Пример
|
iptables -A INPUT -p udp --sport 53
|
Описание
|
Исходный порт, с которого был отправлен пакет. В качестве параметра может указываться номер порта или название сетевой службы, а также интервал: 22:
Инверсия разрешена.
|
Критерий
|
--dport, --destination-port
|
Описание
|
Порт назначения
|
Критерий
|
--icmp-type
|
Пример
|
iptables -A INPUT -p icmp --icmp-type 8
|
Описание
|
Тип сообщения ICMP Тип сообщения ICMP определяется номером или именем. Числовые значения определяются в RFC 792. Чтобы получить список имен ICMP значений выполните команду iptables --protocol icmp --help.
|
Действие:
ACCEPT – принять
DROP- сбросить
REJECT – отклонить
LOG – запротоколировать
Gnupg – утилита PGP шифрования и создания электронных подписей
Генерация ключа:
[user@mdk]$ gpg --gen-key
Экспорт ключа:
gpg -armor --export email@ngs.ru > myopen.asc
Импорт ключа
Открытый ключ может быть добавлен к Вашей связке при помощи команды import:
gpg --import newkey.asc
Проверка отпечатка
Достоверность импортированного ключа должна быть подтверждена при помощи отпечатка:
gpg –fingerprint email@ngs.ru
Экспорт ключа на сервер ключей
Отпечатки ключа проверяются его владельцем.
можно сразу поместить ключ на сервер:
gpg --send-keys --keyserver wwwkeys.pgp.net email@ngs.ru
Подписывание ключа
gpg --edit-key new@mail.ru (переходит в командный режим)
sign
Посмотреть цепочку подписей:
gpg --list-sigs.
Создание электронной подписи:
gpg --clearsign -a test.file - создает подпись
Проверка электронной подписи
gpg --verify test.file.asc
Шифрование файла
gpg -ea –r email@ngs.ru test.file - зашифровать
Дешифрование файла
gpg -d test.file.asc >test.file расшифровать
Литература:
Руководство по Iptables Iptables Tutorial 1.1.14 http://www.linuxsecurity.com/resource_files/firewalls/IPTables- Tutorial/iptables-tutorial.html
Б.Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си.-М.:Издательство ТРИУМФ, 2002 - 816с.:ил.)
А. Салома Криптография с открытым ключом: М.Мир 1995- 318с.
|