В целях получения более гибкой системы правила фильтрации пакетов составляются для каждого сетевого интерфейса, в них учитываются IP-адреса источника и получателя, номера портов TCP и UDP, флаги TCP-соединений и ICM-сообщений. Причем правила для входящих и исходящих пакетов различаются. Это значит, что при настройке фильтрующего брандмауэра правила для конкретного сетевого интерфейса представляются как отдельные правила для входящей и исходящей информации, поскольку входящие и исходящие пакеты обрабатываются брандмауэром независимо друг от друга. Списки правил, которые управляют фильтрацией сетевых пакетов поступающих извне в локальную сеть и отправляемых из локальной сети в Интернет, принято называть цепочками (chains). Термин "цепочка" используется потому, что при проверке пакета правила применяются последовательно одно за другим, пока не обнаружится подходящее правило для сетевого пакета или список правил не будет исчерпан.
Описанный механизм фильтрующего брандмауэра достаточно эффективен, однако он не обеспечивает полной безопасности локальной сети. Анализ заголовков сетевых пакетов — операция слишком низкого уровня, для того чтобы реально выполнять аутентификацию и контролировать доступ. В процессе фильтрации пакетов практически невозможно распознать отправителя сообщения и проанализировать смысл передаваемой информации. Из всего набора данных, пригодных для аутентификации, на рассматриваемом уровне доступен только IP-адрес отправителя, однако этот адрес очень легко подделать, на чем и базируется множество способов сетевых атак. Несмотря на то, что средства фильтрации пакетов позволяют эффективно контролировать обращение к портам, использование протоколов обмена и содержимое пакетов, проверку данных необходимо продолжить на более высоком уровне.
Рассмотрение построения брандмауэра логично начать со входящих пакетов. Поскольку именно извне обычно происходит проникновение в сеть.
Итак, основной, но не единственной задачей сетевого экрана является фильтрация пакетов. В Linux уже встроен Firewall, и его не надо устанавливать отдельно. Это iptables и ipchains. Iptables и ipchains позволяют контролировать трафик, который проходит сквозь компьютер по протоколам TCP, UDP и ICMP. Так как TCP является транспортом для всех основных протоколов Интернета: FTP, HTTP, РОРЗ и др., то фильтрация TCP позволяет защищать все эти сервисы.
Все запросы, которые поступают из Интернета проходят через сетевой экран, который проверяет их по внутренним правилам. И, если соответствие установлено, то пакет пропускается. Если какой-либо параметр нарушает хотя бы одно правило, то пакет может быть удален:
· без предупреждения;
· с посылкой на компьютер отправителя, сообщая об ошибке.
Последний вариант не приветствуется среди пользователей, потому что незачем направлять злоумышленнику лишние пакеты. Лучше оставить действие без внимания, и злоумышленник будет думать, что сервис просто недоступен. Но в этом случае легальные пользователи могут ощутить неудобства при наличии просчета в конфигурировании сетевого экрана. Допустим, что заблокирован доступ к 80 порту. Если пользователь обратится к Web-серверу, то программа, не получив ответа о запрете, будет находиться в состоянии ожидания до истечения Timeout. Для некоторых программ это значение может быть бесконечным, и они зависнут.
К тому же, отправка сообщений с ошибками идет по протоколу ICMP. Недобросовестный пользователь может использовать эти особенности для реализации атаки "Отказ от обслуживания" и переполнить канал ненужными ответами. Атака DoS может быть направлена не только на трафик. Достаточно в цикле запускать запросы на установку соединения с запрещенным портом, а компьютер будет тратить ресурсы на проверку пакетов и отправку ICMP-ответов. Если пакеты будут идти слишком часто, то сервер может не справиться с нагрузкой и перестанет отвечать на запросы авторизованных пользователей.
При настройке правил можно использовать два варианта фильтра:
1. Разрешено все, что не запрещено.
2. Запрещено все, что не разрешено.
Наиболее безопасным методом является второй, потому что всегда следует отталкиваться от запрета. Изначально необходимо запретить абсолютно все, а потом по мере надобности открывать доступ определенным пользователям и к обусловленным сервисам. Именно этой политики придерживаются, когда настраивают правила для входящих пакетов.
Если двигаться от разрешения, то по умолчанию все позволено. Администратор может забыть или просто не закрыть некий доступ и увидеть свою ошибку только после того, как злоумышленник проникнет в систему.
Основными параметрами пакета, по которым производится фильтрация, являются номер порта источника или приемника, адрес отправителя или назначения и протокол.
Фильтровать можно пакеты, идущие в обе стороны. Проверка пакетов, приходящих извне, позволяет на самом раннем этапе отсеять любые попытки взломать систему или вывести ее из строя.
Можно задаться вопросом, зачем же фильтровать то, что уходит из сети? На первый взгляд бессмысленно, но смысл есть и достаточно большой. У исходящего трафика могут быть враги, такие как:
· троянские программы, которые могут отправлять в сеть конфиденциальную информацию или соединяться со злоумышленником или с его сервером, чтобы брать команды с какого-нибудь файла;
· cпециализированные программы для обхода правил. Допустим, что доступ к определенному порту извне запрещен. Злоумышленник может поместить на сервере программу, которая будет перенаправлять трафик с разрешенного порта на запрещенный, наподобие туннелирования OpenSSL.
Возможных лазеек для проникновения очень много, задача закрыть максимальное их количество. Для этого под контролем должен быть трафик в обоих направлениях.
TCP используется как базовый для передачи данных таких протоколов, как HTTP, FTP и др. Запрещать его не имеет смысла, потому что это основа, без которой пользователь лишится всех удобств, предоставляемых всемирной сетью. Для передачи данных сначала TCP устанавливает соединение с удаленным хостом, и только потом происходит обмен информацией. Благодаря этому подделка IP-адреса любого участника соединения усложняется, а иногда становится и невозможной.
Протокол UDP находится на одном уровне с TCP, но передает данные без установки соединения. Это значит, что пакет просто посылается в сеть на определенный адрес, и нет гарантии, что он дошел до адресата. Здесь нет никакой защиты от подделки IP-адреса, поэтому в качестве отправителя злоумышленник может указать что угодно, и сервер не увидит подвоха. Если нет особой надобности, то обычно запрещают прохождение таких пакетов в обе стороны.
Протокол ICMP используется для обмена управляющими сообщениями. Через него команда ping проверяет соединение с компьютером, а оборудование или программы сообщают друг другу об ошибках. Если этот протокол использовать только по назначению, то он очень удобен. Но в жизни все далеко от идеала, и ICMP уже не раз становился объектом для DoS-атак. Если обмен управляющими сообщениями необходим в работе, нужно попробовать найти другую программу, но избавится от использования ICMP.
Первое, на что надо обратить внимание — это, конечно же, порты. Допустим, что есть Web-сервер, к которому имеют доступ все пользователи. Предположим, что на нем работают абсолютно безопасные сценарии, или статичные документы HTML. Помимо этого, все программы содержат самые последние обновления и не имеют уязвимостей. Получается, что сервер безопасен! Но до поры до времени. Для обновления содержимого необходим какой-то доступ для закачки файлов, ведь бегать с дисками к Web-серверу никто не будет. Чаще всего для работы с файлами открывают FTP-сервис, а вот это уже дыра.
Для доступа по FTP можно установить наиболее защищенные программы и самые сложные пароли, но злоумышленник рано или поздно сумеет взломать этот сервис. Пароль можно подобрать, украсть с компьютера пользователя или заставить самого сказать через социальную инженерию, существуют и другие методы. Любой канал, через который можно проникнуть в систему, становится уязвимым, потому что именно его будет взламывать злоумышленник, и как раз на это будут потрачены все усилия. У одного не получится, у второго, а сотый случайно войдет с первого раза и уничтожит все, что попадется под руку.
Таким образом, можно установить на сервер такую политику, при которой на 80 порт будут приниматься все подключения, а FTP-сервис (21 порт) будет запрещен для всех, кроме определенного IP-адреса. После этого злоумышленник может хоть годами подбирать пароль, любой его трафик будет обрезаться, если он не знает IP-адреса и не сможет его подделать.
Нужно запретить все порты и после этого открыть только то, что необходимо. На сервере, который охраняет целую сеть, это сделать сложно, потому что разные компьютеры требуют различные сервисы. Открыть их все — значит разрешить работать со всеми портами на любой машине. Конечно же, можно помимо портов использовать в правилах IP-адреса, но дополнительным вариантом защиты будет использование сетевого экрана на каждом компьютере внутри сети. В этом случае каждый из них будет охраняться в зависимости от выполняемых задач. Если это Web-сервер, то из Интернета будет виден только 80 порт, для FTP — 21-й порт.
Исходя из предыдущих соображений видно, что для фильтрации можно использовать и IP-адрес, хотя максимальный эффект достигается именно в сочетании параметров (порт и адрес).