Какие таблицы прописывал в iptables
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Обзор таблиц iptables
Как DevOps-инженер с более чем 10-летним опытом работы с Linux-инфраструктурой, я регулярно работал с iptables для настройки межсетевых экранов, трансляции адресов (NAT), управления трафиком и аудита. iptables использует систему таблиц, каждая из которых отвечает за определённый аспект обработки пакетов. Основные таблицы, которые я прописывал и настраивал, включают filter, nat, mangle и raw. Каждая таблица содержит цепочки (chains) и правила (rules), которые применяются к сетевому трафику на различных этапах его прохождения через систему.
Основные таблицы iptables
Вот таблицы, с которыми я чаще всего работал в продакшн-средах:
-
Таблица filter (фильтрация) — самая часто используемая таблица. Она отвечает за базовую фильтрацию пакетов (разрешение или блокировка трафика). По умолчанию все правила, если не указана таблица явно, применяются к
filter. Её основные цепочки:- INPUT — для пакетов, предназначенных самой системе (например, входящие SSH-соединения).
- FORWARD — для пакетов, которые маршрутизируются через систему (актуально для шлюзов или NAT-устройств).
- OUTPUT — для пакетов, исходящих от системы.
Пример правила для блокировки входящего ICMP-трафика (ping):
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP -
Таблица nat (трансляция сетевых адресов) — используется для изменения source или destination адресов пакетов. Ключевые сценарии: маскарадинг (PAT), проброс портов (DNAT), SNAT для исходящего трафика. Её цепочки:
- PREROUTING — применяется до принятия решения о маршрутизации (часто для DNAT).
- POSTROUTING — применяется после маршрутизации (часто для SNAT или маскарадинга).
- OUTPUT — для локально генерируемого трафика.
Пример настройки маскарадинга для исходящего трафика через интерфейс
eth0:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -
Таблица 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 -
Таблица 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 или кастомные скрипты, чтобы обеспечить консистентность и быстрое развёртывание правил на множестве серверов.