Настраивая роутер 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», в противном — прийдется его перепрошивать.
Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:
Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)
Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455
На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел