Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Немного о программном обеспечении
Другие соображения
Простой брандмауэр фильтрации пакетов
Общие сведения об ipchains
Параметры ipchains
Встроенные цепочки
Цепочки, определяемые пользователем
Подобный материал:
1   ...   57   58   59   60   61   62   63   64   ...   101

Немного о программном обеспечении


После того как вы построили ядро, вы должны удалить из системы все программное обеспечение, которое не требуется для функционирования брандмауэра. Все посторонние программы лучше удалить. Использовать X Window не рекомендуется, так как эта система связывает порты от 6000 до 6010, а также UDP-порт 177 (в случае, если вы используете xdm). Это не означает, что вы должны полностью удалить X Window из системы, просто вы не должны запускать в системе сервер X. Если вам не обойтись без Х-сервера, используйте ipchains для того, чтобы блокировать ввод со стороны сети, которой вы не доверяете. Посторонними для брандмауэра являются NFS и другие службы, которые не используются или не нужны. Для управления брандмауэром вам, скорее всего, потребуется такая программа, как ipmasqadm, которая позволяет управлять набором правил ipchains. Эта программа не включается в стандартный комплект OpenLinux, однако она стоит того, чтобы ее установить, особенно если вы используете большое количество правил или собираетесь организовать перенаправление портов. Также удобной может оказаться программа Secure Shell (ssh). Возможно, полезным будет запустить в отношении портов, которые не перенаправляются и не используются (не следует запускать обычные службы на брандмауэре), программу TCP Wrappers. Также вам может пригодиться программа tripwire для наблюдения за файлами. Еще одна программа, которую можно добавить в этот комплект, это программа Perl под названием Courtney. Эта программа (среди прочих, например, реrrо) следит за попытками сканирования портов. Единственной службой, которую следует запустить на брандмауэре, является служба sshd, которая используется для удаленного администрирования.

Другие соображения


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

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

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


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

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

Внутренняя сеть (сеть, которой вы доверяете): 20?.191.169.128/25 Внешняя сеть (сеть, которой вы не доверяете): 209.191.169.0/25 Узел-бастион: foo с интерфейсами fool/foo2, 209.191.169.1/209.191.169.129

Планирование

Для начала необходимо выбрать базовую политику функционирования вашего брандмауэра. Эта политика может быть одной из следующих: «разрешить все, что не запрещено» или «запретить все, что не разрешено». Первая из этих политик подразумевает более простое изначальное конфигурирование, однако вторая политика является более естественной для брандмауэра, не выполняющего маскировку IP. Если вы имеете дело с брандмауэром, маскирующим IP (см. главу 18), разница между политиками несущественна, так как вы не можете миновать брандмауэр, просто указав адрес во внутренней сети. В рассматриваемом примере мы имеем дело с немаскирующим брандмауэром и выбираем политику запрета.

Внутренняя сеть спроектирована так, что ей можно полностью доверять, никакие работающие в ней службы недоступны для внешних пользователей. Все службы, которые компания желает сделать доступными для пользователей Интернета (анонимный ftp, http и т. п.), расположены в сети, которая не является доверенной. Этот раздел корпоративной сети часто называют демилитаризованной зоной (Demilitarized Zone, DMZ). Зона DMZ является передним краем обороны. Если злоумышленник пожелает проникнуть в вашу сеть, он прежде всего проявит себя именно в зоне DMZ, Если вы держите свои серверы, предлагающие публичный доступ, в зоне DMZ, это означает, что в вашей сети существуют дополнительные системы, в большей степени подверженные внешним атакам, для наблюдения за которыми требуется дополнительное внимание с вашей стороны. Однако, с другой стороны, такой подход препятствует проникновению злоумышленников внутрь доверенной сети, чего нельзя избежать в случае, если вы организуете перенаправление портов через ваш брандмауэр.

Так как сеть рассматривается как сеть с низким уровнем риска, принимается решение запустить на брандмауэре сервер электронной почты. Сервер POP пoзволит пользователям принимать почту вне зависимости от того, находятся ли они в офисе или дома (от применения ШАР решено отказаться из соображений безопасности). В дальнейшем, когда будет организовано перенаправление портов через брандмауэр, службы SMTP и POP планируется перенести во внутреннюю сеть. После того как эти службы переместятся внутрь (см. главу 18), набор правил брандмауэра останется прежним, так как локальный доступ, равно как и доступ через перенаправление портов, выполняется одинаково. Система DNS будет работать внутри и будет обслуживать только внутреннюю сеть. Первичный и вторичный серверы DNS будут работать на стороне интернет-провайдера, то есть вне сети.

Внутренним клиентам будет разрешено использовать все стандартные службы Интернета, за исключением NNTP. Мы планируем реализовать следующую политику:

Резюме

Политика по умолчанию: запрет (prohibit)

Анонимный FTP-доступ: внешняя сеть (брандмауэр блокирует поступающие извне запросы)

http: внешняя сеть (брандмауэр блокирует поступающие извне запросы)

ssh: используется на брандмауэре -- отключить telnet

smtp: брандмауэр (в будущем: перенаправление портов на внутренний компьютер)

popd: брандмауэр (в будущем: перенаправление портов на внутренний компьютер)

DNS: внутренняя сеть (внешний доступ запрещен)

также следует блокировать входящие запросы ping

Общие сведения об ipchains

Чтобы освоить ipchains, необходимо понять, как работает эта программа. В следующих нескольких разделах я расскажу вам об основных принципах ее работы. Название ipchains происходит от английского слова chain — цепочка. В данном случае имеется в виду цепочка правил, в соответствии с которыми брандмауэр осуществляет передачу пакетов из сети в сеть. Подразумевается, что принимаемые брандмауэром пакеты проходят по цепочке правил, когда в отношении пакета выполняется некоторое из этих правил, брандмауэр выполняет в отношении этого пакета указанное в правиле действие. На самом деле ipchains видит пакет только в случае, если этот пакет является первым или единственным пакетом в последовательности. Все последующие фрагменты пакета не передаются по цепочке. Причина проста — сетевой узел не может собрать пакет из нескольких фрагментов, до тех пор пока он не примет самый первый фрагмент последовательности. Если самый первый пакет будет отброшен, все остальные пакеты также будут отброшены по истечении тайм-аута. По умолчанию, если вы выбираете параметр IP Firewalling (брандмауэр), ядро Linux будет автоматически дефрагментировать поступающие пакеты. В результате все пакеты (после дефрагментации) будут передаваться по цепочке правил. Важное замечание относится к ядрам версий до 2.2.13, но после 2.2.10. В двух этих ядрах параметр IP_ALWAYS_DEFRAG сброшен, однако код дефрагментации добавлен некорректно.


ПРИМЕЧАНИЕ

Понятие «цепочка» означает список логически сгруппированных правил. Каждое правило цепочки — это тест, который применяется в отношении заголовка пакета IP.


Каждая цепочка содержит правила, пронумерованные начиная с единицы. Позже будет показано, что на некоторые правила можно ссылаться либо при помощи спецификации, либо при помощи номера.

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

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

Вот список команд, поддерживаемых ipchains (все команды должны начинаться с символа дефиса).
  • A (append — добавить) — команда использует два обязательных аргумента: имя цепочки и спецификация правила.
  • D (delete — удалить) — эта команда также принимает два обязательных аргумента: имя цепочки и спецификацию правила.
  • С (check — проверить) — (требуется указание -s, -d, -p и -i) — команда использует два обязательных аргумента: имя цепочки и спецификация правила.
  • I (insert — вставить) — это расширение команды Append (добавить), новое правило добавляется перед правилом, упомянутым в команде.
  • R (replace — заменить) — (комбинация Insert и Delete) — в качестве обязательных аргументов следует указать имя цепочки, номер правила и спецификацию правила.
  • D (delete — удалить) — в качестве обязательных аргументов принимает имя цепочки и номер правила; является вариацией ранее описанной команды Delete (удалить), только на этот раз вместо спецификации правила указывается его порядковый номер.
  • L (list — список) — отображает список правил. ) F (flush — очистить) — удаляет все правила. ) Z (zero — обнулить) — обнуляет счетчики.
  • N (new — создать) — создает определенную пользователем цепочку; требует указания имени цепочки, в противном случае срабатывает в отношении всех цепочек.
  • X (удалить определенную пользователем цепочку) — требуется указать имя цепочки, которая должна быть пустой, в противном случае срабатывает в отношении всех цепочек.
  • P (policy — задать политику) — в качестве обязательных аргументов принимает имя цепочки и целевое действие.
  • М (masquerade — маскировать) — требуются следующие обязательные аргументы:

