- Home »

Переадресация портов через Linux-шлюз с помощью iptables
В этой статье поговорим о том, как настроить переадресацию портов через Linux-шлюз с помощью iptables. Если у тебя есть сервер, который выполняет роль шлюза между двумя сетями (например, между интернетом и локалкой), и нужно пробросить порт на внутренний сервер — ты попал по адресу. Разберёмся, как это работает, зачем вообще нужна переадресация портов, и как быстро всё настроить, чтобы не тратить время на бессмысленное копание в мануалах. Будет и теория, и практика, и даже немного гиковских лайфхаков.
Как работает переадресация портов через iptables?
Переадресация портов (port forwarding, port redirection, DNAT) — это когда трафик, приходящий на определённый порт одного сервера (обычно шлюза), автоматически пересылается на другой IP и/или порт внутри сети. Типичный кейс: у тебя есть веб-сервер в локалке, а наружу торчит только шлюз. Хочешь, чтобы запросы на порт 80 шлюза попадали на порт 8080 твоего внутреннего сервера? Вот тут и нужен iptables.
iptables — это такой швейцарский нож для управления сетевыми пакетами в Linux. Он позволяет не только фильтровать трафик, но и изменять его направление (NAT). Для переадресации портов используется таблица nat и цепочка PREROUTING (иногда POSTROUTING и OUTPUT).
- PREROUTING — изменение адреса назначения пакета до маршрутизации.
- POSTROUTING — изменение адреса источника после маршрутизации (например, SNAT/MASQUERADE).
- DNAT — Destination NAT, изменение адреса назначения пакета.
Всё это позволяет сделать так, чтобы, например, любой запрос на your-gateway-ip:2222
попадал на 192.168.1.100:22
(SSH на внутренний сервер).
Зачем это нужно и где применяется?
- Доступ к внутренним сервисам из интернета (веб, SSH, RDP, FTP и т.д.).
- Проброс портов для VPN, игровых серверов, VoIP и прочих гиковских штук.
- Организация DMZ (демилитаризованной зоны) для публичных сервисов.
- Экономия на публичных IP: один внешний адрес — много внутренних сервисов.
- Тестирование и разработка: проброс портов для контейнеров, виртуалок, CI/CD.
В общем, если у тебя есть сервер-шлюз (или VPS, или выделенный сервер), и ты хочешь сделать его точкой входа для разных сервисов — без port forwarding не обойтись.
Как быстро и просто всё настроить?
Всё, что тебе нужно — root-доступ к Linux-шлюзу и установленный iptables (почти всегда есть по умолчанию). Дальше — дело техники.
- Включи IP-форвардинг (разреши маршрутизацию пакетов).
- Добавь правило DNAT для нужного порта.
- Добавь SNAT/MASQUERADE, чтобы обратный трафик шёл через шлюз.
- Проверь, что всё работает, и сохрани правила.
Пошаговая инструкция с примерами
Допустим, у тебя есть шлюз с двумя интерфейсами:
- eth0 — внешний (интернет), IP:
203.0.113.2
- eth1 — внутренний (LAN), IP:
192.168.1.1
Внутренний сервер: 192.168.1.100
, на нём работает SSH (порт 22).
Задача: пробросить порт 2222 на шлюзе наружу, чтобы он попадал на 22 порт внутреннего сервера.
# 1. Включаем IP-форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward
# Чтобы включить навсегда — добавь в /etc/sysctl.conf:
# net.ipv4.ip_forward = 1
# 2. Пробрасываем порт 2222 на внутренний сервер
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2222 -j DNAT --to-destination 192.168.1.100:22
# 3. Разрешаем маршрутизацию обратно (SNAT/MASQUERADE)
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# 4. Открываем порт на фаерволе (если есть фильтрация)
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 22 -j ACCEPT
# 5. Сохраняем правила (для Debian/Ubuntu)
iptables-save > /etc/iptables/rules.v4
# Для CentOS/RHEL:
service iptables save
Теперь любой, кто подключается к 203.0.113.2:2222
, попадает на 192.168.1.100:22
. Можно использовать для любого сервиса: веб, почта, игры, что угодно.
Практические советы и схемы
- Пробрасывай только нужные порты, не делай “дыр” во всю локалку.
- Используй нестандартные внешние порты для повышения безопасности (например, 2222 вместо 22 для SSH).
- Следи за логами iptables:
journalctl -u netfilter-persistent
илиdmesg | grep iptables
. - Если используешь firewalld или nftables — не смешивай с iptables, могут быть конфликты.
- Для сложных схем используй скрипты автоматизации (bash, ansible, salt).
Положительные и отрицательные кейсы
Кейс | Плюсы | Минусы | Рекомендации |
---|---|---|---|
Проброс SSH на нестандартный порт | Снижение числа брутфорс-атак, простая настройка | Потребуется явно указывать порт при подключении | Используй fail2ban и ключи SSH для доп. защиты |
Проброс веб-сервера (HTTP/HTTPS) | Доступ к сайту из интернета, можно использовать один IP для нескольких сайтов (через разные порты) | SSL-сертификаты сложнее настраивать, если несколько сайтов на одном IP | Используй reverse proxy (nginx, haproxy) для SNI и SSL |
Проброс игровых серверов | Можно запускать несколько серверов на одной машине | Игроки должны знать нестандартные порты | Документируй порты и делай мониторинг доступности |
Проброс RDP/VNC | Удалённый доступ к рабочим столам | Уязвимость к атакам, если не ограничить доступ | Ограничивай по IP, используй VPN или SSH-туннели |
Альтернативные решения и утилиты
- nftables — современная замена iptables, синтаксис проще, но пока не везде по умолчанию. Официальный сайт
- firewalld — динамический фаервол для CentOS/Fedora, работает поверх iptables/nftables. Официальный сайт
- ufw — упрощённый интерфейс для iptables на Ubuntu/Debian. Документация
- shorewall — мощный генератор правил для iptables, подходит для сложных сетей. Официальный сайт
- iptables-persistent — утилита для сохранения и автоматической загрузки правил iptables на Debian/Ubuntu.
Статистика и сравнение с другими решениями
Решение | Производительность | Гибкость | Простота | Совместимость |
---|---|---|---|---|
iptables | Высокая | Максимальная | Средняя | Любой Linux |
nftables | Очень высокая | Очень высокая | Средняя | Современные дистрибутивы |
firewalld | Высокая | Высокая | Высокая | CentOS/Fedora |
ufw | Средняя | Ограниченная | Очень высокая | Ubuntu/Debian |
Интересный факт: iptables — это не программа, а интерфейс к ядру Linux (netfilter). Он существует с 2000 года и до сих пор используется на миллионах серверов. nftables — его наследник, но iptables пока вне конкуренции по количеству туториалов и готовых решений.
Нестандартные способы использования
- Проброс портов для Docker-контейнеров без использования встроенного NAT Docker (более гибко и безопасно).
- Динамическая переадресация портов через скрипты (например, временно открыть порт для CI/CD или тестирования).
- Автоматизация через ansible/salt: генерация и деплой правил на десятки серверов за минуту.
- Проброс портов для honeypot-ловушек (например, перенаправить трафик на фейковый SSH для анализа атак).
- Организация “серого” NAT для обхода ограничений провайдера (только для тестов и в рамках закона!).
Автоматизация и новые возможности
iptables отлично дружит с bash-скриптами, systemd-юнитами, ansible и другими инструментами автоматизации. Можно:
- Динамически открывать/закрывать порты по расписанию (cron, systemd timers).
- Генерировать правила на лету в зависимости от нагрузки или событий (например, fail2ban).
- Интегрировать с мониторингом (zabbix, prometheus) для алертов по попыткам доступа.
- Использовать в CI/CD для тестирования сервисов в изолированных сетях.
Выводы и рекомендации
Переадресация портов через iptables — это must-have навык для любого, кто работает с Linux-серверами, VPS или выделенными машинами. Это быстро, гибко, надёжно и абсолютно бесплатно. Неважно, строишь ли ты домашний сервер, корпоративную сеть или облачную инфраструктуру — port forwarding через iptables решает кучу задач: от простого проброса SSH до сложных схем с балансировкой и DMZ.
- Используй iptables для простых и надёжных схем проброса портов.
- Для сложных сценариев — смотри в сторону nftables, firewalld, shorewall.
- Не забывай про безопасность: ограничивай доступ, логируй события, автоматизируй рутину.
- Экспериментируй с автоматизацией — iptables отлично скриптуется и интегрируется с DevOps-инструментами.
Если тебе нужен VPS для экспериментов — закажи здесь. Для серьёзных задач — выделенный сервер с root-доступом и полной свободой действий.
Официальная документация по iptables: https://netfilter.org/projects/iptables/
nftables: https://wiki.nftables.org/
firewalld: https://firewalld.org/
Пробрасывай порты с умом, автоматизируй всё, что можно, и пусть твои сервисы будут доступны только тем, кому нужно!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.