Как использовать iptables для ручной настройки фаервола

6 минут чтения
Средний рейтинг статьи — 4.8

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

В этой статье мы разберёмся:

  • как работает iptables,
  • какие у него есть таблицы и цепочки,
  • как написать базовые правила,
  • и как проверить, что они применились.

Как работает iptables

iptables управляет правилами фильтрации пакетов в ядре Linux.
В основе его работы — три ключевых понятия:

  1. Таблицы (tables) — набор правил для разных задач:
    • filter — фильтрация трафика (по умолчанию).
    • nat — трансляция адресов (NAT, проброс портов).
    • mangle — модификация пакетов.
    • raw — исключения для connection tracking.
  2. Цепочки (chains) — этапы обработки пакетов:
    • INPUT — входящие соединения (например, запрос на SSH).
    • OUTPUT — исходящие соединения (например, сервер обращается к API).
    • FORWARD — транзитный трафик (если сервер работает как роутер).
  3. Правила (rules) — конкретные условия и действия:
    • Условие: IP-адрес, порт, протокол.
    • Действие: ACCEPT, DROP, REJECT.

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

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

sudo iptables -L -v -n
  • -L — список правил,
  • -v — подробный вывод (счётчики пакетов),
  • -n — не преобразовывать IP в имена хостов.

Базовая настройка фаервола

Политика по умолчанию

Сначала зададим политику по умолчанию:

  • запретить всё входящее,
  • разрешить исходящее,
  • транзитный трафик нам не нужен.
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD DROP

Разрешаем SSH-доступ

Чтобы сервер не потерять, откроем порт 22 для SSH:

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

Разрешаем HTTP и HTTPS

Для веб-сервера нужны 80 и 443 порты:

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

Разрешаем loopback-интерфейс

Локальный трафик всегда должен быть разрешён:

sudo iptables -A INPUT -i lo -j ACCEPT

Разрешаем уже установленные соединения

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

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

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

В большинстве дистрибутивов правила iptables не сохраняются после перезагрузки.
Чтобы сохранить конфигурацию:

Debian/Ubuntu:

sudo apt install iptables-persistent
sudo netfilter-persistent save

CentOS/RHEL:

sudo service iptables save

Проверка работы

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

sudo iptables -L -v -n

Можно также протестировать доступ:

  • с другого сервера сделать telnet <ip> 22 (проверка SSH),
  • curl -I http://<ip> (проверка HTTP).

Советы и подводные камни

  1. Порядок правил имеет значение — пакеты проверяются сверху вниз.
  2. DROP vs REJECT
    • DROP молча отбрасывает пакет,
    • REJECT возвращает ICMP-ответ (полезно для отладки).
  3. Всегда оставляйте доступ по SSH, иначе можно потерять сервер.
  4. Для сложных сценариев удобнее использовать ufw или firewalld, но iptables даёт полный контроль.

Заключение

iptables — мощный инструмент для настройки сетевой безопасности в Linux. Даже простая конфигурация с политикой «запрещено всё, кроме нужного» значительно снижает риски.

Базовый фаервол обычно включает:

  • блокировку всего входящего,
  • разрешение SSH и веб-трафика,
  • поддержку уже установленных соединений.

Если нужна гибкость и простота, можно использовать ufw или перейти на nftables, но знание iptables остаётся обязательным для любого администратора Linux.

6 минут чтения
Средний рейтинг статьи — 4.8

Настроить мониторинг за 30 секунд

Надежные оповещения о даунтаймах. Без ложных срабатываний