Как использовать 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 saveCentOS/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 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний