четверг, 26 июня 2014 г.

Маршрутизация в linux. Iptables

Практика:
iptables --list
\\ просмотр всей таблицы маршрутизации

iptables -A INPUT -s 85.25.71.227 -j REJECT
\\ добавить по ключу А (append) в хвост таблицы правило о Входящих пакетах. Цель правила указывают с помощью -j.
  
    Наиболее часто используемыми действиями являются:
  • ACCEPT - если пакет совпадает с правилом, он будет принят.
  • REJECT - отклонить пакет и отправить ICMP-сообщение об ошиб­ке назад отправителю.
  • DROP - отбросить пакет и ничего не посылать в ответ.
  • LOG - протоколировать детали пакета, если пакет совпадает с правилом. Данное действие является пассивным - нужно оп­ределить еще одно действие ACCEPT/DROP, если нужно, чтобы пакет был принят/отброшен.
iptables --flush OUTPUT
\\ сброс настроек таблицы маршрутизации сессии на Выходе;

service iptables save
\\ команда для сохранения правил. Ибо после перезагрузки правила обнулятся.
 
Теория:
1. Основы;
2. Таблицы (table);
3. Команды (command);

Основы
Как уже говорилось выше, каждое правило — это строка, содержащая в себе критерии определяющие, подпадает ли пакет под заданное правило, и действие, которое необходимо выполнить в случае выполнения критерия. В общем виде правила записываются примерно так:
iptables [-t table] command [match] [target/jump]
Нигде не утверждается, что описание действия (target/jump) должно стоять последним в строке, мы, однако, будем придерживаться именно такой нотации для удобочитаемости.
Если в правило не включается спецификатор [-t table], то по умолчанию предполагается использование таблицы filter, если же предполагается использование другой таблицы, то это требуется указать явно. Спецификатор таблицы так же можно указывать в любом месте строки правила, однако более или менее стандартом считается указание таблицы в начале правила.
Далее, непосредственно за именем таблицы, должна стоять команда. Если спецификатора таблицы нет, то команда всегда должна стоять первой. Команда определяет действие iptables, например: вставить правило, или добавить правило в конец цепочки, или удалить правило и т.п.
Раздел matches задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет. Здесь мы можем указать самые разные критерии — и IP-адрес источника пакета или сети, и сетевой интерфейс и т.д. Существует множество критериев, которые мы рассмотрим в данной главе.
И наконец target указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, "сбросить" пакет и забыть про него, выдать на источник сообщение об ошибке и т.п.

Таблицы
Опция -t указывает на используемую таблицу. По умолчанию используется таблица filter. С ключом -t применяются следующие опции.
nat       Таблица nat используется главным образом для преобразования сетевых адресов (Network Address Translation). Через эту таблицу проходит только первый пакет из потока. Преобразования адресов автоматически применяется ко всем последующим пакетам. Это один из факторов, исходя из которых мы не должны осуществлять какую-либо фильтрацию в этой таблице. Цепочка PREROUTING используется для внесения изменений в пакеты на входе в брандмауэр. Цепочка OUTPUT используется для преобразования пакетов, созданных приложениями внутри брандмауэра, перед принятием решения о маршрутизации. Обратите внимание на то, что в настоящее время эта цепочка не работает. И последняя цепочка в этой таблице — POSTROUTING, которая используется для преобразования пакетов перед выдачей их во вне.
mangle            Эта таблица используется для внесения изменений в заголовки пакетов. Примером может служить изменение поля TTL, TOS или MARK. Важно: в действительности поле MARK не изменяется, но в памяти ядра заводится структура, которая сопровождает данный пакет все время его прохождения через машину, так что другие правила и приложения на данной машине (и только на данной машине) могут использовать это поле в своих целях. Таблица имеет две цепочки PREROUTING и OUTPUT. PREROUTING используется для внесения изменений на входе в брандмауэр перед принятием решения о маршрутизации. OUTPUT — для внесения изменений в пакеты, поступающие от приложений внутри брандмауэра. Заметьте, что таблица mangle ни в коем случае не должна использоваться для преобразования сетевых адресов или маскарадинга (Network Address Translation, Masquerading), поскольку для этих целей имеется таблица nat.
filter    Таблица filter используется главным образом для фильтрации пакетов. Для примера, здесь мы можем выполнить DROP, LOG, ACCEPT или REJECT без каких либо сложностей, как в других таблицах. Имеется три встроенных цепочки. Первая — FORWARD, используемая для фильтрации пакетов, идущих транзитом через брандмауэр. Цепочку INPUT проходят пакеты, которые предназначены локальным приложениям (брандмауэру). И цепочка OUTPUT — используется для фильтрации исходящих пакетов, сгенерированных приложениями на самом брандмауэре.
Выше мы рассмотрели основные отличия трех имеющихся таблиц. Каждая из них должна использоваться только в своих целях, и вы должны это понимать. Нецелевое использование таблиц может привести к ослаблению защиты брандмауэра и сети, находящейся за ним. Позднее, в главе Порядок прохождения таблиц и цепочек, мы подробнее остановимся на этом.

