« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Смешивание управляемого и неуправляемого кода

Функция GetCommState

Уменьшение длины кода

Remix 2008: запись репортажа с доклада об Internet Explorer 8

Функция date() - вывод даты и времени в PHP

Создаем контекстно-зависимое WPF-приложение

Функция AnsiLower

Как правильно разместить DNS-сервер

Глава 19. Миграция приложений.

Интерпретация строковых выражений как функций




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 193
Пользователей: 0

Статьи:: Интернет технологии :: Firewall :: Что такое Firewall



отправить ссылку другу версия для печати  Обсудить на форуме

Что такое Firewall



Новая страница 2

водство Пользователя



sf Firewall - это фильтр пакетов для операционной системы Linux. Все в нем хорошо, кроме одного - он не поддерживает маскарадинг. Так что, если вы не используете маскарадинг для доступа машин в Интернет, вам стоит попробовать этот брандмауэр. Оригинал этого руководства можно найти здесь.
Перевод на русский язык - Гурьев Александр, Атлас Нетворкс, Copyright ї 1998
 



sf Firewall Software --фильтр пакетов TCP/IP для ОС Linux

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-й достаточно).

Мы успешно тестировали наше программное обеспечение

  • на 64Кбит линии, используя 486/66 MГц (эта машина служила еще и почтовым сервером и была перегружена)
  • на 128Кбит линии, используя P5/90 МГц
  • на 10МБит линии, используя P6/200 МГц (эта машина имела среднюю загрузку на уровне 0.00)

Есть документация

Руководство по настройке, описание главных архитектурных особенностей построения программного обеспечения(на английском языке) и руководство по установке помогут в установке и обслуживании брандмауэра. Если вы не знакомы с брандмауэрами вообще и опасностями при использовании протокола 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. Это не список рассылки, поэтому не шлите, пожалуйста, запросов на подписку.

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

Copyright

Copyright ї 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:
Network (In)Security Through IP Packet Filtering.
Great Circle Associates, Mountain View, California.
Можно скачать по ftp с ftp.greatcircle.com.

Рекомендуем прочесть

Bellovin, S.M. 1989:
Security Problems in the TCP/IP Protocol Suite.
AT&T Bell Laboratories, Murray Hill, New Jersey.
Можно скачать по ftp с ftp.research.att.com.

Cheswick, W.R. and Bellovin, S.M. 1994:
Firewalls and Internet Security--Repelling the Wily Hacker.
Addison-Wesley, Reading, Massachusetts.

Kaufman, C., Perlman, R., Speciner, M. 1995:
Network Security--PRIVATE Communication in a PUBLIC World.
Prentice Hall, Eaglewood Cliffs, New Jersey.

Stevens, W.R. 1994:
TCP/IP Illustrated, Volume 1--The Protocols.
Addison-Wesley, Reading, Massachusetts.

 

Установка программы

Эта глава описывает процесс установки 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 систему:

  • Убедиться в достаточном количестве дисковой памяти под /var/log (мы советуем использовать отдельный раздел диска).
  • Запретить работу всех пользователей на машине (удалите всех пользователей, создайте файл с названием nologin в корневой / директории).
  • Запретите удаленные логины на машину (измените securettys в /etc и/или отредактируйте переменную CONSOLE в /etc/login.defs).
  • Не запускайте RPC или ненужные inetd службы (не запускайте inetd вообще или удалите ненужные сервисы из /etc/inetd.conf). Вы можете просмотреть активные сервисы с помощью netstat -a.
  • Замените ваш файл /etc/services на файл, содержащийся в дистрибутиве брандмауэра (проверьте его права доступа - должны быть 0644).
  • В скрипте, ответственном за запуск сети запустите интерфейсы в режиме down , потом загрузите модуль sf ,запустите sfc start и только затем поднимите интерфейсы (ifconfig ethx up).
  • Используйте smail, smap и smapd вместо sendmail (вы можете сделать линк с sendmail на smail чтобы быть увереным, что все существующие программы будут работать). Если вы никак уж не можете обойтись без sendmail, установите последнюю версию, установите smrsh и удалите сообщение о номере версии из /etc/sendmail.cf
  • Установите tripwire или подобный продукт для обнаружения измененных файлов. Совет: чтобы не делать отдельного раздела на диске, доступного только по чтению (необходимого для хранения конфигурационных файлов tripwire), разместите базу данных tripwire на дискетте с файловой системой minix, защитите ее от записи и смонтируйте. Затем в BIOS setup (и/или SCSI controller setup) измените последовательность загрузки на C: A:.
  • Добавьте следующие cron jobs:
    • runq (или sendmail -q, если вы используете sendmail) каждые 10 минут - это обеспечит то, что вся почта будет обработана, особенно если у вас не запущен почтовый демон.
    • sfc start каждые 5 минут - если демон брандмауэра, по каким-то причинам слетел, это снова запустит его.
    • sfc reconfig flush_all ежедневно - очистка от мертвых соединений (здесь вы также можете делать архивацию файлов логов, отправку по почте файла firewall.report и другие необходимые вещи, например запускать tripwire).

 

Настройка конфигурации брандмауэра

Все правила и настройки брандмауэра содержатся в одном файле. В этой главе описана структура и синтаксис этого файла.

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

Файл конфигурации состоит из трех частей:

  • setup секция, содержащая информацию о структуре вашей сети.
  • configuration секция, содержит информацию о правилах фильтрации пакетов. Определяет, что нужно делать с IP пакетами.
  • notification секция, определяет, какие дополнительные действия должен сделать демон брандмауэра в случае соответствия пакета правилу.

Любая строка в файле начинающаяся со знака # считается комментарием. Комментарии в стиле языка C (любой текст, начинающийся с /* и заканчивающийся */) также допустимы. Они обычно используются для обозначения многостроковых комментариев , а также комментариев, начинающихся не с начала строки.

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

Указание IP адресов

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

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

Вы можете указывать маску после адреса или имени. Заметьте, что это не та сетевая маска ( 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, за которым идет номер уровня и двоеточие. В каждом абзаце вы определяете список действий, которые выполняются на этом уровне. Ниже приведен список возможных действий:

message
определяет текст дополнительного сообщения, которое записывается в лог-файл и в почтовое сообщение. Если сообщение состоит из нескольких строк, то строки завершаются двойной кавычкой (") и возобновляются на следующей строке. Заметьте, что внутри if конструкции вы должны использовать отдельные сообщения.
syslog
приводит к тому, что сообщение, в дополнение к лог-файл брандмауэра, записывается и через syslog.
report
сообщение копируется в файл firewall.report , в дополнение к обычному лог-файлу брандмауэра.
mail
посылает сообщение по указанному адресу(ам). Если никакого адреса не указано, то почта отсылается по адресу, указанному в инструкции mail_default.
spy
функция "конрразведки", выполняет некоторые действия по сбору информации о хосте, с которого пришел пакет, например посредством finger. Эту инструкцию следует использовать вместе с mail, для того, чтобы получить результаты по E-mail.
relevel
изменяет уровень сообщения для правила. В следующий раз, когда пакет будет соответствовать правилу, будут выполнены действия, указанные в новом уровне.
exec
выполняет произвольную команду операционной системы. Эта инструкция может использоваться, например, для отключения сетевого интерфейса или системы в целом и др. Это очень мощная команда, используйте ее осторожно!
call
вызывает выполнение действий другого уровня.
let
присваивает или изменяет значение переменной. В конце конструкции let может быть указано значение тайм-аута ( в секундах ). Если к переменной происходит доступ по чтению или по записи после того, как истекло значение тайм-аута с момента предыдущего доступа, переменная обнуляется перед операцией доступа.
Динамические правила
добавляются к конфигурации динамически. В дополнении к опциям, описанным выше, существует несколько специальных опций для динамических правил. Вы можете использовать ключевое слово currentprotocol вместо указания конкретного протокола. В этом случае используется протокол пакета, который вызвал выполнение этого уровня. Подобным же образом вы можете использовать ключевые слова sourcehost, sourcenet, desthost, destnet после ключевых слов to и from, чтобы были подставлены соответственно адреса хоста-источника, сети-источника, хоста-назначения, сети-назначения. Наконец возможно в конце конструкции указать значение тайм-аута ( в секундах ). Правило будет автоматически удалено по истечения тайм-аута. Используйте динамические правила с осторожностью, так как никогда не ясно, какое из них активно в данный момент. Также довольно трудно определить как эти правила влияют друг на друга, так как их приоритет зависит от порядка возникновения соответствующих событий.

Вы можете использовать конструкцию 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)

Следующие признаки подделки адресов вызывают сигнал тревоги:

  1. Пакет имеет внутренний исходный адрес, а пришел на внешний интерфейс ( и наоборот ). Это значит, что некоторый внешний хост пытается выдать себя за внутренний.
  2. Адрес назначения и интерфейс, через который отсылается пакет, не соответствуют друг другу. Это означает, что, скорее всего, нарушена таблица маршрутизации.
  3. Адрес локальной "петли" ( loopback address) используется на любом интерфейсе, отличном от локального ( loopback interface ).

Заметьте, что адреса класса 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 показывает все активные правила и переменные.

Активные правила:
Активные правила извлекаются из модуля фильтрации ядра и отображаются в том порядке, в каком они проверяются фильтром:
  Active rules:
  -------------

  1 (line  27) dynamic, timeout Aug 03 15:15:03
    block, notification level 0
    from 193.194.195.196 mask 255.255.255.255

  2 (line  10) static
    block, notification level 7
    protocol RIP

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

Во второй строке показывается действие, выполняемое фильтром по этому правилу (блокировать или пропускать пакет) и соответствующий уровень сообщения.

Все остальные строки необязательны. В некоторых случаях печатается тип протокола и адреса источника или назначения пакета.

Переменные:
Значения переменных берутся из демона брандмауэра.
  Variables:
  ----------

  mails = 0

  pings = 5, timeout Aug 03 15:13:53
      host 193.194.195.196 = 3, timeout Aug 03 15:13:53

  alerts = 3

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

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

 

Контрразведка

Скажем несколько слов о функции контрразведки, встроенной в брандмауэр:

Некоторые люди считают, что "шпионить" за другими компьютерами в сети неэтично, даже если эти машины и могут быть источником атаки. Чтобы успокоить таких людей, функция контрразведки включается только в случае явного указания ключевого слова 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 (Типы правил):
s = статическое правило
d = динамическое правило
SPOOF = неявное спуф-правило (включает название интерфейса)
XSIZE = неявное правило для чрезмерно больших (oversized) (включает название интерфейса)

Filter Actions (Действия фильтра):
accept - пропускать
block - не пропускать
reject - не пропускать, с посылкой ICMP сообщения (указывается и тип сообщения)

Protocols (Протоколы):
RIP
TCP
UDP
ICMP

Адрес источника пакета ( Packet Source) и адрес назначения ( Packet Destination ) включают и номера портов (через двоеточие), если они поддерживаются протоколом.

Другие записи в лог-файле

Другие записи говорят сами за себя.

 

Ограничения

В этой главе описаны ограничения, присущие нашему брандмауэру.

Текущее состояние дел

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

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

Защита, обеспечиваемая брандмауэром sf Firewall

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

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

Остающиеся угрозы

Фильтр пакетов, даже такой продвинутый, как наш, не может защитить вас от перехвата TCP соединений, прослушивания и изменения данных на пути их следования.

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

Для полной уверенности в подлинности собеседника используйте специальные системы, например Kerberos.

И наконец, прочитайте все-таки документацию - если вы неправильно настроите программу, то никто вам не поможет...




Рубрика: Firewall




VivaMP - инструмент для OpenMP.

OpenMP

Инструмент для программистов VivaMP предназначен для помощи разработчикам параллельных программ на базе OpenMP. В статье приведен краткий обзор программного продукта.


Подробнее... | Рубрика: OpenMP | Добавлено: 05.12.2008

Создаем контекстно-зависимое WPF-приложени....

Windows 7

Начинаем цикл публикаций, призванных помочь начинающим программистам в создании контекстно-зависимых приложений для Windows 7. Об этом много говорили на PDC да и мы неоднократно писали о этом новом классе приложений. Пользователи Windows 7 build 6801 могли заметить появление в гаджете погоды опции автоматического определения местоположения компьютера. И сегодня у вас появилась уникальная возможность попробовать себя в создании подобных приложений.


Подробнее... | Рубрика: Windows 7 | Добавлено: 05.12.2008

Windows Vista SP2: что внутри и что важно?.

Windows Vista

В связи с началом программы Customer Preview Program (CPP) для Windows Vista® Service Pack 2 (SP2) хотелось бы вкратце рассказать об основных особенностях этого пакета, а также призвать вас к его загрузке и тестированию. Windows Vista SP2 представляет собой традиционный пакет сервисных обновлений, включающий все накопительные обновления безопасности, выпущенные с момента релиза SP1 в марте 2008 года. Кроме того, Windows Vista SP2 добавляет поддержку новых типов устройств и развивающихся стандартов, которые обретут популярность уже в ближайшее время, и включает все хотфиксы, обнаруженные через программу улучшения качества ПО (CEIP).


Подробнее... | Рубрика: Windows Vista | Добавлено: 05.12.2008

Остальные статьи:

Вышел MySQL 5.1.30, первый стабильный рели...
Тестирование параллельных программ
Архитектура AMD64 (EM64T)
Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия