2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Что такое iptables

ИТ База знаний

Полезно

— Узнать IP – адрес компьютера в интернете

— Онлайн генератор устойчивых паролей

— Онлайн калькулятор подсетей

— Калькулятор инсталляции IP – АТС Asterisk

— Руководство администратора FreePBX на русском языке

— Руководство администратора Cisco UCM/CME на русском языке

— Руководство администратора по Linux/Unix

Навигация

Серверные решения

Телефония

FreePBX и Asterisk

Настройка программных телефонов

Корпоративные сети

Протоколы и стандарты

Популярное и похожее

Пошаговый ввод в домен Windows 10

Apache или IIS – сравнение и преимущества

Создание доменного пользователя и ввод компьютера в домен

Конвертация виртуальных машин/дисков

Погружение в Iptables – теория и настройка

Большой и наглядный материал

12 минут чтения

Начиная своё знакомство с iptables, следует рассказать про netfilter. Netfilter – это набор программных хуков внутри ядра Linux, которые позволяют модулям ядра регистрировать функции обратного вызова от стека сетевых протоколов.

Хук (hook) – это программный элемент, который позволяет перехватывать функции обратного вызова в чужих процессах.

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

Введение

Итак, iptables – это утилита для настройки программного Firewall’а (межсетевого экрана) linux, которая предустанавливается по умолчанию во все сборки Linux, начиная с версии 2.4. Запускается iptables из командной строки (CLI) под пользователем с правами root и настраивается там же.

Можете в этом убедиться, набрав команду iptables -V в командной строке, она покажет вам версию iptables.

Почему же iptables всем так понравился, что его стали включать во все сборки Linux? Всё дело в том, что iptables действительно очень прост в настройке. С помощью него можно решить следующие задачи:

  • Настроить stateless и statefull фильтрацию пакетов версий IPv4 и IPv6; Stateless – это фильтрация, основанная на проверке статических параметров одного пакета, например: IP адрес источника и получателя, порт и другие не изменяющиеся параметры. Statefull – это фильтрация, основанная на анализе потоков трафика. С помощью нее можно определить параметры целой TCP сессии или UDP потока.
  • Настраивать все виды трансляции IP адресов и портов NAT, PAT, NAPT;
  • Настроить политики QoS;
  • Производить различные манипуляции с пакетами, например – изменять поля в заголовке IP.

Прежде чем переходить к практике, давайте обратимся к теории и поймём саму логику iptables.

Логика и основные понятия iptables

Правила

Как и все файрволлы, iptables оперирует некими правилами (rules), на основании которых решается судьба пакета, который поступил на интерфейс сетевого устройства (роутера).

Ну допустим у нас есть сетевое устройство с адресом 192.168.1.1, на котором мы настроили iptables таким образом, чтобы запрещать любые ssh (порт 22) соединения на данный адрес. Если есть пакет, который идёт, например, с адреса 192.168.1.15 на адрес 192.168.1.1 и порт 22, то iptables скажет: “Э, нет, брат, тебе сюда нельзя” и выбросит пакет.

Или вообще ничего не скажет и выбросит, но об этом чуть позже 🙂

Каждое правило в iptables состоит из критерия, действия и счётчика

  • Критерий – это условие, под которое должны подпадать параметры пакета или текущее соединение, чтобы сработало действие. В нашем примере – этим условием является наличие пакета на входящем интерфейсе, устанавливающего соединение на порт 22
  • Действие – операция, которую нужно проделать с пакетом или соединением в случае выполнения условий критерия. В нашем случае – запретить пакет на порт 22
  • Счетчик – сущность, которая считает сколько пакетов было подвержено действию правила и на основании этого, показывает их объём в байтах.
Цепочки

Набор правил формируется в цепочки (chains)

Существуют базовые и пользовательские цепочки.

Базовые цепочки – это набор предустановленных правил, которые есть в iptables по умолчанию.

Существует 5 базовых цепочек и различаются они в зависимости от того, какое назначение имеет пакет. Имена базовых цепочек записываются в верхнем регистре.

    PREROUTING – правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне;

  • INPUT – применяются к пакетам, которые предназначаются для самого хоста или для локального процесса, запущенного на данном хосте. То есть не являются транзитными;
  • FORWARD – правила, которые применяются к транзитным пакетам, проходящими через хост, не задерживаясь;
  • OUTPUT – применяются к пакетам, которые сгенерированы самим хостом;
  • POSTROUTING – применяются к пакетам, которые должны покинуть сетевой интерфейс.
  • В базовых цепочках обязательно устанавливается политика по умолчанию, как правило – принимать (ACCEPT) или сбрасывать (DROP) пакеты. Действует она только в цепочках INPUT, FORWARD и OUTPUT

    Таблица

    Таблицы – это набор базовых и пользовательских цепочек. В зависимости от того, в какой таблице находится цепочка правил, с пакетом или соединением производятся определённые действия

    Существует 5 таблиц:

    • filter – таблица, выполняющая функции фильтрации пакетов по определённым параметрам. В большинстве случаев вы будете использовать именно её. Содержит следующие встроенные цепочки: FORWARD, INPUT, OUTPUT;
    • raw – чтобы понять предназначение этой таблицы, нужно понимать логику работы statefull firewall’а. Дело в том, что по умолчанию, iptables рассматривает каждый пакет как часть большого потока и может определить какому соединению принадлежит тот или иной пакет. С помощью raw таблицы настраиваются исключения, которые будут рассматривать пакет как отдельную, ни к чему не привязанную сущность. Содержит следующие встроенные цепочки: INPUT, OUTPUT;
    • nat – таблица, предназначенная целиком по функции трансляции сетевых адресов. Содержит следующие встроенные цепочки: PREROUTING, OUTPUT, POSTROUTING;
    • mangle – таблица, предназначенная для изменения различных заголовков пакета. Можно, например, изменить TTL, количество hop’ов и другое. Содержит следующие встроенные цепочки: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING>;
    • security – используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux.

    Теперь мы можем представить себе логику iptables в виде следующей схемы:

    Действия

    Ну и последнее, о чем нужно рассказать, прежде чем мы с вами начнем писать правила – это target. В контексте iptables, target – это действие, которое нужно проделать с пакетом или соединением, которое совпало с критериями правила.

    Итак, наиболее используемые действия:

    • ACCEPT – разрешить прохождение пакета;
    • DROP – тихо выбросить пакет, не сообщая причин;
    • QUEUE – отправляет пакет за пределы логики iptables, в стороннее приложение. Это может понадобиться, когда нужно обработать пакет в рамках другого процесса в другой программе;
    • RETURN – остановить обработку правила и вернуться на одно правило назад. Это действие подобно break’у в языке программирования.

    Помимо этих четырех, есть ещё масса других действий, которые называются расширенными (extension modules):

    • REJECT – выбрасывает пакет и возвращает причину в виде ошибки, например: icmp unreachable;
    • LOG – просто делает запись в логе, если пакет соответствует критериям правила;

    Есть действия, которые доступны только в определенной цепочке и таблицах, например, только в табоице nat и цепочках OUTPUT и PREROUTING доступно действие DNAT, которое используется в NAT’ировании и меняет Destination IP пакета. В той же таблице, только в цепочке POSTRUNNING доступно действие SNAT, меняющее Source IP пакета.

    Отдельно остановимся на действии MASQUERADE, которое делает то же самое что SNAT, только применяется на выходном интерфейсе, когда IP адрес может меняться, например, когда назначается по DHCP.

    Пишем правила

    Отлично, теперь давайте приближаться к практике. Как Вы уже поняли, мы будем писать правила, поэтому нам нужно понять, как они строятся.

    Читать еще:  Что такое еврософа

    Итак, допустим у нас есть хост с адресом 192.168.2.17, на 80 (http) порту которого, работает вэб-сервер Apache. Мы заходим на адрес http://192.168.2.17 с хоста с адресом 192.168.2.2 и всё отлично работает:

    А теперь открываем командную строку под root на хосте 192.168.2.17 и пишем:

    Попробуем открыть открыть http://192.168.2.17 ещё раз:

    Упс, не работает. Давайте теперь разбираться, что мы наделали?

    Всё очень просто – данной командой мы:

    • вызвали утилиту iptables;
    • -A – этим ключом мы указали, что нужно добавить правило к существующей цепочке;
    • INPUT – указали цепочку, к которой хотим добавить правило;
    • -p tcp – явно указали протокол TCP. Здесь также можно указывать другие протоколы (udp, icmp, sctp), или номер протокола, инкапсулируемого в IP (17 – udp, 6 – tcp и др.);
    • -s 192.168.2.2 – указали, какой адрес источника должен быть у пакета, который мы хотим фильтровать;
    • –dport 80 – указали адресованные какому порту пакеты мы хотим фильтровать. В данном случае – 80, на котором работает наш сервер Apache.
    • -j DROP – указали что нужно сделать с пакетом, параметры которого совпали с данными критериями. В данном случае – просто тихо выбросить.

    Таким образом, мы заблокировали все пакеты с адреса 192.168.2.2 на локальный порт 80 и тем самым закрыли доступ к нашему серверу Apache для данного хоста.

    Обратите внимание – мы не указывали таблицу, в цепочки которой мы хотим добавить правило. Поэтому, по умолчанию таблица – filter. Для явного указания таблицы нужно перед указанием цепочки ввести ключ -t или (–table)

    Чтобы открыть доступ опять просто поменяем ключ -A в правиле на -D, тем самым мы удалим данное правило из iptables.

    Синтаксис iptables

    Друзья, на самом деле в iptables очень богатый синтаксис правил. Полный список ключей и параметров вы можете найти в официальном гайде на iptables.org. Мы же приведём самые “ходовые” опции, которыми вы, вероятно, будете пользоваться. Чтобы вы не запутались, мы приводим их в табличках ниже.

    Для удобства, в iptables реализовано очень много сокращений для разных ключей. Например, мы писали ключ -A вместо полного –append, -p вместо полного –proto и -s вместо полного –source, дальше мы покажем, что ещё можно сократить и где применить.

    Начнём с команд для редактирования правил и цепочек – добавления, удаления, замены и так далее:

    Настройка правил iptables в Linux

    Введение

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

    Важно: В последних дистрибутивах RHEL/CentOS по умолчанию используется служба firewallD, уже установленная в системе. Если вы хотите использовать Iptables, сначала нужно ее отключить.

    Для рассматриваемого примера используются VPS на Ubuntu 16.04 и локальная машина с SSH-клиентом

    Основы Iptables

    Все данные передаются по сети в виде пакетов. Ядро Linux предоставляет интерфейс для фильтрации пакетов входящего и исходящего трафика при помощи специальных таблиц. Iptables — это приложение командной строки и межсетевой экран для Linux, которым можно пользоваться для создания, поддержания работоспособности и проверки этих таблиц.

    Можно создать несколько таблиц. В каждой таблице может содержаться несколько цепочек. Цепочка — это набор правил. Каждое правило определяет, что делать с пакетом, если он соответствует условиям. При соответствии пакета над ним выполняется целевое действие (TARGET). Это может быть проверка следующей цепочкой или один из следующих вариантов:

    • ACCEPT: разрешить передачу пакета.
    • DROP: запретить передачу пакета.
    • RETURN: пропустить текущую цепочку и перейти к следующему правилу в цепочке, которая ее вызвала.

    В данном руководстве мы будем работать с одной из таблиц по умолчанию, которая называется фильтром (filter). В таблице фильтра есть три цепочки (набора правил):

    • INPUT – используется для контроля входящих пакетов. Можно разрешать или блокировать подключения по порту, протоколу или IP-адресу источника.
    • FORWARD – используется для фильтрации пакетов, приходящих на сервер, но перенаправляемых куда-либо еще.
    • OUTPUT – используется для фильтрации исходящих пакетов.

    Пример настройки iptables

    Давайте рассмотрим настройку iptables, на примере настройки доступа к web серверу.

    Шаг 1 – Установка брандмауэра Iptables в Linux

    1. Установка Iptables

    Iptables предустановлен практически во всех дистрибутивах Linux, но если у вас его нет, в системах Ubuntu/Debian воспользуйтесь командами:

    или в Centos/RedHat

    2. Проверка текущего состояния Iptables

    Эта команда позволит вам проверить состояние текущей конфигурации Iptables. Опция -L используется для выведения всех правил, а опция -v — для более подробной информации:

    В рассматриваемом примере во всех трёх цепочках установлена политика по умолчанию ACCEPT. Ни в одной цепочке нет никаких правил. Давайте изменим цепочку INPUT для фильтрации входящего трафика.

    Шаг 2 – Определение правил

    Определение правила означает внесение его в список (цепочку). Вот пример команды Iptables с обычными опциями. Некоторые из них не являются обязательными.

    Опция -A означает “append”, добавление правила в конец цепочки. Очень важным моментом является то, что правила в цепочке применяются последовательно, и если пакет удовлетворяет условиям одного из них, последующие применяться не будут. Это всегда нужно помнить при создании наборов правил. Таблица означает таблицу, в которой редактируются цепочки. По умолчанию это filter. Цепочка — имя цепочки, к которой мы добавляем правило. Интерфейс — сетевой интерфейс, для которого выполняется фильтрация трафика. Протокол указывает сетевой протокол, пакеты которого вы хотите фильтровать, источник — IP-адрес отправителя пакета, номер порта — порт на вашем сервере, для которого применяется правило. Эти и некоторые другие опции будут рассмотрены ниже при демонстрации соответствующих действий. Для более подробной информации о команде Iptables и ее опциях обратитесь к соответствующей man-странице.

    1. Разрешение трафика на локальном узле

    Первым делом нам нужно обязательно разрешить трафик через интерфейс loopback. Чтобы связь между приложениями и базами данных на сервере продолжалась в обычном режиме.


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

    2. Разрешение подключений к портам HTTP, SSH и SSL

    Нам требуется, чтобы в обычном режиме работали порты HTTP (порт 80), https (порт 443), ssh (порт 22). Для этого нужно выполнить следующие команды. В них мы при помощи опции -p указали протокол, а при помощи опции —dport (destination port, порт на принимающей стороне, в данном случае это ваш сервер) соответствующий каждому протоколу порт:

    Теперь все TCP-подключения с этими номерами портов будут разрешены. На самом деле для подключения по порту ssh лучше разрешить не со всех ip адресов, а только с определенных. Для защиты вашего сервера, как это сделать написано ниже

    3. Фильтрация пакетов по источнику

    Если вам нужно принимать или отклонять пакеты по IP-адресу или диапазону IP-адресов источника, можно указать их при помощи опции -s. Например, чтобы принимать пакеты с адреса 192.168.1.3:

    вместо хоста также можно указать и полностью сеть, например для разрешения подключения по ssh только с локальной сети 192.168.1.0/24 пропишите правило

    Отклонение команд с IP-адреса задаётся аналогичной командой с опцией DROP:

    Если нужно отклонять или принимать пакеты с диапазона IP-адресов, вам потребуется воспользоваться модулем Iprange с опцией -m и при помощи параметра —src указать диапазон:

    Читать еще:  Что обозначает имя Саша

    4. Запрет всего остального трафика

    Важно: после определения правил обязательно нужно запретить остальной трафика, в целях исключения несанкционированного доступа к серверу через другие открытые порты.

    Эта команда отклоняет весь трафик, кроме указанных выше портов. Теперь можно проверить свои правила командой:

    Как мы видим для интерфейса loopback у нас разрешен любой трафик, по портам 80 и 443 можно подключиться с любого ip. А по порту 22 можно подключиться только с сети 192.168.1.0/24. Не забудьте сохранить настройки, иначе после перезагрузке вы потеряете все изменения. Как сохранить написано ниже.

    Удаление правил iptables

    Если нужно удалить все правила и прописать все заново с чистого листа, можно воспользоваться командой очистки (flush):

    Она удаляет все существующие правила. Если вам нужно удалить конкретное правило, воспользуйтесь опцией -D. Сначала при помощи опции —line-numbers выведите пронумерованный список всех правил:


    Для удаления правила нужно указать цепочку и номер в списке. В нашем случае это цепочка INPUT и номер 3.

    Настройка NAT (MASQUERADE)

    Большинство организаций получает от своих интернет-провайдеров ограниченное количество публично доступных IP-адресов, поэтому администратору требуется разделять доступ к Интернету, не выдавая каждому узлу сети публичный IP-адрес. Для доступа к внутренним и внешним сетевым службам узлы локальной сети используют внутренний (частный) IP-адрес. Граничные маршрутизаторы (межсетевые экраны) могут получать входящие соединения из Интернета и передавать их нужным узлам локальной сети и наоборот, направлять исходящие соединения узлов удаленным интернет-службам. Такое перенаправление сетевого трафика может быть опасным, особенно учитывая доступность современных средств взлома, осуществляющих подмену внутренних IP-адресов и таким образом маскирующих машину злоумышленника под узел вашей локальной сети. Чтобы этого не случилось, в Iptables существуют политики маршрутизации и перенаправления, которые можно применять для исключения злонамеренного использования сетевых ресурсов. Политика FORWARD позволяет администратору контролировать маршрутизацию пакетов в локальной сети. Например, чтобы разрешить перенаправление всей локальной сети, можно установить следующие правила (в примере предполагается, что внутренний IP-адрес брандмауэра/шлюза назначен на интерфейсе eth1):

    Эти правила предоставляют системам за шлюзом доступ к внутренней сети. Шлюз направляет пакеты от узла локальной сети к узлу назначения и наоборот (опции -o и -i), передавая их через устройство 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.

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

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

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

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

    Что такое Iptables?

    Подсистема iptables и Netfilter уже достаточно давно встроена в ядро Linux. Все сетевые пакеты, которые проходят через компьютер, отправляются компьютером или предназначены компьютеру, ядро направляет через фильтр iptables. Там эти пакеты поддаются проверкам и затем для каждой проверки, если она пройдена выполняется указанное в ней действие. Например, пакет передается дальше ядру для отправки целевой программе, или отбрасывается.

    Виды пакетов

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

    Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:

    • Input – обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к вашему компьютеру по ssh или любой веб-сайт отправит вам свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
    • forward – эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели. Как я уже говорил, такое наблюдается на маршрутизаторах или, например, если ваш компьютер раздает wifi;
    • output – эта цепочка используется для исходящих пакетов и соединений. Сюда попадают пакеты, которые были созданы при попытке выполнить ping losst.ru или когда вы запускаете браузер и пытаетесь открыть любой сайт.

    Но если вы думаете что можно просто полностью закрыть цепочку Input для увеличения безопасности, то вы очень сильно ошибаетесь. При работе сети используются обе цепочки input и output. Например, вы пытаетесь выполнить ping, данные отправляются через output, но ответ приходит через input. То же самое происходит при просмотре сайтов и других действиях. А вот цепочка forward может вообще не использоваться если ваш компьютер не является маршрутизатором. Так что настройка iptables должна выполняться очень аккуратно.

    Читать еще:  Какие произведения писали Ершов и Гаршин

    Правила и действия

    Перед тем как перейти к созданию списка правил iptables нужно рассмотреть как они работают и какие бывают. Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:

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

    Правила могут проверять любые соответствия, например, по ip, по порту получателя или отправителя, заголовкам пакета и многому другому. Если пакет не подходит ни одному из правил, то к нему применяется действие по умолчанию, обычно ACCEPT.

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

    • prerouting – в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
    • postrouting – сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.

    Но это еще не все. У нас еще есть таблицы iptables, с которыми тоже желательно разобраться.

    Таблицы ipatables

    Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации. Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:

    • raw – предназначена для работы с сырыми пакетами, пока они еще не прошли обработку;
    • mangle – предназначена для модификации пакетов;
    • nat – обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора;
    • filter – основная таблица для фильтрации пакетов, используется по умолчанию.

    С теорией почти все, теперь давайте рассмотрим утилиту командной строки iptables, с помощью которой и выполняется управление системой iptables.

    Утилита Iptables

    Подсистема iptables и netfilter встроены в ядро, но вот набор утилит для управления всем этим не всегда поставляется вместе с системой. Для установки утилиты в Ubuntu наберите:

    sudo apt install iptables

    А в дистрибутивах, основанных на Fedora, установка iptables выполняется немного по-другому:

    sudo yum install iptables

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

    $ iptables -t таблица действие цепочка дополнительные_параметры

    Теперь давайте рассмотрим параметры iptables, таблица указывает таблицу, с которой нужно работать, этот параметр можно упустить, действие – нужное действие, например, создать или удалить правило, а дополнительные параметры описывают действие и правило, которое нужно выполнить.

    Осталось рассмотреть основные действия, которые позволяет выполнить iptables:

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

    Дополнительные опции для правил:

    • -p – указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp,
      mh;
    • -s – указать ip адрес устройства-отправителя пакета;
    • -d – указать ip адрес получателя;
    • -i – входной сетевой интерфейс;
    • -o – исходящий сетевой интерфейс;
    • -j – выбрать действие, если правило подошло.

    Теперь вы можем перейти рассмотрению примеров того как выполняется настройка iptables.

    Примеры настройки Iptables

    Мы рассмотрим несколько основных примеров, чтобы вы смогли закрепить все прочитанное выше.

    Список правил

    Сначала давайте рассмотрим как выполняется просмотр правил iptables, для этого достаточно опции -L:

    Также вы можете указать нужную цепочку, чтобы вывести правила только для нее:

    iptables -L INPUT

    Очистка правил

    Вы не можете просто так отключить iptables остановив сервис обновления правил iptables через systemd или даже удалив набор утилит для настройки. Подсистема работает на уровне ядра и не зависит от того, что там у вас установлено. Поэтому если сделаете что-то не так, то нужно будет очистить правила. Для этого выполните:

    sudo iptables -F

    Или только для определенной цепочки:

    sudo iptables -F Input

    Напоминаю, что все эти действия выполняются для таблицы по умолчанию – filter.

    Правила по умолчанию

    Как я уже говорил, если для пакета не подходит ни одно правило, то для него применяется действие по умолчанию. Его можно задать с помощью опции -p:

    sudo iptables -p INPUT ACCEPT
    $ sudo iptables -p OUTPUT ACCEPT
    $ sudo iptables -p FORWARD DROP

    В этом примере мы разрешаем цепочки INPUT и OUTPUT, но запрещаем FORWARD.

    sudo iptables -L

    Блокировка пакетов

    Для блокировки пакетов мы можем использовать действие DROP, фильтровать пакеты, которые нужно заблокировать мы можем по множеству критериев, например, протоколу, ip адресу, маске сети, порту и многому другому.

    Вот так будет выглядеть команда, которая позволяет добавить правило iptables для блокировки всех входящих пакетов от 10.10.10.10:

    sudo iptables -A INPUT -s 10.10.10.10 -j DROP

    А теперь исходящие пакеты на этот же адрес:

    sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

    Блокировка диапазона ip выполняется подобным образом. Для этого нужно использовать маску сети 10.10.10.0/24. Это будут все адреса начиная от 10.10.10.0 до 10.10.10.255:

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

    Или расширенный вариант маски:

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

    Также вы можете заблокировать все входящие соединения ssh:

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

    Как видите, добавить правило iptables очень просто.

    Удаление правил

    Удаление правил iptables выполняется точно так же, как и создание новых, только вместо опции A нужно использовать опцию D. Сначала смотрим список правил:

    sudo iptables -L

    Например, вот так можно удалить правило iptables, которое было создано вторым:

    sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

    Также вы можете полностью очистить iptables выполнив команду с опцией -F:

    sudo iptables -F

    Сохранить правила Iptables

    Все настройки iptables, которые вы указали с помощью этих команд сохранятся только до перезагрузки. После перезагрузки компьютера все изменения будут стерты. Поэтому чтобы сохранить правила iptables, нужно выполнить специальную команду. Только в разных дистрибутивах она отличается. В Ubuntu выполните:

    А в Red Hat или CentOS:

    sudo /sbin/service iptables save

    Выводы

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

    На завершение видео о том, как увеличить безопасность вашего сервера:

    Источники:

    http://wiki.merionet.ru/servernye-resheniya/14/pogruzhenie-v-iptables-teoriya-i-nastrojka/
    http://itproffi.ru/nastrojka-pravil-iptables-v-linux/
    http://losst.ru/nastrojka-iptables-dlya-chajnikov

    голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    Статьи c упоминанием слов: