Firewall

Содержание

Введение	3

2. Межсетевой экран	5

3. Политика организации брандмауэра	8

3.1. Брандмауэр с фильтрацией пакетов.	8

3.1.1. Фильтрация входящих пакетов	9

3.1.2. Параметры фильтрации	11

3.2. Протоколы	12

3.3. Фильтрация портов	13

3.4. Фильтрация адресов	14

3.4.1. Фильтрация неверных адресов	14

3.5. Фильтрация в Linux	15

4. Ipchains	17

4.1. Перенаправление	18

4.2. Сохранение фильтра	23

5. Iptables	25

5.1. Переадресация	27

6. Установка, настройка Firewall	28

6.1. Настройка с помощью команды: aptitude install arno-iptables-firewall	28

6.2. Ручное конфигурирование iptables	35

Заключение	38

Список использованной литературы	40







Введение

Популярность Linux постоянно растет.  Эта система стала объектом пристального внимания не только администраторов сетей небольших организаций, но и пользователей, выбирающих программные средства для поддержки домашнего компьютера. В настоящее время у многих появилась возможность поддерживать постоянное Internet-соединение, что способствует дальнейшему распространению системы.

Unix может выступать не только как платформа для установки различных серверов, в частности Web-сервера, но и как шлюз, обеспечивая взаимодействие локальной сети с интернет. Через этот шлюз компьютеры под управлением  Unix, Windows NT, Macintosh и других систем, а так же сетевые принтеры могут обмениваться информацией с интернет. Имея под рукой такое разнообразие системных средств, администратор вынужден задуматься об обеспечении их безопасности.

Вопросы защиты особенно важны для системы Linux, установленной на компьютере, поддерживающем постоянное соединение с интернет. Подключить компьютер с установленной системой Unix к Интернет – это почти то же самое, что уехать на длительный отдых, оставив двери дома открытыми. Рано или поздно к вам явятся непрошенные гости. 

Для защиты компьютера от вторжения по сети используется сетевой экран. Сетевой экран – Firewall является основой безопасности и первым кольцом защиты вторжения извне. Согласно документам гостехкомиссии «межсетевой экран – это локальное (однокомпонентное) или функционально- распределенное программное (программно-аппаратное) средство (комплекс), реализующее контроль за информацией,  поступающей в АС и/или выходящей из АС. Межсетевой экран обеспечивает защиту АС посредством фильтрации информации, т.е. ее анализа по совокупности критериев и принятия решения о ее распространении в (из) АС на основе заданных правил, проводя таким образом разграничение доступа субъектов из одной АС к объектам другой АС.  Каждое правило запрещает или разрешает передачу информации определенного вида между субъектами и объектами. Как следствие, субъекты из одной АС получают доступ только к разрешенным информационным объектам из другой АС. Интерпретация набора правил выполняется последовательностью фильтров, которые разрешают или запрещают передачу данных (пакетов) на следующий фильтр или уровень протокола»[5].

 Нежелательному гостю необходимо сначала получить доступ к компьютеру, и только если это удалось, он попытается двигаться дальше и будет пробираться  до уровня файлов. Там уже действует второе кольцо обороны – права доступа к файлам и директориям. Firewall, что в переводе означает огненная стена, сам по себе защищает только от сетевых вторжений, но правильная регламентация доступа предохраняет  и от локальных злоумышленников. Оба уровня защиты очень важны. 





























2. Межсетевой экран

В  операционных системах Linux в качестве сетевого экрана выступает программа, которая фильтрует информацию на основе определенных правил, в которых должно быть четко прописано, какие пакеты могут обрабатываться или отправляться в сеть, а какие нет. Благодаря этому большинство атак могут захлебнуться уже на входе в компьютер, потому что сетевой экран не позволит сервисам даже увидеть потенциально опасные пакеты. Сетевой экран может быть установлен на каждом компьютере в отдельности или на входе в сеть. Во втором случае Firewall реализует общие настройки безопасности для всех компьютеров в сети.

Если в сети очень много компьютеров, то управлять ими и обновлять политику безопасности становится затруднительным. Установка единого сервера с Firewall позволяет упростить эти процедуры. Лучше всего, если компьютер с сетевым экраном выступает как шлюз или как анонимный прокси-сервер для доступа в Интернет остальных участников сети. В этом случае злоумышленник будет изначально видеть только этот компьютер, а остальные как бы прячутся за занавеской. Чтобы проникнуть на любую машину в сети, злоумышленник должен будет сначала получить доступ к компьютеру с Firewall. 



Рис. 1. Firewall для защиты сети

Основными компонентами брандмауэра (сетевого экрана) являются:

1. Политика безопасности сети

2. Механизм аутентификации

3. Механизм фильтрации пакетов

При построении брандмауэра обычно используется, непосредственно подключенный к Интернету и содержащий базовый набор средств, реализующих брандмауэр. Такой компьютер иногда называют бастионом.

Термин «брандмауэр» может приобретать различные значения в зависимости от принципа, положенного в основу работы средств защиты, сетевой архитектуры и схемы маршрутизации. Брандмауэры обычно подразделяют три типа:

1. Брандмауэр с фильтрацией пакетов;

2. Прикладной шлюз;

3. Универсальный Proxy-сервер.

Брандмауэр с фильтрацией пакетов, как правило, действует на сетевом, транспортном уровнях и реализуется в составе операционной системы. Источником информаций для фильтрации является содержимое заголовка IP-пакетов, на основе которого брандмауэр принимает решение, по какому маршруту следует направить пакет.

Прикладной шлюз реализуется посредством выбора сетевой архитектуры и конфигурации системы. Сетевой трафик никогда не проходит через компьютер, на котором выполняется прикладной шлюз. Чтобы получить доступ в Интернет, локальный пользователь должен зарегистрироваться на прикладной шлюз. Компьютер, содержащий прикладной шлюз, может быть защищен брандмауэрами с фильтрацией пакетов как извне, так и из локальной сети.

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

Помимо этого, брандмауэры можно разделить по типу построения защиты:

1. Пороговый и его разновидность – бастионного типа;

2. Организующий так называемую демилитаризованную зону.

Брандмауэр порогового типа призван защитить локальную сеть от атак извне, а при соответствующей настройке и от атак изнутри. Такого типа брандмауэры обычно используются для защиты небольшой сети или даже одного компьютера. Как правило, сетевые службы, предоставляющие услуги вне локальной сети (HTTP, FTP и т. п.), размещаются на том же компьютере, что и брандмауэр.

Организация демилитаризованной зоны оправдана тогда, когда в сети выделено несколько специальных компьютеров для интернет - сервисов, предоставляемых большому миру, а так же при отсутствии уверенности в благонадежности собственных сотрудников. Для организации демилитаризованной зоны используются, по меньшей мере, два брандмауэра – один для защиты демилитаризованной зоны от проникновения извне, а второй – от проникновения из собственной локальной сети. Организация демилитаризованной зоны сложнее, чем организация брандмауэра бастионного типа, но взамен  можно получть большую защиту данных.

3. Политика организации брандмауэра

3.1. Брандмауэр с фильтрацией пакетов.

Брандмауэр с фильтрацией пакетов представляет собой «сито» для проходящих через него входящих и исходящих пакетов. В операционной системе Linux реализован брандмауэр, позволяющий контролировать ICMP-, UDP- и TCP-пакеты. Брандмауэр с фильтрацией пакетов организован как механизм, реализующий набор разрешающих и запрещающих правил для входящих и исходящих пакетов. Этот набор правил определяет, какие пакеты могут проходить через конкретный сетевой интерфейс.

Брандмауэр с фильтрацией пакетов может производить с проходящим пакетом всего три действия:

1. Переслать пакет в узел назначения

2. Удалить пакет без уведомления посылающей пакет стороны

3. Вернуть передающему компьютеру сообщение об ошибке

Несмотря на простоту таких действий, в большинстве случаев их достаточно для организации эффективной защиты. Как правило, брандмауэр устанавливается для того, чтобы контролировать данные, которыми компьютеры обмениваются с Интернетом. В результате работы фильтрующего брандмауэра отсеиваются недопустимые обращения к узлам внутренней сети и запрещается  передача из внутренней сети в Интернет для пакетов, определенных правилами фильтрации.

В целях получения более гибкой системы правила фильтрации пакетов составляются для каждого сетевого интерфейса, в них учитываются IP-адреса источника и получателя, номера портов TCP и UDP, флаги TCP-соединений и ICM-сообщений.  Причем правила для входящих и исходящих пакетов различаются. Это значит, что при настройке фильтрующего брандмауэра правила для конкретного сетевого интерфейса представляются как отдельные правила для входящей и исходящей информации, поскольку входящие и исходящие пакеты обрабатываются брандмауэром независимо друг от друга. Списки правил, которые управляют фильтрацией сетевых пакетов поступающих извне в локальную сеть и отправляемых из локальной сети в Интернет, принято называть цепочками (chains). Термин "цепочка" используется потому, что при проверке пакета правила применяются последовательно одно за другим, пока не обнаружится подходящее правило для сетевого пакета или список правил не будет исчерпан.

Описанный механизм фильтрующего брандмауэра достаточно эффективен, однако он не обеспечивает полной безопасности локальной сети. Анализ заголовков сетевых пакетов — операция слишком низкого уровня, для того чтобы реально выполнять аутентификацию и контролировать доступ. В процессе фильтрации пакетов практически невозможно распознать отправителя сообщения и проанализировать смысл передаваемой информации. Из всего набора данных, пригодных для аутентификации, на рассматриваемом уровне доступен только IP-адрес отправителя, однако этот адрес очень легко подделать, на чем и базируется множество способов сетевых атак. Несмотря на то, что средства фильтрации пакетов позволяют эффективно контролировать обращение к портам, использование протоколов обмена и содержимое пакетов, проверку данных необходимо продолжить на более высоком уровне.

3.1.1. Фильтрация входящих пакетов

Рассмотрение построения брандмауэра логично начать со входящих пакетов. Поскольку именно извне обычно происходит проникновение в сеть.

Итак, основной, но не единственной задачей сетевого экрана является фильтрация пакетов. В Linux уже встроен Firewall, и его не надо устанавливать отдельно. Это iptables и ipchains. Iptables и ipchains позволяют контролировать трафик, который проходит сквозь компьютер по протоколам TCP, UDP  и ICMP. Так как TCP является транспортом для всех основных протоколов Интернета: FTP, HTTP, РОРЗ и др., то фильтрация TCP позволяет защищать все эти сервисы.

Все запросы, которые поступают из Интернета проходят через сетевой экран, который проверяет их по внутренним правилам. И, если соответствие установлено, то пакет пропускается. Если какой-либо параметр нарушает хотя бы одно правило, то пакет может быть удален:

без предупреждения;

с посылкой на компьютер отправителя, сообщая об ошибке.

Последний вариант не приветствуется среди пользователей, потому что незачем направлять злоумышленнику лишние пакеты. Лучше оставить действие без внимания, и злоумышленник будет думать, что сервис просто недоступен. Но в этом случае легальные пользователи могут ощутить неудобства при наличии просчета в конфигурировании сетевого экрана. Допустим, что заблокирован доступ к 80 порту. Если пользователь обратится к Web-серверу, то программа, не получив ответа о запрете, будет находиться в состоянии ожидания до истечения Timeout. Для некоторых программ это значение может быть бесконечным, и они зависнут.

К тому же, отправка сообщений с ошибками идет по протоколу ICMP. Недобросовестный пользователь может использовать эти особенности для реализации атаки "Отказ от обслуживания" и переполнить канал ненужными ответами. Атака DoS может быть направлена не только на трафик. Достаточно в цикле запускать запросы на установку соединения с запрещенным портом, а компьютер будет тратить ресурсы на проверку пакетов и отправку ICMP-ответов. Если пакеты будут идти слишком часто, то сервер может не справиться с нагрузкой и перестанет отвечать на запросы авторизованных пользователей.

При настройке правил можно использовать два варианта фильтра:

1.  Разрешено все, что не запрещено.

2.  Запрещено все, что не разрешено.

Наиболее безопасным методом является второй, потому что всегда следует отталкиваться от запрета. Изначально необходимо запретить абсолютно все, а потом по мере надобности открывать доступ определенным пользователям и к обусловленным сервисам. Именно этой политики придерживаются, когда настраивают правила для входящих пакетов.

Если двигаться от разрешения, то по умолчанию все позволено. Администратор может забыть или просто не закрыть некий доступ и увидеть свою ошибку только после того, как злоумышленник проникнет в систему.

3.1.2. Параметры фильтрации

Основными параметрами пакета, по которым производится фильтрация, являются номер порта источника или приемника, адрес отправителя или назначения и протокол. 

Фильтровать можно пакеты, идущие в обе стороны. Проверка пакетов, приходящих извне, позволяет на самом раннем этапе отсеять любые попытки взломать систему или вывести ее из строя.

Можно задаться вопросом, зачем же фильтровать то, что уходит из сети? На первый взгляд бессмысленно, но смысл есть и достаточно большой. У исходящего трафика могут быть враги, такие как:

троянские программы, которые могут отправлять в сеть конфиденциальную информацию или соединяться со злоумышленником или с его сервером, чтобы брать команды с какого-нибудь файла;

cпециализированные программы для обхода правил. Допустим, что доступ к определенному порту извне запрещен. Злоумышленник может поместить на сервере программу, которая будет перенаправлять трафик с разрешенного порта на запрещенный, наподобие туннелирования OpenSSL. 

Возможных лазеек для проникновения очень много, задача закрыть максимальное их количество. Для этого под контролем должен быть трафик в обоих направлениях.

3.2. Протоколы

TCP используется как базовый для передачи данных таких протоколов, как HTTP, FTP и др. Запрещать его не имеет смысла, потому что это основа, без которой пользователь лишится всех удобств, предоставляемых всемирной сетью. Для передачи данных сначала TCP устанавливает соединение с удаленным хостом, и только потом происходит обмен информацией. Благодаря этому подделка IP-адреса любого участника соединения усложняется, а иногда становится и невозможной.

Протокол UDP находится на одном уровне с TCP, но передает данные без установки соединения. Это значит, что пакет просто посылается в сеть на определенный адрес, и нет гарантии, что он дошел до адресата. Здесь нет никакой защиты от подделки IP-адреса, поэтому в качестве отправителя злоумышленник может указать что угодно, и сервер не увидит подвоха. Если нет особой надобности, то обычно запрещают прохождение таких пакетов в обе стороны.

Протокол ICMP используется для обмена управляющими сообщениями. Через него команда ping проверяет соединение с компьютером, а оборудование или программы сообщают друг другу об ошибках. Если этот протокол использовать только по назначению, то он очень удобен. Но в жизни все далеко от идеала, и ICMP уже не раз становился объектом для DoS-атак. Если обмен управляющими сообщениями необходим в работе, нужно попробовать найти другую программу, но избавится от использования ICMP.

3.3. Фильтрация портов

Первое, на что надо обратить внимание — это, конечно же, порты. Допустим, что есть Web-сервер, к которому имеют доступ все пользователи. Предположим, что на нем работают абсолютно безопасные сценарии, или статичные документы HTML. Помимо этого, все программы содержат самые последние обновления и не имеют уязвимостей. Получается, что сервер безопасен! Но до поры до времени. Для обновления содержимого необходим какой-то доступ для закачки файлов, ведь бегать с дисками к Web-серверу никто не будет. Чаще всего для работы с файлами открывают FTP-сервис, а вот это уже дыра.

Для доступа по FTP можно установить наиболее защищенные программы и самые сложные пароли, но злоумышленник рано или поздно сумеет взломать этот сервис. Пароль можно подобрать, украсть с компьютера пользователя или заставить самого сказать через социальную инженерию, существуют и другие методы. Любой канал, через который можно проникнуть в систему, становится уязвимым, потому что именно его будет взламывать злоумышленник, и как раз на это будут потрачены все усилия. У одного не получится, у второго, а сотый случайно войдет с первого раза и уничтожит все, что попадется под руку.

Таким образом, можно установить на сервер такую политику, при которой на 80 порт будут приниматься все подключения, а FTP-сервис (21 порт) будет запрещен для всех, кроме определенного IP-адреса. После этого злоумышленник может хоть годами подбирать пароль, любой его трафик будет обрезаться, если он не знает IP-адреса и не сможет его подделать.

Нужно  запретить все порты и после этого открыть только то, что необходимо. На сервере, который охраняет целую сеть, это сделать сложно, потому что разные компьютеры требуют различные сервисы. Открыть их все — значит разрешить работать со всеми портами на любой машине. Конечно же, можно помимо портов использовать в правилах IP-адреса, но дополнительным вариантом защиты будет использование сетевого экрана на каждом компьютере внутри сети. В этом случае каждый из них будет охраняться в зависимости от выполняемых задач. Если это Web-сервер, то из Интернета будет виден только 80 порт, для FTP — 21-й порт.

3.4. Фильтрация адресов

Исходя из предыдущих соображений видно, что для фильтрации можно использовать и IP-адрес, хотя максимальный эффект достигается именно в сочетании параметров (порт и адрес).

Допустим, что в сети находятся два Web-сервера. Такое бывает очень часто. Один сервер делают доступным для всех посетителей из Интернета, а второй – только для своих пользователей. Вполне логичным будет разделение информации, тогда на закрытый сервер можно пускать трафик только локальной сети вне зависимости от порта. 

3.4.1. Фильтрация неверных адресов

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

О подобных погрешностях уже давно ничего не слышат, но нет гарантии, что они не появятся снова. Существует множество адресов, которые надо фильтровать и не пропускать в сеть.

Помимо этого,  советуют не пропускать пакеты с адресами, которые зарезервированы или не могут использоваться в Интернете. Рассмотрим диапазоны этих адресов:

в качестве отправителя стоит адрес 127.0.0.1. Из Интернета пакет с таким адресом прийти не может, потому что он всегда используется для указания на локальную машину (localhost);

от 224.0.0.0 до 239.255.255.255 – используется  для широковещательных адресов, которые не назначаются компьютерам, поэтому с них не могут приходить пакеты;

от 240.0.0.0 до 247.255.255.255 – зарезервирован для будущего использования в Интернете.

Все эти адреса нереальны для Интернета, и никакие пакеты с такими параметрами не должны проходить через сетевой экран.

3.5. Фильтрация в Linux

Для фильтрации пакетов по определенным пользователем правилам в ядро Linux уже встроены все необходимые функции. Но это только основа, а нужен еще инструмент, который в удобной форме позволит управлять этими правилами.

В операционной системе Linux можно воспользоваться двумя программами: iptables и ipchain. 

В ядре Linux находятся три основные цепочки (chain) правил:

1. Input – для входящих пакетов;

2. Output – для исходящих пакетов;

3. Forward – для пакетов, предназначенных другой системе.

ОС Linux проверяет все правила из цепочки, которая выбирается в зависимости от направления передачи. Пакет последовательно обследуется на соответствие каждому правилу из цепочки. Если найдено хотя бы одно совпадение с описанием, то выполняются действия, указанные в данном правиле: DENY, REJECT или ACCEPT, т. е. система решает, пропускать пакет дальше или нет.

Цепочки несут в себе одну очень неприятную для новичков особенность. Допустим, что на сервере нужно открыть 21 порт только для самого себя. Для этого можно создать два правила:

1. Запретить все входящие пакеты на 21 порт сервера.

2. Разрешить пакеты на 21 порт с компьютера с адресом 192.168.1.1.

На первый взгляд все верно, доступ запрещен для всех, а открыт только для одного IP-адреса. Проблема кроется в том, что если посылка будет с адреса 192.168.1.1, то сравнение первого правила с параметрами пакета даст положительный результат, т. е. выполнится запрет и пакет удалится, и второе правило не сработает никогда.

Чтобы политика действовала верно, строки надо поменять местами. В этом случае сначала проверится запись "Разрешить пакеты на 21 порт с компьютера с адресом 192.168.1.1", контроль пройдет успешно и пакет будет пропущен. Для остальных IP-адресов это правило не выполнится, и проверка продолжится. И вот тогда сработает запрет доступа на 21 порт для всех пакетов.

Пакеты, направленные на другие порты, не соответствуют правилам, значит, над ними будут выполняться действия по умолчанию.











4. Ipchains

Наиболее распространенной программой для создания правил сетевого экрана является ipchains. В команде вызова можно указывать следующие параметры:

-A цепочка правило – добавить правило в конец цепочки. В качестве аргумента указывается имя цепочки input, output или forward;

-D цепочка номер – удалить правило с указанным номером из заданной цепочки;

-R цепочка номер правило – заменить правило с указанным номером в заданной цепочке;

-I цепочка номер правило – вставить правило в указанную первым аргументом цепочку под номером, заданным во втором параметре. Если номер равен 1, то правило станет первым в цепочке;

-L цепочка – просмотреть содержимое указанной цепочки; 

-F цепочка – удалить все правила из указанной цепочки;

-N имя – создать новую цепочку с заданным именем;

-X имя – удалить цепочку с указанным именем;

-P цепочка правило – позволяет изменить политику по умолчанию;

-p протокол – определяет протокол, к которому относится правило. Значений аргумента протокол может быть четыре: tcp, udp, iemp или all (указывается, если правило действует для всех протоколов);

-i интерфейс – сетевой интерфейс, к которому будет привязано правило. Если этот аргумент не указан, то правило будет относиться ко всем интерфейсам;

-j действие – операция, которая должна быть выполнена над пакетом.

В качестве аргумента можно указать ACCEPT, REJECT или DENY;

-s адрес порт – характеристики отправителя пакета. Первый аргумент задает IP-адрес источника, а второй (не обязательный) – порт. У протокола ICMP нет портов;

-d адрес порт – атрибуты получателя пакета. Первый аргумент задает IP-адрес назначения, а второй (не обязательный) — порт.

4.1. Перенаправление

Сетевой экран, который защищает целую сеть, состоит, как минимум, из компьютера с двумя интерфейсами. Один из них (сетевая карта или модем) направлен в Интернет, а другой— в локальную сеть. Сетевой экран будет заниматься перенаправлением трафика с одного интерфейса в другой, т. е. с сетевой карты на модем и обратно. Такой компьютер называют шлюзом. Пользователи не подключаются к самому шлюзу, а только используют его как средство переадресации пакетов.

Можно установить какие-либо сервисы прямо на сетевой экран, но это делать не рекомендуется. Лучше, если они будут за пределами этого компьютера. Публичные сервисы лучше ставить со стороны Интернета, а закрытые — должны быть на серверах внутри локальной сети.



Рис. 2. Расположение серверов с публичными и закрытыми сервисами

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

Если сервер с публичным сервисом расположить внутри сети, то в сетевом экране придется прописывать разрешения на доступ к нему для всех пользователей из Интернета. 

Каждое лишнее разрешение в сетевом экране – это дополнительная дверь внутрь локальной сети. Например содержания Web-сервера.

Если в нем или используемых на сервере сценариях будет найдена ошибка, то вся сеть окажется под угрозой. Нельзя допускать, чтобы незначительная погрешность стала причиной больших проблем.

Можно организовать сеть, как показано на рисунке 3. Только в этом случае придется использовать дополнительный сервер для организации второго Firewall.



Рис. 3. Двойная защита сети

На данной схеме первый сетевой экран защищает Web-сервер. Его политика будет достаточно мягкой, потому что должна разрешить публичный доступ к некоторым портам сервера, например 80 для путешествий по Web-сайтам. Главное, чтобы фильтры открывали для всеобщего доступа исключительно адрес публичного сервера и только допустимые порты.

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

Есть еще один вариант – установить в компьютер три сетевые карты. Одна смотрит в Интернет, ко второй подключена приватная локальная сеть, а к третей – сеть с серверами, на которых работают открытые ресурсы (рис. 4). Получается защита в виде вилки. На один интерфейс можно перенаправлять любой трафик из Интернета, а другой интерфейс защищается всеми возможными способами.



Рис. 4. Защита двух сетей одним сетевым экраном

С точки зрения безопасности схема, показанная на рис. 3, намного надежнее, потому что локальную сеть защищают сразу два сетевых экрана, и их легче конфигурировать. Второй вариант (рис. 4) проще и дешевле, т. к. не требует дополнительного компьютера для Firewall, но менее безопасен. Проникнув на компьютер с сетевым экраном, злоумышленнику потребуется меньше усилий, чтобы взломать приватную сеть.

На рис. 2 изображена сеть на основе витой пары с центральной точкой в виде коммутатора. Чтобы попасть в Интернет, любой пакет от компьютера проходит через коммутатор, входит через сетевую карту 1 (eth0) на машину с установленным Firewall и выходит через сетевую карту 2 (ethl) в Интернет.

На самом компьютере с Firewall должно быть разрешено перенаправление, которое позволит пакетам проходить из одной сетевой карты в другую. Чтобы включить эту возможность, нужно записать в файл /proc/sys/net/ipv4/ip_forward число 1 (по умолчанию там может быть 0) или выполнить команду:

echo I >  /proc/sys/net/ipv4/ip_forward

Для обеспечения переадресации между сетевыми интерфейсами ядро операционной системы должно быть скомпилировано с соответствующей поддержкой, потому что перенаправление происходит именно на этом уровне. Помимо этого, нужно изменить параметр net.ipv4.ip_forward в файле /etc/sysctl.conf на 1.

Сетевой экран может не только проверять пакеты на соответствие определенным фильтрам, но и прятать IP-адреса компьютеров сети. Это происходит следующим образом:

1.   Клиент направляет пакет в сеть, и до сетевого экрана он будет идти со своим IP-адресом.

2.  Сетевой экран меняет IP-адрес отправителя на свой и направляет пакет дальше от своего имени.

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

Пример, который разрешает переадресацию на внешний интерфейс из локальной сети:

ipchains -A forward -i eth1 -s 192.168.1.0/24 -j MASQ

Это общее правило, поэтому добавляем его в конец цепочки forward с помощью ключа -а, чтобы оно не перекрыло фильтры, которые относятся к конкретным пользователям, но в то же время взаимосвязаны с этой записью.

Далее идет ссылка на интерфейс eth1 (сетевая карта, которая смотрит в Интернет). Диапазон адресов соответствует всей сети 192.168.1.x. В качестве разрешения используется значение MASQ, что соответствует маскированию адреса, т. е. адрес клиента будет заменен на адрес компьютера, на котором работает Firewall.

Данное разрешение позволяет только передавать пакеты с адресов 192.168.1.x на сетевой интерфейс eth1. Но это еще не значит, что трафик поступит и сможет выйти в Интернет. Чтобы пакеты пользователей были приняты сетевым экраном, должно быть разрешение ACCEPT примерно следующего вида:

ipchains -A input -i eth0 -s 192.168.1.0/24 -j ACCEPT

В этом фильтре открыт доступ на сетевой интерфейс eth0 любым пакетам с адресов 192.168.1.x. Разрешение дано на порты, поэтому адрес отправителя пакета может быть любым из сети 192.168.1.x.

Осталось только разрешить таким же образом пакетам выходить  из eth1, и можно считать, что все компьютеры сети уже получили доступ в Интернет. Только на всех клиентских машинах необходимо указать в качестве шлюза по умолчанию IP-адрес компьютера с сетевым интерфейсом, и все пакеты найдут своего адресата.

Если структура сети напоминает рис 3, то переадресация должна быть включена на обоих сетевых экранах. А вот маскировку адреса лучше всего сделать на двух Firewall. В этом случае второй сетевой экран будет скрывать локальную сеть даже от публичного сервера.

Зачастую в качестве второго сетевого устройства выступает не карта, а модем. В этом случае правило для перенаправления будет выглядеть следующим образом:

ipchains -A forward -i ppp0 -s 192.168.1.0/24 -j MASQ

Здесь перенаправление идет на интерфейс одного из модемов, имена которых имеют вид рррх.

Чаще всего необходимо, чтобы клиенты имели доступ к ресурсам Интернета, а обратное подсоединение было невозможно. Когда по протоколу TCP запрашивается подключение к удаленному компьютеру, то посылается пакет с установленным битом syn. В простых пакетах такого бита не должно быть. Таким образом, достаточно запретить ТСР-пакеты с этим флагом, и удаленный компьютер не сможет подключиться ни к одному ресурсу компьютера или сети. Это можно реализовать следующим образом:

ipchains -I input 1 -i ppp0 -p tcp – syn -j DENY

В данной строке вставляется новое правило в цепочку проверки входящих пакетов. Контролируются пакеты TCP, у которых установлен флаг syn (об этом говорит ключ – syn). Если такой пакет получен, то он удаляется. Для использования маскировки IP-адреса ядро операционной системы должно быть скомпилировано с соответствующей поддержкой, потому что подмена адреса происходит на уровне ядра.

4.2. Сохранение фильтра

Если попробовать сейчас перезагрузить систему и просмотреть цепочки сетевого экрана, то все изменения исчезнут. Проблема в том, что операционная система автоматически их не запоминает, и пользователю самому нужно позаботиться о сохранении правил. Для этого существует утилита ipchain-save. Ее нужно выполнять следующим образом:

ipchain-save  >  файл

Сохранение цепочек можно сделать автоматическим, но лучше сделать все вручную, так будет надежнее.

Восстановить цепочки тоже можно из файла. Для этого необходимо выполнить команду:

ipchain-restore < файл

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





























5. Iptables

Iptables – это логическое развитие ipchains. Взяли все лучшее модифицировали, развили в сторону гибкости, надежности и производительности.  В современных дистрибутивах iptables является  неотъемлемой частью системы и ядро скомпилировано с учетом требований iptables.

Программа iptables является новой разработкой по управлению фильтрами и обеспечению безопасности.  С помощью iptables пользователь также может редактировать цепочки правил input, output и forward.

Сходство между ipchains и iptables прослеживается уже при взгляде на параметры:

-A цепочка правило – добавить правило в конец цепочки. В качестве параметра указывается имя цепочки INPUT, OUTPUT или FORVARD;

-D цепочка номер – удалить правило с указанным номером из заданной цепочки;

-R цепочка номер правило – заменить правило с указанным номером в цепочке;

-I цепочка номер правило – вставить правило в указанную первым аргументом цепочку под номером, заданным во втором параметре. Если номер равен 1, то правило станет первым в цепочке;

-L цепочка – просмотреть содержимое указанной цепочки; 

-F цепочка – удалить все правила из цепочки;

-p протокол – определяет протокол, на который воздействует правило;

-i интерфейс – определяет сетевой интерфейс, с которого данные были получены. Здесь можно использовать INPUT, FORVARD или PREROUTING;

-о интерфейс – задает интерфейс, на который направляется пакет. Здесь можно указывать OUTPUT, FORVARD или PREROUTING;

-j действие – операция, которая должна быть выполнена над пакетом. В качестве аргументов можно указать следующие значения:

•   LOG – поместить в журнал запись о получении пакета;

•   REGECT – отправителю будет направлено сообщение об ошибке;

•   DROP – удалить пакет;

•   BLOCK – блокировать пакеты;

-s адрес – IP-адрес отправителя пакета. Как и в случае с iptables, после адреса можно задать маску в виде /mask и знак отрицания "!", что будет соответствовать любым адресам, кроме указанных;

-d адрес – адрес назначения пакета.

Большинство параметров абсолютно идентичны программе ipchains. Но есть важные и очень мощные отличия. Например, с помощью ключей -о и -i очень просто указывать, с какого на какой интерфейс направляется пакет. 

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

Настройка цепочек iptables не сильно отличается от ipchains. Начать формирование цепочки нужно с очистки всего содержимого. Двигаться необходимо от полного запрета и разрешать только то, что не нанесет вреда серверу. Сервисы, которые могут оказаться опасными, должны быть доступны только тем, кому это необходимо, или тем, кому можно доверять. 

Для сохранения изменений в iptables также надо выполнить специализированную команду:

service iptables  save



5.1. Переадресация

Для разрешения переадресации с помощью iptables нужно выполнить следующую команду:

iptables -A FORWARD -о ррр0 -j MASQUERADE

В данной строке позволяется переадресация на интерфейс ррр0. С помощью параметра -j таким образом пользователь требует прятать IP-адрес отправителя, т. е. включает маскарадинг.

Если он использует трансляцию сетевых адресов (NAT, Network Address Translation), то команда может выглядеть следующим образом:

iptables -t nat -A FORWARD -о ррр0 -j MASQUERADE

Ключ -t nat указывает на необходимость загрузить модуль iptablenat. Если он не загружен, то это легко сделать вручную с помощью следующей команды:

modprobe iptable_nat

iptabie_nat — это модуль ядра, который позволяет сетевому экрану работать с NAT.























6. Установка, настройка Firewall

Пользователю для начала нужно выбрать дистрибутив на котором он будет работать. Debian GNU/Linux 5.0 неплохо подходит для этого.  Этот дистрибутив достаточно распространенный. У Debian GNU/Linux одно из самых больших сообществ, так же периодически выходят все более новые версии пакетов, которые легко загрузить через интернет. 

Для организации Firewall в GNU/Linux используется программа iptables, которая, как правило, сразу инсталлируется при установке большинства дистрибутивов. В Debian GNU/Linux проверить это можно, запустив с правами администратора aptitude. При необходимости – нужно установить iptables.

6.1. Настройка с помощью команды: aptitude install arno-iptables-firewall

Ручное конфигурирование iptables является нетривиальной задачей и под силу только специалистам в области системного администрирования. Поэтому для настройки правил, по которым будет действовать брандмауэр, лучше воспользоваться специальным конфигуратором. В Debian GNU/Linux это - программа arno-iptables-firewall. Будучи запущенной, она задает ряд вопросов, на основании которых генерирует правила для функционирования брандмауэра iptables.

Нужно набрать в консоли с правами суперпользователя:

aptitude install arno-iptables-firewall

В начале инсталляции программа спросит, действительно ли пользователь желает с ее помощью настроить Firewall iptables:



Рис. 5. Настройка Firewall

Надо указать внешний интерфейс - "смотрящий" в интернет, т.е. подключенный к модему. Настройки интерфейсов определяются в конфигурационном файле /etc/network/interfaces. 

Это интерфейс eth0, который подключен к интернету. Его особенностью является то, что IP-адрес ему назначается провайдером динамически, поэтому выставлена опция dhcp.

auto eth0

iface eth0 inet dhcp

Это интерфейс, который обращен в локальную сеть. В целях безопасности в локальной сети шлюз имеет статический IP-адрес - 192.168.2.1, поэтому выставлена опция static. Маска сети - 255.255.255.0. Широковещательный адрес сети в таком случае будет 192.168.2.255.

auto eth1

iface eth1 inet static

	address 192.168.2.1

	netmask 255.255.255.0

	broadcast 192.168.2.255

Далее нужно указать конфигуратору Firewall, что внешним является интерфейс eth0:



Рис. 6. Внешний интерфейс

На вопрос, выдается ли от провайдера IP-адрес динамически (с помощью протокола DHCP), нужно ответить утвердительно:



Рис. 7. Провайдера IP-адреса

Cледует вопрос, какие службы будут предоставлены с этого компьютера внешним пользователям интернета. Здесь не обязательно что-либо указывать.



Рис. 8. Службы предоставляемые с компьютера внешним пользователям интернета

Затем идет вопрос, будет ли пользователь предоставлять какие-либо службы по протоколу UDP. Тоже нет - и тоже нужно оставить строку пустой.



Рис. 9. Службы по протоколу UDP 

Нужно ли, чтобы пользователя проверяли, имеется ли связь с компьютером, на котором установлен Firewall. Это вполне допустимо:



Рис. 10. Пинг

На этом настройка для отдельного компьютера, не являющегося шлюзом локальной сети, будет закончена. Если же предполагается использовать компьютер как шлюз, нужно ответить еще на несколько вопросов. Следует указать интерфейс, которым шлюз обращен в локальную сеть - в данном случае это eth1.



Рис. 11. Интерфейс обращенный в локальную сеть

Далее, на основании данных из /etc/network/interfaces, нужно указать спецификацию локальной сети, к которой подключен компьютер: в данном примере это 192.168.2.0/24.



Рис. 12. Спецификация локальной сети

На вопрос позволить ли NAT-трансляцию, т.е. переадресацию трафика из интернета через шлюз в локальную сеть и обратно, следует ответить "да" - это является одной из основных задач в данном случае:



Рис. 13. NAT-трансляция

Тогда встает вопрос: а какой сегмент локальной сети может быть допущен через переадресацию к внешним сетям? Следует указать значение 192.168.2.0/24



Рис. 14. Сегмент локальной сети

Наконец, подтверждение запуска iptables без дополнительной проверки с автоматически сформированных конфигуратором правил для Firewall:



Рис. 15. Подтверждение запуска iptables

После этого, если все прошло успешно, выдается сообщение. Оно будет появляться при каждой загрузке компьютера – шлюза и информировать об успешном запуске Firewall.

6.2. Ручное конфигурирование iptables

Запрет любых обращений будет выглядеть следующим образом:

iptables -P INPUT DROP

Теперь все входящие пакеты будут удаляться. Как и в случае с программой ipchains, именно с этой команды нужно начинать конфигурирование iptables. В правиле используется ключ -р, позволяющий задать значение по умолчанию для данной цепочки. Если фильтр добавить с помощью ключа -А, то можно запретить абсолютно любые подключения.

Некоторые специалисты по безопасности рекомендуют журналировать обращения, добавив в сетевой экран фильтр:

iptables -A INPUT -j LOG

Но это делать не рекомендуется. У публичных серверов за день происходит несколько сотен, а то и тысяч сканирований портов. Если обращать внимание на каждую такую попытку, то придется устанавливать на сервер слишком большие жесткие диски для хранения журналов. А ведь если диск будет заполнен, то система выйдет из строя. Таким образом, злоумышленник может просто направить бесконечные обращения на запрещенный порт и через некоторое время добиться удачно завершенной DoS-атаки.

Следующая команда создает фильтр, по которому запрещается принимать эхо-запросы от любых компьютеров:

