- iptables. Сохранение и восстановление правил
- Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности
- Перезагрузка iptables
- Перезагрузка iptables
- 4 ответа
- Настройка iptables в Linux
- Подготовка сервера
- Введение
- Установка iptables
- Порядок прохождения таблиц и цепочек
- Синтаксис iptables
- Пакет
- Цепочки
- Таблицы
- Таблица raw
- Таблица mangle
- Таблица nat
- Таблица filter
- Таблица security
- Действия
- Команды
- Критерии
- Состояние соединений
- Основные команды iptables
- Как посмотреть список правил iptables
- Как удалить правило в iptables
- Как очистить список правил iptables
- Как сохранить правила iptables
- Как восстановить правила
- Как записать в лог событие
- Примеры настройки iptables
- Как заблокировать IP-адрес в iptables
- Как разрешить IP-адрес в iptables
- Как открыть порт в iptables
- Как закрыть порт в iptables
- Как разрешить или запретить ICMP ping трафик
- Как разрешить трафик на локальном узле
- Как блокировать трафик по MAC-адресу
- Как разрешить трафик по MAC-адресу
- Как ограничить доступ по времени
- Настройка NAT
- Проброс порта
- Переадресация порта — redirect
- Использование в качестве маршрутизатора
iptables. Сохранение и восстановление правил
Многие параметры сети в Linux настраиваются с использованием iptables, например пересылка пакетов, проброс портов, какие-либо разрешения или запреты для сетевого трафика, построение NAT и т.д.
Но iptables запоминает конфигурацию только до перезагрузки, поэтому встает вопрос, как сохранить и восстановить правила, при этом не перебивая каждое правило вручную в скрипт. Для этого существуют утилиты iptables-save и iptables-restore.
Для сохранения текущих активных правил воспользуемся утилитой iptables-save:
iptables-save > /etc/iptables/iptables.rules
данная команда сохранит активную конфигурацию в файл /etc/iptables/iptables.rules (естественно он должен быть доступен на запись).
И соответственно для восстановления:
Так же у iptables-save есть полезный параметр:
-t имя_таблицы — ограничиться конкретной таблицей.
А у iptables-restore несколько параметров:
-T имя_таблицы — ограничиться конкретной таблицей;
-n — не очищать таблицы перед восстановлением (только добавить правила).
Теперь остается только автоматизировать процесс восстановления. Для этого добавим запуск iptables-restore после поднятия одного из сетевых интерфейсов. Для этого откроем файл настройки сети /etc/network/interfaces и в настройки loopback интерфейса добавим восстановление правил (подробнее про настройку сетевых параметров рассказывается в статье Debian, Ubuntu, Raspbian. Базовая настройка IPv4 на сетевых Ethernet интерфейсах):
auto lo
iface lo inet loopback
post-up iptables-restore
Почему именно в loopback интерфейс? Потому что он запускается практически всегда и при любых условиях, соответственно мы можем быть уверены, что восстановление правил iptables отработается точно. Хотя иногда бывают ситуации, когда нужно правила iptables подгрузить при запуске или остановке конкретного интерфейса, но это уже зависит от конфигурации и целей.
Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности
Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.
Источник
Перезагрузка iptables
Я внес изменения в конфигурационный файл iptables в /etc/iptables/filter Ubuntu и хочу их перезагрузить. Я прочитал справочную страницу и также погуглил, но не смог найти информацию. Любая помощь будет оценена.
Самый простой способ — это перезагрузить компьютер (также, если ниже не работает, перезагрузите компьютер, проверьте, внес ли это изменение).
Во-вторых, проще всего перезапустить демоны, используя настройки iptables (google: restart daemon ubuntu).
примеры (зависит от вашей конфигурации):
Обычно ваши правила брандмауэра находятся в файле конфигурации /etc/iptables.firewall.rules
Чтобы активировать правила, определенные в вашем файле, вы должны отправить их iptables-restore (вы можете использовать другой файл, если хотите):
И вы можете проверить, что они активируются с помощью:
Если вы хотите активировать одни и те же правила при каждой загрузке компьютера, создайте этот файл:
С этим содержанием:
И дать ему разрешение на исполнение:
Надеюсь, это поможет вам =)
Пример файла для /etc/iptables.firewall.rules :
Если вы выполнили свои правила, они уже запущены, и перезагрузка не требуется. В случае, если у вас есть файл конфигурации, но он не был выполнен, лучший способ, который я видел до сих пор, — это использовать iptables-apply (расширение iptables).
Это будет применять правила в течение 60 секунд (10 по умолчанию) и отменить их, если вы не подтвердите их. Это спасет вас в случае, если вы вышвырнетесь из системы из-за правил (например, если вы работаете через ssh).
Вы можете использовать следующее в качестве замены:
Источник
Перезагрузка iptables
Я внес изменения в конфигурационный файл iptables в /etc/iptables/filter в Ubuntu и хочу перезагрузить их. Я прочитал man-страницу, а также googled, но не смог найти информацию. Любая помощь будет оценена.
4 ответа
Самый простой способ — перезагрузка (также, если ниже не работает, перезагрузитесь, проверьте, изменилось ли это).
Вторым проще всего перезапустить демоны, используя конфигурации iptables (google: restart daemon ubuntu).
(зависит от вашей конфигурации):
Обычно ваши правила брандмауэра находятся в файле конфигурации /etc/iptables.firewall.rules
Чтобы активировать правила, определенные в вашем файле, вы должны отправить их в iptables-restore (вы можете использовать другой файл, если хотите):
И вы можете проверить, что они активированы с помощью:
Если вы хотите активировать одни и те же правила при каждом запуске компьютера, создайте этот файл:
С этим контентом:
И дайте ему разрешение на выполнение:
Надеюсь, это поможет вам =)
Пример файла для /etc/iptables.firewall.rules :
Если вы выполнили свои правила, они уже запущены и перегрузка не требуется. Если у вас есть файл конфигурации, но он не был выполнен наилучшим образом, я видел до сих пор использование iptables-apply ( расширение iptables).
Это применит правила в течение 60 секунд (по умолчанию 10) и вернет их, если вы их не подтвердите. Это спасет вас, если вы выбросите систему из-за правил (например, если вы работаете через ssh).
В качестве замены вы можете использовать следующее:
Источник
Настройка 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 7 Minimal 64-bit;
- CentOS 7 64-bit;
- Debian 9 (Stretch) 64-bit;
- Debian 10 (Buster) 64-bit;
- Ubuntu 16.04 LTS 64-bit;
- Ubuntu 18.04 LTS 64-bit;
- Ubuntu 18.04 LTS Machine Learning 64-bit;
- Ubuntu 20.04 LTS 64-bit.
Убедиться в этом можно при помощи команды:
Будет выведена информация о версии пакета.
В образах CentOS 8 64-bit и CentOS 8 Stream 64-bit, iptables отсутствует, поскольку разработчики отказались от него в пользу более нового пакета — nftables, поддержка которого на уровне ядра доступна с версии 3.13. Если существует необходимость использовать именно iptables — требуется выполнить следующий порядок действий:
Включение сервиса в автозагрузку:
Межсетевой экран готов к использованию.
Порядок прохождения таблиц и цепочек
Любой, поступивший пакет на сервер с iptables, проходит через ядро, а именно межсетевой экран netfilter. Каждый из них классифицируется в зависимости от его назначения, попадает в соответствующую ему таблицу и проходит по цепочкам, содержащим правила, установленные администратором.
На основе этих правил, выполняется действие — принять пакет, отбросить, удалить или передать следующему узлу сети. Иллюстрация, представленная ниже, наглядно показывает путь прохождения пакета по системе:
Данный рисунок не отражает истинную архитектуру брандмауэра, а показывает только логику работы. Существует много распространенных заблуждений по поводу уровней вложенности таблиц, цепочек, и правил. Самым верхним уровнем представления являются таблицы, которые содержат набор свойственных им цепочек. Цепочки содержат списки правил. Схематично «матрешка» выглядит следующим образом:
Синтаксис iptables
Сетевой экран iptables очень гибок в настройке и имеет огромное количество разнообразных ключей и опций. Общий вид управляющей команды:
Рассмотрим каждый элемент в отдельности.
Пакет
Под пакетом понимают структурированный блок данных, содержащий в себе как пользовательскую информацию, называемую ещё полезной нагрузкой, так и служебную информацию, например об адресе отправителя, получателя, времени жизни пакета и многое другое.
Цепочки
Существует 5 видов цепочек:
- PREROUTING — предназначена для первичной обработки входящих пакетов, адресованных как непосредственно серверу, так и другим узлам сети. Сюда попадает абсолютно весь входящий трафик для дальнейшего анализа.
- INPUT — для входящих пакетов, отправленных непосредственно этому серверу.
- FORWARD — для проходящих пакетов, не адресованных этому компьютеру, предназначены для передачи следующему узлу, в случае, если сервер выполняет роль маршрутизатора.
- OUTPUT — для пакетов, отправленных с этого сервера.
- POSTROUTING — здесь оказываются пакеты, предназначенные для передачи на другие узлы сети.
Также есть возможность создавать и удалять собственные цепочки, в большинстве случаев, в этом нет необходимости. Названия цепочек пишут заглавными буквами.
Таблицы
В 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, каким образом поступить с тем или иным пакетом при попадании под заданные критерии. Решения, которые принимает брандмауэр, называют действиями, самые распространенные из них:
- ACCEPT — разрешить дальнейшее прохождение пакета по системе;
- DROP — выбросить пакет без уведомления отправителя;
- REJECT — отказать в прохождении пакета с уведомлением отправителя, такой способ может привести к дополнительным затратам ресурсов процессора, поэтому, в большинстве случаев рекомендуется использовать DROP;
- LOG — зафиксировать информацию о пакете в файле системного журнала;
- MARK — позволяет помечать определенные пакеты, например для маршрутизации, данная метка перестает существовать, как только пакет покинет брандмауэр;
- CONNMARK — то же самое, что и MARK, только для соединений;
- QUEUE — отправляет пакет в очередь приложению для дальнейшего взаимодействия;
- RETURN — прекращение движения пакета по текущей цепочке и возврат в предыдущую цепочку. Если текущая цепочка единственная — к пакету будет применено действие по умолчанию;
- REDIRECT — перенаправляет пакет на указанный порт, в пределах этого же узла, применяется для реализации «прозрачного» прокси;
- DNAT — подменяет адрес получателя в заголовке IP-пакета, основное применение — предоставление доступа к сервисам снаружи, находящимся внутри сети;
- SNAT — служит для преобразования сетевых адресов, применимо, когда за сервером находятся машины, которым необходимо предоставить доступ в Интернет, при этом от провайдера имеется статический IP-адрес;
- MASQUERADE — то же, что и SNAT, но главное отличие в том, что может использоваться, когда провайдер предоставляет динамический адрес, создаёт дополнительную нагрузку на систему по сравнению с SNAT;
- TOS — позволяет управлять битами в одноименном поле заголовка IP-пакета;
- ULOG — более продвинутый вариант записи информации, может писать как в обычный текстовый файл, так и в базу данных;
- TTL — используется для изменения значения поля одноименного заголовка IP-пакета, устанавливает время жизни пакета.
Команды
Для 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. Все пакеты классифицируются на:
- NEW — открывается новое соединение, пришел только первый пакет;
- ESTABLISHED — соединение установлено, пришел уже не первый пакет в рамках этого сеанса. При правильной настройке iptables — такие пакеты проходят по системе без фильтрации, поскольку она уже была выполнена для первого пакета соединения;
- RELATED — открывается новое соединение, связанное с другим сеансом, имеющим статус ESTABLISHED;
- INVALID — помечаются пакеты, которые не связаны ни с одним из существующих соединений, и не могут создать новое, их невозможно идентифицировать. В целях безопасности рекомендуется остановить движение таких пакетов по системе, используя действие DROP.
Основные команды 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:
Рассмотрим подробнее значения ключей:
- —kerneltz — использование времени текущей временной зоны, иначе iptables будет работать по времени часового пояса UTC;
- —timestart — время начала срабатывания условия, допустимый диапазон указания времени с 00:00:00 до 23:59:59, можно указывать время в коротком варианте ЧЧ:ММ, как это сделано в примере;
- —timestop — время окончания действия условия, формат ввода аналогичен timestart;
- —weekdays — дни недели, в которые условие будет работать, допустимые значения Mon, Tue, Wed, Thu, Fri, Sat, Sun, или значения от 1 до 7. Так же поддерживается формат в два символа, например Mo, Tu, We и т.д. При необходимости указать несколько дней — перечисляются через запятую, без пробела, например Fr,Su,We,Tu;
- —monthdays — задает день месяца, допустимые значения от 1 до 31.
Настройка 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 для выхода. Делаем файл исполняемым:
Активируем правила, выполнив подготовленный файл скрипта:
Источник