| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Что такое Firewall
водство Пользователя
Robert Muchsel и Roland Schmid Версия 0.2.9, последние изменения внесены 7 Ноября 1996 Содержание ВведениеCharlie Kaufman говорит: "Брандмауэры - это неверный подход. Они не решают проблему безопасности в целом и создают трудности в реализации многих полезных вещей. Но с другой стороны, если бы я был ответственен за корпоративную сеть, я никогда не решился бы подключить ее к Интернет без брандмауэра.И если бы меня спросили, в какие из продуктов обеспечения безопасности выгоднее всего вкладывать деньги, я бы назвал брандмауэры." Программа бесплатнаМы хотим дать вам возможность защитить вашу сеть без пополнения чьего-либо кошелька. Программное обеспечение брандмауэра "sf" было написано Робертом Мачселом (Robert Muchsel) и Роландом Шмидом (Roland Schmid), студентами Швейцарского Федерального Института Технологии в Цюрихе (Swiss Federal Institute of Technology Zurich), идейным вдохновителем был доктор Ганс Любих (Dr. Hannes Lubich), бывший сотрудник SWITCH, Швейцарской Академической Научно-Исследовательской Вычислительной Сети. Нам также хотелось бы поблагодарить arago GmbH, Франкфурт, за возможность всеобъемлющего тестирования нашего продукта. Область примененияЕсли вы имеете средний по величине траффик в Интернет и только одну точку для выхода в Интернет, то эта программа для вас. ПК с ОС Linux должен быть способен маршрутизировать весь проходящий через него траффик, поэтому вам не стоит использовать 386 машину для этих целей (если только у вас не 14.4К модем, в этом случае даже 386-й достаточно). Мы успешно тестировали наше программное обеспечение
Есть документацияРуководство по настройке, описание главных архитектурных особенностей построения программного обеспечения(на английском языке) и руководство по установке помогут в установке и обслуживании брандмауэра. Если вы не знакомы с брандмауэрами вообще и опасностями при использовании протокола TCP/IP, может быть полезно прочитать книгу Cheswick's and Bellovin's. Есть исходные текстыМы не верим в безопасность вызванную незнанием. В вашем распоряжении полный исходный текст. Вы можете просматривать и приспосабливать его к вашим нуждам и возможно исправлять какие-либо ошибки (bugs) в нем. Мы просим однако не распространять подобный модифицированный код. И было бы хорошо, если бы вы сообщили нам о всех замеченных ошибках и прислали бы полезные расширения и дополнения. Есть передовые возможностиВы должно быть заметили, что брандмауэр называется "sf firewall", а не "yasbf" (yet another silly boring firewall). Это экспериментальный брандмауэр. В дополнение к удобочитаемому языку конфигурации мы реализовали динамические правила, переменные и тайм-ауты, всеобъемлющие логи, предупреждения, фильтрацию протоколов RIP, FTP, ICMP, IGMP, UDP и TCP, а также контроль над всеми полями IP пакетов. Брандмауэр предотвращает IP спуффинг и блокирует IP пакеты слишком большого размера. И... она работаетВ мире нет такой вещи как программа без ошибок. Тем не менее у нас достаточно веры в наш продукт, так что мы даже решились использовать его в нескольких проектах в банковской сфере.
Так как мы (авторы программы) сами не имеем прямого подключения в Интернет, вы только побеспокоите ни в чем не повинных людей. Как с нами связатьсяНаправляйте, пожалуйста, всю корреспонденцию на firewall-bugs@switch.ch. Это не список рассылки, поэтому не шлите, пожалуйста, запросов на подписку. Мы рассмотрим все ваши отзывы, предложения и сообщения об ошибках. Также хотелось бы увидеть примеры конфигурационных файлов для включения в состав следующих версий программы. CopyrightCopyright ї 1996 Robert Muchsel and Roland Schmid This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. БиблиографияНиже приведены некоторые статьи и книги, которые стоит прочитать перед тем как конфигурировать sf firewall: Обязательно прочтитеChapman, D.B. 1992: Рекомендуем прочестьBellovin, S.M. 1989: Cheswick, W.R. and Bellovin, S.M. 1994: Kaufman, C., Perlman, R., Speciner, M. 1995: Stevens, W.R. 1994:
Установка программыЭта глава описывает процесс установки sf firewall на Linux 2.0.x. Распакуйте архив в какую-либо директорию, например /usr/local/src. Файлы программы будут записаны в ./sf-0.2.9 (вы вероятно уже сделали это). Мы рекомендуем использовать ядро Linux 2.0.24, которое является последней версией, на которой тестировалась наша программа (более ранние ядра 2.0.x иногда обрывали TCP соединения; также ядро 2.0.23 и ранее уязвимы для IP пакетов большого размера). Существует версия sf firewall для ядер 1.2.x, для них загрузите архив sf-0.1.tar.gz. Не нужно, в общем, патчить ядро 2.0.24, однако вам нужно исправить возможные баги в других программах (например sendmail). Чтобы уменьшить воздействие атаки TCP SYN flooding , будет разумным установить следующий patch. Если ваша текущая конфигурация ядра не включает "Loadable module support", "Networks firewall support" и "IP routing", вам следует перекомпилировать ядро. Чтобы сделать это, перейдите в директорию /usr/src/linux (замечание: если ваше ядро находится в другом месте, вы должны отредактировать файл make.options в директории, где расположен sf firewall). Запустите команду make menuconfig и выберите соответствующие опции. Затем запустите компиляцию make clean; make dep; make zImage. За подробностями по компиляции ядра обращайтесь к Linux kernel HOWTO. Пока компилируется ядро, вы можете продолжить установку брандмауэра. Перейдите в директорию sf-0.2.9 и наберите ./configure Просмотрите файл sf_custom.h и проверьте соответствует ли он вашей системной конфигурации. Не меняйте того, в чем вы не уверены ! Теперь наберите make clean; make dep; make Это создаст файлы sfc, sfident и sf.o. Создайте нового пользователя с именем firewall. Это можно сделать, добавив следующую строчку к файлу /etc/passwd (вы можете использовать любые свободные пользовательские и групповые id): firewall:x:888:888::/dev/null:/bin/false Создайте новую группу firewall добавив следующую строку к файлу /etc/group : firewall:x:888: Теперь наберите make install Эта команда создаст устройство и канал для брандмауэра (firewall device, the firewall pipe) и скопирует исполняемые файлы в нужные места. Создайте файл конфигурации брандмауэра /etc/firewall.conf. Вы можете использовать в качестве образца файл, включенный в дистрибутив, изменив его в соответствии с вашими нуждами. Когда завершиться компиляция ядра, установите его (скопируйте zImage в /vmlinuz, запустите lilo и перегрузитесь). Теперь вы можете загрузить в ядро модуль брандмауэра (insmod sf) и запустить демон (sfc start). Для автоматического старта брандмауэра во время загрузки, вставьте эти две команды в файл в /sbin/init.d/ (или /etc/rc.d/, в зависимости от вашей системы). Убедитесь в том, что демон брандмауэра запускается перед маршрутизирующим демоном. Если конфигурация брандмауэра не позволяет перенаправление маршрутов (ICMP routing redirects), вам следует, после запуска демона брандмауэра, проверить таблицу маршрутов и удалить динамически созданные маршруты. Мы рекомендуем внести следующие изменения в вашу Linux систему:
Настройка конфигурации брандмауэраВсе правила и настройки брандмауэра содержатся в одном файле. В этой главе описана структура и синтаксис этого файла. Подробное описание синтаксиса и всех возможных опций приведено в конце этой главы. Для начала мы рекомендуем использовать типовые файлы конфигурации, входящие в состав пакета. Файл конфигурации состоит из трех частей:
Любая строка в файле начинающаяся со знака # считается комментарием. Комментарии в стиле языка C (любой текст, начинающийся с /* и заканчивающийся */) также допустимы. Они обычно используются для обозначения многостроковых комментариев , а также комментариев, начинающихся не с начала строки. Заметим, что в файле конфигурации надо использовать только прописные буквы. (строки могут содержать заглавные буквы). Указание IP адресовIP адреса используются в нескольких местах в файле. Вы можете использовать адреса в десятично-точечной (dotted decimal) форме или имена. В последнем случае, имя преобразуется в адрес на этапе просмотра конфигурационного файла с помощью операционной системы (используя, так называемый, resolver). Все адреса, выдаваемые для данного имени, подставляются в файл. Мы настоятельно не рекомендуем использовать имена в файле конфигурации по следующим причинам:
Вы можете указывать маску после адреса или имени. Заметьте, что это не та сетевая маска ( netmask ), которая используется при настройке сетевых интерфейсов! Два адреса считаются совпадающими, если у них совпадают все биты соответствующие единичкам в маске. Например, если вы хотите чтобы было полное совпадение адресов, используйте маску 255.255.255.255. Примеры: 129.132.1.18 mask 255.255.255.255 соответствует только одному хосту
193.135.255.0 mask 255.255.255.0 обозначает все адреса в сети класса C
129.132.20.0 mask 255.255.255.0 соответствует всем адресам в подсети
129.132.20.0 сети 129.132.0.0 класса B
В общем случае, вам не надо указывать маску для обозначения конкретного хоста или сети, в которой нет разбиения на подсети. Ниже показано какие маски подставляются автоматически: 129.132.1.18 = 129.132.1.18 mask 255.255.255.255 129.132.0.0 = 129.132.0.0 mask 255.255.0.0 193.135.255.0 = 193.135.255.0 mask 255.255.255.0 Заметьте, что адрес 129.132.20.0, указанный без маски, будет обозначать адрес хоста, так как это адрес класса B и часть адреса, содержащая адрес хоста ( .20.0 ) не равна нулю. Чтобы указать адрес подсети, а не хоста необходимо указать маску (255.255.255.0). Секция SetupКонфигурационный файл начинается с ключевого слова setup. Необязательная инструкция internalnets используется для указания IP адресов сетей и/или хостов, которые расположены за брандмауэром и составляют защищаемую область. Адреса разделяются запятыми и заканчиваются точкой с запятой. Эта информация используется брандмауэром для предотвращения IP спуфинга. Брандмауэр определяет, на правильный ли интерфейс пришел пакет. То есть, если пакет имеет адрес источника из внутренней сети, то он не может прийти на интерфейс подключенный к Интернет. При этом предполагается, что сеть подключена к Интернет только в одном месте. Вы должны указать почтовый адрес, используя инструкцию mail_default. Этот адрес используется, по умолчанию, для сообщений о различных событиях ( например, переполнении диска ). Вы можете указать в одной строке несколько почтовых адресов, разделенных пробелами. Секция ConfigurationЭта секция начинается с ключевого слова rules. Каждое правило в этой секции начинается с одного из слов accept, block или reject. Правило accept разрешает прохождение пакетов, адреса которых соответствуют указанным в этом правиле. Пакеты, соответствующие правилу block просто тихо отбрасываются, то есть никаких ICMP сообщений об ошибках не возникает. В случае правила reject, соответствующий пакет отбрасывается, а по его исходному адресу шлется ICMP сообщение об ошибке. По умолчанию, шлется сообщение host unreachable, однако возможно указать другое сообщение, используя следующую форму - reject with icmp_..._unreachable. Вслед за указанными ключевыми словами вы можете указать список параметров IP пакета, используя дополнительные опции. Пакет считается соответствующим правилу, если хотя бы одна из опций верна. Особый случай - это поле time to live пакета, которое на самом деле не является опцией , но в данном случае рассматривается как таковая. Значение этого поля сравнивается с константой, и пакет считается соответствующим правилу только в случае положительного результата сравнения, независимо от остальных опций. Информация о типе протокола IP пакета задается одним из слов tcp, udp, icmp, igmp, rip или all, где all обозначает все пакеты, независимо от протокола. Можно указывать вместо слова номер протокола в заголовке IP пакета, например 9 для IGP. В случае протоколов icmp или igmp, возможно указать типы сообщений. Протокол rip это специальный случай протокола udp, когда все пакеты идущие на 520 порт исследуются. RIP пакет считается удовлетворяющим правилу если все адреса сетей, указанные в пакете, присутствуют и в правиле. Вот пример правила для RIP пакета: accept rip outside /* соответствует всем внешним адресам */ from 194.40.243.5 /* адрес ближайшего маршрутизатора в интернет */ to 194.40.243.4; /* собственный адрес */ Пакет считается удовлетворяющим правилу, если его адрес источника ( source address ) совпадает с одним из адресов, указанных после ключевого слова from и его адрес назначения ( destination address ) совпадает с одним из адресов, указанных после ключевого слова to. Если пропущен список from или to, то пакет считается соответствующим правилу вне зависимости от адреса источника или адреса назначения соответственно. Вместо списка адресов можно указывать ключевое слово inside, которое обозначает все адреса, указанные в инструкции internalnets ( смотри выше ) либо ключевое слово outside, которое означает все адреса, не указанные в инструкции internalnets. Если правило описывает пакеты протоколов tcp или udp, вы можете также указать номер порта или диапазон портов. При этом, вы можете использовать либо номера портов, либо названия сервисов. В последнем случае название сервиса переводится в номер порта с использованием файла /etc/services. Указание номеров портов для пакетов других протоколов не оказывает никакого эффекта. Вот пример использования ключевых слов from и to : from inside port telnet /* все пакеты с внутренними адресами и
портом источника 23 */
to 129.132.0.0, /* все пакеты, идущие в сеть 129.132.0.0 */
port 2700, /* все пакеты, идущие на порт 2700 */
130.103.24.0 mask 255.255.255.0
port 3000..4000; /* все пакеты, идущие в указанную подсеть на
все порты с 3000 по 4000 */
Наконец, в правиле вы можете указать уровень сообщения ( notification level ), который говорит брандмауэру, какие действия необходимо предпринять в случае соответствия пакета правилу ( помимо, собственно, принятия или отбрасывания пакета). Нулевой уровень означает то, что демон брандмауэра не извещается о произошедшем событии. Если уровень сообщения больше нуля, то брандмауэр делает запись в логах и выполняет другие действия, описанные в секции notification ( смотри ниже ). Порядок правил в файле очень важен. Если два правила перекрываются, то первое по порядку правило имеет приоретет над вторым. Следовательно вам надо начинать с наиболее определенных правил, а общие правила располагать в конце секции. Например, если вы хотите запретить все UDP пакеты, за исключением пакетов, идущих с хоста 194.40.236.34, вам следует записать два правила в следующем порядке: accept udp from 194.40.236.34 notification_level 0; block udp notification_level 1; Секция NotificationСекция notification начинается с ключевого слова notification, за которым, в отдельных абзацах, описываются все уровни сообщений. Каждый абзац начинается ключевым словом level, за которым идет номер уровня и двоеточие. В каждом абзаце вы определяете список действий, которые выполняются на этом уровне. Ниже приведен список возможных действий:
Вы можете использовать конструкцию if, чтобы выполнить некоторые действия только при определенном условии. Переменные считаются объявленными неявно и имеют начальное значение, равное нулю. Переменные могут быть только целочисленного типа. При обращении к переменной, возможно через двоеточие указать один из квалификаторов sourcehost или desthost. В этом случае происходит обращение к специальному экземпляру переменной, адресуемой по адресу хоста-источника или хоста-назначения пакета, который вызвал выполнение этих действий. В случае обновления такой переменной изменяется как основная переменная, так и ее специальный экземпляр. Эта особенность используется, в частности, для организации счетчиков, как общего числа событий, так и отдельно, для каждого адреса источника и назначения. В следующем примере показано использование переменных с квалификаторами, тайм-аутов и динамических правил. Если хост пингует вашу сеть 100 раз с интервалом между пингами не более 2 секунд, все пакеты с этого хоста блокируются на 10 минут. Уровень сообщения динамического правила установлен равным нулю, чтобы уменьшить количество передаваемой информации от фильтра к демону. accept icmp icmp_echo to inside notification_level 10;
notification
level 10:
let pingcount:sourcehost := pingcount:sourcehost + 1 timeout 2;
if pingcount:sourcehost > 100 then
block all from sourcehost notification_level 0 timeout 600
endif;
Написание правил фильтрацииВ этой главе мы обсудим вопросы написания фильтрующих правил для нашего брандмауэра. Мы настоятельно рекомендуем вам прочитать книгу "Firewalls and Internet Security", Cheswick и Bellovin (Addison-Wesley, 1994), чтобы иметь представление о проблемах, связанных с безопасностью использования протокола TCP/IP и правильной конфигурации брандмауэра. Блокировать или отражать (Block or Reject ) пакеты ?Часто, довольно трудно решить, блокировать пакет или отражать его. В первом случае, хост посылающий пакет думает, что пакет просто потерялся где-то при передаче. В этом случае, обычно, посылающее приложение несколько раз повторяет посылку пакета. Если же вы посылаете назад ICMP сообщение об ошибке, то, как правило, посылающая сторона не предпринимает больше попыток передать пакет. Не следует отражать пакеты тех протоколов или приложений, которые игнорируют ICMP сообщения (как некоторые реализации DNS серверов), так как это вызовет наводнение сети ICMP сообщениями. Протокол TCP не игнорирует совсем ICMP сообщения, но все равно пытается заново передать пакет, так как он считает, что сообщения типа "...unreachable" могут быть вызваны временными причинами. Чтобы надежно отразить TCP пакеты, необходимо послать reset пакет (этого можно достичь с помощью либо reject with tcp_reset, либо reject with best ). Многие программы не делают различий между различными ICMP "...unreachable" сообщениями. Таким образом, возможна ситуация, когда вы шлете сообщение "port unreachable", а принимающая сторона обрабатывает его как "host unreachable". В результате хост может стать недоступен, что может быть нежелательно. Не следует отражать ICMP сообщения, так как это не будет работать, вследствие особенностей реализации ядра операционной системы. Если вы используете инструкцию reject with best, то в этом случае TCP пакеты отражаются посылкой reset пакета; для UDP пакетов генерится ICMP сообщение port unreachable, а все остальные пакеты отражаются с ICMP сообщением host unreachable. Фильтрация TCP соединенийВ случае правил для протокола TCP, адрес после ключевого слова from обозначает инициатора соединения. Для установленных соединений прохождение пакетов в обратную сторону разрешается автоматически. Запись в лог-файл делается только в момент установления соединения. Протокол FTP требует специальной обработки, так как при связи по этому протоколу, устанавливается два соединения - управляющее (control connection) и соединение для данных (data connection). Второе из них инициируется сервером. Однако вам не нужно явно разрешать входящие соединения. Каждое управляющее соединение просматривается на наличие команд PORT, которые вызывают установление соединений для данных на конкретный порт. И каждое такое соединение автоматически разрешается. Входящие и выходящие пакетыФильтр пакетов вызывается всякий раз, когда IP пакет принимается или отсылается. Пакеты, проходящие с одного интерфейса на другой, проверяются во время прихода в систему. При отсылке пакета проверяется только соответствие интерфейса адресу назначения ( для предотвращения спуфинга ). Локальные пакеты (то есть те, которые не собираются выходить из системы ) проверяются только при передаче. Подделка адресов (Address Spoofing)Следующие признаки подделки адресов вызывают сигнал тревоги:
Заметьте, что адреса класса D и E не проверяются на предмет спуфинга. Фрагментированные IP пакетыВ случае фрагментации пакетов, проверяется только первый фрагмент пакета и результат проверки запоминается. В случае, если этот фрагмент не принят, то и все остальные фрагменты просто тихо отбрасываются. В случае, если фрагменты приходят не по порядку, то все фрагменты, пришедшие до первого, отбрасываются. Синтаксис файла конфигурацииconfiguration = setup_section
rules_section
[ notification_section ]
"end.".
setup_section = "setup"
[ internal_statement ]
mail_statement.
rules_section = "rules" { ( block_statement
| accept_statement
| reject_statement ) }.
setup_statement = "internalnets" address { "," address } ";".
mail_statement = "mail_default" """ mailaddress(es) """ ";". block_statement = "block" rule ";". accept_statement = "accept" rule ";". reject_statement = "reject" [ "with" ( "icmp_net_unreachable"
| "icmp_host_unreachable"
| "icmp_protocol_unreachable"
| "icmp_port_unreachable"
| "tcp_reset"
| "best"
| "echo_reply" ) ]
rule ";".
rule = [ "options" ip_option { "," ip_option } ]
( "all"
| protocol_number
| "icmp" [ icmp_type { "," icmp_type } ]
| "igmp" [ igmp_type { "," igmp_type } ]
| "tcp"
| "udp"
| "rip" [ ( address { "," address } | inside | outside ) ] )
[ "from" ( fulladdr { "," fulladdr }
| "inside" [ "port" port [ ".." port ] ]
| "outside" [ "port" port [ ".." port ] ] ) ]
[ "to" ( fulladdr { "," fulladdr }
| "inside" [ "port" port [ ".." port ] ]
| "outside" [ "port" port [ ".." port ] ] ) ]
"notification_level" value.
ip_option = ( "record_route"
| "timestamp"
| "security"
| "loose_source_route"
| "strict_source_route"
| "sat_id"
| "time_to_live" ( "<" | "=" | ">" | "!=" ) value ).
icmp_type = ( "icmp_echo_reply"
| "icmp_destination_unreachable"
| "icmp_source_quench"
| "icmp_redirect"
| "icmp_echo_request"
| "icmp_time_exceeded"
| "icmp_parameter_problem"
| "icmp_timestamp"
| "icmp_timestamp_reply"
| "icmp_info_request"
| "icmp_info_reply"
| "icmp_address"
| "icmp_address_reply" ).
igmp_type = ( "igmp_host_membership_query"
| "igmp_host_membership_report"
| "igmp_host_leave_message" ).
fulladdr = ( address [ "port" port [ ".." port ] ]
| "port" port [ ".." port ] ).
address = ( ip_address | """ name """ ) [ "mask" mask ].
port = ( port_no | name ).
notification_section = "notification"
"level" ( value | "spoof" | "oversized" ) ":" ( { entry ";" } | ";" )
{ "level" ( value | "spoof" | "oversized" ) ":" ( { entry ";" } | ";" ) }.
entry = ( "message" """ text """ { """ text """ }
| "syslog"
| "report"
| "mail" [ """ mailaddress(es) """ ]
| "spy"
| "exec" """ command """
| "relevel" value
| "call" value
| "if" ( variable | value ) ( "<" | "=" | ">" | "!=" )
( variable | value ) "then"
{ entry ";" } "endif"
| "let" variable ":="
( value | "destport" | variable
[ ( "+" | "-" ) ( value | variable ) ] )
[ "timeout" seconds ]
| dynamic_rule [ "timeout" seconds ]
).
variable = name [ ":" qualifier ]. qualifier = ( "sourcehost" | "desthost" ). [ специальные ключевые слова, допустимые в динамических правилах: "currentprotocol" uses protocol of actual packet "sourcehost" uses source host address "sourcenet" uses source net address "desthost" uses destination host address "destnet" uses destination net address ]
Примеры, пожалуйста !Для начала, ознакомьтесь, пожалуйста, с описанием настройки конфигурации брандмауэра. В этом разделе мы опишем работающий (хотя и не очень полезный) пример с использованием уровней сообщений ( notification level ). Для удобства, этот пример включен в дистрибутив нашей программы. Далее в тексте примера используется шрифт с фиксированой шириной. Важные ключевые слова выделены жирным шрифтом, а комментарии курсивом. # Образец файла конфигурации брандмауэра "sf firewall"
setup
internalnets 193.194.195.0;
mail_default "adm@x.y.z";
rules
# Некоторые простые правила для определения активности хакеров
block tcp to port 87, /* link */
port 95 /* supdup */
notification_level 99;
block options loose_source_route, strict_source_route all
notification_level 13;
# ...пропустим несколько правил для RIP протокола
# обнаруживать дополнительные пути в интернет
block rip from inside notification_level 12;
# ...пропустим еще несколько правил с уровнем сообщений 0
# Разрешить входящие FTP запросы на наш FTP сервер
accept tcp to 130.59.4.16 port 21 notification_level 1;
# Разрешить входящие Telnet запросы на наш Telnet/Login сервер
accept tcp to 130.59.4.16 port 23 notification_level 2;
accept all from 127.0.0.1 to 127.0.0.1 notification_level 0;
# запретить все остальные TCP соединения
block tcp notification_level 99;
notification
level 1: /* регистрировать все разрешенные FTP соединения */
message "FTP connection request.";
level 2: /* регистрировать все разрешенные Telnet соединения */
message "Telnet connection request.";
level 3: /* регистрировать все разрешенные WWW соединения */
message "WWW connection request.";
level 11:
message "ICMP redirect received.";
level 12:
message "There may be a secondary route to the internet.";
level 13:
message "IP packet with source route option detected";
let sr:sourcehost := sr:sourcehost + 1 timeout 300;
if sr:sourcehost = 1 then
message "IP packet with source route option detected";
spy;
endif;
level 99:
message "Illegal TCP connection.";
syslog;
let illtcp:sourcehost := illtcp:sourcehost + 1 timeout 600;
if illtcp:sourcehost = 1 then
message "Illegal TCP connection.";
mail;
spy;
endif;
end.
Приведенный выше пример показывает использование всех возможных конструкций в секции "notification", за исключением relevel, exec и динамических правил. В то время, как использование инструкции exec довольно очевидно (например exec "ifconfig eth0 down" отключает интерфейс в случае крайней необходимости), использование инструкции relevel и динамических правил требует пояснений. Изменение уровня правила с помощью relevel является постоянным и вследствие этого не очень полезно. Лучше использовать временные динамические правила. Предположим уровень 100 вызывается всякий раз, когда наша машина пингуется. Файл логов в этом случае очень быстро станет огромных размеров, так как будет регистрироваться каждый отдельный пинг. Первая идея состоит в изменении уровня с помощью инструкции relevel: ... notification level 100: message "We have been pinged"; relevel 0; ... Однако это плохая идея. После первого же пинга регистрация пингов отключится совсем. Чтобы зарегистрировать первый пинг и потом, в течении некоторого времени, не регистрировать последующие пинги с того же хоста, нам надо отказатлься от relevel и сделать так: ...
notification
level 100:
let pings:sourcehost := pings:sourcehost + 1 timeout 600; /* 10 minutes */
if pings:sourcehost = 1 then
message "We have been pinged";
endif;
...
Если мы беспокоимся о возможных атаках типа "отказ обслуживания" (denial-of-service attack), мы можем использовать динамические правила и блокировать пинги (после определенного их числа): if pings:sourcehost > 1000 then
message "Possible denial-of-service attack";
spy;
block all from sourcehost notification_level 0 timeout 600;
endif;
Конечно, реальная атака может использовать большое число других, отличных от пинга, видов соединений, например ftp.
Запуск и управление брандмауэромПосле того, как вы установили брандмауэр и настроили его конфигурацию, вы, конечно, хотите знать как его запускать, останавливать и исследовать его состояние. В этой главе описана программа sfc, которая является командным интерфейсом для демона брандмауэра и фильтрующего модуля ядра. Запуск брандмауэраДля начала, убедитесь, что модуль sf.o загружен в ядро (в этом вам поможет команда lsmod ). Если sf.o не загружен, посмотрите Руководство по Установке -- добавьте строку insmod /путь/к/sf.o в один из файлов запуска и перегрузите машину. Команда sfc start используется для запуска демона брандмауэра. По умолчанию файл конфигурации находится в /etc/firewall.conf, но вы можете указать любой другой файл , например sfc start myconfig. По команде start сначала происходит разбор конфигурационного файла. Затем проверяется, не запущен ли уже демон брандмауэра, открывается файл логов, запускается демон и в конце снимает с демона привелигии суперпользователя. Остановка брандмауэраДля остановки демона брандмауэра используется команда sfc stop. Предупреждение: Когда демон останавливается, то весь сетевой траффик блокируется. Вам надо, либо выгрузить модуль sf.o из ядра (rmmod sf.o), либо заново запустить демон (sfc start). Причина: Предположим, в результате какой-нибудь ошибки в операционной системе, злой хакер сумел послать сигнал SIGKILL демону брандмауэра. Брандмауэр бы завершил свою работу и оставил бы систему незащищенной. Кстати, в версии Linux 1.2.11 была ошибка, позволяющая любому пользователю убивать любой процесс. Это еще одна причина, по которой никогда нельзя разрешать работу обычных пользователей на машине, где запущен брандмауэр. Изменение конфигурации брандмауэраВ некоторых случаях , желательно автоматически переключаться с одной конфигурации на другую. Предположим, что в некоторой организации, никто не работает по воскресеньям (мне говорили, что такие конторы существуют). Следовательно, сетевой траффик по воскресеньям должен проверяться гораздо строже, чем в обычные дни. Для изменения конфигурации в определенное время вы могли бы выполнить с помощью cron следующие команды sfc stop; sfc start newconfig. Однако, существует лучший способ смены конфигурации, заложенный в sfc - команда sfc reconfig newconfig (где newconfig это путь к файлу с новой конфигурацией. Если этот параметр пропущен, то будет использоваться /etc/firewall.conf ). Команда reconfig обеспечивает гладкое переключение конфигурации, то есть установленные соединения не будут прерваны. Два необязательных параметра изменяют работу этой команды: flush: При использовании этого параметра, все существующие TCP соединения, которые не разрешены в новой конфигурации будут прерваны. Другие TCP соединения останутся. flush_all: Эта команда завершает все TCP соединения (эквивалентно последовательности stop; start ). Проверка синтаксиса файла конфигурацииЧтобы проверить файл конфигурации на синтаксические ошибки, используется команда sfc checkconfig myconfig (и снова myconfig может быть опущен, тогда используется /etc/firewall.conf). В случае ошибки печатается номер строки. Отображение текущей конфигурацииКоманда sfc show показывает все активные правила и переменные.
КонтрразведкаСкажем несколько слов о функции контрразведки, встроенной в брандмауэр: Некоторые люди считают, что "шпионить" за другими компьютерами в сети неэтично, даже если эти машины и могут быть источником атаки. Чтобы успокоить таких людей, функция контрразведки включается только в случае явного указания ключевого слова spy в файле конфигурации. Таким образом, вам решать использовать ее или нет. Цель "шпионажа" за другими машинами в том, чтобы попытаться собрать информацию о этих машинах и пользователях, работающих на них. Действия выполняемые процессом-шпиономЧтобы узнать имя удаленной машины, запрашивается DNS (система доменных имен). Полученное имя затем транслируется в адрес (опять же с использованием DNS) и результат сравнивается с IP адресом пакета. Если адреса не совпадают, выдается специальное предупреждение. На следующем шаге, брандмауэр пытается выяснить имена пользователей удаленной машины. Это достаточно трудная задача, так как нет стандартного способа сделать это и во многих случаях удаленные машины не позволяют сделать это, либо, что еще хуже, выдают явную ложь. Имейте это в виду, когда будете просматривать результаты "шпионажа". Вначале брандмауэр пытается использовать протокол ident. Это возможно только если выполнение процесса-шпиона вызвано попыткой TCP соединения на сам брандмауэр (это ограничение данного протокола). Если все работает как нужно, вы получите имя пользователя, посылающего пакеты. Если нет, то вы увидете сообщения "no such user" или "connection refused". Далее используется команда finger на удаленный хост. Если удаленная машина допускает finger запросы, то вы увидите список всех активных пользователей этой машины. Список может содержать интересную информацию о логических именах пользователей, их настоящих именах, времени работы в системе и др. Некоторые хосты возвращают только информацию типа "To send mail to someone at ..., address your mail using the following format: ...", а другие вообще отказываются обслуживать finger запросы. Наконец, предпринимается попытка использовать команду rusers. Мне бы хотелось увидеть хост, который ответит на эту команду, но, тем не менее, если она пройдет, вы увидете список пользователей этой машины, хосты, с которых они залогинились и время работы. Куда записываются результатыЕсли ничего не указывать, то результаты шпионажа запишутся в файл firewall.spy в той же директории где находится лог-файл брандмауэра. Если вы укажете ключевое слово mail для того же уровня сообщения, что и ключевое слово spy, результаты будут также отправлены по почте. Пример результатов шпионажаРезультаты могут быть похожи на приведенный ниже пример (в реальной жизни возможно более двух пользователей): FIREWALL COUNTER INTELLIGENCE REPORT, Aug 09 12:20:02
Triggered by: (s 13) accept TCP 1.2.3.4:1065->193.194.195.196:telnet
Host address: 1.2.3.4
Host name: oval.office.gov
identd information:
User ID: unabom.
finger information:
[1.2.3.4]
Login: unabom Name: John F. Doe
Directory: /home/unabom Shell: /bin/csh
On since Wed Aug 9 10:27 (EST) on tty1
No Mail.
No Plan.
Login: bclinton Name: Bill Clinton
Directory: /home/bclinton Shell: /bin/bash
On since Wed Aug 9 9:32 (EST) on tty2, idle 0:22
New mail received Wed Aug 9 12:18 1995 (EST)
Unread since Tue Aug 8 20:03 1995 (EST)
Plan:
We are using PGP to encrypt our E-mail here at the office.
rusers information:
unabom localhost:tty1 Aug 9 10:27
bclinton localhost:tty2 Aug 9 9:32 :22
Формат лог-файла брандмауэраВ зависимости от конфигурации, брандмауэр может создавать как небольшое, так и огромное количество записей в лог-файле( в случае недостатка места на диске, вы получите E-mail ). Эта глава поможет вам разобраться в содержимом лог-файла. Куда записывается информацияВесь вывод брандмауэра записывается в лог-файл брандмауэра. Если вы указали ключевое слово syslog, запись будет занесена и в системный лог-файл. Ключевое слово report копирует запись в файл firewall.report (являющийся ежедневным отчетом). А если вы указали ключевое слово mail, то запись будет направлена по электронной почте ( это может быть полезно в том случае, если хакер сумел войти в систему и изменить файлы логов, чтобы скрыть свое присутствие -- отправленную почту он не в силах изменить). Используемые сокращенияИз-за используемых сокращений, разобраться в содержимом файла, с первого взгляда, довольно сложно. Мы пошли на это для того, чтобы разместить как можно больше информации на одной строке.
Ниже приведен список возможных сокращений. За более подробной информацией обращайтесь к описанию: Rule Types (Типы правил): Filter Actions (Действия фильтра): Protocols (Протоколы): Адрес источника пакета ( Packet Source) и адрес назначения ( Packet Destination ) включают и номера портов (через двоеточие), если они поддерживаются протоколом. Другие записи в лог-файлеДругие записи говорят сами за себя.
ОграниченияВ этой главе описаны ограничения, присущие нашему брандмауэру. Текущее состояние делВ настоящее время, большинство систем полностью незащищены. Многие организации даже и не беспокоятся о замене клиентских программ, содержащих ошибки. Старые версии sendmail-а все еще работают на забытых всеми принт-серверах, где-нибудь в отдаленных углах офиса. Таким образом, любой брандмауэр, будь он как угодно плохим, все равно улучшит ситуацию. Ожидаемая новая версия протокола IP v6 поможет решить многие вопросы безопасности. Но даже через несколько лет, когда новый протокол получит распространение, все равно останутся старые машины, работающие со старой версией протокола, уязвимые для атак. Защита, обеспечиваемая брандмауэром sf FirewallМы хотели бы сказать что вам теперь не о чем беспокоиться. Но это не правда. "sf Firewall" предотвращает большинство атак, но не все. Подобно запертой двери, брандмауэр создает препятствия на пути злоумышленника. Но если взломщик очень постарается, он может разбить стекло или вышибить дверь. В этом случае, он, скорее всего, произведет большой шум и наша программа поможет вам обнаружить его, увеличивая ваши шансы на успех. Помните, что наша программа экспериментальная вещь и мы не даем никаких гарантий по ее работе. Остающиеся угрозыФильтр пакетов, даже такой продвинутый, как наш, не может защитить вас от перехвата TCP соединений, прослушивания и изменения данных на пути их следования. Вы не будете защищены от подслушивания паролей. Если вы предоставляете ограниченный доступ в вашу сеть из Интернет с помощью паролей, используйте системы с одноразовыми паролями. Для полной уверенности в подлинности собеседника используйте специальные системы, например Kerberos. И наконец, прочитайте все-таки документацию - если вы неправильно настроите программу, то никто вам не поможет... Рубрика: Firewall
VivaMP - инструмент для OpenMP.
Инструмент для программистов VivaMP предназначен для помощи разработчикам параллельных программ на базе OpenMP. В статье приведен краткий обзор программного продукта.
Подробнее... |
Рубрика: OpenMP
| Добавлено: 05.12.2008
Создаем контекстно-зависимое WPF-приложени....
Подробнее... |
Рубрика: Windows 7
| Добавлено: 05.12.2008
Windows Vista SP2: что внутри и что важно?.
Подробнее... |
Рубрика: Windows Vista
| Добавлено: 05.12.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|