|
![]() ЛУЧШЕЕ ИЗ ЛУЧШЕГО
![]()
- Knoppix - ДЛЯ ДЕЛА: ПРОФИ
- Debian - ДЛЯ ДЕЛА: ЛЁГКИЕ
- Moblin - ЗАЩИТА
- BackTrack/WHAX - МУЛЬТИМЕДИЯ
- 64 Studio - ПРИЛОЖЕНИЯ
- OpenDisc - ДЛЯ ЗАБАВЫ
- Линукс Геймер - ЭКСПЕРИМЕНТ
- GoboLinux - РОДНЯ
- OpenSolaris -
![]()
(2003 - 2010) ![]() ![]() ![]() ![]()
ПИНГВИН В КАРМАНЕ ![]() ![]() ![]() ![]() ![]() ![]() корректор ![]() |
При написании использовался Iptables Tutorial Во все ядра Linux, начиная с 2.0, встроено средство для фильтрации сетевых пакетов. В 2.0 это ipfwadm, в 2.2 - ipchains, а в 2.4 и 2.6 - iptables. Мы будем рассматривать последний вариант. Принцип фильтрации такой: когда через ядро проходит пакет, он проверяется на совпадение с одним или несколькими правилами. При этом в зависимости от этих правил он может быть пропущен (ACCEPT), отброшен (DROP) или отклонен (REJECT). Кроме того, он может быть отправлен на проверку в следующую цепочку правил. Здесь же можно указать, что факт прохождения пакета, подходящего под определенное правило, должен быть отмечен в syslog. Правила могут включать в себя проверку адреса/порта источника/получателя, протокола, флагов TCP и т.д. (об этом ниже). Для изменения используемого набора правил используется программа, которая так и называется - iptables (думаю, она есть в Вашем дистрибутиве). Все правила хранятся в памяти ядра и при перезагрузке сбрасываются. Поэтому необходимо создать файл конфигурации, из которого правила фильтрации будут считываться при загрузке машины. Обычно это /etc/rc.d/rc.firewall. Это обычный скрипт оболочки, который вызывает /sbin/iptables с определенными параметрами, соответствующими составленным правилам. Поэтому в большинстве дистрибутивов для изменения конфигурации iptables необходимо отредактировать указанный файл и запустить его (этот файл, как правило, автоматически выполняется при загрузке машины). После чего можно посмотреть обновленную таблицу правил командой iptables -L. Теперь более подробно. Изначально существуют 3 цепочки, через которые пакеты входят на фильтрацию. INPUT - для входящих пакетов, OUTPUT для исходящих и FORWARD для проходящих через данную машину к другой. Пакет, прошедший соответствующую цепочку, обычно (кроме совсем простых конфигураций) на основании некоторых правил отправляется в другую (в частности, мы будем сортировать пакеты по протоколу на 3 цепочки: tcp, udp и icmp). "По дороге" часть пакетов отбрасывается (на разных этапах по разным причинам), часть (опять же лишь подходящие под определенные правила) успешно выходит из фильтра. Оставшиеся (не подошедшие ни под одно правило) следуют действию по умолчанию для этой цепочки. Обычно таким действием делают DROP или REJECT, чтобы пропускать лишь пакеты, подошедшие под вполне определенные правила. Кстати, REJECT отличается тем, что вместо простого уничтожения пакета его отправителю присылается сообщение о недоступности компьютера получателя. Это создает дополнительный траффик, но в соответствующих случаях приводит к тому, что отправитель перестает посылать нам пакеты (DROP выглядит для отправителя как таймаут, т.е. пакеты просто уходят и не приходит никакого подтверждения, а при REJECT он может посчитать, что наш комьютер недоступен или не существует).
Рассмотрим синтаксис основных команд. Здесь <действие> - ACCEPT, DROP или REJECT. Установка действия по умолчанию для стандартной цепочки: iptables -P <цепочка> <действие> Создание цепочки: iptables -N <имя цепочки> Добавление правила в цепочку: iptables -A <имя цепочки> <условия> -j <имя другой цепочки или действие> Условия могут быть в т.ч. следующие: -p <протокол: TCP, UDP, ICMP>
При этом допустимо между ключом и значением ставить знак !, означающий инверсию. В одном правиле может быть сразу несколько условий. Теперь разберем, как составляются простые правила, на примере моих настроек. Замечу, что это настройки для одинокой машины без локальной сети с доступом в Интернет по диалапу, так что:
Итак, рассмотрим мой /etc/rc.d/rc.firewall. Заметьте, что вложенные цепочки описываются снизу вверх, т.е. стандартные INPUT и OUTPUT будут описаны в конце. #!/bin/sh
# стандартные действия
# удаляем все имеющиеся правила
# создаем свои цепочки
# безусловно разрешаем соединения по локальному интерфейсу (loopback, 127.0.0.1)
# сюда пойдут все tcp-пакеты, и будут отброшены имеющие статус NEW, но не имеющие флагов SYN,ACK
# принимаем все пакеты, относящиеся к уже установленным соединениям
# а все остальные из этой цепочки сбрасываем
# здесь можно открыть некоторые порты, т.к. по умолчанию мы закрыли всё
# настал черед ICMP
# разводим пакеты по соотв. цепочкам
Вот и всё, собственно. Вообще iptables имеет огромное количество настроек фильтрации и маршрутизации, особенно необходимых для брандмауэра в локальной сети. Кроме того, не были рассмотрены возможности по отслеживанию пакетов с помощью syslog. За более подробной информацией отсылаю к вышеупомянутому Iptables Tutorial и другой документации в Интернете. |
|||||||||||||||||||||||||||||||||||
|
материалов cайта ссылка на Knoppix.ru обязательна (c) Knoppix.ru 2003 - 10 |
||||||||||||||||||||||||||||||||||||