CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Лед и пламя

Сергей ЯРЕМЧУК grinder@ua.fm

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

Я, конечно, не думаю, что на компьютер рядового пользователя будет охотиться какая-нибудь хакерская группа, но из простого любопытства или по случайности очень даже может быть. Поэтому затронутая тема все же заслуживает внимания. Одним из способов защиты от несанкционированного доступа является применение firewall'а (другими словами, брандмауэра или межсетевого экрана) — программы, предназначенной для фильтрации сетевого трафика. Делается это с целью уменьшения вероятности несанкционированного проникновения из одной части Сети в другую, а также с целью ограничения доступа из внутренней сети к определенным ресурсам внешней (ну скажите, зачем в нормальном офисе доступ к чатам и развлекательным web-порталам?) Попутно такие программы могут обеспечивать блокировку рекламы и активного содержания web-страниц. Одним из вариантов атаки является негласная установка различных программ для удаленного управления или кражи паролей с компьютера жертвы (слово «троян», я думаю, знакомо многим) или более «легальный» вариант spyware — бесплатные программы, которые, как правило, собирают информацию о посещаемых страницах, ваших интересах и отправляют ее на сайт разработчика или передают другому пользователю компьютера.

Как же работают межсетевые экраны? Вся связь в Интернете реализована посредством протокола TCP/IP, а информация передается отдельными пакетами. Каждый из них должен содержать IP-адрес принимающей машины и номер порта, который определяет программу для обработки данного пакета. А так как некоторые сервисы могут одновременно работать с несколькими компьютерами (WWW, например), то в пакете должен содержаться также и адрес отправителя. В состав пакетов также входят т. н. АСК-биты (ACKnowledgement), подтверждающие прием предыдущих пакетов. Таким образом, пакеты, являющиеся частью уже установленного соединения могут проходить беспрепятственно, а остальные — обрабатываться брандмауэром.

От чего же не может защитить брандмауэр? Самое первое, что приходит в голову, это подделка адреса отправителя. И в самом деле, контролируя DNS или воспользовавшись одной из множества программ, запросто можно ввести брандмауэр в заблуждение. На более высоком уровне реализации атаки можно получить управление, попробовав подобрать значения ISN (Initial Seqence Number), которые формируются для каждого сеанса индивидуально, но благодаря особенностям реализации протокола в отдельно взятой ОС их практически без проблем можно вычислить (подобрать). Это позволит либо вклиниться в текущий сеанс, либо начать его от имени узла, которому доверяет защищаемый компьютер. Так же злоумышленник может вполне легально разместить исполняемый код, например, на web-странице, и, естественно, все пакеты, идущие оттуда, будут пропущены. Я не говорю уже о таких особенностях протокола TCP/IP как передача пароля в незашифрованном виде в таких сервисах как telnet, ftp и прочих, что, естественно, создает предпосылки для возможности их перехвата. И еще: протокол TCP разбивает длинное сообщение на более короткие фрагменты; брандмауэры рассматривают корректность только первого из них, а остальные пропускают беспрепятственно. Поэтому при посылке датаграммы, не содержащей информацию более высоких уровней, есть вероятность, что она будет принята как часть более длинного сообщения.

Теперь, когда мы разобрались с тем, что может и что не может firewall, давайте разберемся с конкретной реализацией. Начать я предлагаю с ОС Linux. Почему? Да потому что firewall поддерживается этой системой на уровне ядра, и пользователю необходимо только его настроить. При этом, конечно, много ручной работы, но в ходе задания правил фильтрации вы убедитесь, что в этом нет ничего сложного и непостижимого. Проверьте есть ли у вас файл /proc/net/ip_fwchains, если есть, то ядро уже настроено для работы. А если нет то необходимо пересобрать ядро и включить следующие параметры:

Для настройки фильтрации в Linux с версии 2.2 служит программа ipchains, до того применялась программа ipfwadm. Примечательно, что эти две программы полностью различаются по синтаксису. Мы будем использовать ipchains, как более современную, тем более, пропатчив ядро, можно будет использовать ее и в более старых версиях. К пакетам в данной программе применяется набор правил (цепочка). Небольшое уточнение: правилом обрабатывается только первый пакет, без него невозможно будет собрать все фрагменты. Структуру правила коротко можно охарактеризовать так: если пакет совпадает с описанием, то с ним нужно сделать то-то и то-то. Каждой цепочка имеет свою политику: что делать с пакетами по умолчанию, что делать с исключениями и каковы они. Существуют три встроенные в ipchains цепочки, которые должны быть всегда: input, forward и output (см. Рис. 1). Поступивший пакет проходит цепочки, правило за правилом, пока не будет обнаружено совпадение. Когда это произойдет, определится область применения. Областью применения может быть имя цепочки или специальное значение. Последнее Рис. 1может принимать одно из следующих значений:

ACCEPT — пакет принимается;

