Настраивая роутер dir-320 с прошивкой dd-wrt, обнаружил что у него есть фаервол iptables, о котором и пойдет речь.

Основное смысл который заложен в данный фаервол звучит примерно так:
Когда применяется первое правило удовлетворяющее критерию, то для действий ACCEPT, DROP, REJECT обработка правил приостанавливается. Для остальных условий идет поиск подходящего правила.
Как то так.

Скрипт iptables понимает несколько команд.
Синтаксис: iptables <команда>, вот некоторые из них:

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

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

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

Цепочки в iptables:

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

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

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

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

Для работы с цепочками предусмотрены следующие опции:
-A — добавление нового правила в цепочку. Правило будет добавлено в конец цепочки.
-I — добавление правила не в конец, а туда куда вы укажите. Например команда:

iptables -I INPUT 2 bla-bla-bla-bla - сделает наше правило вторым.

-D — удаление правила. Например для удаления пятого правила введите:

iptables -D INPUT 5

-F — сброс всех правил цепочки. Нужно, например,при удалении ненужной цепочки.
-N — создание пользовательской цепочки. Если не хотите создавать кашу в каждой цепочке, то создайте несколько дополнительных цепочек. Синтаксис такой:

 iptables -N ЦЕПОЧКА.

Только русские буквы, конечно, использовать нельзя.
-X — удаление пользовательской цепочки.
На заметку: Удалить цепочки INPUT, OUTPUT и FORWARD нельзя.
-P — установка политики для цепочки. Например:

iptables -P ЦЕПОЧКА ПОЛИТИКА

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

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

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

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

iptables -A INPUT -s 192.168.1.111 -j DROP

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

iptables -A INPUT -s test.domain.pp.ua -j DROP

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

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

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

iptables -A INPUT ! -s 192.168.1.33 -j DROP

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

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

iptables -A OUTPUT -d 192.168.1.66 -j DROP

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

Протокол.

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

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

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

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

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

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

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

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

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

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

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

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

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

iptables -A INPUT -s 192.168.00.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-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 — новый пакет уже на установленном соединении.

-m mac

Проверяет соответствие MAC-адреса в пакете с помощью опции —mac-source, например:

iptables -A INPUT -s 192.168.0.1 -m mac --mac-source 00:57:fF:D2:11:87 -j DROP

Ещё примеры из жизни:

Втавить в конец цепочки правило блокирующее трафик с IP 1.2.3.1:

iptables -A INPUT -i eth0 -s 1.2.3.1 -j DROP

Вставить первым разрешающее правило для подсети 192.168.0.0/24:

iptables -I INPUT 1 -i eth0 -s 192.168.0.0/24 -j ACCEPT

Разрешить весь входящий трафик по loopback:

iptables -I INPUT 1 -i lo -j ACCEPT

Пример использования указания протокола tcp,udp,icmp,all, адреса назначения, порта источника/назначения. Где адрес 1.2.3.1, порт 3389.

iptables -A INPUT -p tcp -d 1.2.3.1 --sport 3389 --dport 22 -j DROP

Разрешить входящие подключения на веб-сервер, порты 80 и 443:

iptables -A INPUT -i eth0 -p TCP -m multiport --dports 80,443 -j ACCEPT

Разрешить трафик по уже установленным соединениям:

iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Разрешаем входящие эхо-запросы:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Удалить правило по критерю:

iptables -D INPUT --dport 80 -j DROP

Листинг правил с номерами:

iptables -L POSTROUTING -t nat -n -v --line-numbers
iptables -L FORWARD -n -v --line-numbers

Удаляем правило по номеру (нумеруются с 1, цепочку надо указывать)

iptables -D INPUT 1
iptables -D FORWARD 55
iptables -t nat -D POSTROUTING 15

Листинг всех правил во всех цепочках без резолва

iptables -L -n

Листинг правил из цепочки

iptables -L INPUT

Очистка всех правил:

iptables -F

Очистка правил в цепочке:

iptables -F INPUT

Добавление новой цепочки

iptables -N samplechain

Удаление заданной цепочки

iptables -X samplechain

Политика по умолчанию для цепочки INPUT устанавливается в ACCEPT

iptables -P INPUT ACCEPT

Фух, аж мозги закипели, надеюсь что только у меня.. 😉

Вот, это информация для ознакомления и все действия произведённые над вашим iptables в dir-320 делайте аккуратно, иначе рискуете остаться без доступа к нему. В этом случае, если Вы не сохранили правила, то достаточно будет перезагрузить роутер кнопкой «reset», в противном — прийдется его перепрошивать.

Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:

http://noted.org.ua/1457


Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)

Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455

На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел

Add your comment now

Please note: JavaScript is required to post comments.