Схема работы Iptables:
Схема работы Iptables:

Iptables как с ним работать 

Iptables - это мощный инструмент управления сетью в Linux, который позволяет администраторам управлять входящими и исходящими пакетами данных. Это основной инструмент для настройки межсетевых экранов в системах Linux.

Введение в Iptables

Iptables работает путем проверки пакетов данных на соответствие определенным критериям и выполнения заданных действий, если пакеты соответствуют этим критериям. Эти критерии и действия определяются в таблицах, которые состоят из набора правил.

В Iptables есть четыре основные таблицы:

  1. Filter - это основная таблица, используемая для фильтрации пакетов.

  2. NAT - эта таблица используется для настройки NAT (Network Address Translation).

  3. Mangle - эта таблица используется для специальной обработки пакетов.

  4. Raw - эта таблица используется для обхода системы отслеживания состояний.

Каждая таблица состоит из набора цепочек. Цепочки - это последовательности правил, которые применяются к пакетам. В Iptables есть три встроенные цепочки:

  1. INPUT - эта цепочка применяется к пакетам, которые предназначены для самой системы.

  2. FORWARD - эта цепочка применяется к пакетам, которые проходят через систему.

  3. OUTPUT - эта цепочка применяется к пакетам, которые исходят из системы.

Базовые команды Iptables

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

Чтобы просмотреть текущие правила, используйте команду iptables -L. Это покажет все правила в таблице filter. Чтобы просмотреть правила в другой таблице, используйте флаг -t, например, iptables -t nat -L.

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

Чтобы добавить новое правило, используйте команду iptables -A. Например, чтобы заблокировать весь входящий трафик от IP-адреса 192.168.0.100, вы можете использовать следующую команду:

iptables -A INPUT -s 192.168.0.100 -j DROP 

В этой команде -A INPUT добавляет новое правило в цепочку INPUT, -s 192.168.0.100 определяет исходный IP-адрес, а -j DROP указывает, что все пакеты, соответствующие этому правилу, должны быть отброшены.

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

Чтобы удалить правило, вам нужно знать его номер в цепочке. Вы можете узнать номера правил, используя команду iptables -L --line-numbers. Затем вы можете удалить правило, используя команду iptables -D и номер правила. Например, чтобы удалить первое правило в цепочке INPUT, вы можете использовать следующую команду:

iptables -D INPUT 1 

Изменение дефолтного политики

Вы можете изменить дефолтную политику для цепочки, используя команду iptables -P. Например, чтобы отклонить все входящие пакеты по умолчанию, вы можете использовать следующую команду:

iptables -P INPUT DROP 

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

По умолчанию, правила iptables не сохраняются после перезагрузки системы. Чтобы сохранить текущие правила, вы можете использовать команду iptables-save. Это выведет текущие правила в формате, который можно использовать для восстановления с помощью команды iptables-restore.

iptables-save > /path/to/iptables/rules 

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

iptables-restore < /path/to/iptables/rules 

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

Блокировка IP-адреса

Чтобы заблокировать весь трафик от определенного IP-адреса, вы можете использовать следующую команду:

iptables -A INPUT -s 192.168.0.100 -j DROP 

Открытие порта для входящего трафика

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

iptables -A INPUT -p tcp --dport 80 -j ACCEPT 

В этой команде -p tcp указывает на протокол (в данном случае TCP), --dport 80 указывает на порт (в данном случае 80), а -j ACCEPT указывает, что все пакеты, соответствующие этому правилу, должны быть приняты.

Настройка простого межсетевого экрана

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

iptables -A OUTPUT -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP 

В этом примере разрешен весь исходящий трафик, а входящий трафик разрешен только на порты 22 (SSH), 80 (HTTP) и 443 (HTTPS). Все остальные входящие пакеты отклоняются.

Расширенное использование Iptables

Логирование

Iptables предоставляет возможность логирования пакетов, что может быть полезно для отладки и мониторинга. Для включения логирования используйте цель LOG. Например, чтобы залогировать все отброшенные пакеты, можно использовать следующую команду:

iptables -A INPUT -j LOG --log-prefix "Dropped Packet: " iptables -A INPUT -j DROP 

Здесь --log-prefix "Dropped Packet: " добавляет указанный префикс к каждому лог-сообщению, что упрощает фильтрацию и анализ логов.

Создание пользовательских цепочек

Iptables позволяет создавать пользовательские цепочки для более гибкого управления правилами. Например, вы можете создать цепочку для обработки всего трафика от определенного IP-адреса:

iptables -N MY_CHAIN iptables -A MY_CHAIN -s 192.168.0.100 -j DROP iptables -A INPUT -j MY_CHAIN 

В этом примере команда -N MY_CHAIN создает новую цепочку с именем MY_CHAIN. Затем добавляется правило, которое отбрасывает все пакеты от 192.168.0.100. Наконец, цепочка MY_CHAIN добавляется в цепочку INPUT, что означает, что все входящие пакеты будут также проходить через цепочку MY_CHAIN.

Использование состояний пакетов

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

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

В этом примере -m state указывает на использование модуля состояний, а --state ESTABLISHED,RELATED указывает, что правило применяется только к пакетам, которые являются частью уже установленного или связанного соединения.

Использование Iptables для создания VPN

Iptables также может быть использован для создания VPN (Virtual Private Network). Это может быть полезно для создания безопасного соединения между удаленными системами. Например, вы можете использовать iptables для настройки IPsec VPN, используя модуль "policy" для определения правил обработки трафика.

iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT iptables -A OUTPUT -m policy --dir out --pol ipsec -j ACCEPT 

В этом примере -m policy указывает на использование модуля "policy", --dir in и --dir out указывают на направление трафика, а --pol ipsec указывает на использование IPsec политики.

Использование Iptables для ограничения скорости

Iptables также может быть использован для ограничения скорости сетевого трафика, что может быть полезно для управления пропускной способностью. Для этого можно использовать модуль "limit". Например, вы можете ограничить количество новых SSH-соединений до 3 в минуту следующим образом:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j ACCEPT 

В этом примере -m limit --limit 3/min указывает на ограничение скорости, а остальная часть команды определяет, что она применяется к новым SSH-соединениям.

Использование Iptables для редиректа трафика

Iptables может быть использован для редиректа трафика, что может быть полезно для перенаправления трафика на другой порт или сервер. Например, вы можете перенаправить весь входящий трафик на порт 80 на порт 8080 следующим образом:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 

В этом примере -t nat указывает на использование таблицы NAT, -A PREROUTING добавляет правило в цепочку PREROUTING, --dport 80 указывает на исходный порт, а --to-port 8080 указывает на порт назначения.

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

Заключение

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

Комментарии (9)


  1. SamOwaR
    12.07.2023 16:32
    +2

    iptables хорош, особенно в сочетании с ipset, который почему-то не был упомянут в статье.
    Но тем не менее, iptables - это уже устаревшее решение, которое в современных дистрибутивах заменено на nftables.


    1. MrSamovar Автор
      12.07.2023 16:32
      +1

      Да, но будет полезно

      p.s. Какой у Вас интересный ник)


    1. dobry-kot
      12.07.2023 16:32

      iptables это не про решение, а больше про синтаксис.

      В наше время можете использоват nftables-api и настраивать netfilter через утилиту конвертер nft-iptables или как-то так называется, которая настраивает netfilter по реализации nftables интерфейсов.

      Так что синтаксис и логика iptables с нами еще надолго.


  1. sergio_deschino
    12.07.2023 16:32
    +1

    Уже вторая статья про устаревший iptables за неделю… Ладно, тут хотя бы из песочницы, а не в корпоративном блоге. Тут мотив понятен, человек инвайт захотел, но мне не совсем понятно кто и зачем ее заапрувил..


    1. MrSamovar Автор
      12.07.2023 16:32
      +1

      Это была проба пера, плюс так или иначе itptables ещё встречается, в скором времени напишу статью на актуальную тему


      1. dobry-kot
        12.07.2023 16:32

        послушал бы)


      1. Vest
        12.07.2023 16:32

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


  1. ZakharovAV
    12.07.2023 16:32

    Использование Iptables для создания VPN

    Простите, а как вы с помощью iptables создали ipsec? Или хотя бы GRE? Или любой другой VPN? просто, кажется, тема не раскрыта. И где цепочка Security? И где пояснение для сего существуют разные таблицы и разные чайны? И куда поделились на ноль другие встроенные чайны? И про ограничение скорости немножко очень недосказанно...


    1. ZakharovAV
      12.07.2023 16:32
      +1

      Конечно же, говоря про "цепочку Security" я имел в виду таблицу Security