Термин "шлюз" и термин "маршрутизатор" во многом схожи, но шлюз является более общим термином (всякий маршрутизатор является шлюзом). Шлюзом называется любое сетевое устройство, которое одновременно подключено к нескольким сетям при помощи нескольких сетевых интерфейсов, имеет в каждой сети свой адрес сетевого уровня и занимается продвижением пакетов между этими сетями. Например, шлюзом является компьютер одна сетевая карта которого подключена к сети 192.168.28.10.0 и имеет там IP-адрес 192.168.28.10.1, а другая сетевая карта подключена к сети 172.16.0.0 и имеет там IP-адрес 172.16.1.1. Шлюзом также будет являться и маршрутизатор. Даже обычный домашний компьютер, имеющий сетевую карту и модем можно рассматривать как шлюз, т.к. он имеет два интерфейса: один интерфейс – это интерфейс сетевой карты (локальной сети), IP-адрес которого может быть произвольным, а второй интерфейс – это интерфейс удаленного доступа (Internet), IP-адрес которого определяется провайдером, при подключении к нему по протоколу PPP.
Шлюз выполняет функции маршрутизации и продвижения пакетов между интерфейсами. Шлюзы также позволяют объединять разнородные (гетерогенные) сети, преобразуя, например, кадры Ethernet в кадры FDDI. Шлюз также является средством обеспечения безопасности подсети. Если сегмент сети соединен с остальной сетью через шлюз, то на шлюзе может быть установлен межсетевой экран (firewall, брандмауэр) – специальное программное обеспечение, которое контролирует как пакеты выходящие из данного сегмента, так и пакеты поступающие в данный сегмент. Межсетевой экран с фильтрацией пакетов уже был рассмотрен ранее (см. маршрутизаторы). Путем написания специальных правил, можно ограничить разрешенное взаимодействие между компьютерам сети и компьютерами сегмента. Правила имеют вид: "через шлюз допускается прохождение пакетов с IP-адресом отправителя 172.18.10.1 (порт 80) и IP-адресом получателя 192.168.1.1 (порт 21), в четверг с 15.00 до 19.00". Пакеты, не удовлетворяющие правилам фильтрации отбрасываются, а факт их наличия регистрируется в специальном журнале. Поскольку сервисы в сети связаны с определенными номерами портов, то закрыв входящие соединения на 23 порт, можно запретить извне управлять компьютерами сегмента по протоколу Telnet, а закрыв исходящие соединения на 80 порт можно запретить сотрудникам отдела (сегмента) просматривать Web-страницы.
Межсетевые экраны с фильтрацией пакетов просты, и в ряде случаев входят в состав самой операционной системы (например IPChains в OC Linux). Однако межсетевые экраны с фильтрацией пакетов имеют и ряд недостатков:
- возможно задавать правила фильтрации по IP-адресам компьютеров, но не по имени пользователя.
- подсеть "видна" (маршрутизируется) извне.
- при выходе из строя межсетевого экрана подсеть становится незащищенной.
Для преодоления этих недостатков, в качестве межсетевого экрана используют прокси-сервера (proxy server). Прокси-сервер - это сервер посредник. Одно из назначений прокси-сервера - это ускорение работы сети, при подключении ее к Internet. Так например, кэширующий прокси-сервер Squid в ОС Linux сохраняет в достаточно большом кэше на диске Web-страницы, просмотренные разными пользователями, так что если какой-либо пользователь обратится к просмотренной кем-либо ранее странице, то эта страница не будет заново загружаться через Internet, а будет взята из кэша Squid. Прокси-сервер может использоваться и для сокрытия личности пользователя, путешествующего по Internet. Для этого пользователь сначала соединяется с анонимным прокси-сервером (например в Новой Зеландии), который получает пакеты от пользователя и перенаправляет их дальше от своего имени.
Установка прокси-сервера на шлюзе позволяет скрыть структуру подсети от внешней сети и реализовать гибкий межсетевой экран. При запрете продвижения IP-пакетов между интерфейсами шлюза, вся подсеть, с точки зрения внешней сети, представлена только одним IP-адресом – адресом прокси-сервера. Пользователь внешней сети, который хочет соединиться с компьютером внутри подсети, должен пройти следующую процедуру:
• Установить соединение с определенным портом прокси-сервера и указать имя компьютера внутри подсети с которым необходимо соединиться. Для каждого вида сервиса (http, ftp, smtp и т.д.) должна существовать своя программа-посредник, "прослушивающая" свой порт. Может существовать и универсальная программа - посредник, обслуживающая несколько сервисов. Если для какого-то сервиса программы-посредника нет (или она вышла из строя), то данный сервис будет не доступен. При установлении соединения возможно, хотя и не обязательно, проведение аутентификации (подтверждения личности) пользователя по его имени, паролю, IP-адресу. Возможна также регистрация факта и времени подключения в специальном журнале.
• Прокси-сервер создает соединение c компьютером внутри подсети, а затем обеспечивает обмен пакетами между внешней сетью и подсетью, подменяя адреса в проходящих через него пакетах. Возможно протоколирование соединения и фильтрация передаваемых данных (поскольку программа-посредник "понимает" протокол прикладного уровня своего сервиса).
Аналогичным образом происходит и соединение подсеть – внешняя сеть.
Другой технологией, позволяющей скрыть сеть предприятия, являеется NAT (Network Address Translation – трансляция сетевых адресов). NAT также позволяет компьютерам локальной сети работать с Internet через один IP-адрес. Технология осуществляет подмену IP-адресов отправителя и получателя, в проходящих через шлюз пакетах.
Поясним принцип работы NAT на примере. Допустим, имеется локальная сеть из десяти компью-теров. Все компьютера в сети имеют "серые" адреса 192.168.1.1 – 192.168.1.20, которые изолированы от сети Internet (не передаются маршрутизаторами Internet) и их не надо согласовывать с InterNIC. На компьютере "А", с IP-адресом 192.168.1.1 имеется модем, сетевой интерфейс которого, при подключении к Internet по протоколу PPP, автоматически получает от провайдера IP-адрес w1.x1.y1.z1. (запись условная). Таким образом, компьютер "А" имеет два сетевых интерфейса с адресами 192.168.1.1 и w1.x1.y1.z1. и является шлюзом локальная сеть – Internet.
Технология NAT
Пусть пользователь компьютера "Б" локальной сети (IP-адрес 192.168.1.10) обращается с помощью Web-браузера Internet Explorer к серверу www.microsoft.com, с IP-адресом w2.x2.y2.z2. (запись условная). Поскольку IP-адрес w2.x2.y2.z2. не относится к локальной сети, то на шлюз (компьютер "А") будет направлен IP-пакет со следующими данными:
• Порт приемника: TCP-порт 80 (порт сервера Microsoft, протокол http)
• Порт источника: TCP-порт 5000 (порт компьютера "А")
При этом протокол NAT сохраняет в своей таблице преобразованных адресов запись:
"Адрес {192.168.1.10, порт 1025} заменен на адрес {w1.x1.y1.z1, порт 5000}".
Преобразованный IP-пакет отправляется по Интернету. Пакет, посылаемый в ответ на этот пакет, принимается протоколом NAT. Полученный пакет содержит следующие адресные данные.
• Порт приемника: TCP-порт 1025 (порт компьютера "Б")
• Порт источника: TCP-порт 80 (порт сервера Microsoft, протокол http)
Преобразованный пакет направляется в локальную сеть. Протокол NAT подменяет адрес в IP-пакете, передавая его от своего имени, и пользуясь номером порта для того, чтобы "запомнить" какому компьютеру надо будет вернуть ответ на этот пакет.
Шлюз не может одновременно создать с одного и того же своего порта два соединения с 80 портом сервера www.microsoft.com, т.к. для создания сокета необходимо, чтобы хотя бы один из параметров " IP-адрес отправителя, номер порта отправителя" – "IP-адрес получателя, номер порта получателя" у двух сетевых соединений не совпадали. Поэтому, если к серверу www.microsoft.com одновременно обратятся два компьютера локальной сети, то пакеты одного из них будут отправлены с порта 5000 (как в примере), а пакеты другого – будут отправлены, например, с порта 5001. При получении ответа от сервера www.microsoft.com, пакеты, поступившие на порт 5000, будут переправлены первому компьютеру, а пакеты, поступившие на порт 5001 – второму компьютеру.
При использовании NAT возникает следующая проблема: пакеты, содержащие IP-адрес только в заголовке пакета, правильно преобразовываются протоколом NAT, однако пакеты, содержащие IP-адрес в поле данных, могут неправильно преобразовываться при помощи NAT. Например, протокол FTP хранит IP-адрес в заголовке FTP для команды FTP PORT. Заголовок FTP, как и любой протокол прикладного уровня, хранится в поле данных IP-пакета. Если NAT не сможет правильно преобразовать IP-адрес из заголовка FTP и откорректировать поле данных, то могут возникнуть неполадки связи. Для устранения этой проблемы существуют редакторы NAT, работающие с заголовками прикладных протоколов. Не для всех протоколов необходим редактор NAT, например для протокола HTTP он не нужен. В ОС Windows 2000 реализованы редакторы NAT для следующих протоколов: FTP, ICMP, PPTP, NetBIOS через TCP/IP, RPC, Direct Play, H.323, Регистрация ILS на основе LDAP. Однако для зашифрованного трафика использование редактора NAT не предусмотрено, что следует учитывать при использовании NAT.