Тарифы Услуги Сим-карты

Основы iptables на примере Debian глазами младенца. Ключевыми понятиями iptables являются

В этой статье мы рассмотрим порядок прохождения таблиц и цепочек в каждой таблице iptables. Информация будет полезна при составлении правил и даст понимание порядка прохождения пакета по всем таблицам и цепочкам iptables, особенно, когда в наборы правил будут включаться такие действия как DNAT, SNAT и TOS.

Пакет, приходящий на firewall сперва попадает на сетевое устройство, перехватывается драйвером и передается в ядро системы. Далее пакет проходит ряд таблиц и в зависимости от правил, находящихся в этих таблица, решается дальнейшая судьба.

Таблица 1. Порядок прохождения FORWARD пакетов

Шаг Таблица Цепочка Примечание
1 Кабель (т.е. Интернет)
2
3 Mangle PREROUTING Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр..
4 Nat PREROUTING Эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях
5 Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдет пакет — локальному приложению или на другой узел сети.
6 Filter FORWARD В цепочку FORWARD попадают только те пакеты, которые идут на другой хост Вся фильтрация транзитного трафика должна выполняться здесь. Не забывайте, что через эту цепочку проходит траффик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации.
7 Mangle FORWARD Далее пакет попадает в цепочку FORWARD> таблицы mangle, которая должна использоваться только в исключительных случаях, когда необходимо внести некоторые изменения в заголовок пакета между двумя точками принятия решения о маршрутизации.
8 Принятие решения о дальнейшей маршрутизации, т.е. в этой точке, к примеру, решается на какой интерфейс пойдет пакет.
9 Nat POSTROUTING Эта цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскировка (Masquerading).
10 Mangle POSTROUTING Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации.
11 Выходной сетевой интерфейс (например, eth1).
12 Кабель (пусть будет LAN).

Как вы можете видеть, пакет проходит несколько этапов, прежде чем он будет передан далее. На каждом из них пакет может быть остановлен, будь то цепочка iptables или что либо еще, но нас главным образом интересует iptables. Заметьте, что нет каких либо цепочек, специфичных для отдельных интерфейсов или чего либо подобного. Цепочку FORWARD проходят ВСЕ пакеты, которые движутся через наш firewall/роутер. Не используйте цепочку INPUT для фильтрации транзитных пакетов, они туда просто не попадают! Через эту цепочку движутся только те пакеты, которые предназначены данному хосту.

Таблица 2. Порядок движения INPUT пакетов

Шаг Таблица Цепочка Примечаниеt
1 Кабель (т.е. Интернет)
2 Входной сетевой интерфейс (например, eth0)
3 Mangle PREROUTING Обычно используется для внесения изменений в заголовок пакета, например для установки битов TOS и пр.
4 Nat PREROUTING Преобразование адресов (Destination Network Address Translation). Фильтрация пакетов здесь допускается только в исключительных случаях.
5 Принятие решения о маршрутизации.
6 Mangle INPUT Пакет попадает в цепочку INPUT таблицы mangle. Здесь внесятся изменения в заголовок пакета перед тем как он будет передан локальному приложению.
7 Filter INPUT Здесь производится фильтрация входящего трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
8 Локальный процесс/приложение

Пакеты OUTPUT имеют обратный порядок прохождения через таблицы. Порядок прохождения представлен в таблице 3.

Таблица 3. Порядок прохождения OUTPUT пакетов

Шаг Таблица Цепочка Примечание
1 Локальный процесс
2 Mangle OUTPUT Здесь производится внесение изменений в заголовок пакета. Фильтрация, выполняемая в этой цепочке, может иметь негативные последствия.
3 Nat OUTPUT Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра.
4 Filter OUTPUT Здесь фильтруется исходящий траффик.
5 Принятие решения о маршрутизации. Здесь решается — куда пойдет пакет дальше.
6 Nat POSTROUTING Здесь выполняется Source Network Address Translation (SNAT). Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP .
7 Mangle POSTROUTING Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра.
8 Сетевой интерфейс (например, eth0)
9 Кабель (т.е., Internet)

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

Этот рисунок дает довольно ясное представление о порядке прохождения пакетов через различные цепочки. В первой точке принятия решения о маршрутизации (routing decision) все пакеты, предназначенные данному хосту направляются в цепочку INPUT, остальные — в цепочку FORWARD.

Обратите внимание также на тот факт, что пакеты, с адресом назначения на брандмауэр, могут претерпеть трансляцию сетевого адреса (DNAT) в цепочке PREROUTING таблицы nat и соответственно дальнейшая маршрутизация в первой точке будет выполняться в зависимости от произведенных изменений.

В этой статье мы расскажем вам о том как настроить iptables на Linux. Вы узнаете что это такое и зачем нужно настраивать эту функцию. Настройка iptables на Linux является довольно простой.

Настройка iptables на Linux: Что такое iptables?

Iptables — утилита брандмауэра командной строки, которая использует цепную политику для разрешения или блокирования трафика. Когда соединение пытается установить себя в вашей системе, iptables ищет правило в своем списке, чтобы соответствовать ему. Если он не находит его, он прибегает к действию по умолчанию.

Iptables почти всегда поставляется с предустановленной версией на любом дистрибутиве Linux. Чтобы обновить / установить его, просто загрузите пакет iptables:

sudo apt-get install iptables

Есть GUI-альтернативы iptables, такие как Firestarter, но iptables не так уж и сложно, если вы выполните буквально несколько команд. Будьте предельно осторожными при настройке правил iptables, особенно если вы используете SSH’d на сервере, потому что одна неправильная команда может надолго заблокировать вас до тех пор, пока она не будет вручную зафиксирована на физической машине.

Настройка iptables на Linux для чайников

Кстати, ранее мы уже говорили о том, . Возможно это также вам будет интересно. Ссылку можно найти выше.

Настройка iptables на Linux как мы уже сказали выше, довольно простая. Но прежде чем начать, настройку, нужно ознакомиться с общими понятиями опции.

Типы цепей

В Iptables используются три разные цепи: ввод, пересылка и вывод.

Input — Эта цепочка используется для управления поведением входящих соединений. Например, если пользователь попытается установить SSH на ваш компьютер / сервер, iptables попытается сопоставить IP-адрес и порт с правилом в цепочке ввода.

Forward — эта цепочка используется для входящих соединений, которые фактически не доставляются локально. Думайте о роутере — данные всегда отправляются на него, но редко на самом деле предназначены для самого маршрутизатора; Данные просто перенаправляются на целевую страницу. Если вы не выполняете какую-либо маршрутизацию, NAT или что-то еще в вашей системе, которая требует пересылки, вы даже не будете использовать эту цепочку.

Существует один надежный способ проверить, использует ли ваша система или нуждается в цепочке прямой передачи.

Этот снимок экрана относится к серверу, который работает в течение нескольких недель и не имеет ограничений на входящие или исходящие подключения. Как вы можете видеть, цепочка ввода обработала 11 ГБ пакетов, а выходная цепочка обработала 17 ГБ. С другой стороны, прямой цепочке не нужно обрабатывать один пакет. Это связано с тем, что сервер не выполняет никаких пересылок или не используется в качестве сквозного устройства.

Вывод — эта цепочка используется для исходящих соединений. Например, если вы попытаетесь выполнить ping на сайте linuxinsider, iptables проверит свою цепочку вывода, чтобы узнать, какие правила касаются ping и linuxinsider, прежде чем принимать решение разрешить или запретить попытку подключения.

Предостережение

Несмотря на то, что проверка внешнего хоста выглядит как что-то, что нужно будет пройти только по выходной цепочке, имейте в виду, что для возврата данных также будет использоваться цепочка ввода. При использовании iptables для блокировки вашей системы помните, что для многих протоколов требуется двухсторонняя связь, поэтому необходимо правильно настроить как входные, так и выходные цепочки. SSH — это общий протокол, который люди забывают разрешать в обеих цепях.

Поведение политики по умолчанию

Прежде чем приступить к настройке определенных правил, вы должны решить, что вы хотите, чтобы поведение этих трех цепей по умолчанию. Другими словами, что вы хотите, чтобы iptables делал, если соединение не соответствует каким-либо существующим правилам?

Чтобы узнать, какие цепочки политик настроены для работы с непревзойденным трафиком, запустите команду iptables -L.

Как вы можете видеть, мы также использовали команду grep для получения более чистого результата. На этом скриншоте наши цепочки в настоящее время рассчитаны на прием трафика.

Больше времени, чем нет, вы хотите, чтобы ваша система принимала соединения по умолчанию. Если вы ранее не изменили правила цепочки политик, этот параметр должен быть уже настроен. В любом случае, вот команда принять соединения по умолчанию:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

По умолчанию в правиле принятия, вы можете использовать iptables для отказа от определенных IP-адресов или номеров портов, продолжая принимать все остальные соединения. Мы дойдем до этих команд через минуту.

Если вы предпочли бы отказаться от всех подключений и вручную указать, какие из них вы хотите разрешить подключать, вы должны изменить политику по умолчанию ваших цепей, чтобы отказаться. Это, вероятно, будет полезно только для серверов, содержащих конфиденциальную информацию, и только когда-либо к ним будут подключаться одни и те же IP-адреса.

iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP

Ответы на подключение

При настройке политик цепочки по умолчанию вы можете приступить к добавлению правил в iptables, чтобы знать, что делать, когда он встречает соединение с определенным IP-адресом или портом. В этом руководстве мы рассмотрим три наиболее распространенных и часто используемых «ответа».

Accept — разрешить соединение.

Drop — Отбросьте соединение, действуйте так, как будто этого никогда не было. Это лучше всего, если вы не хотите, чтобы источник понял, что ваша система существует.

Reject — запретить подключение, но отправить сообщение об ошибке. Это лучше всего, если вы не хотите, чтобы конкретный источник подключался к вашей системе, но вы хотите, чтобы они знали, что ваш брандмауэр блокировал их.

Лучший способ показать разницу между этими тремя правилами — это показать, как это выглядит, когда ПК пытается выполнить ping на машине Linux с помощью iptables, настроенного для каждого из этих параметров.

Разрешение подключения:

Удаление соединения:

Отклонение соединения:

Сетевая маска или характеристика, чтобы указать диапазон IP-адресов.

Настройка iptables на Linux: Методы подключений

Если говорить на тему «Настройка iptables на Linux» то нужно рассказать и про методы подключений.

Разрешение или блокировка определенных подключений
С помощью настроенных политик вы можете настроить iptables для разрешения или блокировки определенных адресов, диапазонов адресов и портов. В этих примерах мы установим подключения к DROP, но вы можете переключить их на ACCEPT или REJECT, в зависимости от ваших потребностей и того, как вы настроили свои цепочки политик.

Примечание. В этих примерах мы будем использовать iptables -A для добавления правил в существующую цепочку. Iptables начинается в верхней части списка и проходит каждое правило, пока не найдет тот, который соответствует ему. Если вам нужно вставить правило выше другого, вы можете использовать iptables -I , чтобы указать номер, который должен быть в списке.

Соединения с одного IP-адреса

В этом примере показано, как заблокировать все подключения с IP-адреса 10.10.10.10 ..

iptables -A INPUT -s 10.10.10.10 -j DROP

Соединения из диапазона IP-адресов

В этом примере показано, как заблокировать все IP-адреса в сетевом диапазоне 10.10.10.0/24. Для указания диапазона IP-адресов можно использовать сетевую маску или стандартную косую черту.

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

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Соединения с определенным портом

В этом примере показано, как заблокировать SSH-соединения с 10.10.10.10.

iptables -A INPUT -p tcp —dport ssh -s 10.10.10.10 -j DROP

Вы можете заменить «ssh» на любой протокол или номер порта. Часть кода -p tcp сообщает iptables, какое соединение использует протокол. Если вы блокировали протокол, который использует UDP, а не TCP, тогда вместо этого потребуется -p udp.

В этом примере показано, как блокировать соединения SSH с любого IP-адреса.

iptables -A INPUT -p tcp —dport ssh -j DROP

Состояния подключения

