← Назад к вопросам

Какие таблицы прописывал в iptables

2.2 Middle🔥 161 комментариев
#Безопасность#Сети и протоколы

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Обзор таблиц iptables

Как DevOps-инженер с более чем 10-летним опытом работы с Linux-инфраструктурой, я регулярно работал с iptables для настройки межсетевых экранов, трансляции адресов (NAT), управления трафиком и аудита. iptables использует систему таблиц, каждая из которых отвечает за определённый аспект обработки пакетов. Основные таблицы, которые я прописывал и настраивал, включают filter, nat, mangle и raw. Каждая таблица содержит цепочки (chains) и правила (rules), которые применяются к сетевому трафику на различных этапах его прохождения через систему.

Основные таблицы iptables

Вот таблицы, с которыми я чаще всего работал в продакшн-средах:

  1. Таблица filter (фильтрация)самая часто используемая таблица. Она отвечает за базовую фильтрацию пакетов (разрешение или блокировка трафика). По умолчанию все правила, если не указана таблица явно, применяются к filter. Её основные цепочки:

    • INPUT — для пакетов, предназначенных самой системе (например, входящие SSH-соединения).
    • FORWARD — для пакетов, которые маршрутизируются через систему (актуально для шлюзов или NAT-устройств).
    • OUTPUT — для пакетов, исходящих от системы.

    Пример правила для блокировки входящего ICMP-трафика (ping):

    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    
  2. Таблица nat (трансляция сетевых адресов) — используется для изменения source или destination адресов пакетов. Ключевые сценарии: маскарадинг (PAT), проброс портов (DNAT), SNAT для исходящего трафика. Её цепочки:

    • PREROUTING — применяется до принятия решения о маршрутизации (часто для DNAT).
    • POSTROUTING — применяется после маршрутизации (часто для SNAT или маскарадинга).
    • OUTPUT — для локально генерируемого трафика.

    Пример настройки маскарадинга для исходящего трафика через интерфейс eth0:

    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
  3. Таблица mangle (модификация пакетов) — позволяет изменять заголовки пакетов, например, TTL, TOS или метки (mark) для дальнейшей обработки (например, в связке с tc для QoS). Цепочки включают PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING. Использовал для продвинутых сценариев, таких как маркировка трафика для политик маршрутизации.

    Пример изменения TTL для определённого трафика:

    iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TTL --ttl-set 64
    
  4. Таблица raw (сырая обработка) — предназначена для работы с пакетами до того, как система начнёт отслеживать соединения (connection tracking). Часто использовал для исключения трафика из отслеживания (например, для высоконагруженных сервисов или снижения нагрузки). Цепочки: PREROUTING и OUTPUT.

    Пример исключения трафика на порт 80 из отслеживания:

    iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
    

Практическое применение в DevOps

В реальных проектах я комбинировал таблицы для решения сложных задач:

  • Настройка шлюза (gateway):

    • filter для контроля доступа между сетями.
    • nat для маскарадинга внутренних адресов.
    • Пример скрипта для базового шлюза:
      # Включение форвардинга
      sysctl -w net.ipv4.ip_forward=1
      # NAT для внутренней сети 192.168.1.0/24
      iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
      # Разрешение форвардинга для внутреннего трафика
      iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
      iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
      
  • Защита веб-сервера:

    • filter для ограничения доступа к портам 80/443 и защиты от атак (например, с помощью цепочек для rate limiting).
    • Пример ограничения SSH-подключений:
      iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
      iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 3 --name SSH -j DROP
      
  • Трансляция портов (port forwarding):

    • Использовал nat для проброса портов с публичного IP на внутренние сервисы.
    • Пример проброса порта 8080 на внутренний сервер:
      iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080
      iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 8080 -j SNAT --to-source <gateway_ip>
      

Важные нюансы

  • Порядок правил критичен: iptables обрабатывает правила сверху вниз, поэтому общие правила должны идти после конкретных.
  • Сохранение правил: В Debian/Ubuntu использовал iptables-save и iptables-restore, в CentOS/RHEL — службу iptables.
  • Переход на nftables: В современных системах (например, с ядром >4.18) постепенно мигрировал на nftables, который объединяет функциональность iptables, ip6tables, arptables и ebtables в единый фреймворк.

Работа с этими таблицами требует глубокого понимания сетевых потоков, но она незаменима для построения безопасной и отказоустойчивой инфраструктуры. В DevOps-контексте я часто автоматизировал настройку iptables через инструменты вроде Ansible, Terraform или кастомные скрипты, чтобы обеспечить консистентность и быстрое развёртывание правил на множестве серверов.