iptables -A INPUT -s 0/0 -d localhost -p icmp --icmp-type echo-request -j DROP

Создание фильтра с помощью iptables нe сильно отличается от аналогичной процедуры в ipchains.

Следующая команда запрещает доступ к FTP-порту:

iptables -A INPUT -s 0/0 -d localhost -p tcp --dport 21 -j DROP

Чтобы запретить доступ с определенного интерфейса, нужно добавить ключ -i и указать интерфейс eth0:

iptables -A INPUT -i eth0 -s 0/0  -d localhost -p tcp --dport 21 -j DROP

Теперь нужно запретить исходящие пакеты с 21 порта. Для этого используется команда:

iptables -A OUTPUT -i eth0 -s localhost -d 0/0 -p tcp --dport 21 -j DROP

Очень мощной особенностью iptables является возможность проверки содержимого пакетов. Это очень удобно, например, для фильтрации Web-запросов.

Можно разрешить доступ к 80 порту, но контролировать, чтобы пакеты содержали только допустимые параметры. 

Если нужно разрешить доступ к FTP-серверу, но при этом быть уверенными, что тот кто хочет взломать вашу защиту не сможет обратиться к файлам /etc/passwd и /etc/shadow. Для этого нужно запретить пакеты, в которых есть этот текст. Если злоумышленник попытается послать запрос, содержащий ссылки на эти файлы, то такой пакет будет отклонен. Следующие команды запрещают доступ к этим файлам по протоколам FTP и WWW:

iptables -A INPUT -m string --string "/etc/passwd" -s 0/0 -d localhost -p tcp --dport 21 -j DROP 

iptables -A INPUT -m string --string "/etc/shadow" -s 0/0 -d localhost -p tcp --dport 21 -j DROP 

iptables -A INPUT -m string --string "/etc/passwd" -s 0/0 -d localhost -p tcp --dport 80 -j DROP 

iptables -A INPUT -m string --string "/etc/shadow" -s 0/0 -d localhost -p tcp --dport 80 -j DROP

Надо еще учесть аспект защиты информации. Если есть сервер, который принимает закодированный трафик с помощью stunnel, расшифровывает и передает его на другую машину. В этом случае во входящих пакетах сетевой экран не может найти такие строки. А вот исходящие пакеты идут уже декодированными и содержат открытый текст команд. В такой конфигурации необходимо контролировать оба потока.

Даже если stunnel передает расшифрованный трафик на другой порт внутри одного компьютера, можно включить контроль любых пакетов на всех интерфейсах, чтобы они проверялись после расшифровки.





































Заключение

Сетевой экран помогает защищать данные, но основным блюстителем порядка является администратор, который должен постоянно следить за безопасностью и выявлять атаки. Вновь разработанная атака сможет преодолеть сетевой экран, и компьютер ничего не заподозрит, потому что определяет только заложенные в программу алгоритмы. Чтобы обработать нестандартную ситуацию, за системой должен наблюдать администратор, который будет реагировать на любые нештатные изменения основных параметров.

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

Может сложиться впечатление, что Firewall – это пустое развлечение и трата денег. Это не так. Если он хорошо настроен, постоянно контролируется, а в системе используются защищенные пароли, то сетевой экран может предотвратить большинство проблем.

Хороший экран имеет множество уровней проверки прав доступа, и нельзя использовать только один из них. Если ограничить доступ к Интернету исключительно по IP-адресу, то нужно будет оплачивать большой трафик. Но если при проверке прав доступа используется IP-адрес в сочетании с МАС-адресом и паролем, то такую систему взломать уже намного сложнее. Да, и MAC и IP-адрес легко подделать, но можно для полной надежности подключить к системе защиты и порты на коммутаторе. В этом случае, даже если злоумышленник будет знать пароль, то для его использования нужно сидеть именно за тем компьютером, за которым он закреплен. А это уже не просто.

Защита может и должна быть многоуровневой. Если имеются данные, которые нужно оградить от посторонних, то лучше использовать максимальное количество уровней. В Linux уже имеется Firewall – это ipchains и iptables, которые при правильной настройке будут отлично защищать сервер от вторжения. Поэтому устанавливать Firewall отдельно не обязательно.

Умение правильно настраивать Firewall на системе Linux позволяет защитить сервер данных, не прибегая к дорогостоящим коммерческим продуктам.   





























Список использованной литературы

Стаханов, А.А. Сетевое администрирование Linux /А.А. Стаханов. –М.: БХВ-Петрбург, 2004. – 480 с.

Немеет, Эви, Снайдер, Гарт, Хейн, Трент. Руководство администратора Linux / Немеет [и  др.]. - М.: ООО «И.Д. Вильямс», 2007. – 1072с.

Зиглер, Роберт. Брагдмауэры в Linux / Зиглер, Роберт - М.: Издательский дом «Вильямс», 2001. – 384с.

Фленов М. Е. Linux глазами хакера / М.Е. Фленов. – М.: БХВ-Петербург, 2005. – 544 с.

Межсетевые экраны: сб. основных нормативно – техн. док. – М.: Гостехкоммисия России, 1997.-13с.

Простой способ настройки шлюза на Linux [Электронный ресурс] / Режим доступа: http/www.Voler.ru

Настройка IPTables в Linux [Электронный ресурс] / Режим доступа: http/www.OpenNET.ru

Firewall [Электронный ресурс] / Режим доступа: http/ru.wikipedia.org/wiki/Firewall

Firewall в Linux [Электронный ресурс] / Режим доступа: http/www.libermedia.ru/html/firewall_linux.html



1