DENY — пакет отбрасывается, отправитель думает, что пакет не дошел до места назначения;

REJECT — то же, что и DENY, только отправителю отсылается ICMP-сообщение о недоступности узла назначения;

MASQ — замаскарадить: можно использовать только в случае, если ядро собрано с соответствующим параметром;

REDIRECT — пакет переадресовывается на определенный порт;

RETURN — переходит в конец цепочки без дальнейших проверок;

Определенные пользователем цепочки позволяют логически сгруппировать правила, они вызываются из встроенных. Имя пользовательской цепочки должно состоять из восьми символов нижнего регистра. При поступлении пакета на вход программы первым делом проверяется контрольная сумма — если она неправильная, то пакет, естественно, отбрасывается. Затем проверятся корректность некоторых полей в заголовке, неправильно сформированные пакеты отбрасываются и в системном журнале делается запись. Далее пакет проверяется по правилам входной цепочки. Если пакет не будет уничтожен или отвергнут, то следующим шагом, если необходимо, производится демаскарадинг (demasquerade) пакета, и он поступает в выходную цепочку. Если демаскарадинг не производится, то ядро пересылает пакет в local process, если пакет предназначен для этого компьютера, или в цепочку forward, после благополучного прохождения которой пакет поступает в цепочку output и покидает машину. Этот шаг обработки пакетов называется маршрутизацией (routing). Пакеты, просто сгенерированные локальными процессами, проходят только этапы маршрутизации и выходную цепочку. Пакеты, сгенерированные локальными процессами и адресованные на локальный интерфейс (loopback), проверяются на выходной цепочке по интерфейсу lo, а затем по тому же интерфейсу на входную цепочку.

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

Итак, включаем фильтр пакетов:

Сначала давайте выясним версию, установленную на компьютере:

У меня установлен Red Hat 7.3 2002 года и, как видите, программа давно не обновлялась.

Теперь давайте проверим прохождение ICMP-пакетов командой ping по внутреннему кольцу.

Теперь выполните следующую команду:

Как видите, пакет не прошел. Что же мы сделали? -A (add) — добавляется новое правило во входную цепочку input; после флага -s указывается исходный адрес (флаг -d предваряет адрес назначения), сетевая маска или порт, адрес 0/0 используется по умолчанию и соответствует всем адресам. Флаг -р означает протокол, здесь можно использовать параметр all — все протоколы, — или применять логическое инвертирование ! («все, кроме…») Так как icmp не использует никакие порты, то либо указывается имя icmp, либо номер типа. Последний можно узнать, если ввести /sbin/ipchains -h icmp (просто -h без указания типа выведет справку) — вы получите примерно такой список (сокращен):

Как видите, программой ping используется 0 и тип, тип 11 использует программа traceroute, — маршрутизация, а по типу передаются очень важные системные сообщения destination-unreachable. Отсюда вывод: ICMP-пакеты — это не только пинги, поэтому, полностью заблокировав их, вы можете сильно замедлить передачу данных. Тип 3 вообще не советую отключать.

Чтобы удалить правило, можно воспользоваться одним из двух вариантов: # ipchains -D input 1 (удаляет правило под номером 1 во входной цепочке) или # ipchains -D input -s 127.0.0.1 -p icmp -j DENY. В последнем примере мы просто заменили в -А на -D — такой вариант удобен, если вы не знаете номер или не хотите считать его. Если одинаковых правил несколько, то будет удалено только первое из них.

Исходный адрес и адрес назначения (после параметров -s и -d) может быть задан в одной из четырех форм:

в виде символического имени (localhost, www.linux.org);

в виде IP-адреса (127.0.0.1);

как IP-адрес с маской в виде четырех десятичных чисел (192.168.0.0/255.255.255.0);

в виде IP-адреса с битовой маской (192.168.0.0/24);

Последние два примера абсолютно идентичны по результату: они охватывают все узлы в диапазоне с 192.168.0.0 по 192.168.0.255.

Флаги -s и -d, как и -р, допускают инвертирование путем указания ! перед параметром. Например, так можно обозначить все пакеты, кроме пришедших с localhost: -s ! localhost. Протоколы могут указываться по номеру (см. файл /etc/protocols) или по имени. Вот так можно указать на все протоколы кроме TCP —-p ! TCP. Для протоколов UDP и TCP можно еще указать и номера портов в виде символического имени (например, www — cм. в /etc/services) или в виде десятичного номера (либо диапазона номеров — знак :. Например, 6000:6010 означает 11 портов в диапазоне с 6000 по 6010. Если опущена нижняя граница диапазона, то подразумевается 0 (например, :1024, означает все порты в диапазоне от 0 по 1024), аналогично пропущенная верхняя граница соответствует максимальному порту т. е. 65535. По умолчанию подразумеваются все порты. Естественно, и здесь можно использовать инверсию — например, так выделяются все TCP-пакеты, кроме пришедших на www (80 порт).

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov