Порты. Прокси. Файерволл
Антон Орлов, http://antorlov.chat.ru
Когда большинство пользователей компьютерных технологий видят слово "порт", то обычно с ним ассоциируются такие аббревиатуры, как COM, LPT, PS/2. То есть - попросту названия "гнезд", куда можно присоединить какие - либо периферийные устройства вроде сканера, принтера или модема. Разные типы таких портов предоставляют разные возможности и предназначены для работы с различными устройствами, подключаемыми к персональному компьютеру. Но при чтении литературы, описывающей работу в сети Интернет, при работе с программами для этой сети становится ясно, что слово "порт" имеет не только это, привычное всем, значение. Но какое же конкретно? И что, например, означает поле "номер порта", встречающееся почти во всех окнах настройки прокси-серверов (рис.10.1)?
Рис.10.1. Номер порта.
Как передаются данные между компьютерами в Интернете, надеюсь, ясно из предыдущей главы. Ну, а как эти самые данные находят на компьютере нужную им программу? Ведь почти все используемые сейчас операционные системы - многозадачные, и в них можно одновременно, скажем, и электронную почту отправлять или получать, и файлы на сервер помещать, и web-странички смотреть, и по Интернет-пейджеру общаться. Вот приходит пакет данных с электронным письмом на компьютер. Как он узнает, в какую программу ему пойти - в браузер или все же в почтовый клиент? Для этого и существует система портов.
Представим себе Интернет как большой город, состоящий из домов-компьютеров. Если адресом дома в такой аналогии будет служить IP-адрес, выделяемый компьютеру, то порт будет служить адресом квартиры. Каждый пакет данных имеет в себе адрес дома - IP компьютера, которому он предназначен. По этому адресу происходит маршрутизация пакета при его передаче от компьютера-сервера к компьютеру-получателю. Квартиры в доме-компьютере могут быть заняты (а могут и не быть) различными программами. И внутри этого дома маршрутизация происходит именно по номерам квартир-портов.
Заведует этим всем операционная система - выделяет программам порты и распределяет приходящие пакеты по ним. Впрочем, точнее будет сказать, что все запущенные программы, предназначенные для работы с ресурсами Интернета, из всех пакетов данных, приходящих на компьютер, как бы "выбирают" те, которые адресованы именно им.
Информация о порте назначения пакета, так же, как и IP-адрес получателя, указывается в служебной информации каждого пакета данных - в его заголовке.
Отдельные экземпляры программы, скажем, новые окна браузера тоже имеют свои порты. Поэтому вы можете одновременно смотреть сразу несколько страничек в разных окнах браузера.
Различные порты различаются одним - своим номером. Всего возможных номеров портов весьма много - тысячи. Однако некоторые номера портов традиционно присвоены вполне определенным сервисам. К примеру, программа-web-сервер (то есть программа, которая может отвечать на запросы с удаленного компьютера, выдавая для просмотра документ Html и все файлы, которые из него вызываются) отвечает на запросы с указанием порта 80. Программа - Ftp-сервер, выдающая по запросу пользователя файлы, отвечает на запросы, в которых указано, что они посланы на порт 21. Иными словами, когда, скажем, ваш браузер запрашивает сервер, скажем, www.duel.ru, то он посылает пакет данных на порт 80 компьютера с IP-адресом, соответствующим www.duel.ru, а в пакете указывает номер своего порта, выделенного ему операционной системой. Сервер www.duel.ru, получив пакет, посылает на компьютер с запросившим его браузером пакет данных, адресуя его тому порту, с которого был прислан запрос. Операционная система, увидев по заголовку пакета, какому порту адресован пакет, отдаст его в браузер, который его обработает по собственному усмотрению.
Поэтому пакет данных, предназначенный, скажем, браузеру, не попадает в почтовый клиент, и наоборот.
Какие же выводы следуют из всего вышеизложенного?
На компьютере, основная задача которого - выдавать информацию в Сеть по запросам, может одновременно быть запущено сразу множество программ: web-сервер для выдачи web-страничек, ftp-сервер для скачивания файлов, почтовый сервер и др., причем у этого компьютера будет лишь один IP-адрес, по которому к нему будут обращаться с запросами и на загрузку файлов, и на просмотр сайта, и на работу с почтой.
Каждая программа работает с запросами, приходящими к ней, по своему порту: web-сервер - по 80-му, Ftp-сервер - по 21-му и др. Браузерам, Ftp-клиентам вроде CuteFtp, почтовым клиентам номера портов выделяются операционной системой того компьютера, на котором они запущены. Номер порта, по которому работают эти серверы, указывается в их настройках.
Нетрудно понять, что в том случае, если web-сервер будет настроен на работу, скажем, по 81-му порту, то ни один браузер просто так связаться с ним не сможет. В многих программах, предназначенных для работы с ресурсами Интернет, есть возможность задавать номер порта, с которого сервер Интернета будет этой программе отвечать в том случае, если он настроен на работу с другого порта (рис.10.2).
Если на сервере запущен еще какой-либо сервис, скажем, многопользовательская ролевая игра, то программа, обеспечивающая ее функционирование, будет работать с какого-либо другого порта, отличного от тех, с которых работают другие программы. Номер этого порта необходимо сообщать тем, кто будет подключаться к игре, или разработать программу - игрового клиента, которая автоматически работала бы с этим портом.
Рис.10.2. Здесь настраиваются номера портов
в почтовом клиенте The Bat!.
Если проводить еще одну аналогию для лучшего восприятия, то можно себе представить порт как некую "радиочастоту", а каждую программу - как приемник для этой частоты. Чтобы программа могла услышать запрос, надо настроиться на ее "радиочастоту" - послать запрос на этой частоте, а в запросе сообщить, на какой частоте она должна выйти на связь с тем, кто ее запросил.
Далее. С системой портов тесно связана такая система защиты, как "файерволл"[26]. Файерволлом называется программа, которая обеспечивает санкционированность всей информации, приходящей или уходящей с компьютера. К примеру, при отправке почты используется порт 25, а при получении - порт 110. С этими портами работает почтовая программа. Если же какая-нибудь другая программа, например, вирус-троян[27], попытается связаться с чем-либо по этому порту, то файерволл не даст ей это сделать.
Кроме того, файерволл не позволяет осуществить связь с удаленным компьютером по какому-либо порту, если это не разрешил пользователь. Перед началом использования файерволла производится его настройка - то есть указание номеров портов, через которые может идти обмен данных, и программ, которые с этими портами работают. В современных файерволлах настройка может пройти и автоматически.
Иными словами, если, к примеру, с компьютера собирается отправиться пакет данных, то файерволл посмотрит, какая программа его отправляет, и по какому порту, и на какой порт. И в случае, если эти данные не будут соответствовать указанным в первоначальных настройках файерволла, то он забьет тревогу: либо запретит вообще отправку этого пакета, либо запросит пользователя о возможных действиях (смотря как настроить). Если на компьютер пробралась программа-троян, отсылающая, скажем, пароли пользователя куда бы то ни было, то она не сможет воспользоваться ни одним портом, да и вообще не сможет осуществить отправку данных, так как файерволл ее распознает (так как она, естественно, не будет входить в список разрешенных) и запретит ей доступ к Интернету. Также - и при приходе пакета: пропускаются лишь те пакеты, которые адресованы разрешенным программам - на разрешенные порты. Если же пакет приходит на адрес порта, которого нет в списке разрешенных, то ему в доступе отказывается.
Обеспечение безопасности компьютера от "взлома" извне тоже тесно завязано на управлении системой портов. На компьютере постоянно запущено множество программ. И не исключено, что при обращении к какому-либо порту какая-либо программа возьмет и ответит на запрос, да еще и проигнорировав какую-либо авторизацию доступа. Это - так называемая "дыра" в программе, за что ее авторов нещадно бьют. В другом случае операционная система, воспринимая данные по какому-либо порту, может попросту "повиснуть" - опять-таки из-за ошибки в ее программе. Так, до появления третьего Service Pack к Windows NT приход на компьютер с этой операционной системой пакетов данных, адресованных на 139-й порт, происходила либо перезагрузка Windows NT, либо ее "зависание". ("Дыры" могут быть основаны и на совсем других принципах - не только на системе портов, просто "дыра через порт" - один из многочисленных вариантов "дыр".)
Порты у компьютера можно "прослушать" - то есть послать на него пакеты данных, адресованные на все порты подряд, и ждать ответа хоть от какого-нибудь порта. Если с какого-либо порта придет ответ, то это значит, что с этим портом можно попробовать договориться - попытаться заставить работать программу, заведующую этим портом, в своих целях. Просканировать порты можно, например, с помощью программы Internet Maniac (рис.10.3). Со сканирования портов и поиска "дыр" в программном обеспечении обычно начинается любая хакерская атака, поэтому многие провайдеры, банковские системы и другие большие сетевые представительства отслеживают подобные действия и принимают адекватные меры в адрес того, кто это делает.
Рис.10.3. Вот так сканируются порты. Это пример - а при настоящей хакерской атаке можно было бы и "дыру" отловить, да и самому попасться - зависит от умения обоих сторон.
Поскольку любой сложный программный комплекс включает в себя тысячи строк кода и множество функций, многие "дыры" в нем выявляются не сразу. К примеру, в Windows NT изначально "дыр" было предостаточно. Обычно в случае, если в программе выявляется "дыра", ее производитель выпускает специальное обновление, ее закрывающее. Такие обновления распространяются через Интернет. Особенно преуспела в закрытии своих "дыр" компания Microsoft, под обновления систем безопасности ее продуктов отведен целый большой раздел на ее сервере, что, впрочем, неудивительно - уж больно большие и сложные программы она выпускает.
Использование файерволла позволяет в определенной степени свести на нет риск от возможности сканирования портов, - он не дает возможности получить с портов, не входящих в список разрешенных, какой-либо ответ, так как вообще не пропускает к ним несанкционированные запросы. Но файерволл не может помочь в том случае, когда атака ведется с помощью вполне законного доступа - скажем, при приходе письма, содержащего вирус-троян.