iptables вставить правило под номером
Iptables – полезные команды
Нижеприведенные команды iptables требуют соответствующую поддержку ядра системы. Если у вас стандартное системное ядро, то эти модули уже присутствуют в системе и будут подгружаться при необходимости.
Длинные правила я обрезал символом “\”. На самом деле эти правила надо писать в одну строку.
Использование IP диапазона
В любых правилах можно задавать диапазоны ip. Это требуется, когда масками сети не перекрыть все возможные ip диапазоны.
Задание мультипортов
Очень полезно, чтобы не писать несколько правил на каждый порт, используем только одно правило
Задаем вероятность соединения
Очень хитрое правило 🙂 Можно задавать вероятности срабатывания правил.
Я читал байку, что таким образом были выбиты деньги на новый сервер, когда системный администратор грамотно расставил вероятности в правилах и доказал начальству, что старый сервер не справляется с нагрузкой. Т.к понять неискушенному человеку почему то есть соединение на порт, то нет, да еще непонятна закономерность очень непросто.
Защищаем 22 порт SSH от брутфорса (перебора паролей)
Задача следующих правил ограничить соединения на порт ssh пятью попытками в течении 10 минут с 1 ip адреса.
Создаем новую цепочку правил SSHDROP
Все новые соединения на порт 22 пропускаем через цепочку SSHDROP
Если требуется будем писать лог соединений ssh
Если начальные условия нарушены то запретим соединение
Добавляем правило не перегружая весь конфиг iptables
Чтобы добавить правило в определенное место требуется вывести правила с нумерацией строк. На примере цепочки INPUT это делается командой:
Номера строк идут по порядку и ничего страшного, что надо вставить вместо какой-то строки новое правило. Правила подвинуться 🙂
Для вставки строки выполняем команду:
Если после тестирования правила все нормально не забываем добавить это же правило и в конфиг iptables.
Удаляем правила из цепочек
Правила удалять достаточно просто. Иногда требуется удалить только одно правило, не перегружая весь конфиг iptables.
Например у нас в системе есть правило.
Еще пример с более сложный правилом для NAT
Еще одна возможность удалять правила, через его номер.
Смотрим номера к примеру цепочки INPUT
Первым столбцом идут номера правил.
Удаляем первое правило в цепочке INPUT
Аналогичным образом можно смотреть, а потом удалять правила в любой цепочке.
Статья еще не закончена и будет постоянно пополняться по мере накопления мной знаний по новым интересным возможностям (хитростям) Iptables
Общее представление об iptables. Добавление, удаление, цепочки.
Что это?
iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux версий 2.4, 2.6, 3.x, 4.x. Для использования утилиты iptables требуются привилегии суперпользователя (root).
Цепочки, схема
Input — обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к вашему компьютеру по ssh или любой веб-сайт отправит вам свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
forward — эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели.
output — эта цепочка используется для исходящих пакетов и соединений. Сюда, например, попадают пакеты, когда вы запускаете браузер и пытаетесь открыть любой сайт.
prerouting — в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
postrouting — сюда попадают все проходящие пакеты, которые уже прошли цепочку forward
Добавление/удаление правил
Действия над пакетами:
ACCEPT — разрешить прохождение пакета дальше по цепочке правил;
DROP — удалить пакет;
REJECT — отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
LOG — сделать запись о пакете в лог файл;
QUEUE — отправить пакет пользовательскому приложению.
Опции:
-A — добавить правило в цепочку;
-С — проверить все правила;
-D — удалить правило;
-I — вставить правило с нужным номером;
-L — вывести все правила в текущей цепочке;
-S — вывести все правила;
-F — очистить все правила;
-N — создать цепочку;
-X — удалить цепочку;
-P — установить действие по умолчанию
Дополнительные опции:
-p — указать протокол, один из tcp, udp, icmp и др.;
-s — указать ip адрес устройства-отправителя пакета;
-d — указать ip адрес получателя;
-i — входной сетевой интерфейс;
-o — исходящий сетевой интерфейс;
-j — выбрать действие, если правило подошло.
Примеры:
Вывод всех правил на экран:
Вывод всех правил на экран c нумерацией строк:
Вывод правил для цепочки INPUT
Блокировка всех входящих пакетов от 10.0.0.1:
Блокировка всех исходящих пакетов от 10.0.0.1:
Блокировка всех входящих соединений от 10.0.0.1 по ssh:
Очистить все правила
Очистить все правила в цепочке INPUT:
Удаления правила для всех входящих пакетов от 10.0.0.1:
Добавить правило на 3 место в цепочке INPUT (остальные сдвинутся ниже):
Удалить 3 правило в цепочке INPUT:
Сохранение после перезагрузки
и в настройках интефейса прописать
SNAT, DNAT, MASQUERADE
DNAT — от англ. Destination Network Address Translation — Изменение Сетевого Адреса Получателя. DNAT — это изменение адреса назначения в заголовке пакета. Зачастую используется в паре с SNAT. Основное применение — использование единственного реального IP-адреса несколькими компьютерами для выхода в Интернет и предоставления дополнительных сетевых услуг внешним клиентам.
SNAT — от англ. Source Network Address Translation — Изменение Сетевого Адреса Отправителя. SNAT — это изменение исходного адреса в заголовке пакета. Основное применение — использование единственного реального IP-адреса несколькими компьютерами для выхода в Интернет. В натоящее время диапазон реальных IP-адресов, по стандарту IPv4, недостаточно широк, и его не хватает на всех (переход на IPv6 разрешит эту проблему).
Маскировка (MASQUERADE) применяется в тех же целях, что и SNAT, но в отличие от последней, MASQUERADE дает более сильную нагрузку на систему. Происходит это потому, что каждый раз, когда требуется выполнение этого действия — производится запрос IP адреса для указанного в действии сетевого интерфейса, в то время как для SNAT IP адрес указывается непосредственно. Однако, благодаря такому отличию, MASQUERADE может работать в случаях с динамическим IP адресом, т.е. когда вы подключаетесь к Интернет, скажем через PPP, SLIP или DHCP.
Предположим у нас есть сервер с двумя интерфейсами. Один смотрит в Интернет, другой в локальную сеть и не забывает про правила для input и output. Раздадим интернет:
Для начала разрешаем шлюзу передавать транзитный трафик:
Разрешаем проходить трафику из и в локальную сеть,например, 10.1.30.0/24:
Для статического внешнего адреса интерфейса:
Для динамического внешнего адреса интерфейса:
DNAT подменяет адрес назначения для входящих пакетов, позволяя «пробрасывать» адреса или отдельные порты внутрь локальной сети. Например:
Для начала разрешаем шлюзу передавать транзитный трафик:
Разрешаем проходить траффику из и в локальную сеть,например, 10.1.30.0/24:
Из внешнего источника по порту 29001 можно получить доступ по ssh к компьютеру во внутренней сети 10.1.30.40:
Настройка 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 в Linux
Рассмотрим использование наиболее популярного в дистрибутивах Linux межсетевого экрана iptables на примере облачной платформы Selectel. Описанные в статье действия производились в Ubuntu 20.04 LTS 64-bit.
Подготовка сервера
Сначала необходимо пройти регистрацию, если еще нет аккаунта, затем войти в панель управления. В меню «Облачная платформа» — «Создать проект», задать имя проекта, нажать кнопку «Создать проект». Появится кнопка «Создать сервер», нажимаем.
Будет показана страница «Новый сервер», где необходимо указать имя сервера, регион (если необходимо). Чтобы выбрать образ нужной операционной системы, нажимаем кнопку «Выбрать другой источник».
Во всплывающем меню, в колонке «Операционные системы» выбираем Ubuntu, слева появится список разных версий ОС, доступных к установке, выбираем «Ubuntu 20.04 LTS 64-bit» и нажимаем кнопку «Выбрать».
Двигаемся вниз по странице, ставим флаг «Локальный диск», в области «Сетевые диски» нажимаем кнопку «Удалить диск», для нашего примера этого достаточно.
В настройках «Сеть» выбираем «Приватная подсеть + 1 плавающий IP», значение в поле должно измениться на «Новый плавающий IP адрес».
Добравшись до пункта меню «Доступ» — скопируйте «Пароль для root», он необходим для взаимодействия с сервером через SSH протокол.
После нажатия кнопки «Создать», ориентировочно через одну минуту сервер будет доступен. Заходим в меню «Облачная платформа» — «Серверы».
В списке отобразится информация о ранее созданном сервере. Статус сервера ALIVE, означает, что сервер активен и готов к работе. Область, помеченная цифрой 3, содержит IP-адрес, по которому будем подключаться, используя любой SSH клиент, например PuTTY для Windows.
Выполним первоначальную настройку сервера с целью повышения степени защищенности системы. Все действия, описанные в данной статье, выполняются с правами суперпользователя root.
Актуализируем информацию о доступных пакетах в используемых репозиториях:
С точки зрения безопасности, заходить на сервер сразу пользователем root неправильно, поэтому создаем непривилегированного пользователя с именем fwuser:
В ходе интерактивного диалога необходимо задать пароль (New password), подтвердить его (Retype new password), другие пункты не обязательно заполнять, можно проигнорировать их, нажимая ENTER. В финальном вопросе Is the information correct? [Y/n] нажимаем Y, затем ENTER.
Добавляем пользователя fwuser в группу sudo для возможности использования повышенных прав в системе:
Редактируем конфигурационный файл SSH-сервера:
Рекомендуется сменить стандартный номер порта, допустим на 22200. Находим строку #Port 22 и приводим ее к виду:
Запретим входить напрямую пользователем root. Ищем строку PermitRootLogin yes, меняем значение на no, в итоге строка выглядит так:
Нажимаем комбинацию клавиш Ctrl+O, внизу отобразится строка: File Name to Write: /etc/ssh/sshd_config, подтверждаем нажатием ENTER. Изменения сохранены, теперь выходим из редактора нажатием сочетания клавиш Ctrl+X.
Для вступления в силу изменений конфигурации SSH сервера — перезапускаем его:
Важно заметить, что при следующем подключении к серверу, подключаться нужно к порту 22200. Вход пользователю root запрещен. Авторизоваться необходимо вновь созданным пользователем fwuser, и только после успешного входа, следует повысить уровень привилегий в системе командой:
Система попросит ввести свой пароль (не root) и нажать ENTER, если следующая строка начинается на root, а заканчивается знаком # — привилегии суперпользователя получены успешно.
Введение
iptables — это утилита командной строки, используемая для управления встроенным брандмауэром netfilter, доступным в ядре Linux, начиная с версии 2.4. Брандмауэр — это узел сети, на котором происходит фильтрация сетевого трафика на основе заданных администратором правил. Обеспечить безопасность сервера или инфраструктуры, означает обеспечить отказоустойчивость и стабильность работы ваших серверов и приложений, что крайне чувствительно для бизнеса или персональных проектов.
В глобальной сети огромное количество угроз — боты, периодически прощупывают стандартные точки входа в системы, хулиганы, любопытные, взломщики — люди, целенаправленно пытающиеся получить несанкционированный доступ к информационным системам. Задача iptables — исключить, либо, по крайней мере, минимизировать негативное воздействие со стороны разного рода правонарушителей.
Установка iptables
Список образов операционных систем, доступных к установке в облачной платформе Selectel, где iptables уже включен в дистрибутив:
Убедиться в этом можно при помощи команды:
Будет выведена информация о версии пакета.
В образах CentOS 8 64-bit и CentOS 8 Stream 64-bit, iptables отсутствует, поскольку разработчики отказались от него в пользу более нового пакета — nftables, поддержка которого на уровне ядра доступна с версии 3.13. Если существует необходимость использовать именно iptables — требуется выполнить следующий порядок действий:
Включение сервиса в автозагрузку:
Межсетевой экран готов к использованию.
Порядок прохождения таблиц и цепочек
Любой, поступивший пакет на сервер с iptables, проходит через ядро, а именно межсетевой экран netfilter. Каждый из них классифицируется в зависимости от его назначения, попадает в соответствующую ему таблицу и проходит по цепочкам, содержащим правила, установленные администратором.
На основе этих правил, выполняется действие — принять пакет, отбросить, удалить или передать следующему узлу сети. Иллюстрация, представленная ниже, наглядно показывает путь прохождения пакета по системе:
Данный рисунок не отражает истинную архитектуру брандмауэра, а показывает только логику работы. Существует много распространенных заблуждений по поводу уровней вложенности таблиц, цепочек, и правил. Самым верхним уровнем представления являются таблицы, которые содержат набор свойственных им цепочек. Цепочки содержат списки правил. Схематично «матрешка» выглядит следующим образом:
Синтаксис iptables
Сетевой экран iptables очень гибок в настройке и имеет огромное количество разнообразных ключей и опций. Общий вид управляющей команды:
Рассмотрим каждый элемент в отдельности.
Пакет
Под пакетом понимают структурированный блок данных, содержащий в себе как пользовательскую информацию, называемую ещё полезной нагрузкой, так и служебную информацию, например об адресе отправителя, получателя, времени жизни пакета и многое другое.
Цепочки
Существует 5 видов цепочек:
Также есть возможность создавать и удалять собственные цепочки, в большинстве случаев, в этом нет необходимости. Названия цепочек пишут заглавными буквами.
Таблицы
В netfilter существуют 5 типов таблиц, каждая из них имеет свое назначение.
Таблица raw
Содержит цепочки PREROUTING и OUTPUT, здесь производятся манипуляции с пакетами до задействования механизма определения состояний.
Таблица mangle
Предназначена для модификации заголовков сетевых пакетов, таких параметров как ToS (Type of Service), TTL (Time To Live), MARK. Содержит все существующие пять цепочек.
Таблица nat
Используется для трансляции сетевых адресов, т.е. подмены адреса получателя/отправителя, применяется, если сервер используется в качестве маршрутизатора. Содержит цепочки PREROUTING, OUTPUT, POSTROUTING.
Таблица filter
Основная таблица, служит для фильтрации пакетов, именно здесь происходит принятие решений о разрешении или запрете дальнейшего движения пакета в системе. Используется по умолчанию, если явно не указано имя другой таблицы. Содержит цепочки INPUT, FORWARD и OUTPUT.
Таблица security
Используется для взаимодействия с внешними системами безопасности, в частности с SELinux и AppArmor. Содержит цепочки INPUT, OUTPUT и FORWARD.
Имена таблиц принято писать строчными буквами.
Действия
Правилами задается поведение для iptables, каким образом поступить с тем или иным пакетом при попадании под заданные критерии. Решения, которые принимает брандмауэр, называют действиями, самые распространенные из них:
Команды
Для iptables команда — это инструкция к действию, при помощи них можно добавлять, удалять и сбрасывать все правила, задавать действия по умолчанию и многое другое. Команды могут подаваться как в сокращенном, так и в полном виде, более подробно в таблице:
Полный вид | Сокращенный вид | Описание |
—append | -A | добавить правило в конец указанной цепочки |
—check | -C | проверить существующие правила в заданной цепочке |
—delete | -D | удалить правило с указанным номером в заданной цепочке |
—insert | -I | вставить правило с заданным номером, без указания номера — правило будет по умолчанию добавлено первым |
—replace | -R | заменить правило с указанным номером |
—list | -L | вывести список всех действующих правил со всех цепочек, если указать интересующую цепочку — вывод будет сделан только по ней |
—list-rules | -S | построчный вывод всех правил во всех цепочках, если после ключа указать имя цепочки — будут выведены только ее правила |
—flush | -F | удалить все правила, при указании имени цепочки — правила удаляться только в ней |
—zero | -Z | обнулить все счетчики во всех цепочках, при указании цепочки — обнуление произойдет только в ней |
—new | -N | создать пользовательскую цепочку |
—delete-chain | -X | удалить пользовательскую цепочку |
—policy | -P | установить политику по умолчанию для цепочки, обычно это ACCEPT или DROP, она будет применена к пакетам, не попавшим ни под один критерий |
—rename-chain | -E | переименовать цепочку, сначала указывается текущее имя, через пробел — новое |
—help | -h | вывести справочную информацию по синтаксису iptables |
Критерии
Чтобы к пакету применить какое-либо действие, необходимо, чтобы он попал под определенные критерии. Одно правило может содержать несколько критериев. Они, как и команды, имеют полную и сокращенную форму. Некоторые из них поддерживают логическую НЕ, если перед ними поставить знак ! — критерий будет инвертирован. Список в таблице ниже:
Полный вид | Сокращенный вид | Поддержка инверсии | Описание |
—protocol | -p | да | указывает протокол, такие как tcp, udp, udplite и другие, поддерживаемые системой, ознакомиться со списком можно в файле /etc/protocols |
—source | -s | да | указывает адрес источника пакета, в качестве значения можно указать как один IP-адрес, так и диапазон |
—destination | -d | да | адрес получателя, синтаксис аналогичен предыдущему пункту |
—match | -m | нет | подключает указанный модуль |
—jump | -j | нет | когда правило подошло — выполнить указанное действие |
—goto | -g | нет | перейти к указанной цепочке правил |
—in-interface | -i | да | задает входящий сетевой интерфейс |
—out-interface | -o | да | указывает исходящий сетевой интерфейс |
—fragment | -f | да | указывает на фрагменты фрагментированных пакетов |
—set-counters | -c | нет | устанавливает начальные значения счетчиков пакетов и байт |
—destination-port | —dport | да | порт получателя пакета |
—source-port | —sport | да | порт отправителя пакета |
Состояние соединений
Система отслеживания состояния соединений conntrack — важная часть сетевого стека linux, встроенная в ядро. Используется для сопоставления пакетов с конкретными соединениями. Под анализ попадают все пакеты, кроме помеченных NOTRACK, в таблице raw. Все пакеты классифицируются на:
Основные команды iptables
Как посмотреть список правил iptables
Отображать все действующие правила лучше с детализацией и нумерацией строк:
Ключ —line-numbers нумерует строки, -L выводит список правил всех цепочек, -v отвечает за детализацию вывода, -n выводит IP-адреса и номера портов в числовом формате.
Как удалить правило в iptables
В первую очередь необходимо определить номер правила, которое требуется удалить, выводим список действующих правил командой:
Предположим, требуется удалить правило 4 в цепочке INPUT:
Как очистить список правил iptables
Сброс всех правил обычно требуется совместно с изменением политики по умолчанию на ACCEPT, эта процедура связана с вводом набора правил, поэтому удобнее всего создать небольшой скрипт для автоматизации процесса:
Наполняем его командами:
Сохраняем и выходим. Команды можно последовательно подавать вручную, но это замедляет работу и увеличивает риск ошибки за счет влияния человеческого фактора.
Делаем файл исполняемым:
Правила сброшены, применяется политика по умолчанию ACCEPT для всех цепочек.Нередко случается, что при написании правил, теряется доступ к серверу, вследствие допущенных ошибок в созданных правилах. Работая с облачной платформой Selectel, это не проблема. Не нужно ждать, когда кто-то перезагрузит сервер и все починит. Все делается в панели управления, быстро и удобно. В меню слева, нажимаем «Облачная платформа», справа отобразится список серверов, нажимаем на значок «Консоль» напротив имени машины, доступ к которой прекратился, выделен на рисунке ниже красным.
В открывшейся консоли необходимо авторизоваться, после ввести команду, если скрипт был ранее подготовлен:
Если скрипт не был создан, то ввести команды последовательно.
Как сохранить правила iptables
Утилита iptables, как и маршрутизаторы Cisco, не сохраняет правила, если это явно не указать и после перезагрузки возвращается в предыдущее состояние. Установим пакет:
В процессе установки на оба вопроса ответить Yes. Сохранить текущие правила:
Система при следующей загрузке использует последние сохраненные правила.
Как восстановить правила
В процессе настройки брандмауэра, по разным причинам, возникает необходимость вернуться к заведомо рабочим, испытанным правилам. Сервис netfilter-persistent сохраняет их в файле /etc/iptables/rules.v4, если не успели сохранить активные правила, значит в файле предыдущая версия, восстанавливаем:
Как записать в лог событие
В процессе отладки правил, требуется фиксировать события в системном журнале. Запретим входящие пакеты на порт 80:
Убедимся, что записи событий ведутся. Откроем файл журнала:
В нем должны быть строки вида:
Примеры настройки iptables
В данном разделе рассмотрим задачи, с которыми придется столкнуться, работая с iptables.
Как заблокировать IP-адрес в iptables
Допустим, необходимо заблокировать компьютер с IP-адресом 172.10.10.1, тогда правило будет выглядеть следующим образом:
Как разрешить IP-адрес в iptables
Необходимо разрешить весь трафик к серверу для клиента с IP-адресом 192.168.111.1:
Как открыть порт в iptables
Предположим, что политика по умолчанию — блокировать все, что явно не разрешено. Откроем порты веб-сервера для обеспечения работы HTTP протокола — порт 80, и поддержки HTTPS протокола совместно с SSL — порт 443. Также для доступа к серверу по SSH откроем порт 22. Эту задачу можно решить как минимум двумя способами: создать однострочное правило, либо прописать правила по каждому из портов, рассмотрим оба. В одну строку:
При использовании расширения multiport, всегда необходимо использовать критерий -p tcp или -p udp, таким образом, одной строкой можно указать до 15 разных портов через запятую. Важно не путать критерии —-dport и —-dports. Первый из них используется для указания одного порта, второй сразу для нескольких, аналогично с —sport и —sports.
Вариант многострочной записи — для каждого порта свое правило:
Как закрыть порт в iptables
Необходимость в закрытии порта может возникнуть, когда используется политика по умолчанию ACCEPT и доступ к определенному сервису нужно ограничить. Рассмотрим несколько ситуаций.
Закроем доступ к FTP серверу, работающему на 21 порту:
Оставим доступ только себе к SSH серверу, для остальных запретим:
Здесь 192.168.124.5 — IP-адрес доверенной машины, знак ! перед ключом -s используется для инверсии, т.е. всем, кроме этого адреса доступ закрыт.
Как разрешить или запретить ICMP ping трафик
Разрешить ping хоста:
Запретить входящие icmp-пакеты:
Как разрешить трафик на локальном узле
Трафик на локальном сетевом интерфейсе lo должен быть разрешен для корректной работы сервисов, использующих для обмена данными интерфейс локальной петли, например, базы данных, прокси-сервер squid. Поэтому рекомендуется разрешить трафик на вход и выход:
Как блокировать трафик по MAC-адресу
Устройство, которому хотим запретить доступ к серверу, имеет MAC-адрес 00:0A:EF:76:23:12:
Здесь ключ -m вызывает расширение mac, ключ —mac-source задает MAC-адрес узла, с которого поступил пакет.
Как разрешить трафик по MAC-адресу
Необходимость может возникнуть в случае использования политики запрещения всего, что явно не разрешено, на практике редко встречается разрешение по MAC-адресам, команда iptables имеет вид:
Как ограничить доступ по времени
В iptables существует модуль time, который позволяет регулировать доступ согласно расписанию. Например, запретим доступ к FTP серверу в среду с 08:10 до 08:15:
Рассмотрим подробнее значения ключей:
Настройка NAT
Преобразование сетевых адресов (от англ. Network Address Translation) используется на маршрутизаторах, для взаимного предоставления сервисов между сетями согласно определенным правилам. В iptables для этого предусмотрена таблица nat, для которой характерны действия DNAT, SNAT, MASQUERADE, каждое из них описано в начале статьи. Рассмотрим практические задачи.
Проброс порта
Дано: локальная сеть на основе облачной платформы Selectel, состоящая из двух серверов и маршрутизатора с публичным IP-адресом.
Оба сервера имеют доступ в Интернет, но только один, используемый в качестве брандмауэра — имеет публичный IP-адрес. Наглядная схема на иллюстрации ниже.
Это означает, что все пакеты, приходящие на публичный IP-адрес, доставляются сразу на компьютер с IP-адресом 192.168.0.2.
Задача: Предоставить доступ снаружи к веб-серверу с IP-адресом 192.168.0.3.
Решение: Все операции с iptables выполняются на сервере 192.168.0.2. В схеме получается два маршрутизатора. При запросе пользователем веб-страницы — пакет с маршрутизатора, который имеет публичный адрес, попадает на сервер-маршрутизатор 192.168.0.2, на порт 80, нужно его передать веб-серверу 192.168.0.3. Делаем первый шаг — меняем адрес назначения пакета:
DNAT используется, если необходимо пользователям глобальной сети предоставить доступ к компьютеру, находящемуся за маршрутизатором, т.е. во внутренней сети, это называется пробросом портов.
Теперь нужно поменять адрес отправителя пакета на адрес маршрутизатора 192.168.0.2, который передаст пакет маршрутизатору с публичным IP-адресом, а он уже в свою очередь доставит пакет клиенту, используем для этого SNAT. Делаем второй шаг:
Та же самая команда при использовании действия MASQUERADE не потребует ключа —to-source и указания адреса, поскольку в таком случае происходит автоматическая подмена адреса отправления на IP-адрес сетевого интерфейса, с которого ушел пакет:
Проброс порта веб-сервера выполнен.
Переадресация порта — redirect
Перенаправление пакетов, пришедших на один порт, другому порту, называют переадресацией. В качестве примера — предварительно настроим веб-сервер на работу с портом 8080, добавим следующие правила:
Действие REDIRECT выполняется в пределах одного сервера и имеет единственный ключ —-to-ports, указывающий порт назначения, этот ключ разрешается использовать, если критерий -p явно задает используемый протокол tcp или udp.
Использование в качестве маршрутизатора
Рассмотрим классическую схему для выхода в Интернет в рамках типового офиса. Имеется несколько компьютеров, которым надо предоставить доступ в глобальную сеть, один канал в Интернет, шлюз на основе компьютера c двумя сетевыми картами и операционной системой Linux.
Задача маршрутизатора не только предоставить доступ в Интернет, но еще и сделать это безопасно. Одна сетевая карта подключена в локальную сеть, по умолчанию будем считать доверенной зоной, другой сетевой адаптер с постоянным адресом подключен к сети Интернет. Схема подключения для наглядности:
Откроем, например, редактором nano:
Ниже представлен набор правил iptables с комментариями, для реализации данной схемы, копируем эти строки в открытый файл:
Важное замечание. Данный набор правил — это примитивный маршрутизатор, частный случай, представлен для наглядности и не претендует на руководство по безопасности. Поэтому, каждому, кто будет копировать, необходимо изменить его под свои нужды, как минимум переменные LAN, WAN и LAN_NET.
Сохраняем файл сочетанием нажатий клавиш Ctrl+O, нажимаем ENTER для подтверждения, затем Ctrl+X для выхода. Делаем файл исполняемым:
Активируем правила, выполнив подготовленный файл скрипта: