Image

Что такое IPTables

IPTables — это мощный инструмент для управления сетевой безопасностью и маршрутизацией в Linux-системах, таких как Ubuntu. Он управляет всеми входящими, исходящими и проходящими через сервер сетевыми пакетами. В этой инструкции я постараюсь объяснить максимально просто и подробно, как работают iptables и как ими управлять.

Что такое IPTables?

    IPTables — это утилита командной строки, которая позволяет администратору управлять таблицами фильтрации пакетов в ядре Linux. Она управляет правилами для сетевых соединений и может:

    блокировать/разрешать доступ к определённым портам,
    перенаправлять трафик,
    реализовывать функции брандмауэра (firewall).

    Как работает IPTables?

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

    INPUT: Цепочка для входящего трафика (например, трафик, направленный к серверу).
    FORWARD: Цепочка для трафика, который проходит через сервер (маршрутизированный трафик).
    OUTPUT: Цепочка для исходящего трафика (например, трафик, отправленный с сервера).

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

    Основные термины IPTables

      Чтобы лучше понимать, как работает IPTables, нужно знать несколько основных терминов:

      Таблицы

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

      filter (фильтрация пакетов): Основная таблица, которая используется для фильтрации пакетов (INPUT, OUTPUT, FORWARD).
      nat (сетевая трансляция адресов): Используется для изменения адресов источника и назначения (NAT, SNAT, DNAT).
      mangle: Используется для изменения полей заголовков пакетов (например, изменение типа сервиса).
      raw: Используется для маркировки пакетов, которые должны быть обработаны или пропущены в связи с отслеживанием соединений.

      Цепочки

      Цепочки — это наборы правил, по которым обрабатываются пакеты в iptables. Основные цепочки:

      INPUT: Входящий трафик (например, когда кто-то пытается подключиться к серверу).
      FORWARD: Трафик, который пересылается через сервер (например, когда сервер выступает в роли маршрутизатора).
      OUTPUT: Исходящий трафик (например, когда сервер сам посылает данные в интернет).

      Правила

      Правила в цепочке описывают, что делать с пакетами, которые соответствуют определённым критериям. Например:

      Разрешить или отклонить пакеты.
      Применить NAT к пакетам.
      Применить логирование.

      Таргеты

      Таргет (цель) — это действие, которое iptables применяет к пакету:

      ACCEPT: Разрешить пакет.
      DROP: Отбросить пакет (пакет игнорируется, и отправитель не получает ответа).
      REJECT: Отклонить пакет с уведомлением об отказе.
      LOG: Включить логирование пакетов.
      MASQUERADE: Применяется для NAT.

      Основные команды для работы с iptables

      Просмотр текущих правил

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

        sudo iptables -L

        Эта команда покажет текущие правила для всех цепочек (INPUT, OUTPUT, FORWARD).

        Добавление правил

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

        Пример: Разрешить доступ к порту 22 (SSH) для входящих соединений:

        sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

        Здесь:

        -A INPUT — добавляем правило в цепочку INPUT.
        -p tcp — правило применяется к TCP-пакетам.
        --dport 22 — правило применяется к пакету, который направлен на порт 22 (порт SSH).
        -j ACCEPT — действие: разрешить пакет.

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

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

        Просмотреть правила с номерами:

        sudo iptables -L --line-numbers

        Удалить правило по номеру: Например, чтобы удалить третье правило в цепочке INPUT:

        sudo iptables -D INPUT 3

        Блокировка трафика

        Чтобы заблокировать доступ к определённому порту, например, 80 (HTTP):

        sudo iptables -A INPUT -p tcp --dport 80 -j DROP

        Это правило блокирует все входящие пакеты на порт 80 (обычно используется для веб-трафика).

        Сохранение правил

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

        Для систем Ubuntu:

        sudo apt install iptables-persistent
        sudo netfilter-persistent save

        Если iptables-persistent не установлен, можно использовать команду:

        sudo iptables-save > /etc/iptables/rules.v4

        Сброс правил

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

        sudo iptables -F

        Эта команда очистит все правила в текущей таблице (по умолчанию — это таблица filter).

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

          Теперь рассмотрим несколько примеров использования iptables для настройки брандмауэра.

          Разрешить весь исходящий трафик и блокировать весь входящий, кроме SSH

          Сначала разрешим весь исходящий трафик:

          sudo iptables -A OUTPUT -j ACCEPT

          Затем разрешим входящий трафик на порт 22 (SSH):

          sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

          Теперь заблокируем весь остальной входящий трафик:

          sudo iptables -A INPUT -j DROP

          Настройка NAT (маскарадинг) для внутренней сети

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

          Включение IP-форвардинга:

          sudo sysctl -w net.ipv4.ip_forward=1

          Настройка NAT с помощью iptables: Предположим, у тебя есть локальная сеть 192.168.1.0/24, и ты хочешь, чтобы сервер предоставлял доступ в интернет через интерфейс eth0:

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

          Логирование пакетов

          Иногда полезно не только блокировать трафик, но и записывать в логи информацию о пакетах, которые не были разрешены.

          Пример: Логировать пакеты, которые приходят на порт 80:

          sudo iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP Blocked: "

          Защита от DoS-атак

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

          Пример: Разрешить не более 10 подключений в секунду к порту 80:

          sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 10/sec -j ACCEPT

          Таблицы и цепочки в iptables: более глубокий взгляд

          filter таблица

            Это основная таблица, которая используется по умолчанию. Она отвечает за фильтрацию пакетов, и в ней есть три основные цепочки:

            INPUT: Для пакетов, которые идут к серверу.
            FORWARD: Для пакетов, которые проходят через сервер.
            OUTPUT: Для пакетов, которые исходят от сервера.

            nat таблица

            Эта таблица используется для изменения адресов пакетов:

            PREROUTING: Изменение адресов до того, как пакет направится к маршрутизации.
            POSTROUTING: Изменение адресов после маршрутизации.
            OUTPUT: Изменение исходящего трафика.

            mangle таблица

            Используется для изменения заголовков пакетов. Например, можно изменить TTL (время жизни пакета) или тип сервиса (TOS).

            Заключение

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

            Комментарии

            1. Lavyonc:

              Спасибо!

            Добавить комментарий