Поиск на сайте: Расширенный поиск


Новые программы oszone.net Читать ленту новостей RSS
CheckBootSpeed - это диагностический пакет на основе скриптов PowerShell, создающий отчет о скорости загрузки Windows 7 ...
Вы когда-нибудь хотели создать установочный диск Windows, который бы автоматически установил систему, не задавая вопросо...
Если после установки Windows XP у вас перестала загружаться Windows Vista или Windows 7, вам необходимо восстановить заг...
Программа подготовки документов и ведения учетных и отчетных данных по командировкам. Используются формы, утвержденные п...
Red Button – это мощная утилита для оптимизации и очистки всех актуальных клиентских версий операционной системы Windows...
OSzone.net Видео Unix Интернет Firewall Основы работы с iptables в Linux RSS

Основы работы с iptables в Linux

Текущий рейтинг: 3 (проголосовало 15)
 Посетителей: 9079 | Просмотров: 13610 (сегодня 0)  Шрифт: - +

iptables - встроенный в ядро брандмауэр

При написании использовался Iptables Tutorial http://gazette.linux.ru.net/rus/articles/iptables-tutorial.html

Во все ядра 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 --dport --sport -s -d -i - только для INPUT --icmp-type - только для icmp

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

Теперь разберем, как составляются простые правила, на примере моих настроек. Замечу, что это настройки для одинокой машины без локальной сети с доступом в Интернет по диалапу, так что:

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

б) абсолютное большинство входящих соединений будет запрещено;

в) будет открыт лишь 21-й TCP-порт, необходимый для FTP.

Итак, рассмотрим мой /etc/rc.d/rc.firewall. Заметьте, что вложенные цепочки описываются снизу вверх, т.е. стандартные INPUT и OUTPUT будут описаны в конце.

 

         #!/bin/sh

# для удобства, особенно если интерфейсов несколько
INET_IFACE="ppp0"
# тоже для удобства
IPTABLES="/sbin/iptables"
# включаем пересылку пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward

# стандартные действия
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD DROP

# удаляем все имеющиеся правила
$IPTABLES -F
$IPTABLES -X
# создаем свои цепочки
# отбрасываем tcp с неправильными флагами
$IPTABLES -N bad_tcp_packets
# tcp, прошедшие основную проверку
$IPTABLES -N allowed
# все пакеты соотв. протоколов
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets

# безусловно разрешаем соединения по локальному интерфейсу (loopback, 127.0.0.1)
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# сюда пойдут все tcp-пакеты, и будут отброшены имеющие статус NEW, но не имеющие флагов SYN,ACK
# предохраняет от определенных типов атак, подробности в приложении B4 к Iptables Tutorial
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP

# принимаем все пакеты, относящиеся к уже установленным соединениям
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
# а все остальные из этой цепочки сбрасываем
$IPTABLES -A allowed -j DROP

# здесь можно открыть некоторые порты, т.к. по умолчанию мы закрыли всё
# открываем 21-й tcp (File Transfer Protocol [Control])
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
# и принимаем входящие с 53-го udp (Domain Name Server)
$IPTABLES -A udp_packets -p UDP -s 0/0 --sport 53 -j ACCEPT

# настал черед ICMP
# разрешаем необходимые типы
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 3 -j ACCEPT # Dest unreachable
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT # Time exceeded
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 12 -j ACCEPT # Parameter problem
# и отбрасываем пинг (в принципе, он и так отбрасывается действием
# по умолчанию, но это правило для возможного редактирования)
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j DROP # Ping
# следующим правилом можно заменить предыдущее, тогда при пинговании
# нашей машины вместо сообщения о таймауте будет приходить сообщение
# Host unreachable
#$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j REJECT --reject-with icmp-host-unreachable

# разводим пакеты по соотв. цепочкам
# tcp уходит на доп. проверку
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
# все пакеты, относящиеся к уже установленным соединениям (для tcp
# из-за отдельной цепочки пришлось это правило еще раз указать выше)
$IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets



Вот и всё, собственно. Вообще iptables имеет огромное количество настроек фильтрации и маршрутизации, особенно необходимых для брандмауэра в локальной сети. Кроме того, не были рассмотрены возможности по отслеживанию пакетов с помощью syslog. За более подробной информацией отсылаю к вышеупомянутому Iptables Tutorial и другой документации в Интернете.

При частичной или полной перепечатке, переводе, переработке материалов cайта ссылка на http://linux.su/ обязательна (c) Linux.su 2003/04

Иcточник: http://knoppix.ru/  •  Опубликована: 05.03.2005
Нашли ошибку в тексте? Сообщите о ней автору: выделите мышкой и нажмите CTRL + ENTER
Теги:  


Оценить статью:
Вверх
Комментарии посетителей
Комментарии отключены. С вопросами по статьям обращайтесь в форум.