L (list — список);

S (установить tcp tcpfin udp).
  • h (help — помощь) — электронная подсказка (в качестве аргумента можно указать icmp, и тогда на экран будет выведен список кодов и типов ICMP, которые можно использовать в качестве аргументов команд).

Команда masquerade (маскировать) в отличие от целевого действия MASQ требует указания либо L, либо S. Команда S требует указания трех аргументов: тайм-аут tcp (сеанс TCP), тайм-аут tcpfin (сеанс TCP после приема пакета FIN) и тайм-аут udp. Значения этих трех тайм-аутов указываются в секундах.

Седьмая вариация командной строки ipchains — это вызов электронной подсказки. При этом команда не указывается, вместо этого принимается только один параметр и, возможно, один аргумент.

Параметры ipchains

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

Параметр -b позволяет указать одно правило с адресом-источником и адресом-приемником, а также предписывает ipchains создать правило, в котором эти адреса поменялись местами.

Символ ! (восклицательный знак) можно использовать совместно с некоторыми параметрами для того, чтобы инвертировать их смысл. Вот перечень параметров:

-р протокол — указание протокола. Здесь можно использовать символ ! Например, -р ! icmp — соответствует всем сообщениям, за исключением сообщений icmp. Чтобы идентифицировать все протоколы, можно использовать идентификатор alt;

-s адрес — адрес-источник. При необходимости можно использовать !, сетевую маску или порт. Имейте в виду, что адрес О/О соответствует всем адресам и является значением по умолчанию в случае, если вы не указываете параметр -s. Для ICMP вместо порта (так как ICMP не использует порты) вы должны указать после -s либо имя ICMP (см. далее), либо номер типа. Перечень типов и кодов ICMP, поддерживаемых ipchains, выводится на экран по команде ipchains -h icmp. Если вы указываете имя, вы не можете одновременно с этим использовать -d код;

-d адрес — адрес-приемник. К этому параметру относится все, что сказанов отношении параметра -s. Если вы используете -s и указываете номер типа ICMP, вы можете использовать -d и указать код;

-i имя — имя интерфейса. Можно использовать !. Также к имени интерфейса можно добавить суффикс + для того, чтобы идентифицировать все интерфейсы данного типа. Например, ррр+ обозначает все интерфейсы типа ррр (рррО-рррМ);

-j целевое действие — целевое действие для правила (в качестве целевогодействия можно указать либо имя цепочки, определенной пользователем, либо одно из специальных значений), которое выполняется в случае, если пакет удовлетворяет этому правилу. Если указывается специальное значение REDIRECT, значит, можно указать номер порта;

-m отметка — число, которым необходимо отметить подходящие пакеты;

- n — цифровой вывод адресов и портов. По умолчанию ipchains пытаеnся определить соответствующие символьные имена;

-l — документировать сведения о подходящих пакетах в журнале. Документирование осуществляется ядром;

-о — вывод направляется в netdev — устройство пользовательского режима;

-t и хог — маски для поля TOS. Используется для работы с полем TOS (см.далее);

-v — режим вывода диагностической информации. Отображается адрес интерфейса, параметры правила (если такие есть), маски TOS, а также счетчики пакетов и байтов;

-х — вывод чисел в расширенной форме. При отображении счетчиков пакетов и байтов сокращения К (кило), М (мега) и G (гига) не используютсяи вместо этого отображаются целиком все разряды числа;

-f — второй и последующие фрагменты. Перед этим параметром можно поставить модификатор not (отрицание);

