Как использовать iptables для ручной настройки фаервола
iptables — это встроенный в Linux инструмент для настройки сетевых фильтров. С его помощью администратор может разрешать или блокировать сетевые соединения, защищать сервер от атак и управлять маршрутизацией пакетов. Несмотря на то, что сейчас активно используется более современный nftables, утилита iptables до сих пор встречается в большинстве дистрибутивов и часто применяется для ручной настройки фаервола.
В этой статье мы разберёмся:
- как работает iptables,
- какие у него есть таблицы и цепочки,
- как написать базовые правила,
- и как проверить, что они применились.
Как работает iptables
iptables управляет правилами фильтрации пакетов в ядре Linux.
В основе его работы — три ключевых понятия:
- Таблицы (tables) — набор правил для разных задач:
filter
— фильтрация трафика (по умолчанию).nat
— трансляция адресов (NAT, проброс портов).mangle
— модификация пакетов.raw
— исключения для connection tracking.
- Цепочки (chains) — этапы обработки пакетов:
INPUT
— входящие соединения (например, запрос на SSH).OUTPUT
— исходящие соединения (например, сервер обращается к API).FORWARD
— транзитный трафик (если сервер работает как роутер).
- Правила (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).
Советы и подводные камни
- Порядок правил имеет значение — пакеты проверяются сверху вниз.
- DROP vs REJECT —
DROP
молча отбрасывает пакет,REJECT
возвращает ICMP-ответ (полезно для отладки).
- Всегда оставляйте доступ по SSH, иначе можно потерять сервер.
- Для сложных сценариев удобнее использовать ufw или firewalld, но iptables даёт полный контроль.
Заключение
iptables — мощный инструмент для настройки сетевой безопасности в Linux. Даже простая конфигурация с политикой «запрещено всё, кроме нужного» значительно снижает риски.
Базовый фаервол обычно включает:
- блокировку всего входящего,
- разрешение SSH и веб-трафика,
- поддержку уже установленных соединений.
Если нужна гибкость и простота, можно использовать ufw или перейти на nftables, но знание iptables остаётся обязательным для любого администратора Linux.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний