Настройка правил iptables в Linux
Введение
Iptables — это брандмауэр для Linux, используемый для мониторинга входящего и исходящего трафика и его фильтрации в соответствии с заданными пользователем правилами для исключения несанкционированного доступа к системе. При помощи Iptables можно разрешить на вашем сервере движение только определенного трафика. В данном руководстве мы рассмотрим использование Iptables для обеспечения безопасности веб-приложения.
Важно: В последних дистрибутивах RHEL/CentOS по умолчанию используется служба firewallD, уже установленная в системе. Если вы хотите использовать Iptables, сначала нужно ее отключить.
Для рассматриваемого примера используются VPS на Ubuntu 16.04 и локальная машина с SSH-клиентом
Основы Iptables
Все данные передаются по сети в виде пакетов. Ядро Linux предоставляет интерфейс для фильтрации пакетов входящего и исходящего трафика при помощи специальных таблиц. Iptables — это приложение командной строки и межсетевой экран для Linux, которым можно пользоваться для создания, поддержания работоспособности и проверки этих таблиц.
Можно создать несколько таблиц. В каждой таблице может содержаться несколько цепочек. Цепочка — это набор правил. Каждое правило определяет, что делать с пакетом, если он соответствует условиям. При соответствии пакета над ним выполняется целевое действие (TARGET). Это может быть проверка следующей цепочкой или один из следующих вариантов:
В данном руководстве мы будем работать с одной из таблиц по умолчанию, которая называется фильтром (filter). В таблице фильтра есть три цепочки (набора правил):
Пример настройки iptables
Давайте рассмотрим настройку iptables, на примере настройки доступа к web серверу.
Шаг 1 – Установка брандмауэра Iptables в Linux
1. Установка Iptables
Iptables предустановлен практически во всех дистрибутивах Linux, но если у вас его нет, в системах Ubuntu/Debian воспользуйтесь командами:
или в Centos/RedHat
2. Проверка текущего состояния Iptables
В рассматриваемом примере во всех трёх цепочках установлена политика по умолчанию ACCEPT. Ни в одной цепочке нет никаких правил. Давайте изменим цепочку INPUT для фильтрации входящего трафика.
Шаг 2 – Определение правил
Определение правила означает внесение его в список (цепочку). Вот пример команды Iptables с обычными опциями. Некоторые из них не являются обязательными.
1. Разрешение трафика на локальном узле
Первым делом нам нужно обязательно разрешить трафик через интерфейс loopback. Чтобы связь между приложениями и базами данных на сервере продолжалась в обычном режиме.
2. Разрешение подключений к портам HTTP, SSH и SSL
Теперь все TCP-подключения с этими номерами портов будут разрешены. На самом деле для подключения по порту ssh лучше разрешить не со всех ip адресов, а только с определенных. Для защиты вашего сервера, как это сделать написано ниже
3. Фильтрация пакетов по источнику
вместо хоста также можно указать и полностью сеть, например для разрешения подключения по ssh только с локальной сети 192.168.1.0/24 пропишите правило
Отклонение команд с IP-адреса задаётся аналогичной командой с опцией DROP:
4. Запрет всего остального трафика
Важно: после определения правил обязательно нужно запретить остальной трафика, в целях исключения несанкционированного доступа к серверу через другие открытые порты.
Эта команда отклоняет весь трафик, кроме указанных выше портов. Теперь можно проверить свои правила командой:
Как мы видим для интерфейса loopback у нас разрешен любой трафик, по портам 80 и 443 можно подключиться с любого ip. А по порту 22 можно подключиться только с сети 192.168.1.0/24. Не забудьте сохранить настройки, иначе после перезагрузке вы потеряете все изменения. Как сохранить написано ниже.
Удаление правил iptables
Если нужно удалить все правила и прописать все заново с чистого листа, можно воспользоваться командой очистки (flush):
Настройка NAT (MASQUERADE)
Большинство организаций получает от своих интернет-провайдеров ограниченное количество публично доступных IP-адресов, поэтому администратору требуется разделять доступ к Интернету, не выдавая каждому узлу сети публичный IP-адрес. Для доступа к внутренним и внешним сетевым службам узлы локальной сети используют внутренний (частный) IP-адрес. Граничные маршрутизаторы (межсетевые экраны) могут получать входящие соединения из Интернета и передавать их нужным узлам локальной сети и наоборот, направлять исходящие соединения узлов удаленным интернет-службам. Такое перенаправление сетевого трафика может быть опасным, особенно учитывая доступность современных средств взлома, осуществляющих подмену внутренних IP-адресов и таким образом маскирующих машину злоумышленника под узел вашей локальной сети. Чтобы этого не случилось, в Iptables существуют политики маршрутизации и перенаправления, которые можно применять для исключения злонамеренного использования сетевых ресурсов. Политика FORWARD позволяет администратору контролировать маршрутизацию пакетов в локальной сети. Например, чтобы разрешить перенаправление всей локальной сети, можно установить следующие правила (в примере предполагается, что внутренний IP-адрес брандмауэра/шлюза назначен на интерфейсе eth1):
Важно: по умолчанию в большинстве дистрибутивов Linux перенаправление отключено. Чтобы его включить, нужно внести изменения в файл конфигурации /etc/sysctl.conf. Найдите там такую строчку net.ipv4.ip_forward = 0 и измените 0 на 1:
Разрешение перенаправления пакетов внутренним интерфейсом брандмауэра позволяет узлам локальной сети связываться друг с другом, но у них не будет доступа в Интернет. Чтобы обеспечить узлам локальной сети с частными IP-адресами возможность связи с внешними публичными сетями, нужно настроить на брандмауэре трансляцию сетевых адресов (NAT). Создадим правило:
В этом правиле используется таблица NAT, поэтому она указывается в явном виде (-t nat) и указана встроенная цепочка этой таблицы POSTROUTING для внешнего сетевого интерфейса eth0 (-o eth0). POSTROUTING позволяет изменять пакеты, когда они выходят из внешнего интерфейса шлюза. Целевое действие -j MASQUERADE заменяет (маскирует) частный IP-адрес узла внешним IP-адресом шлюза. Это называется IP-маскарадингом.
Проброс портов
Если в вашей внутренней сети есть сервер, который должен быть доступен извне, можно воспользоваться целевым действием -j DNAT цепочки PREROUTING в таблице NAT и указать IP-адрес и порт места назначения, на которые будут перенаправляться входящие пакеты, запрашивающие соединение с вашей внутренней службой. Например, если нужно перенаправлять входящие HTTP-запросы по порту 80 на выделенный HTTP-сервер Apache по адресу 172.31.0.23, выполните команду:
Данное правило определяет использование встроенной цепочки PREROUTING в таблице NAT для перенаправления входящих HTTP-запросов на порт 80 указанного IP-адреса 172.31.0.23. Такой способ трансляции сетевых адресов называется перенаправлением или пробросом портов.
Сохранение изменений в iptables
Созданные нами правила сохранены в оперативной памяти. Это означает, что при перезагрузке нам нужно будет заново из определить. Чтобы сохранить из после перезагрузки, нужно выполнить следующую команду:
Она сохраняет текущие правила в файл конфигурации системы, который используется для перенастройки таблиц во время перезагрузки. Эту команду нужно выполнять после каждого изменения правил. Для отключения брандмауэра просто очистите все правила и сохраните изменения:
Восстановление настроек
Если вы еще не сохраняли настройки, и хотите вернуться к первоначальным настройкам. Используйте iptables-restore.
Заключение
В данном руководстве мы рассмотрели основные моменты работы с Iptables: разрешение трафика только на определенных портах, фильтрацию пакетов по источнику, основы настройки трансляции сетевых адресов (NAT) и сохранение правил после перезагрузки. Однако, важно заметить, что iptables работает только с трафиком ipv4. Если ваш VPS поддерживает ipv6, нужно установить отдельные правила при помощи ip6tables.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
Основы iptables для начинающих. Часть 3. Таблица nat

Сразу с этого места сделаем небольшое отступление, потому как с понятием «пакет» существует изрядная путаница, которая может приводить начинающих в некоторое замешательство. Начнем с того, что понятие пакет применимо только к протоколу IP сетевого уровня (L3). Пакет состоит из заголовка и полезной нагрузки. Заголовок, вместе с иной служебной информацией, содержит два важных поля: адрес отправителя (SRC IP) и адрес получателя (DST IP). Полезной нагрузкой IP-пакета является один из протоколов транспортного уровня (L4): TCP, UDP, GRE и т.д.
Следует четко запомнить: IP-заголовок содержит только адрес отправителя и адрес получателя, понятие порт в протоколе IP отсутствует. Порт появляется в заголовках транспортного протокола L4 (TCP, UDP), но информация об адресах источника и назначения там отсутствует. Но как быть, если где-то говорят о пакете на порт TCP 80? Это выражение следует понимать, как IP-пакет с полезной нагрузкой в виде TCP-сегмента с портом назначения 80. Также следует помнить, что у каждого транспортного протокола свой набор портов и одни и те же порты могут быть использованы одновременно с разными протоколами.
Теперь перейдем к самому понятию NAT, эта технология возникла тогда, когда потребовалось предоставить доступ к внешней сети узлам сети внутренней, не имеющим выделенного IP-адреса. По мере роста сетей при ограниченном количестве «белых» IP-адресов это становилось все большей проблемой и привело к совершенствованию механизма NAT.
Существует несколько видов NAT:
Далее мы будем говорить именно о перегруженном NAT (NAPT, NAT Overload, PAT, маскарадинг), потому что в большинстве реализаций используется именно он, также следует отметить, что PAT (Port Address Translation, Трансляция порт-адрес) требует обязательного наличия открытого порта, что может вызвать проблемы с прохождением NAT для транспортных протоколов не использующих порты, например, GRE.
Вернемся к iptables, функции NAT реализованы в одноименной таблице nat (все таблицы обозначаются строчными буквами), которая содержит цепочки PREROUTING, POSTROUTING и OUTPUT. В первые две цепочки попадает весь трафик узла, в последнюю только собственный исходящий.
Обратите внимание, что все преобразования NAT выполняются либо до, либо после принятия решения о маршрутизации и фильтрации трафика брандмауэром, этот момент следует учитывать при построении правил фильтрации.
В таблице nat доступно два основных действия:
Что делает SNAT? Он заменяет адрес источника пакета внешним адресом, также, при необходимости, меняет и порт источника, что позволяет различать запросы, сделанные с одного и того же порта разных ПК, запись о выполненной трансляции заносится в специальную таблицу трансляций (она же таблица NAT). Получив ответ роутер находит запись в таблице трансляций и на ее основании изменяет адрес и порт назначения ответного пакета, после чего он прозрачно доставляется адресату в локальной сети.
В общем виде запись в iptables для SNAT будет выглядеть следующим образом:
Приведенное выше правило будет изменять адрес источника для всех исходящих пакетов без разбору, что не всегда корректно и безопасно, поэтому правилом хорошего тона считается явно задавать диапазон адресов для преобразования:
Также мы можем выполнять трансляцию адресов не для всего трафика, а выборочно, указывая необходимые порты и протоколы, скажем только для SSH:
Частным случаем SNAT является действие MASQUERADE (маскарадинг), его основным отличием является то, маскарадинг самостоятельно получает IP-адрес от заданного сетевого интерфейса и не требует его явного указания. Это удобно если на внешнем интерфейсе используется динамический IP-адрес. Вторая особенность MASQUERADE в том, что при остановке интерфейса таблица трансляций полностью очищается и все текущие соединения разрываются. Причина такого поведения в том, что при следующем запуске интерфейса имеется возможность получить новый IP-адрес и все текущие записи сразу окажутся неверны.
Можно ли использовать MASQUERADE со статическим внешним адресом? Можно, но следует учитывать, что данное действие дает более высокую нагрузку на систему, так как определяет адрес внешнего интерфейса для каждого пакета, и в данном случае предпочтительно использовать SNAT.
Маскарадинг, также, как и SNAT, можно использовать только в цепочке POSTROUTING, и типичная запись будет выглядеть так:
Данное правило изменит адрес назначения всех пакетов пришедших на внешний интерфейс ens33 по протоколу tcp с портом назначения TCP-сегмента 3389 на адрес внутреннего сервера 192.168.100.1. Изменение номера порта при этом не производится. Если же вы используете нестандартный порт, то правило будет выглядеть несколько иначе:
При выполнении проброса портов обязательным критерием должен быть указан входящий интерфейс (как в правиле выше) или адрес этого интерфейса, в противном случае преобразованию будут подвергаться все пакеты, в том числе и проходящие из внутренней сети наружу. При использовании адресов вместо интерфейсов правило будет иметь следующий вид:
Узел назначения видит, что ему пришел пакет от удаленного узла XXX.XXX.XXX.XXX и он формирует ответный пакет с этим адресом в качестве назначения, а в качестве источника подставляет собственный адрес. Так как удаленный узел не принадлежит локальной сети данный пакет будет направлен основному шлюзу, т.е. назад нашему роутеру. А так как на шлюзе в любом случае включен либо SNAT, либо MASQUERADE, то локальный адрес источника будет заменен адресом внешнего интерфейса и такой пакет будет отправлен назад удаленному узлу.
Частным случаем DNAT является REDIRECT, это действие позволяет перенаправлять пакеты на другой порт текущего узла. Это удобно при прозрачном проксировании, либо перенаправлении трафика. Например, перехватим все DNS-запросы и направим их локальному DNS-серверу, развернутому на этом же узле:
А следующее правило выполнит прозрачное проксирование HTTP-трафика, не предназначенного узлу на развернутый на нем прокси-сервер:
Мы же перейдем к не менее интересной теме последующего движения пакетов. Давайте еще раз внимательно изучим схему выше. Действие DNAT в цепочке PREROUTING выполняется до решения о маршрутизации, а, следовательно, пакеты могут претерпевать «чудесные превращения». Непонимание этого момента приводит ко многим грубым ошибкам в настройке брандмауэра и неработоспособным конфигурациям.
Допустим у нас с внешнего адреса 198.51.100.1 и порта 3390 сделан проброс на внутренний адрес 192.168.100.1 и порт 3389, но нормально закрытый брандмауэр блокирует подключения. Что нам нужно сделать? Правильно, открыть порт. Если долго не думать, то вырисовывается такой набор правил:
На первый взгляд все правильно: мы «открыли» порт 3390 для внешних подключений, а затем перенаправили соединения с него на внутренний узел. Однако это грубая ошибка. Почему? Давайте разбираться.
И снова схема движения пакетов! Так, что мы видим? А видим мы то, что пакет первым делом попадает в цепочку PREROUTING таблицы nat и именно здесь у него будут изменены адрес и порт назначения. После чего пакет из локального, предназначенного данному узлу, превратится в транзитный и вместо цепочки INPUT таблицы filter пойдет в цепочку FORWARD и приведенное выше правило никогда не сработает.
А как будет правильно?
Аналогично, действие REDIRECT превращает транзитные пакеты в локальные и при возникновении такой необходимости фильтровать мы их должны уже не в цепочке FORWARD, а в INPUT.
В данной статье мы рассмотрели только базовые возможности таблицы nat в самых простых конфигурациях, но именно прочное усвоение базовых принципов позволяет успешно изучать более сложные схемы, которых мы обязательно коснемся в наших будущих публикациях.
Дополнительные материалы:
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Настройка Iptables для чайников
Подключение к сети само по себе несет в себе «угрозу», ведь за счет «видимости» хакеры получают возможность просканировать удаленный компьютер на предмет открытых портов, доступных для подключения извне. И наиболее подвержены сетевым опасностям серверы, которые специально и «открывают» для внешних пользователей.
Что такое Iptables?
Операционные системы Linux, на которых чаще всего и функционируют серверы (виртуальные машины), имеют встроенный инструмент защиты – программный фильтр Iptables. Все сетевые пакеты идут через ядро приложения и проходят проверку на безопасность для компьютера. Сценария всего два – или данные передаются дальше на обработку, или полностью блокируются.
Виды пакетов
Информационные пакеты фильтруются исходя из назначения. Под контроль попадают все данные, входящие на сервер, исходящие из него или проходящие через него как маршрутизатор (например, если компьютер используется в качестве прокси). Такой подход создает сплошной защитный экран (файрвол), через который практически нереально проникнуть с вредоносными целями.
В реальной работе сервера постоянно формируется минимум два вида пакетов – Input и Output. Ведь на каждый запрос пользователя положено дать ответ: сначала о поступлении данных на сервер, а затем и о результате обработки. Если «принято решение» отказать в доступе, об этом также сообщается на удаленное рабочее место. Иначе запрос зависнет, и пользователь будет видеть пустой экран.
Правила и действия Iptables
На каждый тип пакетов распространяется определенный набор правил, и их следует учитывать при настройке программы Iptables. Большая часть запросов проходит в виде последовательных цепочек в различных комбинациях. Если ошибиться на этом этапе, приложение будет функционировать со сбоями и блокировать «полезные» запросы.
Правила проверки устанавливаются в зависимости от характера соединения. Возможен мониторинг IP-адреса, порта подключения, отправителя, заголовка. Если пакет не проходит хотя бы по одному критерию, осуществляется действие ACCEPT (сквозное пропускание пакета, который не требуется блокировать файрволом). Фильтрация возможна на двух этапах:
Таблицы Iptables
Существует еще один «уровень» обработки – это таблицы, содержащие правила обработки тех или иных действий над пакетами. Например, фильтрация данных в Iptables осуществляется в таблице filter. К ней придется обращаться чаще всего.
Об основах работы с утилитой Iptables я рассказал, теперь можно приступать к тестовому запуску.
Запуск утилиты Iptables
Перед активацией приложение требуется установить из стандартного репозитория Linux. Так, для инсталляции в Ubuntu подойдет команда:
В дистрибутиве, базируемом на ядре Fedora, она выглядит несколько иначе:
Общий синтаксис запуска программы выглядит следующим образом:
Перечень основных действий, для выполнения которых используется Iptables:
В качестве дополнительных параметров используются опции:
Примеры настройки Iptables
Чтобы закрепить навыки настройки Iptables, рекомендуется протестировать утилиту в разных режимах. Например, отобразить список правил, очистить его, установить параметры по умолчанию или удалить их.
Список правил
Просмотр правил Iptables осуществляется командой:
Также есть возможность указать нужную цепочку, например:
Очистка правил
При любых ошибках в работе Iptables, чтобы исключить нарушение функционирования ядра перед другими действиями, требуется очистить правила, «обнулить» вводные данные. Выполняется эта процедура командой:
Если речь идет об определенной цепочке, то она будет выглядеть иначе:
Перечисленные действия выполняются для таблицы filter, которая подключена изначально.
Правила «по умолчанию»
Задаются правила «по умолчанию» вручную. Пример команд:
Здесь мы разрешаем все цепочки INPUT и OUTPUT, запрещаем FORWARD.
Блокировка пакетов
Заблокировать пакеты можно действием DROP. Оно позволяет включать фильтрацию по разным признакам вроде IP-адреса, маске сети, порту и пр.
Блокируются входящие пакеты на IP 20.20.20.20.
Теперь мы заблокировали пакеты, исходящие на IP 20.20.20.20.
Есть возможность указать маску сети, например, 20.20.20.0/255. Тогда правила будут применяться ко всем IP, входящим в указанный диапазон. Если же требуется заблокировать подключение строго по определенному протоколу, вводится команда:
Она блокирует все входящие соединения по SSH.
Удаление правил
При удалении правил в Iptables вводится команда с опцией -D. Но перед этим может понадобиться просмотреть перечень правил:

Если требуется полное удаление правил, применяется команда:
Сохранение правила Iptables
Теперь остается опробовать режим сохранения правил. Важно учитывать, что он действует до перезагрузки компьютера. После этой процедуры необходимо задавать их заново. В Ubuntu процесс требует ввода команды:
Для операционных систем на ядре Red Hat и CentOS она выглядит иначе:
Ничего сложного в настройке и управлении Iptables нет. Основные функции понятны даже новичкам, поэтому утилита и остается стандартом де-факто для всех систем на базе Linux.
Настройка iptables, разбираемся вместе.(Часть 1)
Мы будем разбираться с iptables и без небольшого теоритического вступления не обойтись.
Что бы правильно составлять правила брандмауэра нужно понимать как вообще идут пакеты и что с ними происходит.
Порядок движения транзитных пакетов
| Шаг | Таблица | Цепочка | Примечание |
|---|---|---|---|
| 1 | Сетевой интерфейс (например, eth0) | ||
| 2 | mangle | PREROUTING | Обычно эта цепочка используется для внесения изменений в заголовок пакета, например для изменения битов TOS и пр.. |
| 3 | nat | PREROUTING | Эта цепочка используется для трансляции сетевых адресов ( Destination Network Address Translation). Source Network Address Translation выполняется позднее, в другой цепочке. |
| 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) |
Как мы поняли есть основные три таблицы :
Для таблицы nat применимы действия:
Действие DNAT (Destination Network Address Translation) производит преобразование адресов назначения в заголовках пакетов. Другими словами, этим действием производится перенаправление пакетов на другие адреса, отличные от указанных в заголовках пакетов.
SNAT (Source Network Address Translation) используется для изменения исходных адресов пакетов. С помощью этого действия разделить единственный внешний IP адрес между компьютерами локальной сети для выхода в Интернет. В этом случае брандмауэр, с помощью SNAT, автоматически производит прямое и обратное преобразование адресов, тем самым давая возможность выполнять подключение к серверам в Интернете с компьютеров в локальной сети.
Маскировка ( MASQUERADE) применяется в тех же целях, что и SNAT, но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия — производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP, SLIP или DHCP.
Далее мы должны задать какой именно тип пакет будем фильтровать.
Действие с пакетом.
Получается у нас цепочка [ таблица — filter ] — [ трафик — INPUT ] — [ действие — DROP ] логика действий только кажется сложной. Думаю мы с вами на примерах разберемся и станет все просто.
Команд iptables:
Начнем разбираться на конкретных примерах.
Список критериев правил:
Так же критерия можно комбинировать.
S tate и деологический предшественник conntrack, имеет единственный параметр --state, аналогичный параметру --ctstate модуля conntrack (но, в отличие от него, не поддерживающий состояния DNAT и SNAT).
Первое как понятно это протокол, потом десятичное число(что значит не знаю),потом идет время жизни соединения. Далее состояние ESTABLISHED то есть соединение уже установлено, бывает еще UNREPLIED что значит что ответного трафика еще не было. Далее расположены адреса отправителя и получателя, порт отправителя и получателя. Далее все наоборот соответственно, ASSURED этот флаг сообщает о том, что соединение установлено уверенно и эта запись не будет стерта по достижении максимально возможного количества трассируемых соединений.
Как только трассировщик увидел первый ( SYN ) пакет, то присваивает ему статус NEW. Как только через трассировщика проходит второй пакет ( SYN/ACK ), то соединению присваивается статус ESTABLISHED.
С протоколом UDP немного все по другому этот протокол не предусматривает установления и закрытия соединения, но самый большой недостаток — отсутствие информации об очередности поступления пакетов. Но с точки зрения трасировщика все так же как с TCP. Первому пришедшему пакету присваивает ему статус NEW. Как только вы отправляете ответный пакет присваивается статус ESTABLISHED. Единственное отличия что статут ASSURED присваиваться только когда обменялись уже несколькими пакетами.
Логирование применений правил.
iptables дает возможность вести логи отдельных пакетов и событий. Для этого применяется действие LOG.
—log-level Используется для задания уровня журналирования (log level). Полный список уровней вы найдете в руководстве (man) по syslog.conf. Обычно, можно задать следующие уровни: debug, info, notice, warning, warn, err, error, crit, alert, emerg и panic. Логи пишутся в файл syslog.
Популярные команды управления iptables.
-n номер портов и ip в цифровом варианте.
—line-numbers номер строки.
REDIRECT
Новые правила автоматически не сохраняются и после перезагрузки сервера не будут действовать. Поэтому после изменения iptables нам нужно сохранить изменения.
iptables-save > /etc/iptables Сохранить текущий настройки в файл iptables.
iptables — restore > /etc/iptables Загрузить правила из файла.
Способ сохранять и загружать правила на ваше усмотрение. Мы с вами познакомились только с основами теории iptables, возможности настройки конечно гораздо больше. Более подробно о которых расскажем в другой статье.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.











