1. Введение: что такое iptables?
iptables
— стандартная система фильтрации сетевого трафика в Linux, работающая непосредственно на уровне ядра операционной системы. Она определяет три ключевых аспекта безопасности сети:
- Кто получает доступ к вашему серверу (разрешение соединений);
- Кого нужно заблокировать (определенные IP-адреса или порты);
- Как обрабатывать переадресацию (например, если сервер выступает в роли шлюза между сетями).
2. Структура iptables: таблицы и цепочки
Таблицы (tables
)
Каждая таблица представляет собой набор правил, определяющих порядок действий над пакетом:
- Filter: Основная таблица для разрешения или блокировки трафика.
- Nat: Используется для преобразования сетевых адресов (NAT) и проброски портов.
- Mangle: Редактирование отдельных полей пакета (редко используется).
- Raw: Обход автоматических проверок определенных пакетов.
Цепочки (chains
)
Процесс прохождения каждого пакета включает проверку через следующие этапы:
- Input: Входящий трафик, направленный непосредственно на сервер.
- Output: Исходящий трафик, инициированный самим сервером.
- Forward: Транзитный трафик (при работе сервера как маршрутизатора).
- Prerouting и Postrouting: Технические этапы изменения адресов пакетов до или после основных проверок.
3. Маршрут движения пакета через iptables
Каждый поступающий пакет последовательно обрабатывается следующим образом:
- Пакет попадает в систему → проверка в Prerouting (возможность изменения адреса).
- Если пакет предназначен именно этому серверу → Input (принять или отвергнуть).
- Если пакет должен быть передан дальше (сервер является роутером) → Forward.
- Когда сервер отправляет собственный пакет → Output → Postrouting (финализация изменений перед отправкой).
4. Настройка iptables: основы управления
Вот некоторые базовые команды для настройки вашей системы защиты:
Команда | Описание |
---|---|
iptables -L | Показ текущих правил фильтра |
iptables -F | Полностью очищает все установленные правила (действовать осторожно!) |
iptables -A INPUT -p tcp --dport 80 -j ACCEPT | Разрешает подключение по протоколу HTTP (порт 80) |
iptables -A INPUT -s 1.2.3.4 -j DROP | Заблокирует указанный IP-адрес |
Примеры настроек:
Базовая конфигурация
# Удаляем старые правила
iptables -F
iptables -X
# Устанавливаем политики по умолчанию
iptables -P INPUT DROP # Запрещаем весь входящий трафик
iptables -P FORWARD DROP # Отключаем пропуск транзита
iptables -P OUTPUT ACCEPT # Но разрешаем исходящий трафик
# Внутренний интерфейс (lo) оставляем открытым
iptables -A INPUT -i lo -j ACCEPT
# Ответы на собственные запросы разрешим
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# Открываем нужные сервисы (SSH, HTTP, HTTPS)
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
# Ping тоже разрешён
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
Защита от атак
# Ограничиваем количество новых подключений по SSH (до трёх раз в минуту)
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP # Остальные попытки сразу блокируются
# Подозрительный IP адрес забанен навсегда
iptables -A INPUT -s 5.6.7.8 -j DROP
Проброс портов (NAT)
# Перенаправление порта 8080 на 80 (полезно, если сервер является шлюзом)
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
5. Сохранение конфигурации
Чтобы ваши настройки остались неизменными после перезагрузки сервера, сохраняйте их соответствующим образом:
- Для Ubuntu / Debian:
sudo apt install iptables-persistent
sudo netfilter-persistent save
- Для CentOS / RHEL:
sudo service iptables save
6. Альтернативы iptables
Хотя iptables активно применяется, существуют альтернативы:
- nftables: Современная версия с упрощёнными командами.
- FirewallD: Удобный графический интерфейс для управления зоной доверия.
Однако iptables остаётся надёжным инструментом практически на всех дистрибутивах Linux.
Заключение
Iptables позволяет эффективно контролировать и защищать сеть вашего сервера, обеспечивая безопасность и стабильность ваших приложений. Его ключевые преимущества:
- ✔️ Мощная защита от несанкционированного доступа.
- ✔️ Гибкость в настройке сложных сценариев фильтрации.
- ✔️ Универсальность и совместимость с любым современным Linux-дистрибутивом.