Настройка iptables для начинающих

Материал из Википедии - свободной энциклопедии.

Вернутся в раздел руководства


Содержание

Введение

В сети мало документации по iptables рассчитанной на новичков. Мы же попытаемся восполнить этот пробел. Рассмотрим основы составления правил, а также некоторые дополнительные модули которые помогут сделать жизнь легче.

Прежде чем двигаться дальше - убедитесь, что ...

  1. Всё ваше аппаратное обеспечение работоспособно. То есть Вы подключили все оборудование, модули грузятся, устройства видны в системе. Полезно в начале проверить, что соединение с интернетом возможно и без всяких там iptables. Нет ничего хуже, чем в течении многих часов возиться с упрямой программой, ругая её почём зря, а потом понять, что сетевая карта не работает или модем сконфигурирован неправильно.
  2. Вы имеете представление о сетевых технологиях и Вы знакомы с администрированием Linux и Gentoo Linux в частности. То есть необходимы навыки работы с такими базовыми вещами как ifconfig, rc-update, /etc/conf.d/net, и так далее. Если для Вас это пока пустые звуки, то, пожалуйста предварительно изучите The Gentoo Handbook (http://www.gentoo.org/doc/en/handbook/index.xml) и Linux Help's Networking Basics 101 (http://www.linuxhelp.ca/guides/networkbasics/)

Конфигурация ядра ОС Linux

Все что вам нужно - это включить поддержку iptables.

Device Drivers--->
 Networking Support--->
  Networking Options---->
   Network Packet Filtering (replace Ipchains)--->
    Netfilter Configuration
Включим все опции как модули (хотя с точки зрения безопасности модули следует вообще отключить, монолитное ядро надежнее, хотя и медленнее).

Установка iptables

Далее вы должны установить пакет iptables:

emerge iptables

Проверка сети

Предположим, что у нас есть 2 сетевых интерфейса: eth0 - локальная сеть и ppp0 - интернет соединение.

Проверим работоспособность сети командой ping:

Code: ping
ping www.google.com
ping 192.168.1.78 
ping 192.168.2.77


Запуск iptables

Запустим iptables:

/etc/init.d/iptables start

Эта команда загрузит основные модули и создаст цепочки в ядре Linux. Теперь добавим iptables в автозагрузку:

rc-update add iptables default

Использование /etc/init.d/iptables

Скрипт /etc/init.d/iptables понимает несколько команд (/etc/init.d/iptables <команда>), некоторые из них:

  • start - запуск iptables. Восстанавливает все правила (правила хранятся в /var/lib/iptables/rules-save);
  • stop - сброс всех цепочек;
  • save - сохранение всех правил.

Создание правил

Практически все правила можно привести к виду:

iptables -A ЦЕПОЧКА ПАРАМЕТРЫ_ПАКЕТА -j ДЕЙСТВИЕ

Цепочки

Все изменения будем проводить над таблицей filter, именно она отвечает за фильтрацию пакетов. В таблице filter существует 3 цепочки: INPUT, OUTPUT и FORWARD. В каждой цепочки свой "тип" пакетов:

  • INPUT - пакеты пришедшие к Вам. То есть входящий трафик.
  • FORWARD - пакеты которые предназначены для другого узла, то есть транзитный трафик.
  • OUTPUT - пакеты, которые уходят от нас, или исходящий трафик.

Работают с цепочками так:

iptables <опция> <цепочка>

Для работы с цепочками предусмотрены следующие опции:

  • -A - добавление нового правила в цепочку. Правило будет добавлено в конец цепочки.
  • -I - добавление правила не в конец,а туда куда вы укажите. Например команда:
iptables -I INPUT 2 bla-bla-bla - сделает наше правило вторым.
  • -D - удаление правила. Например для удаления пятого правила введите:
iptables -D INPUT 5
  • -F - сброс всех правил цепочки. Нужно, например,при удалении ненужной цепочки.
  • -N - создание пользовательской цепочки. Если не хотите создавать кашу в каждой цепочке, то создайте несколько дополнительных цепочек. Синтаксис такой:
iptables -N ЦЕПОЧКА. Только русские буквы, конечно, использовать нельзя.
  • -X - удаление пользовательской цепочки.

ПРИМЕЧАНИЕ: Удалить цепочки INPUT, OUTPUT и FORWARD нельзя.

  • -P - установка политики для цепочки. Например:
iptables -P ЦЕПОЧКА ПОЛИТИКА

Параметры пакетов

Итак по каким параметрам можно фильтровать пакеты? Рассмотрим самые основные.

Источник пакета

Для фильтрации по источнику используется опция -s. Например запретим все входящие пакеты с узла 192.168.133.133:

iptables -A INPUT -s 192.168.133.133 -j DROP

Можно использовать доменное имя для указания адреса хоста. То есть:

iptables -A INPUT -s test.host.jp -j DROP

Также можно указать целую подсеть:

iptables -A INPUT -s 192.168.133.0/24 -j DROP

Также вы можете использовать отрицание (знак !). Например так - все пакеты с хостов отличных от 192.168.133.156 будут уничтожаться:

iptables -A INPUT -s ! 192.168.133.156 -j DROP

Адрес назначения

Для этого нужно использовать опцию -d. Например запретим все исходящие пакеты на хост 192.168.156.156:

iptables -A OUTPUT -d 192.168.156.156 -j DROP

Как и в случае с источником пакета можно использовать адреса подсети и доменные имена. Отрицание также работает.

Протокол

Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp.

Порт источника

Указывает на порт с которого был прислан пакет. Вот синтаксис:

iptables -A INPUT -p tcp --sport 80 -j ACCEPT

Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.

Порт назначения

Порт назначения. Синтаксис:

iptables -A INPUT --dport 80 -j ACCEPT

Как и в случае с портом источника нужно указать протокол. Можно использовать отрицание.

Действия над пакетами

Проку от того,что мы укажем параметры пакета нет.Нужно указать,что надо с ним надо делать. Для этого служит опция -j. Рассмотрим основные действия:

  • ACCEPT - разрешить пакет.
  • DROP - уничтожить пакет.
  • REJECT - будет отправлено ICMP сообщение, что порт недоступен.
  • LOG - информация об этом пакете будет добавлена в системный журнал (syslog).

В качестве действия можно указать и имя пользовательской цепочки. Например перекинем все пакеты с локальной сети в цепочку, где будет производиться дополнительная проверка:

iptables -A INPUT -s 192.168.200.0/24 -j LOCAL_NET

Пример правил

В большинстве случаев пользователю достаточно выполнить такую последовательность комманд:

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -P INPUT DROP

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

Модули

Может сложиться впечатление, что возможностей у iptables маловато. Однако с использованием модулей iptables получит просто безграничные возможности. Для указания модуля используется опция -m. Например:

iptables -A INPUT -m модуль bla-bla

-m owner

Добавляет следующие опции (опции только для цепочки OUTPUT):

  • --uid-owner UID - UID программы пославшей пакет.
  • --gid-owner GID - GID прораммы пославшей пакет.
  • --pid-owner PID - PID программы пославшей пакет.
  • --sid-owner SID - SID (идентификатор сессии) производится проверка SID пакета, значение SID наследуются дочерними процессами от "родителя".
  • --cmd-owner NAME - имя программы пославшей пакет.

-m multiport

Позволяет указывать не по одному порту, а сразу несколько:

  • --source-ports порт1,порт2 - список портов, с которых пришел пакет;
  • --sports порт1,порт2 - укороченый аналог --source-ports;
  • --destination-ports порт1,порт2 - список портов назначения;
  • --dports порт1,порт2 - укороченый аналог --destination-ports;
  • --ports порт1,порт2 - проверяет как исходящий так и входящий порт пакета.

-m state

Предназначен для указания состояния пакета с помощью опции --state. Доступны следующие типы пакетов:

  • NEW - новый пакет.
  • ESTABLISHED - пакет от уже установленного соединения.
  • RELATED - новый пакет уже установленном соединении.
advertisement