Настраиваем Cisco PIX Firewall 520 для трансляции соединений между сетями::Журнал СА 12.2005
www.samag.ru
Льготная подписка для студентов      
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
О журнале
Журнал «БИТ»
Подписка
Где купить
Авторам
Рекламодателям
Магазин
Архив номеров
Вакансии
Контакты
   

Jobsora

ЭКСПЕРТНАЯ СЕССИЯ 2019


  Опросы

Какие курсы вы бы выбрали для себя?  

Очные
Онлайновые
Платные
Бесплатные
Я и так все знаю

 Читать далее...

1001 и 1 книга  
28.05.2019г.
Просмотров: 1894
Комментарии: 2
Анализ вредоносных программ

 Читать далее...

28.05.2019г.
Просмотров: 1936
Комментарии: 1
Микросервисы и контейнеры Docker

 Читать далее...

28.05.2019г.
Просмотров: 1497
Комментарии: 0
Django 2 в примерах

 Читать далее...

28.05.2019г.
Просмотров: 1097
Комментарии: 0
Введение в анализ алгоритмов

 Читать далее...

27.03.2019г.
Просмотров: 1667
Комментарии: 1
Arduino Uno и Raspberry Pi 3: от схемотехники к интернету вещей

 Читать далее...

Друзья сайта  

Форум системных администраторов  

sysadmins.ru

Электронка - 2020!

 Настраиваем Cisco PIX Firewall 520 для трансляции соединений между сетями

Архив номеров / 2005 / Выпуск №12 (37) / Настраиваем Cisco PIX Firewall 520 для трансляции соединений между сетями

Рубрика: Администрирование /  Продукты и решения

МАЛИК АБДУГАЛЫЕВ

Настраиваем Cisco PIX Firewall 520 для трансляции соединений между сетями

Обычно для тех, кто впервые начинает настройку firewall, принципы работы трансляции соединений становятся одним из наиболее сложных моментов для понимания, поэтому основной упор мы сделали на описании этих принципов на примере типовой схемы.

Краткие сведения o Cisco PIX Firewall 520

520-я серия firewall компании Cisco устарела довольно давно – производитель более не поставляет их с июля 2001-го, не выпускает обновлений программного обеспечения с июня 2004-го, а поддержка аппаратной части закончится в июне 2006 года. Но несмотря на это firewall всё ещё остаётся достаточно интересным устройством, особенно с учётом его нынешней стоимости.

С виду данный firewall представляет собой несколько модернизированный ПК – корпус, материнская плата, блок питания, 3.5” привод для гибких дисков, которые с виду такие же, как у обычного ПК. Жёсткого диска у этого устройства, к счастью, нет, а в качестве долговременной памяти используется флеш-память, которая размещёна на отдельной PCI-плате расширения вместе с другими схемами, реализующими специфичные функции, такие как консольный порт и интерфейс перекрытия сбоев (Failover), который позволяет дублировать основной firewall резервным в случае выхода его из строя.

Для интереса приведу основные технические характеристики устройства, используемого в описанном случае – 768 Мб RAM, CPU Pentium III 848 МГц, Flash 16 Мб, 4 сетевых адаптера 10/100.

Операционная система, по словам представителей компании Cisco, специально разработана для данных задач, что позволяет устройству обрабатывать намного больший поток данных, нежели обычные операционные системы для ПК. Версия операционной системы в конкретном случае – 6.3(4).

Интерфейс командной строки весьма схож с интерфейсом маршрутизаторов Cisco, но имеет некоторые недостатки, впрочем, не настолько существенные, чтобы их отдельно описывать.

Схема сети

Простая типовая схема, которая довольно часто используется в небольших сетях (см. рис. 1).

Рисунок 1. Схема сети

Рисунок 1. Схема сети

Firewall одним интерфейсом подключен к интернет-провайдеру.

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

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

Зачастую для обозначения отдельного сегмента сети, предназначенного для размещения общедоступных сервисов, применяется термин DMZ (ДМЗ – демилитаризованная зона). Это название используется и в документации к firewall. В нашем же случае использовано название «www», которое является более простым и наглядным для описываемой схемы.

На внешнем интерфейсе (outside) firewall имеется один реальный IPадрес, например 1.2.3.246:255.255.255.252, полученный от провайдера. Адрес со стороны провайдера на нашем соединении – 1.2.3.245, для нас он будет маршрутом по умолчанию.

На внутреннем интерфейсе (inside) с адресом из приватной подсети 192.168.255.1:255.255.255.252. К нему подключен сервер с адресом 192.168.255.2:255.255.255.252. На второй интерфейс сервера подключена локальная сеть с адресами из сети 10.0.1.0:255.255.255.0.

Доменное имя, используемое в нашей сети, определим как «my.domain.tld».

На третий интерфейс (www) с адресом 192.168.255.5: 255.255.255.252, подключен веб-сервер, имеющий адрес 192.168.255.6:255.255.255.252.

Настройка firewall

После того как схема сети рассмотрена, переходим непосредственно к настройке firewall. Подробно будут описаны только моменты, непосредственно касающиеся нашей схемы.

Общие настройки

Первоначальная настройка должна производиться через консольный порт. Затем можно будет управлять firewall удалённо по протоколу ssh.

Я полагаю, что нет необходимости подробно объяснять использование базовых команд, таких как переход в привилегированный режим (enable), просмотр конфигурации (show run), переход в режим конфигурирования (configure terminal), смена имени хоста (hostname) и домена (domain-name), установка паролей (passwd и enable password) и т. п.

Приведу лишь простой пример:

pix> enable

Password: *******

pix# configure terminal

pix(config)# hostname pix-gtw

pix-gtw(config)# domain-name my.domain.tld

pix-gtw(config)# clock timezone KGT +6

pix-gtw(config)# clock set 11:59:00 09 dec 2005

pix-gtw(config)# [Ctrl - Z]

pix-gtw# write mem

pix-gtw# quit

При смене имени или домена, например командой:

# domain-name my.domain.tld

появится следующее предупреждение:

%Key pair with hostname my.domain.tld will be invalid

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

pix-gtw(config)# ca zeroize rsa

pix-gtw(config)# ca generate rsa key 512

pix-gtw(config)# ca save all

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

Ключи хранятся в специальной области флеш-памяти, посмотреть их можно командой:

show ca mypubkey rsa

Сохранить текущую конфигурацию в долговременную память можно командой:

write mem

Записать конфигурацию на сервере по tftp-протоколу можно командой:

write net 192.168.255.2:pix-gtw

где 192.168.255.2 – адрес tftp-сервера, а pix-gtw – имя файла.

Сетевые интерфейсы

Эти интерфейсы имеют аппаратные идентификаторы (hardware_id), например ethernet0. Для каждого интерфейса задаётся его скорость и административное состояние:

interface ethernet0 auto

interface ethernet1 auto

interface ethernet2 auto

interface ethernet3 auto shutdown

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

Кроме аппаратного идентификатора, интерфейсы имеют и имя, которое мы вольны задать сами. Вот пример задания имён интерфейсов:

nameif ethernet0 outside security0

nameif ethernet1 inside security100

nameif ethernet2 www security20

nameif ethernet3 not_used security25

Последний параметр – уровень безопасности (security level) нуждается в пояснении. Число от 0 до 100 задаёт уровень безопасности данного интерфейса относительно других интерфейсов – чем выше число, тем безопаснее считается сеть. Это число абстрактно, т.е. само по себе не является показателем безопасности сети. Этот параметр используется системой для определения возможности и способа обмена данными между интерфейсами – для доступа из более безопасной сети в менее безопасную должны использоваться команды nat и global, а для доступа из менее безопасной сети в более безопасную – static и access-list.

Интерфейсы же с одинаковыми уровнями безопасности вообще не могут работать друг с другом.

Указываем IP-адреса на интерфейсах:

ip address outside 1.2.3.246 255.255.255.252

ip address inside 192.168.255.1 255.255.255.252

ip address www 192.168.255.5 255.255.255.252

К сожалению на один интерфейс можно назначить только один адрес.

К интерфейсу можно привязать списки доступа (accesslist) для входящего и исходящего направлений, например список доступа 101 для входящего потока на интерфейсе outside:

access-group 101 in interface outside

Сам список создаётся примерно как и на маршрутизаторах Cisco, например:

access-list 101 permit tcp host 4.5.6.100 any eq 22

access-list 101 deny tcp any any eq 22

access-list 101 permit ip any any

Данный пример намеренно упрощён для того, чтобы подчеркнуть его неполноту.

Следует помнить о том, что в списках доступа подразумевается ещё и последнее, неявное правило, которое запрещает весь остальной трафик, для которого не описано подходящего правила.

Статическая маршрутизация

Командой route можно добавить статический маршрут. Формат команды прост:

route имя_интерфейса сеть маска шлюз [метрика]

Нам нужно добавить по меньшей мере маршрут по умолчанию, в нашем случае указывающий на адрес 1.2.3.245, и доступный через интерфейс outside:

route outside 0.0.0.0 0.0.0.0 1.2.3.245

Протокол ICMP

Протокол ICMP необходим для нормальной работы сети на базе стека протоколов TCP/IP, но некоторые типы сообщений данного протокола могут быть использованы злоумышленниками для сбора сведений о сети или для нарушения её нормальной работы. Поэтому для внешнего интерфейса firewall следует разрешить только самые необходимые типы сообщений ICMP, в данном случае, это сообщения о недоступности хоста или сети (unreachable) и сообщения об окончании времени жизни пакета (timeexceeded).

В следующем примере разрешаем весь ICMP на интерфейсе outside для одной сети и одного хоста, затем два типа сообщений на внешнем интерфейсе и весь ICMP на интерфейсах inside и www:

icmp permit 3.4.5.0 255.255.255.0 outside

icmp permit host 4.5.6.100 outside

icmp permit any unreachable outside

icmp permit any time-exceeded outside

icmp permit any inside

icmp permit any www

Доступ к firewall по ssh

Если firewall уже соответствующим образом настроен, то к нему можно подключиться по ssh с именем пользователя pix, например:

ssh pix@192.168.255.1

Доступ к firewall нужно ограничить минимально необходимым количеством хостов. Сделать это можно командой ssh:

ssh 4.5.6.100 255.255.255.255 outside

ssh 192.168.255.2 255.255.255.255 inside

Маска и интерфейс являются необязательными параметрами.

Кроме этого доступ к ssh-порту должен быть открыт и в соответствующих списках доступа.

Сохранение логов на сервере

Для удобства использования и хранения системных сообщений firewall лучше передать их на syslog-сервер. К примеру, передаём логи на хост 192.168.255.2 с идентификатором LOCAL7 (по нумерации firewall – 23), с уровнем warnings и выше (critical, alerts, emergencies), а также с идентификатором устройства «pix-gtw»:

logging on

logging trap warnings

logging facility 23

logging device-id string pix-gtw

logging host inside 192.168.255.2

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

local7.*   /var/log/pix.log

Эти логи будут очень полезны при настройке и отладке конфигурации firewall.

Не забудьте настроить архивацию этих логов, чтобы они не занимали слишком много места.

NAT и PAT

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

В Cisco PIX используются два вида трансляций Network Address Translation (NAT) и Port Address Translation (PAT), которые, в свою очередь могут быть статическими или динамическими.

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

Данные о соответствии локальных и глобальных адресов хранятся в таблице трансляций. Идентификация трафика производится по соответствию локального и глобального адресов.

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

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

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

Один из особых вариантов NAT – исключение из NAT (NAT Exemption). Исключение из NAT настраивается командой:

nat 0 access-list

и отключает трансляцию для адресов, указанных в списке доступа, т.е. обмен идёт без какой-либо трансляции вообще.

Зависимость трансляций от уровней безопасности интерфейсов

Как уже говорилось выше, способ настройки трансляции зависит от уровня безопасности интерфейсов – для настройки доступа из более безопасной сети в менее безопасную нужно использовать команду nat, а для доступа из менее безопасной сети в более безопасную – static.

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

show nameif

которая также покажет и имена интерфейсов:

nameif ethernet0 outside security0

nameif ethernet1 inside security100

nameif ethernet2 www security20

nameif ethernet3 not_used security25

Применительно к нашей конфигурации сети можно составить простую таблицу (см. таблицу).

Таблица соответствий

Откуда

Куда

Команда

inside

outside

nat

inside

www

nat

www

outside

nat

www

inside

static

outside

inside

static

outside

www

static

Таблица трансляций (xlate)

Для трансляции соединений firewall создаёт таблицу соответствий, которая в терминологии Cisco PIX 520 называется xlate или translation slots. Мы можем посмотреть уже существующие записи в таблице командой «show xlate», а очистить всю таблицу – командой «clear xlate». Кстати, последнюю операцию рекомендуется делать после изменений правил трансляции, но учтите, что это приведёт к разрыву уже установленных соединений, если они созданы с использованием какой-либо трансляции.

Для удаления только определённых записей можно указать глобальный или локальный адрес и, если это PAT, то и соответствующий порт:

clear xlate global 1.2.3.246

clear xlate local 192.168.255.6 lport 80

При отсутствии обмена записи в таблице трансляций удаляются по истечении тайм-аута, который задаётся командой «timeout xlate» и по умолчанию равен трём часам. Записи для протокола UDP удаляются через 30 секунд после закрытия соединения, независимо от заданного значения тайм-аута.

Обращения с сервера во внешний мир

Для настройки обращений сервера во внешний мир используются команды «global» и «nat».

Команда «global» создаёт пул глобальных адресов, т.е. реальных адресов на внешнем интерфейсе, которые используются определённой трансляцией. В нашем случае пул состоит только лишь из одного адреса, который непосредственно указан на внешнем интерфейсе firewall, поэтому мы можем использовать ключевое слово interface вместо собственно IP-адреса.

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

global (outside) 1 interface

Команда «nat» позволяет нам указать локальные адреса, которые должны транслироваться, и задаёт соответствие с  пулом глобальных адресов, описанным командой «global».

Следующей командой мы задаём, что обращения с хоста 192.168.255.2, подключенного на интерфейсе inside, будут транслироваться через глобальный пул номер 1:

nat (inside) 1 192.168.255.2 255.255.255.255

Соответствие глобальных и локальных пулов определяется по номеру (NAT ID), который указывается в этих командах.

Всё, можно проверять доступность внешнего мира с сервера.

При изменении правил трансляции не забывайте выполнять команду «clear xlate».

Обращения из внешнего мира к серверу

На нашем сервере есть несколько служб, которые должны быть доступны извне, в нашем случае это DNS, SSH, SMTP, FTP.

Для настройки трансляции с интерфейса outside на интерфейс inside используется команда «static».

Команда static позволяет задать статическую трансляцию, указав точное соответствие локального адреса и глобального адреса и порта. В качестве порта можно указать его номер или имя. Соответствие номеров и имён портов описано в документации. В конфигурации firewall все номера портов заменяются их именами, если таковые известны.

Кроме самой команды «static», необходимые разрешительные правила должны быть указаны в соответствующих списках доступа (access-list).

Синтаксис команды «static», используемый в данном случае, достаточно прост:

static (локальный_интерфейс, глобальный_интерфейс) протокол глобальный_адрес локальный_адрес

Так же как в описанном ранее случае использования команды «global» мы можем в качестве глобального адреса указать ключевое слово interface.

Следующей командой мы задаём статическую трансляцию с глобального интерфейса outside на локальный интерфейс inside для протокола tcp с 25-го порта глобального интерфейса на 25-й порт хоста 192.168.255.2:

static (inside,outside) tcp interface 25 192.168.255.2 25

Применительно к SMTP-протоколу нужно упомянуть, что firewall из соображений безопасности изменяет строку приветствия нашего SMTP-сервера, заменяя почти всё звёздочками. Например, из строки:

220 mail.domain.tld ESMTP Sendmail 8.13.0/8.13.0; Mon, 5 Dec 2005 18:01:32 +0600 (KGT)

получается что-то вроде этого:

220 ********************************0******0********** ***200**** *0***0 *0*00 *****

По аналогии с предыдущей командой выполняем следующие:

static (inside,outside) tcp interface 20 192.168.255.2 20

static (inside,outside) tcp interface 21 192.168.255.2 21

static (inside,outside) udp interface 53 192.168.255.2 53

Для настройки подключения к серверу по протоколу ssh придётся использовать отличный от стандартного порт, т.к. 22-й занят самим firewall. Следующей командой мы задаём соответствие свободного порта на внешнем интерфейсе firewall (например 222) и стандартного ssh-порта сервера:

static (inside,outside) tcp interface 222 192.168.255.2 22

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

ssh -p 222 malik@1.2.3.246

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

ssh pix@1.2.3.246

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

access-list 101 permit tcp any host 1.2.3.246 eq 20

access-list 101 permit tcp any host 1.2.3.246 eq 21

access-list 101 permit tcp any host 1.2.3.246 eq 25

access-list 101 permit udp any host 1.2.3.246 eq 53

access-list 101 permit tcp host 4.5.6.100 host 1.2.3.246 eq 222

Доступ к веб-сайту из внешнего мира

Вот этой командой мы задаём статическую трансляцию с интерфейса outside на интерфейс www для протокола tcp с 80-го порта внешнего интерфейса на 80-й порт хоста 192.168.255.6:

static (www,outside) tcp interface 80 192.168.255.6 80

В список доступа на внешнем интерфейсе добавляем разрешительное правило для 80-го порта:

access-list 101 permit tcp any host 1.2.3.246 eq 80

Инициировать исходящие соединения с веб-сервера мы не позволяем в целях повышения безопасности веб-сервера.

Поэтому более никаких трансляций на внешнем интерфейсе для этого сервера мы не задаём.

Доступ из локальной сети к веб-серверу

Если из локальной сети доступ к веб-сайту будет осуществляться также, как и из внешнего мира, т.е. только по протоколу http и на тот же глобальный адрес (1.2.3.246), то и достаточно будет статической транляции http-порта, но теперь нам нужно будет указать не ключевое слово interface, а именно IP-адрес, под которым мы бы хотели видеть веб-сервер:

static (www,inside) tcp 1.2.3.246 80 192.168.255.6 80

Если же мы хотим, чтобы веб-сервер был напрямую доступен с хостов локальной сети и от нашего сервера и обращения к нему вообще не транслировались, то надо использовать конструкцию «nat 0 access-list» и соответствующий список доступа:

nat (inside) 0 access-list 110

access-list 110 permit ip 10.0.1.0 255.255.255.0 host 192.168.255.6

access-list 110 permit ip host 192.168.255.2 host 192.168.255.6

Конечно же, firewall должен иметь маршрут для адресов локальной сети:

route inside 10.0.1.0 255.255.255.0 192.168.255.2

Этот маршрут на firewall необходим и для взаимодействия веб-сервера с локальной сетью, т.к. firewall является для веб-сервера маршрутизатором по умолчанию.

Дополнительные примеры трансляций

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

Первый пример

У нас есть несколько глобальных адресов, и мы хотим, чтобы обращения из внешнего мира на какой-либо их порт транслировались на определённые локальные адреса:

static (inside,outside) tcp 1.2.4.1 80 192.168.0.1 80

static (inside,outside) tcp 1.2.4.2 80 192.168.0.2 80

Второй пример

У нас есть несколько глобальных адресов, и мы хотим, чтобы все обращения от некоторых локальных хостов уходили во внешний мир со строго определённых глобальных адресов – настраиваем два разных глобальных пула и соответствующие им NAT:

global (outside) 1 1.2.4.1

global (outside) 2 1.2.4.2

nat (inside) 1 192.168.0.1 255.255.255.255

nat (inside) 2 192.168.0.2 255.255.255.255

т.е. обращения с хоста 192.168.0.1 уйдут во внешний мир с адреса 1.2.4.1, а обращения с хоста 192.168.0.2 уйдут с адреса 1.2.4.2.

А если при этом мы хотим, чтобы ещё и обращения извне на определённые глобальные адреса транслировались на соответствующие локальные, то нам надо сделать и обратную трансляцию:

static (inside,outside) 1.2.4.1 192.168.0.1

static (inside,outside) 1.2.4.2 192.168.0.2

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

Документация

Вся документация, использованная для настройки firewall и написания данной статьи, была взята с сайта компании Cisco (http://www.cisco.com):

  1. Cisco PIX Firewall and VPN Configuration Guide.
  2. Cisco PIX Firewall Command Reference.
  3. Using NAT and PAT Statements on the Cisco Secure PIX Firewall.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-41
Fax: (499) 277-12-45
E-mail: sa@samag.ru