-у — соответствует пакетам TCP, у которых бит SYN установлен. Перед этим параметром можно поставить знак !.

Далее перечисляются поддерживаемые ipchains типы и коды ICMP. - echo-reply (pong) — ответ на запрос ping. - destination-unreachable — место назначения недоступно:

network-unreachable — сеть недоступна;

host-unreachable — сетевой узел недоступен;

protocol-unreachable — протокол недоступен;

port-unreachable — порт недоступен;

fragmentation-needed and DF set — требуется фрагментация, однако бит DF
установлен;

source-route-failed — сбой исходного маршрута;

network-unknown — сеть неизвестна;

host-unknown — сетевой узел неизвестен;

network-prohibited — запрещенная сеть;

host-prohibited — запрещенный сетевой узел;

TOS-network-unreachable — TOS сеть недоступна;

TOS-host-unreachable — TOS сетевой узел недоступен;

communication-prohibited — обмен данными запрещен;

host-precedence-violation — нарушение старшинства узлов;

precedence-cutoff — обход старшинства.

source-quench — подавление источника.

redirect — перенаправление:

network-redirect — перенаправление сети;

host-redirect — перенаправление сетевого узла;

TOS-network-redirect — TOS перенаправление сети;

TOS-host-redirect — TOS перенаправление сетевого узла.
- echo-request (ping) — запрос ping.

router advertisement — объявление о маршрутизаторе.

router-solicitation — принуждение к использованию маршрутизатора.

time-exceeded (ttl-exceeded) — время жизни истекло:

ttl-zero-during-transit — истекло время жизни во время передачи;

ttl-zero-during-reassembly — истекло время жизни во время сборки пакета.

parameter-problem — проблема параметра:

ip-header-bad — плохой заголовок пакета;

required-option-missing — требуемый параметр отсутствует.

timestamp-request — запрос отметки о времени.

timestamp-reply — ответ на запрос отметки о времени.

address-mask-request — запрос адресной маски.

address-mask-reply — ответ на запрос адресной маски.

В следующей таблице показаны значения, которые следует использовать в случае, если вы хотите реализовать маршрутизацию в соответствии с приоритетами, основанную на Type of Service (TOS).

Имя TOS Значение Пример использования

Minimum Delay (минимальная задержка) 0x010x10 ftp, telnet, ssh

Maximum Throughput (максимальный объем 0x010x08 ftp-data
передаваемых данных)

Maximum Reliability (максимальная надежность) 0x010x04 snmp, DNS

Minimum Cost (минимальные затраты) 0x010x02 nntp, e-mail

Технология TOS доступна только в случае, если вы добавили соответствующий код в ядро (CONFIG_IP_ROUTE_TOS).

Для использования параметра -о также требуется поддержка на уровне ядра (CONFIG_IP_FIREWALL_NETLINK), а также устройство со старшим номером 36 и младшим номером 3.


Встроенные цепочки

Программа ipchains поддерживает три встроенных цепочки: input (ввод), forward (передача) и output (вывод). Программа ipchains позволяет создавать другие определяемые пользователем цепочки, а также уничтожать их, однако три встроенных цепочки не могут быть уничтожены и должны в любой момент времени содержать по крайней мере по одному правилу (это правило определяет политику по умолчанию). По умолчанию все эти правила определяют для всех пакетов целевое действие DENY (отклонить).

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

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

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

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

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

- ACCEPT — принять пакет и перейти к обработке следующей цепочки; - DENY — отбросить пакет и прекратить обработку всех цепочек;

- REJECT — отбросить пакет и прекратить обработку всех цепочек; то же, что и DENY, но при этом генерируется сообщение ICMP Destination Not Reachable (место назначения недоступно);

- MASQ — маскировать пакет — только цепочка forward и цепочки, определенные пользователем;

- REDIRECT — перенаправить пакет локально и перейти к обработке следующей цепочки — только цепочка input и цепочки, определенные пользователем;

- RETURN — немедленно перейти к концу цепочки и продолжить работу.


Цепочки, определяемые пользователем

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

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