Как мы упоминали ранее, для многих протоколов требуется двусторонняя связь. Например, если вы хотите разрешить SSH-подключения к вашей системе, для входных и выходных цепей потребуется правило, добавленное к ним. Но, что, если вы хотите, чтобы SSH, входящий в вашу систему, был разрешен? Не приведет ли добавление правила к выходной цепочке и исходящих попыток SSH?

Вот тут-то и появляются состояния соединения, которые дают вам возможность разрешить двухстороннюю связь, но только позволять устанавливать односторонние соединения. Взгляните на этот пример, где SSH-соединения FROM 10.10.10.10 разрешены, но SSH-соединения TO 10.10.10.10 — нет. Однако системе разрешено отправлять обратную информацию по SSH, пока сеанс уже установлен, что делает возможной связь SSH между этими двумя хостами.

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

Сохранение изменений

Изменения, внесенные вами в правила iptables, будут отменены в следующий раз, когда служба iptables будет перезапущена, если вы не выполните команду для сохранения изменений. Эта команда может различаться в зависимости от вашего распространения:

sudo /sbin/iptables-save

Red Hat / CentOS:

/sbin/service iptables save

/etc/init.d/iptables save

Другие команды

Список текущих настроенных правил iptables:

Добавление опции -v даст вам информацию о пакетах и ​​байтах, а добавление -n будет содержать все числовые значения. Другими словами, имена хостов, протоколы и сети перечислены как номера.

Чтобы очистить все настроенные в данный момент правила, вы можете выполнить команду flush.

Перевод из отличного английского ресурса HowToGeek .

Если у вас остались какие-то вопросы по теме «Настройка iptables на Linux для чайников», то можете писать их в форму комментариев на нашем сайте.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

Определение i ptables - утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2.4, 2.6, 3.x, 4.x . Для использования утилиты iptables требуются привилегии суперпользователя (root).

Мы будем разбираться с iptables и без небольшого теоритического вступления не обойтись.

Что бы правильно составлять правила брандмауэра нужно понимать как вообще идут пакеты и что с ними происходит.

Порядок движения транзитных пакетов

Шаг Таблица Цепочка Примечание
1
2 mangle PREROUTING Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр..
3 nat PREROUTING Эта цепочка используется для трансляции сетевых адресов (). выполняется позднее, в другой цепочке.
4 Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдет пакет — локальному приложению или на другой узел сети.
5 mangle FORWARD Далее пакет попадает в цепочку FORWARD таблицы mangle.
6 Filter FORWARD В цепочку FORWARD попадают только те пакеты, которые идут на другой хост Вся фильтрация транзитного трафика должна выполняться здесь. Не забывайте, что через эту цепочку проходит траффик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации.
7 mangle POSTROUTING Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации.
9 nat POSTROUTING Эта цепочка предназначена в первую очередь для Source Network Address Translation . Здесь же выполняется и маскарадинг (Masquerading ).
9 Выходной сетевой интерфейс (например, eth1).

Для локального приложения(входящие пакеты)

Шаг Таблица Цепочка Примечание
1 Входной сетевой интерфейс (например, eth0)
2 mangle PREROUTING Обычно используется для внесения изменений в заголовок пакета, например для установки битов TOS и пр.
3 nat PREROUTING Преобразование адресов (Destination Network Address Translation ).
4 Принятие решения о маршрутизации.
5 mangle INPUT Пакет попадает в цепочку INPUT таблицы mangle. Здесь вносятся изменения в заголовок пакета перед тем как он будет передан локальному приложению.
6 filter INPUT Здесь производится фильтрация входящего трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
7 Локальный процесс/приложение (т.е., программа-сервер или программа-клиент)

От локальных процессов(исходящие пакеты)

Шаг Таблица Цепочка Примечание
1 Локальный процесс (т.е., программа-сервер или программа-клиент).
2 Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше — на какой адрес, через какой сетевой интерфейс и пр.
3 mangle OUTPUT Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия.
4 nat OUTPUT Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра.
5 Filter OUTPUT Здесь фильтруется исходящий траффик.
6 mangle POSTROUTING Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра.
7 nat POSTROUTING Здесь выполняется Source Network Address Translation . Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP .
8 Сетевой интерфейс (например, eth0)

Как мы поняли есть основные три таблицы:

  • mangle — Данная таблица предназначена для операций по классификации и маркировке пакетов и соединений, а также модификации заголовков пакетов (поля TTL и TOS).
  • filter — основная таблица для фильтрации пакетов, используется по умолчанию. Собственно в этой таблице и происходит фильтрация пакетов.
  • nat — обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора. Здесь задаются правила для маршрутизации.

Для таблицы nat применимы действия:

  • MASQUERADE

Действие DNAT (Destination Network Address Translation) производит преобразование адресов назначения в заголовках пакетов. Другими словами, этим действием производится перенаправление пакетов на другие адреса, отличные от указанных в заголовках пакетов.

SNAT (Source Network Address Translation) используется для изменения исходных адресов пакетов. С помощью этого действия разделить единственный внешний IP адрес между компьютерами локальной сети для выхода в Интернет. В этом случае брандмауэр, с помощью SNAT , автоматически производит прямое и обратное преобразование адресов, тем самым давая возможность выполнять подключение к серверам в Интернете с компьютеров в локальной сети.

Маскировка (MASQUERADE ) применяется в тех же целях, что и SNAT , но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия — производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP , SLIP или DHCP .

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Выполнить MASQUERADE для всех пакетов идущих из сети 10.8.0.0 на интерфейс eth0 . Для понятности, допустим у нас две сетевые карточки и две сети. Нам надо что бы сеть 10.8.0.0/24 (первая сетевая карточка)могла выйти скажем в интернет через eth0(вторая сетевая карточка)

  • raw — Предназначена для выполнения действий с пакетами до их обработки системой.

Собственно таблица по умолчанию filter .

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

Действие с пакетом.

  • ACCEPT - пропуск пакета. Пакет покидает текущую базовую цепочку и следует дальше.
  • REJECT - заблокировать пакет и сообщить его источнику об отказе.
  • DROP - заблокировать пакет, не сообщая источнику об отказе. Более предпочтительна при фильтрации трафика на интерфейсах, подключенных к интернету, так как понижает информативность сканирования портов хоста злоумышленниками.
  • LOG — сделать запись о пакете в лог файл.