Команды
Ниже приводится список команд и правила их использования. Посредством команд мы сообщаем iptables что мы предполагаем сделать. Обычно предполагается одно из двух действий — это добавление нового правила в цепочку или удаление существующего правила из той или иной таблицы. Далее приведены команды, которые используются в iptables.
Пример
Пояснения
-A, —append
iptables -A INPUT ...
Добавляет новое правило в конец заданной цепочки.
-D, —delete
iptables -D INPUT —dport 80 -j DROP, iptables -D INPUT 1
Удаление правила из цепочки. Команда имеет два формата записи, первый — когда задается критерий сравнения с опцией -D (см. первый пример), второй — порядковый номер правила. Если задается критерий сравнения, то удаляется правило, которое имеет в себе этот критерий, если задается номер правила, то будет удалено правило с заданным номером. Счет правил в цепочках начинается с 1.
-R, —replace
iptables -R INPUT 1 -s 192.168.0.1 -j DROP
Данная команда заменяет одно правило другим. В основном она используется во время отладки новых правил.
-I, —insert
iptables -I INPUT 1 —dport 80 -j ACCEPT
Вставляет новое правило в цепочку. Число, следующее за именем цепочки указывает номер правила, перед которым нужно вставить новое правило, другими словами число задает номер для вставляемого правила. В примере выше, указывается, что данное правило должно быть 1-м в цепочке INPUT.
-L, —list
iptables -L INPUT
Вывод списка правил в заданной цепочке, в данном примере предполагается вывод правил из цепочки INPUT. Если имя цепочки не указывается, то выводится список правил для всех цепочек. Формат вывода зависит от наличия дополнительных ключей в команде, например -n, -v, и пр.
-F, —flush
iptables -F INPUT
Сброс (удаление) всех правил из заданной цепочки (таблицы). Если имя цепочки и таблицы не указывается, то удаляются все правила, во всех цепочках.
-Z, —zero
iptables -Z INPUT
Обнуление всех счетчиков в заданной цепочке. Если имя цепочки не указывается, то подразумеваются все цепочки. При использовании ключа -v совместно с командой -L, на вывод будут поданы и состояния счетчиков пакетов, попавших под действие каждого правила. Допускается совместное использование команд -L и -Z. В этом случае будет выдан сначала список правил со счетчиками, а затем произойдет обнуление счетчиков.
-N, —new-chain
iptables -N allowed
Создается новая цепочка с заданным именем в заданной таблице В выше приведенном примере создается новая цепочка с именем allowed. Имя цепочки должно быть уникальным и не должно совпадать с зарезервированными именами цепочек и действий (DROP, REJECT и т.п.)
-X, —delete-chain
iptables -X allowed
Удаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил и не должно быть ссылок из других цепочек на удаляемую цепочку. Если имя цепочки не указано, то будут удалены все цепочки, определенные командой -N в заданной таблице.
-P, —policy
iptables -P INPUT DROP
Определяет политику по умолчанию для заданной цепочки. Политика по умолчанию определяет действие, применяемое к пакетам не попавшим под действие ни одного из правил в цепочке. В качестве политики по умолчанию допускается использовать DROP, ACCEPT и REJECT.
-E, —rename-chain
iptables -E allowed disallowed
Команда -E выполняет переименование пользовательской цепочки. В примере цепочка allowed будет переименована в цепочку disallowed. Эти переименования не изменяют порядок работы, а носят только косметический характер.
Команда должна быть указана всегда. Список доступных команд можно просмотреть с помощью команды iptables -h или, что тоже самое, iptables —help. Некоторые команды могут использоваться совместно с дополнительными ключами. Ниже приводится список дополнительных ключей и описывается результат их действия. При этом заметьте, что здесь не приводится дополнительных ключей, которые используются при построении критериев (matches) или действий (targets). Эти опции мы будем обсуждать далее.
Команды, с которыми используется
Описание
-v, —verbose
—list, —append, —insert, —delete, —replace
Данный ключ используется для повышения информативности вывода и, как правило, используется совместно с командой —list. В случае использования с командой —list, в вывод этой команды включаются так же имя интерфейса, счетчики пакетов и байт для каждого правила. Формат вывода счетчиков предполагает вывод кроме цифр числа еще и символьные множители K (x1000), M (x1,000,000) и G (x1,000,000,000). Для того, чтобы заставить команду —list выводить полное число (без употребления множителей) требуется применять ключ -x, который описан ниже. Если ключ -v, —verbose используется с командами —append, —insert, —delete или —replace, то то на вывод будет выдан подробный отчет о произведенной операции.
-x, —exact
—list
Для всех чисел в выходных данных выводятся их точные значения без округления и без применения множителей K, M, G. Важно то, что данный ключ используется только с командой —list и не применяется с другими командами.
-n, —numeric
—list
Заставляет iptables выводить IP-адреса и номера портов в числовом виде предотвращая попытки преобразовать их в символические имена. Данный ключ используется только с командой —list.
—line-numbers
—list
Ключ —line-numbers включает режим вывода номеров строк при отображении списка правил командой —list. Номер строки соответствует позиции правила в цепочке. Этот ключ используется только с командой —list.
-c, —set-counters
—insert, —append, —replace
Этот ключ используется при создании нового правила для установки счетчиков пакетов и байт в заданное значение. Например, ключ —set-counters 20 4000установит счетчик пакетов = 20, а счетчик байт = 4000.
—modprobe
All
Ключ —modprobe определяет команду загрузки модуля ядра. Данный ключ используется в случае, если ваша команда modprobe находится вне пути поиска (searchpath). Этот ключ может использоваться с любой командой.

Маршрутизация в linux. Forward, default, stateful firewall

Комментариев нет:

Отправить комментарий

SEO: Эксперимент: как Яндекс и Google учитывают ключевые слова в URL

Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Эксперимент: как Яндекс и Google учитывают ключевые слова в URL Дата пу...