Вряд ли для кого-нибудь секретом является тот факт, что компьютеры нужно защищать. Особенно если вы используете сервер на базе Windows 2000 для выхода в Интернет. Это типично для многих организаций. Windows 2000 намного проще и удобнее в настройке, чем различные версии Unix. А при должной настройке эта система не менее устойчива к взлому и стабильна. Впрочем, многие любители Unix могут с этим не согласиться, но это мое мнение. Обычно к серверу Windows 2000 подключается модем выделенной линии (или любое другое устройство), параллельно с локальной сетью. При этом организуется либо раздача соединения с Интернетом по локальной сети (Internet Connection Sharing, простейший вариант NAT), либо устанавливается прокси-сервер. Каждый из этих вариантов имеет свои плюсы и минусы, но с точки зрения гибкости управления и учета деятельности пользователей я предпочитаю второй. В любом случае нужно ясно понять – сервер придется защищать. Самое удивительное – Windows 2000 (равно как и XP) обладают богатыми встроенными возможностями по защите, и в этой статье я постараюсь вам объяснить, как ими пользоваться. Но для начала давайте вспомним базовые концепции стека протоколов TCP/IP.
Особенности стека TCP/IP
Основной протокол стека TCP/IP – это IP (Internet Protocol). Он работает на сетевом уровне и занимается доставкой пакетов. У отправителя и получателя должны существовать уникальные IP адреса, которые указываются в заголовках каждого пакета. То есть первый критерий фильтрации – мы можем пропускать пакеты только от нужных (или только к нужным) IP адресам. Это самая примитивная фильтрация.
Но помимо протокола IP в сети работают несколько других протоколов. Каждый из них добавляет в пакет свой заголовок, то есть в момент передачи по сети пакет представляет собой «слоеный пирог», где помимо данных помещены заголовки различных протоколов. Один из этих заголовков вы уже знаете – это заголовок протокола IP.
Выше протокола IP находятся протоколы транспортного уровня – это TCP (Transmission Control Protocol) и UDP (User Datagram Protocol). Обычно используется либо TCP, либо UDP. Каждый из этих протоколов тоже добавляет в пакет свой заголовок. У UDP и TCP есть своя специфика – они, в отличие от IP, уже умеют работать с сетевыми службами. Причем адресация сетевых служб происходит по адресу службы – номеру порта. Отсюда вытекает вторая возможность фильтрации – мы можем ограничивать доступ по номеру порта. При этом номер порта можно комбинировать с IP адресом – к примеру, разрешать доступ на веб-сайт сервера (стандартно TCP порт 80) только с определенных IP адресов. Учтите, что хотя номера портов для TCP и UDP похожи, это разные протоколы и номера портов у них тоже разные. Номера портов большинства служб стандартизированы, и вы можете посмотреть их в файле "services", который размещается в каталоге %systemroot%\system32\drivers\etc. %Systemroot% - это каталог, где у вас установлена Windows. Кстати, комбинация «IP адрес» + «номер порта» называется сокетом. Сокет позволяет уникально адресовать службу в Интернете.
Когда вы обращаетесь к удаленному серверу по протоколу TCP, то происходит процесс установления связи. К примеру, вы обратились к веб-серверу узла 192.168.1.1 (стандартно – на TCP порт 80). При этом ваш компьютер (клиент) тоже должен выделить порт, чтобы сервер знал, куда отправлять ответ. Порт клиента выделяется случайным образом – к примеру, пусть это будет TCP 29334.
Кстати, очень полезно использовать утилиту "netstat.exe", которая входит в стандартную поставку Windows – она показывает все текущие TCP соединения и открытые порты.
Как правило, все сетевые службы общаются через TCP или UDP. TCP сегодня используется наиболее часто. Так что практически в любом пакете вы обнаружите заголовки TCP и UDP, по которым мы и будем осуществлять фильтрацию.
Осталось упомянуть протокол ICMP (Internet Control Message Protocol). Он использует IP, но не задействует ни TCP, ни UDP. ICMP предназначен для диагностики компьютерной сети, и его, в принципе, можно разрешать с любого IP адреса на любой IP адрес. По ICMP работает утилита "ping.exe", также стандартно поставляющаяся с Windows. С помощью утилиты ping вы сможете проверить доступность любого узла в Интернете. А с помощью еще одной утилиты – tracert.exe – проверить маршрут до выбранного узла.
Теперь после небольшого теоретического введения давайте перейдем собственно к построению защиты. Я буду иллюстрировать статью английской версией операционной системы, поскольку использовать русскую версию сервера Windows 2000 я настоятельно не рекомендую. Вряд ли «база знаний» на русском языке столь же информационно наполнена, как knowledge base на английском – а ведь это именно тот ресурс, который жизненно необходим всякому уважающему себя администратору. Для непосвященных отмечу – "knowledge base" содержит ответы практически на все вопросы, там указаны практически все ошибки Windows, а также даны рекомендации по их решению и различные советы.
Настройка брандмауэра
Первое, что мы делаем – переходим в Local Security Policy (Control Panel -> Administrative Tools).
Там выбираем строчку "IP security policies..." Там уже есть три политики, но мы с вами будем создавать новую.
Нажимаем правую клавишу мыши на "IP security policies...", выбираем "Create IP security policy..." Запустится мастер установки IP политики.
Здесь предлагается ввести название политики и ее описание. Пусть будет "My first IP security policy".
Во втором окне оставьте галочку.
Здесь снимаем галочку – свойства политики мы отредактируем чуть позднее. Теперь в списке политики мы наблюдаем нашу. Нажимаем правую клавишу мыши на "IP security policies...", выбираем "Manage IP filter lists and filter actions...", переходим в закладку "Manage Filter Actions".
Нажимаем клавишу Add – нам нужно добавить действие "Deny". Вновь запускается мастер.
Во втором окне мы выбираем действие – "Block".
Первое правило – все, что не разрешено, должно быть запрещено. Наш подход будет следующий – мы запретим связь со всеми узлами, а потом будем потихоньку открывать то, что нам нужно. В последнем окне нажимаем клавишу "Finish", галочку "Edit Properties" помечать не нужно.
В окне действий появилось наше – "Deny". Закрываем окно и переходим к редактированию созданной нами политики (для этого достаточно нажать два раза левой клавишей мыши на ее название).
Нажимаем клавишу "Add". Сейчас мы будем изменять нашу политику. Запустится мастер.
Туннель нам не нужен – нажимаем "Next".
Здесь указывается, для какого соединения будет действовать правило. Если внутренняя сеть у вас имеет "левые" IP адреса, то можете сильно не мучаться и указать "All network connections", мы обеспечим доступ с внутренней сети отдельной строкой. Если выделенка у вас подключена через удаленный доступ, то можете выбрать "Remote Access", но опять же, если у вас есть несколько модемов для доступа клиентов сети к серверу по телефону, то это правило будет действовать и на них, что не всегда полезно. Так что указывайте "All network connections" и не мучайтесь.
Здесь все оставляем по умолчанию.
Первое что мы должны сделать – запретить все для всех. Поэтому нажимаем клавишу Add – будем добавлять фильтр. Запустится опять же мастер добавления фильтра (то же самое вы можете сделать через строчку "Manage IP filters list", нажав правую клавишу мыши на "IP security policies..." в окне "Local security settings").
Называем фильтр "Deny Filter List" и нажимаем клавишу "Add". Вновь запускается мастер (они вам еще не надоели?).
Здесь указывается источник пакета. Поскольку мы хотим запретить пакеты от всех источников, то указываем "Any IP address".
Здесь указывается адрес получателя пакета. Опять же, мы хотим запретить пакеты от всех IP источников для нашего компьютера, поэтому указываем "My IP address".
Мы запрещаем все протоколы – выбираем "Any".
Готово – появился новый фильтр. Прекрасно, теперь нажимаем клавишу "Ok".
Здесь тоже ничего не трогайте, пусть все будет по умолчанию.
Появился новый список фильтров. Нажимаем "Next".
Выбираем действие – "Deny".
В политике появилось новое правило – запрещение всего от всех и для всех. Теперь будем разрешать. Это, пожалуй, самая трудоемкая задача.
Первоначально следует разрешить ICMP трафик от всех пользователей на нашу машину. Для этого выполним ту же операцию "Add" в окне политики, только теперь мы воспользуемся готовым списком фильтров "All ICMP traffic".
Данный фильтр разрешает ICMP пакеты с любого IP адреса на наш компьютер.
Естественно, что действие теперь будет "Permit".
В свойствах политики добавилась еще одна строчка.
Теперь у нас не будет работать ничего, кроме ICMP протокола. Сейчас нам осталось выделить те службы, которые нам нужны, и прописать для них доступ. Лучше всего создать еще один список фильтров (к примеру, "Internet services"), добавить в него несколько строчек фильтров и право "permit". Ниже я дам строчки для самых распространенных служб, но в вашем индивидуальном случае все может быть по-другому. Следует отметить, что по умолчанию каждая служба добавляется зеркально – то есть если мы разрешаем связь от нашего компьютера к любым веб-серверам (порт 80), то будет реализовываться и обратная связь для передачи ответа веб-сервера.
Если у вас есть локальная сеть с «левыми» адресами, то нужно прописать для нее доступ – открываем все протоколы с адресов 192.168.1.0 маска 255.255.255.0 (к примеру) до "My IP address". Для этого можете создать отдельный фильтр "My LAN".
А теперь перейдем к заполнению наиболее часто используемых служб (если у вас есть дополнения, то присылайте их автору (dch@3dnews.ru)).
1. Запросы DNS сервера.
Разрешаем 53 порт получателя (destination port address) протокола UDP от нашего компьютера к любому компьютеру. Вместо любого компьютера можно указать DNS сервер провайдера.
2. Веб-трафик.
Открываем порт TCP 80 получателя от нашего компьютера к любому компьютеру.
3. FTP-трафик.
Открываем порты TCP 20 и TCP 21 получателя от нашего компьютера к любому компьютеру.
4. SMTP трафик (для отправки писем).
Открываем порт TCP 25 получателя от нашего компьютера к любому компьютеру (можно вместо любого компьютера указать SMTP сервер провайдера).
5. POP3 трафик (для приема писем).
Открываем порт TCP 110 получателя от нашего компьютера к любому компьютеру (или к POP3 серверу провайдера).
6. IMAP трафик (для приема писем).
Открываем порт TCP 143 получателя от нашего компьютера к любому компьютеру (или к IMAP серверу провайдера).
7. ICQ трафик.
Зависит от сервера ICQ, обычно TCP порт 5190 получателя от нашего компьютера к любому компьютеру (или к серверу ICQ).
Ну а сейчас пришла пора тестирования – нажимаем правую клавишу мыши на название нашей политики и указываем "Assign".
После этого вы можете наслаждаться результатом.
Заключение
После изучения данной статьи вы сможете самостоятельно настроить брандмауэр, используя встроенные в Windows 2000/XP средства безопасности. Брандмауэр позволяет повысить безопасность компьютерной сети и ограничить доступ к службам, которые вы желаете открыть только для внутренней сети. Помните, что главное правило – все что не разрешено, должно быть запрещено.
Дополнение
Доброе время суток...
В целом, задачу можно решить значительно проще:
I. Если сервер используется только для доступа в Интернет (и возможно для хостинга веб)
1.1 Отключаем на "внешнем" интерфейсе биндинг всего кроме TCP/IP
1.2 Включаем ICS(AutoNAT outside)
1.3 смотрим netstat -na
1.4 отключаем ненужные сервисы последовательно
1.5 повторяем 1.3 и 1.4 до отсутствия в 1.3 результате открытых портов на "внешнем" интерфейсе
1.6 наслаждаемся результатом
II. Если сервер используется для MSSQL, 1C, хранения финансовых отчетов и т.п. и к нему подключили Интернет.
1.1 Отключить Интернет от сервера
1.2 Уволить админа
1.3 Поставить отдельный сервер
1.4 Перейти к пункту 1)
III. Лирическое отступление:
Брандмауэры 2-го уровня (не умеющие анализировать содержимое пакетов) и не использующие понятия "внешний" и "внутренний" интерфейс к применению не пригодны (как минимум сами по себе). Под "внешним" подразумевается интерфейс, подключенный к Интернет и имеющий "реальный" адрес. Встроенный в Win2k/XP данные возможности имеет, но настраивается намного сложнее, чем любой другой. В тоже время, существует достаточное число внешних продуктов, который распостраняются бесплатно (либо условно-бесплатно) и обладают значительно более удобным интерфейсом, а в отдельных случаях (Conseal PC firewall) и гораздо более правильной реализацией. К сожалению, на данный момент, на рынке отсутствуют продукты, которые могли бы создавать приемлемую Security Policy автоматически. Таким образом, для среднего пользователя Сети Интернет, большинство из продуктов либо не дадут результата, либо будут препятствовать работе. Не говоря о том, что обойти брандмауэр 2-го уровня довольно просто. Для этого даже не надо знать как оно работает, - уже существуют готовые программы для spoofing (IP and MAC). Приведенный в статье пример настройки вообще не содержит упоминаний о применении правил к интерфейсам, а так же того, что для разных интерфейсов (внешнего и внутреннего) необходимы _разные_ правила. Общий же тон статьи может создать впечатление мнимой простоты и ложной защишенности у начинающего пользователя. Что есть неправильно, с моей точки зрения. Опыт работы показывает, что 90% попыток пользователя настроить брандмауэр, основываясь на информации, почерпнутой из указаний "нажать сюда, потом сюда" заканчивается проблемами с доступом в Сеть и звонками пользователя в Службу поддержки провайдера.
Все вышеизложенное является моим личным мнением и никоим образом не является официальным мнением моего работодателя.
Мнение сформировано 7-ю годами администрирования в ISP.
-----------
With best,
Peter Lavee