Настройка iptables для начинающих
Материал из Википедии - свободной энциклопедии.
- Вернутся в раздел руководства
Содержание |
Введение
В сети мало документации по iptables рассчитанной на новичков. Мы же попытаемся восполнить этот пробел. Рассмотрим основы составления правил, а также некоторые дополнительные модули которые помогут сделать жизнь легче.
Прежде чем двигаться дальше - убедитесь, что ...
- Всё ваше аппаратное обеспечение работоспособно. То есть Вы подключили все оборудование, модули грузятся, устройства видны в системе. Полезно в начале проверить, что соединение с интернетом возможно и без всяких там iptables. Нет ничего хуже, чем в течении многих часов возиться с упрямой программой, ругая её почём зря, а потом понять, что сетевая карта не работает или модем сконфигурирован неправильно.
- Вы имеете представление о сетевых технологиях и Вы знакомы с администрированием 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 - новый пакет уже установленном соединении.