Получается у нас цепочка [таблица — filter ] — [ трафик — INPUT ] — [действие — DROP ] логика действий только кажется сложной. Думаю мы с вами на примерах разберемся и станет все просто.

Команд iptables:

  • -A добавить правило в конец цепочки.
  • -D удалить правило.
  • -I вставить правило с нужным номером.
  • -L вывести все правила в текущей цепочке.
  • -S вывести все правила.
  • -F очистить все правила.
  • -N создать цепочку.
  • -X удалить цепочку.
  • -P установить действие по умолчанию.

Начнем разбираться на конкретных примерах.

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

-A добавить новое правило, INPUT для входящих пакетов, -p протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp,
mh, — — dport порт назначения 80(опция только для протокола), -j выбрать действие, если правило подошло, ACCEPT разрешить. То есть разрешить входящий трафик по протоколу tcp на порт 80.

Перечисленные ключи также поддерживают конструкцию с использованием знака ! . Он инвертирует условие, например:

iptables -A INPUT -s ! 192.168.0.50 -j DROP

-s адрес источника - имя хоста(www.help.com), IP-адрес или подсеть в нотации CIDR(192.168.0.1/16) , ! инверсия, DROP запретить. Запретить весь входящий трафик, кроме источника 192.168.0.50 (если бы не было ! , то запретить только с 192.168.0.50 )

iptables -A INPUT -s 192.168.0.50 -j DROP

Запретить входящий трафик с ip — 192.168.0.50 .

Список критериев правил:

  • -p Протокол, протокол также можно указать с помощью номера или названия согласно перечислению, приведенному в /etc/protocols . Значение «любой протокол» можно указать с помощью слова all или числа 0 . Так же для протокола есть дополнительные параметры : —sport (—source-port) Позволяет указать исходящий порт (или их диапазон). —dport (—destination-port) Позволяет указать порт назначения (или их диапазон).
  • -s Определяет адрес отправителя . В качестве адреса может выступать IP-адрес (возможно с маской), доменное имя (в последних двух случаях перед добавлением правила в цепочку имя резольвится в IP-адрес).
  • -i Определяет входящий сетевой интерфейс. Если указанное имя интерфейса заканчивается знаком «+» (например, eth +), то критерию соответствуют все интерфейсы, чьи названия начинаются на указанное имя(etho,eth1).
  • -d Определяет адрес получателя . Синтаксис аналогичен -s .
  • -o Определяет исходящий сетевой интерфейс. Синтаксис аналогичен -i .

Так же критерия можно комбинировать.

iptables -A INPUT -i eth0 -s 192 .168.0.0 -j DROP

Запретить входящие пакеты с интерфейса eth0 и ip 192 .168.0.0 . А на интерфейс eth1 пакеты пройдут.

А что делать если вы за ранние не знаете какой порт открывать , например хотите что бы FTP сервер работал в пассивном режиме. Модуль conntrack о состоянии соединения поможет, а конкретней критерий - ctstate. Модуль подключается тэгом -m .

iptables -A INPUT -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -m conntrack —ctstate NEW -p tcp —dport 21 -j ACCEPT # Разрешаем открывать соединения на 21 TCP-порт.

Возможные состояния:

  • NEW - соединение не открыто, то есть пакет является первым в соединении.
  • ESTABLISHED - пакет относится к уже установленному соединению. Обычно такие пакеты принимаются без дополнительной фильтрации, как и в случае с RELATED.
  • RELATED - пакет открывает новое соединение, логически связанное с уже установленными, например, открытие канала данных в пассивном режиме FTP. Соединение получает статус RELATED если оно связано с другим соединением, имеющим признак ESTABLISHED .
  • INVALID — Признак INVALID говорит о том, что пакет не может быть идентифицирован и поэтому не может иметь определенного статуса.

iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT

State и деологический предшественник conntrack, имеет единственный параметр --state , аналогичный параметру --ctstate модуля conntrack (но, в отличие от него, не поддерживающий состояния DNAT и SNAT).

Кратко рассмотрим таблицу таксировщика, которую можно найти в файле /proc/net/ip_conntrack . Здесь содержится список всех активных соединений.

Tcp 6 300 ESTABLISHED src=128.*.*.* dst=194.*.*.* sport=52524 dport=2223 src=194.*.*.* dst=128.*.*.* sport=2223 dport=52524 mark=0 use=2

Первое как понятно это протокол, потом десятичное число(что значит не знаю),потом идет время жизни соединения. Далее состояние ESTABLISHED то есть соединение уже установлено, бывает еще UNREPLIED что значит что ответного трафика еще не было. Далее расположены адреса отправителя и получателя, порт отправителя и получателя. Далее все наоборот соответственно, ASSURED этот флаг сообщает о том, что соединение установлено уверенно и эта запись не будет стерта по достижении максимально возможного количества трассируемых соединений.

Некоторые особенности протоколов.

TCP соединение всегда устанавливается передачей трех пакетов, которые инициализируют и устанавливают соединение, через которое в дальнейшем будут передаваться данные. Сессия начинается с передачи SYN пакета, в ответ на который передается SYN/ACK пакет и подтверждает установление соединения пакет ACK .

Как только трассировщик увидел первый (SYN ) пакет, то присваивает ему статус NEW . Как только через трассировщика проходит второй пакет (SYN/ACK ), то соединению присваивается статус ESTABLISHED .

С протоколом UDP немного все по другому этот протокол не предусматривает установления и закрытия соединения, но самый большой недостаток — отсутствие информации об очередности поступления пакетов. Но с точки зрения трасировщика все так же как с TCP. Первому пришедшему пакету присваивает ему статус NEW. Как только вы отправляете ответный пакет присваивается статус ESTABLISHED. Единственное отличия что статут ASSURED присваиваться только когда обменялись уже несколькими пакетами.

Логирование применений правил.

iptables дает возможность вести логи отдельных пакетов и событий. Для этого применяется действие LOG .

iptables -A INPUT -p tcp —syn -j LOG —log-level info —log-prefix «INPUT packets «

—log-level Используется для задания уровня журналирования (log level). Полный список уровней вы найдете в руководстве (man) по syslog.conf. Обычно, можно задать следующие уровни: debug , info , notice , warning , warn , err , error , crit , alert , emerg и panic . Логи пишутся в файл syslog.

—log-prefix Ключ задает текст (префикс), которым будут предварять все сообщения iptables . Сообщения со специфичным префиксом затем легко можно найти, к примеру, с помощью grep . Префикс может содержать до 29 символов, включая и пробелы.

Jun 1 17:12:20 debian kernel: INPUT packets IN=eth0 OUT= MAC=02:1e:6d:00:e2:1c:00:01:e8:11:73:69:08:00 SRC=125.94.12.95 DST=194.87.239.104 LEN=40 TOS=0x00 PREC=0x00 TTL=52 ID=38690 PROTO=TCP SPT=12557 DPT=23 WINDOW=1460$ RES=0x00 SYN URGP=0

Популярные команды управления iptables.

iptables -L -n —line-numbers Посмотреть список правил.

-n номер портов и ip в цифровом варианте.

—line-numbers номер строки.

iptables -F Полностью сбросить правила.

iptables -P INPUT ACCEPT Правила по умолчанию для таблицы INPUT .
iptables -P OUTPUT ACCEPT Правила по умолчанию для таблицы OUTPUT.
iptables -P FORWARD DROP Правила по умолчанию для таблицы FORWARD.

iptables -D INPUT 1 Удаление правила по его номеру в цепочке.

iptables -D INPUT -s 123.45.67.89 -j DROP Удаление правила на основе того, что оно делает.

iptables -I INPUT … Вставка (insert) правила в начало цепочки.

iptables -I INPUT 3 … Или можно указать конкретную позицию.

REDIRECT

Действие REDIRECT предназначено для перенаправления пакетов с одного набора портов на другой внутри одной системы, не выходя за пределы хоста .
Работает REDIRECT только в цепочках PREROUTING и OUTPUT таблицы nat . Таким образом, область применения сводится только к перенаправлению. Чаще всего это используется для прозрачного прокси, когда клиент из локальной сети коннектится на 80 порт, а шлюз редиректит пакеты на локальный порт прокси:

iptables -t nat -A PREROUTING -p tcp —dport 80 -j REDIRECT —to-port 3128

Новые правила автоматически не сохраняются и после перезагрузки сервера не будут действовать. Поэтому после изменения iptables нам нужно сохранить изменения.

iptables — restore > /etc/iptables Загрузить правила из файла.

Способ сохранять и загружать правила на ваше усмотрение. Мы с вами познакомились только с основами теории iptables, возможности настройки конечно гораздо больше. Более подробно о которых расскажем в другой статье.

В Linux встроен брандмауэр называемый Netfilter. По данным официального сайта проекта:

netfilter это набор системных сообщений внутри ядра Linux, которые позволяют модулям ядра зарегистрировать функции обратного вызова с сетевого стека. Зарегистрированная функция обратного вызова обрабатывает каждый пакет проходящий через сетевой стек.

Брандмауэр в Linux управляется программой iptables, которая имеет функции фильтрации IPv4, ip6tables фильтрует IPv6. Данное руководство рассказывает как научится пользоваться Netfilter (iptables) в CentOS / RHEL / Fedora / Redhat Enterprise Linux. В этой статье можно найти основные примеры настройки iptables в Linux для защиты от вторжений.

Примеры использования Iptables

  • Большинство из действий, перечисленных в этой статье пишутся с предположением, что они будут выполнены от root пользователя из bash или любой другой современной оболочке. Не вводите команды на удаленной системе, так как можете отключить себе доступ.
  • Для демонстрационных целей я использовал ubuntu 10.04, но команды должны работать с любым современным дистрибутивом.
Отображение состояния вашего брандмауэра
Введите следующую команду от root:
# iptables -L -n -v
Примерный ответ:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination
Такой ответ означает, что брандмауэр не активен.
А, например, такой покажет, что брандмауэр в Linux активен:

Chain INPUT (policy ACCEPT 1810K packets, 126M bytes) pkts bytes target prot opt in out source destination 7418K 1070M ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:1194 881 52520 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 flags:0x17/0x02 state NEW Chain FORWARD (policy ACCEPT 5628K packets, 482M bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT tcp -- eth0 tun0 0.0.0.0/0 0.0.0.0/0 tcp dpt:1111 state NEW,RELATED,ESTABLISHED 599K 539M ACCEPT udp -- eth0 * 0.0.0.0/0 10.1.1.6 udp dpt:1112 state NEW,RELATED,ESTABLISHED Chain OUTPUT (policy ACCEPT 4959K packets, 880M bytes) pkts bytes target prot opt in out source destination
Ключи в примере означают:

  • L : Вывести список правил.
  • v : Отображение подробной информации. Этот ключ будет выводить имя интерфейса, параметры правил и маски TOS. Счетчики пакетов и байтов, также будут показаны в списке, с "K" суффиксом, "М" или "G" в зависимости от необходимого множителя.
  • n : Не резолвить IP адреса, показывать в цифровом виде. Ускоряет вывод.
Для просмотра правил с номером строки добавьте ключ --line-numbers, например:
# iptables -n -L -v --line-numbers
Для просмотра INPUT или OUTPUT правил, наберите:
# iptables -L INPUT -n -v # iptables -L OUTPUT -n -v --line-numbers
Остановка, перезапуск, запуск брандмауэра
Если у Вас CentOS / RHEL / Fedora Linux, вводите:
# service iptables stop # service iptables start # service iptables restart
Чтобы отчистить правила iptables его собственными средствами введите:
# iptables -F # iptables -X # iptables -t nat -F # iptables -t nat -X # iptables -t mangle -F # iptables -t mangle -X # iptables -P INPUT ACCEPT # iptables -P OUTPUT ACCEPT # iptables -P FORWARD ACCEPT
Ключи в примере означают:
  • F : Удаление всех правил (flushing).
  • X : Удаление цепочки
  • t <таблица>: Выбрать таблицу и удалить правила.
  • P : Установить политику по умолчанию (например DROP, REJECT или ACCEPT).
Удаление правил брандмауэра
Для отображения номера строки наряду с другой информацией по существующим правилам, введите:
# iptables -L OUTPUT -n --line-numbers # iptables -L OUTPUT -n --line-numbers | less # iptables -L OUTPUT -n --line-numbers | grep 8.8.8.8
Вы получите список IP. Посмотрите на число слева, а вводите число, чтобы удалить его. Например, удаление линии номер 4, введите:
# iptables -D INPUT 4
Или найти источник IP 202.54.1.1 и удалить из правила:
# iptables -D INPUT -s 202.54.1.1 -j DROP
Ключ в примере означает:
  • D : удалить одно или несколько правил из указанной цепочки
Добавление правил брандмауэра
Чтобы вставить одно или несколько правил в указанной цепочке, как правило используется следующий синтаксис. Сначала узнать номер строки:
# iptables -L INPUT -n --line-numbers
Вывод например:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 202.54.1.1 0.0.0.0/0 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Чтобы вставить правило между 1 и 2, введите:
# iptables -I INPUT 2 -s 8.8.8.8 -j DROP
Для просмотра обновленных правил, введите:
# iptables -L INPUT -n --line-numbers
Вывод например:
Chain INPUT (policy DROP) num target prot opt source destination 1 DROP all -- 202.54.1.1 0.0.0.0/0 2 DROP all -- 8.8.8.8 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state NEW,ESTABLISHED
Сохранение правил брандмауэра
Чтобы сохранить правила брандмауэра в CentOS / RHEL / Fedora Linux, введите:
# service iptables save
В других дистрибутивах
iptables-save > /root/my.active.firewall.rules
или
iptables-save
Восстановление правил брандмауэра
Для восстановление правил брандмауэра из файла /root/my.active.firewall.rules, введите:
# iptables-restore < /root/my.active.firewall.rules
Для восстановление правил брандмауэра в CentOS / RHEL / Fedora Linux, введите:
# service iptables restart
Установка политик брандмауэра по умолчанию
Блокировать весь трафик:
# iptables -P INPUT DROP # iptables -P OUTPUT DROP # iptables -P FORWARD DROP # iptables -L -v -n
Блокировать только входящий трафик:
# iptables -P INPUT DROP # iptables -P FORWARD DROP # iptables -P OUTPUT ACCEPT
Блокировка сетевых адресов локальной сети на внешнем интерфейсе
IP-спуфинг - атака заключающаяся в использовании в IP-пакетах, отправляемых жертве, в качестве обратного адреса IP-адрес хоста, которому она доверяет. Пакеты с немаршрутизируемыми адресами источника должны быть отвергнуты, используя следующий синтаксис:
# iptables -A INPUT -i eth1 -s 192.168.0.0/24 -j DROP # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Диапазон адресов IPv4 для частных сетей (убедитесь, что они заблокированы на внешнем интерфейсе)
  • 10.0.0.0/8 -j (A)
  • 172.16.0.0/12 (B)
  • 192.168.0.0/16 ©
  • 224.0.0.0/4 (MULTICAST D)
  • 240.0.0.0/5 (E)
  • 127.0.0.0/8 (LOOPBACK)
Блокировка IP-адресов
Чтобы заблокировать IP адрес 1.2.3.4, введите:
# iptables -A INPUT -s 1.2.3.4 -j DROP
Блокировка входящие запросов на порт
Чтобы заблокировать все запросы на порт 80, введите:
# iptables -A INPUT -p tcp --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp --dport 80 -j DROP
Чтобы заблокировать порт 80 только для IP-адреса 1.2.3.4, введите:
# iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP # iptables -A INPUT -i eth1 -p tcp -s 192.168.1.0/24 --dport 80 -j DROP
Блокировка исходящего IP-адреса
Чтобы заблокировать исходящий трафик определенного хоста или домена, такого как сайт, введите:
host -t a сайт
Ответ будет:
сайт has address 95.211.41.31
Запишите свой ​​IP-адрес и введите следующую команду, чтобы блокировать весь исходящий трафик с 95.211.41.31:
# iptables -A OUTPUT -d 95.211.41.31 -j DROP
Можно использовать маски:
# iptables -A OUTPUT -d 192.168.1.0/24 -j DROP # iptables -A OUTPUT -o eth1 -d 192.168.1.0/24 -j DROP
Вы также можете использовать доменное имя, введите:
# iptables -A OUTPUT -p tcp -d www..ru -j DROP
Хотя в документации пишут, что использование доменного имени вместо IP не рекомендуется.
Логирование и блокирование пакетов
Введите следующую команду, чтобы логировать и блокировать IP-спуфинг на открытый интерфейс с именем eth1:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j LOG --log-prefix "IP_SPOOF A: " # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
По умолчанию все логируется в файл /var/log/messages .

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

Так лучше не делать, в особенности для явно левого трафика. LOG можно вставлять только строго с -m limit, иначе любая DoS-атака будет во много раз эффективнее: фактически косвенным образом злоумышленник получает прямой путь интенсивного воздействия непосредственно на файловую систему сервера.
Как делать правильнее, написано ниже
Логирование и блокирование пакетов с ограниченным количеством записей журнала
Параметр -m может ограничить количество записей в журнале созданных в единицу времени. Это используется для предотвращения флуда в файле журнала. Чтобы записывать не более 7 записей в 5 минут, введите:
# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -m limit --limit 5/m --limit-burst 7 -j LOG --log-prefix "IP_SPOOF A: " # iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
Блокирование или разрешение трафика от Mac-адреса
Используйте следующий синтаксис:
# iptables -A INPUT -m mac --mac-source 00:19:99:3C:AB:23 -j DROP ## *only accept traffic for TCP port # 8080 from mac 00:19:99:3C:AB:22 * ## # iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source 00:19:99:3C:AB:22 -j ACCEPT
Запретить или разрешить ICMP запросы для ping
Введите следующую команду, чтобы заблокировать ICMP запросы:
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP # iptables -A INPUT -i eth1 -p icmp --icmp-type echo-request -j DROP
Ping ответ также может быть ограничен определенными сетями или хостами:
# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type echo-request -j ACCEPT
Следующий пример принимает только ограниченный тип ICMP запросов:
### ** assumed that default INPUT policy set to DROP ** ############# iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT ## ** all our server to respond to pings ** ## iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Открытие диапазона IP-адресов
Используйте следующий синтаксис, чтобы открыть диапазон IP-адресов:
## only accept connection to tcp port 80 (Apache) if ip is between 192.168.1.100 and 192.168.1.200 ## iptables -A INPUT -p tcp --destination-port 80 -m iprange --src-range 192.168.1.100-192.168.1.200 -j ACCEPT
## nat example ## iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.1.20-192.168.1.25
Закрытие или открытие общих портов
Ниже приведен синтаксис для открытия и закрытия портов общих портов TCP и UDP:
Replace ACCEPT with DROP to block port: ## open port ssh tcp port 22 ## iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT ## open cups (printing service) udp/tcp port 631 for LAN users ## iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 631 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 631 -j ACCEPT ## allow time sync via NTP for lan users (open udp port 123) ## iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT ## open tcp port 25 (smtp) for all ## iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT # open dns server ports for all ## iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT ## open http/https (Apache) server port to all ## iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT ## open tcp port 110 (pop3) for all ## iptables -A INPUT -m state --state NEW -p tcp --dport 110 -j ACCEPT ## open tcp port 143 (imap) for all ## iptables -A INPUT -m state --state NEW -p tcp --dport 143 -j ACCEPT ## open access to Samba file server for lan users only ## iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 137 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 138 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 139 -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 445 -j ACCEPT ## open access to proxy server for lan users only ## iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 3128 -j ACCEPT ## open access to mysql server for lan users only ## iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
Ограничить число одновременных подключений к серверу для каждого клиента по IP
Вы можете использовать модуль connlimit, чтобы поставить такие ограничения. Для ограничения не больше 3 SSH соединений на хост, введите:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
Установить HTTP запросов до 20:
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j DROP
Параметры в примере,
  • --connlimit-above 3: Соответствует ли количество существующих соединений выше 3.
  • --connlimit-mask 24: Группировать хосты по

iptables - утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2.4 и 2.6. Для использования утилиты iptables требуются привилегии суперпользователя (root).Иногда под словом iptables имеется в виду и сам межсетевой экран netfilter.

1. Что же такое межсетевой экран и зачем он нужен?

Межсетевой экран - комплекс аппаратных или программных средств, осуществляющий контроль и фильтрацию проходящих через него сетевых пакетов на различных уровнях модели OSI в соответствии с заданными правилами.


Основной задачей сетевого экрана является компьютерных сетей или отдельных узлов от несанкционированного доступа. Также сетевые экраны часто называют фильтрами, так как их основная задача - не пропускать (фильтровать) пакеты, не подходящие под критерии, определённые в конфигурации.

2. Принципы работы iptables

Когда пакет приходит на наш межсетевой экран, то он сначала попадает на сетевое устройство, перехватывается соответствующим драйвером и далее передается в ядро. Далее пакет проходит ряд таблиц и затем передается либо локальному приложению, либо переправляется на другую машину.

В Iptables используется три вида таблиц:

  1. Mangle - обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.
  2. Nat - эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях.
  3. Filter - здесь производится фильтрация трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.

Соответственно, нас интересует третья таблица Filter. В этой таблицы имеются три встроенные цепочки:

  1. INPUT - для входящих пакетов.
  2. FORWARD - для проходящих через данную машину к другой.
  3. OUTPUT - для исходящих.

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

Программа Iptables позволяет редактировать правила через терминал путем ввода команд.

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

Каждое правило -- это строка, содержащая в себе критерии, определяющие, подпадает ли пакет под заданное правило, и действие, которое необходимо выполнить в случае выполнения критерия. В общем виде правила записываются примерно так:

Iptables [-t имя-таблицы ] команда [шаблон] [-j действие ]

Опция -t задает таблицу . Если опция упущена, то по умолчанию предполагается использование таблицы filter. Если предполагается использование другой таблицы, то это требуется указать явно.

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

Список команд:

  • -A имя-цепочки правило (добавить правило в конец цепочки; ключ --set-counters позволяет установить счётчики пакетов и байтов)
  • -I имя-цепочки номер правило (вставить правило в цепочку перед правилом с указанным номером, нумерация с 1; ключ --set-counters позволяет установить счётчики пакетов и байтов)
  • -R имя-цепочки номер правило (заменить;
    ключ --set-counters позволяет установить счётчики пакетов и байтов)
  • -D имя-цепочки номер (удалить правило с указанным номером, нумерация с 1)
  • -D имя-цепочки правило (удалить правило по текстуальному совпадению)
  • -C имя-цепочки пакет (тестировать прохождение пакета;
    исходящий адрес, адрес назначения, протокол, интерфейс, порты задаются соответствующими ключами)
  • -L [имя-цепочки ] (показать список правил; дополнительные ключи:
    • -v (вывести дополнительную информацию, в частности, счётчики)
    • --exact (показывать счётчики без округления до KB, MB и т.д.)
    • --numeric (показывать адреса и номера портов в виде чисел)
    • --line-numbers (выводить номера правил)
  • -F имя-цепочки (удалить все правила из цепочки)
  • -Z имя-цепочки (обнулить счетчики)
  • -N имя-цепочки (создать цепочку)
  • -X имя-цепочки (удалить пустую цепочку, на которую нет ссылок)
  • -P имя-цепочки действие (изменить действие по умолчанию: ACCEPT,
    DROP, QUEUE, RETURN)
  • -E старое-имя-цепочки новое-имя-цепочки (переименовать цепочку)

Раздел шаблон задает критерии проверки, по которым определяется подпадает ли пакет под действие этого правила или нет.Здесь можно указать самые разные критерии - IP-адрес источника пакета или сети, сетевой интерфейс. IP-адрес места назначения, порт, протокол и т.д. Остальные параметры для фильтации можно посмотреть в справке по утилите iptables(man iptables)

И наконец действие указывает, какое действие должно быть выполнено при условии выполнения критериев в правиле. Здесь можно заставить ядро передать пакет в другую цепочку правил, "сбросить" пакет, выдать на источник сообщение об ошибке и т.п.

Список некоторых действий:

  • ACCEPT - пропустить пакет; просмотр таблицы завершается
  • DROP - выбросить молча; просмотр завершается не только для текущей цепочки, но и для других таблиц
  • REJECT - выбросить, известив отправителя (--reject-with тип-извещения )

3. Порядок следования сетевого пакета, предназначенного локальному процессу/приложению:

Для локального приложения

Шаг Таблица Цепочка Примечание
1 Кабель (т.е. )
2 Входной
3 mangle PREROUTING Обычно используется для внесения изменений в заголовок пакета, например для установки битов TOS и пр.
4 nat PREROUTING Преобразование адресов (Destination Network Address Translation). Фильтрация пакетов здесь допускается только в исключительных случаях.
5 Принятие решения о маршрутизации.
6 mangle INPUT Пакет попадает в цепочку INPUT таблицы mangle. Здесь внесятся изменения в заголовок пакета перед тем как он будет передан локальному приложению.
7 filter INPUT Здесь производится фильтрация входящего трафика. Помните, что все входящие пакеты, адресованные нам, проходят через эту цепочку, независимо от того с какого интерфейса они поступили.
8 Локальный процесс/приложение (т.е., программа-сервер или программа-клиент)

Важно помнить, что на этот раз пакеты идут через цепочку INPUT, а не через FORWARD.

Порядок движения пакетов, созданных локальными процессами.

От локальных процессов

Шаг Таблица Цепочка Примечание
1 Локальный процесс (т.е., программа-сервер или программа-клиент).
2 Принятие решения о маршрутизации. Здесь решается куда пойдет пакет дальше -- на какой адрес, через какой сетевой интерфейс и пр.
3 mangle OUTPUT Здесь производится внесение изменений в заголовок пакета. Выполнение фильтрации в этой цепочке может иметь негативные последствия.
4 nat OUTPUT Эта цепочка используется для трансляции сетевых адресов (NAT) в пакетах, исходящих от локальных процессов брандмауэра.
5 Filter OUTPUT Здесь фильтруется исходящий траффик.
6 mangle POSTROUTING Цепочка POSTROUTING таблицы mangle в основном используется для правил, которые должны вносить изменения в заголовок пакета перед тем, как он покинет брандмауэр, но уже после принятия решения о маршрутизации. В эту цепочку попадают все пакеты, как транзитные, так и созданные локальными процессами брандмауэра.
7 nat POSTROUTING Здесь выполняется Source Network Address Translation. Не следует в этой цепочке производить фильтрацию пакетов во избежание нежелательных побочных эффектов. Однако и здесь можно останавливать пакеты, применяя политику по-умолчанию DROP.
8 Сетевой интерфейс (например, eth0)
9 Кабель (т.е., Internet)

Порядок движения транзитных пакетов

Шаг Таблица Цепочка Примечание
1 Кабель (т.е. Интернет)
2 Сетевой интерфейс (например, eth0)
3 mangle PREROUTING Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр..
4 nat PREROUTING Эта цепочка используется для трансляции сетевых адресов (Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. Любого рода фильтрация в этой цепочке может производиться только в исключительных случаях
5 Принятие решения о дальнейшей маршрутизации, т.е. в этой точке решается куда пойдет пакет -- локальному приложению или на другой узел сети.
6 mangle FORWARD Далее пакет попадает в цепочку FORWARD таблицы mangle, которая должна использоваться только в исключительных случаях, когда необходимо внести некоторые изменения в заголовок пакета между двумя точками принятия решения о маршрутизации.
7 Filter FORWARD В цепочку FORWARD попадают только те пакеты, которые идут на другой хост Вся фильтрация транзитного трафика должна выполняться здесь. Не забывайте, что через эту цепочку проходит траффик в обоих направлениях, обязательно учитывайте это обстоятельство при написании правил фильтрации.
8 mangle POSTROUTING Эта цепочка предназначена для внесения изменений в заголовок пакета уже после того как принято последнее решение о маршрутизации.
9 nat POSTROUTING Эта цепочка предназначена в первую очередь для Source Network Address Translation. Не используйте ее для фильтрации без особой на то необходимости. Здесь же выполняется и маскарадинг (Masquerading).
10 Выходной сетевой интерфейс (например, eth1).
11 Кабель (пусть будет LAN).

Есть три различных варианта прохождения пакетов.

1. Из вне на локальную службу (сервер) этого компьютера (INPUT).

2. От локальной службы (сервера) этого компьютера во вне (OUTPUT).

3. Прохождение мимо, шлюзование, мимо этого сетевого интерфейса этого компьютера (FORWARD).

4. Несколько примеров настройки:

пример скрипта:

#задаем переменные для обозначения внешнего и внутреннего сетевого интерфейса

LOCAL_IF="eth0"
INET_IF="eth0:g"

#=======================
# Удалить все правила из цепочки.
#=======================
iptables -F
iptables -X

#=======================
# Устанавливаем политику по умолчанию.
#=======================

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD ACCEPT

#=======================
# Создаем правила для всех интерфейсов.
#=======================

# http - открываем 80 порт
iptables -A INPUT -i ALL -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -i ALL -p icmp -j ACCEPT

#=======================
# Создаем правила для внутреннего интерфейса.
#=======================

# ssh - открываем 22

iptables -A INPUT -p tcp -i $LOCAL_IF -m tcp --dport 22 -j ACCEPT

осталось запустить скрипт

примеры отдельных цепочек:

Разрешаем все на внутренних интерфейсах (lo, eth0, eth1 - внутренние интрефейсы)
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

Разрешаем доступ к заданному порту из инета
iptables -A INPUT -p tcp -m tcp -d внешний_ip --dport 80 -j ACCEPT

Открываем протокол
iptables -A INPUT -p gre -j ACCEPT

5. Ссылки на документацию по настройке iptables

http://www.posix.ru/network/iptables/ -статья Дмитрия Кулакова "Настройка межсетевого экрана Iptables"

http://www.opennet.ru/docs/RUS/iptables/ - статья Оскара Андерсона в переводе Андрея Киселева "Руководство по iptables"

http://system-administrators.info/?p=396 - статья "netfilter и iptables в Linux: принципы работы, настройка"

http://www.iptables.ru/ - пошаговое конфигурирование iptables. технической поддержки


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