Инструменты безопасности с открытым исходным кодом

Сети TCP/IP


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

Однако большинство корпораций по-прежнему использовали сетевые протоколы, предоставляемые производителями оборудования. IBM продвигала NetBIOS или SNA; в ЛВС Novell использовался протокол IPX/SPX; в сетях Windows применялся еще один стандарт, NetBEUI, производный от NetBIOS. Хотя протокол TCP/IP стал широко использоваться в 1980-х годах, только с появлением Интернета в начале 1990-х TCP/IP превратился в стандарт передачи данных. Это привело к снижению цен на оборудование для IP-сетей, и также значительно облегчило межсетевое взаимодействие.

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


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

Таблица 3.2. Пример пакета данных TCP/IPПротоколСодержимоеУровень модели ВОС
EthernetMAC-адресКанальный
IPIP-адрес Сетевой
TCPЗаголовок TCP Транспортный
HTTPЗаголовок HTTPПрикладной
Прикладные данныеWeb-страницаДанные
Можно видеть, что на внешнем "конверте" для наших данных написан адрес Ethernet. Он идентифицирует пакет в сети Ethernet. Внутри этого конверта находится сетевая информация, а именно, IP-адрес; еще глубже находится транспортный уровень, который устанавливает соединение и закрывает его. Затем располагается прикладной уровень с заголовком HTTP, сообщающим web-навигатору, как форматировать страницу. Наконец, мы доходим до реальной полезной нагрузки пакета - содержимого web-страницы. Этот пример иллюстрирует многоуровневую природу сетевых коммуникаций.


Рис. 3.1.  Трехходовое квитирование установления связи

При использовании протокола TCP/IP взаимодействие между двумя узлами сети подразделяется на несколько фаз (рис. 3.1). Не вдаваясь в детали, касающиеся сервера доменных имен (DNS), и предполагая, что используются IP-адреса, а не имена хостов, в качестве первой фазы выделим порождение ARP-запроса (Address Resolution Protocol - протокол разрешения адресов) для поиска адреса Ethernet, соответствующего IP-адресу, с которым пытаются взаимодействовать. ARP преобразует IP-адрес в MAC-адрес сети Ethernet. Теперь, когда мы можем общаться с целевой машиной по протоколу IP, для формирования сеанса между машинами с помощью протокола TCP осуществляется трехходовое взаимодействие.


Машина, собирающаяся послать данные другой машине, посылает пакет SYN для синхронизации или инициирования передачи. Пакет SYN, по сути, говорит: "Вы готовы к передаче данных?" Если другая машина готова принять соединение от первой, она посылает SYN/ACK, что означает: "Подтверждаю получение вашего пакета SYN, я готова." Наконец, порождающая машина отправляет пакет ACK обратно, говоря тем самым: "Отлично. Начинаю посылать данные." Такая процедура называется трехходовым квитированием установления связи в TCP. Если какой-либо из трех ходов не выполнится, то соединение не будет установлено. Осуществляя пересылку, машина снабжает пакеты данных порядковыми номерами и подтверждает получение всех пакетов с порядковыми номерами, использованными второй стороной. Когда все данные посланы, одна из сторон посылает второй стороне соединения пакет FIN. Та отвечает пакетом FIN/ACK и сама посылает пакет FIN, в ответ на который посылается последний пакет FIN/ACK для закрытия сеанса TCP/IP.

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

В Linux существует несколько встроенных экранирующих приложений: Iptables в версиях ядра 2.4х, Ipchains в 2.2x и Ipfwadm в ядре версии 2.0. Большинство межсетевых экранов на платформе Linux делают свое дело, используя одну из этих служебных программ уровня ядра.

Все три упомянутых приложения действуют аналогичным образом.


У межсетевых экранов обычно имеется два или больше сетевых интерфейсов, и под Linux это достигается наличием в компьютере двух или большего количества сетевых плат. Один интерфейс обычно соединяется с внутренней ЛВС; этот интерфейс называется доверенным или собственным. Другой интерфейс предназначен для общедоступной стороны (ГВС). В большинстве небольших сетей ГВС-интерфейс подключен к Интернету. Может присутствовать и третий интерфейс, называемый ДМЗ (от военного термина ДеМилитаризованная Зона), обычно предназначенный для серверов, которые должны быть более открыты Интернету, чтобы внешние пользователи могли с ними соединяться. Каждый пакет, который пытается пройти через машину, пропускается через последовательность фильтров. Если он соответствует фильтру, над ним выполняется некоторое действие. Этим действием может быть отбрасывание пакета, пропуск пакета, или маскарад пакета ("Masq.") с помощью внутреннего собственного IP-адреса. Лучший метод конфигурирования межсетевых экранов состоит в первоначальном запрете всех пакетов с последующим выборочным разрешением необходимых потоков данных (см. врезку о философии конфигурирования межсетевых экранов).

Межсетевые экраны могут фильтровать пакеты на нескольких различных уровнях. Они могут анализировать IP-адреса и блокировать трафик, приходящий от определенных машин или сетей, проверять заголовок TCP и определять его состояние, и на более высоких уровнях анализировать приложение или номер порта TCP/UDP. Межсетевые экраны можно конфигурировать для отбрасывания целых категорий трафика, таких как ICMP. Пакеты типа ICMP, такие как ping, обычно отбрасываются межсетевыми экранами, поскольку они часто используются для исследования сети и атак на доступность. Нет причин, по которым кому-то вне вашей организации должно быть позволено эхо-тестировать вашу сеть. Однако иногда разрешаются эхо-ответы, поэтому вы можете выполнять эхо-тестирование изнутри ЛВС вовне.


Содержание раздела