Проброс портов в Ubuntu: настройка UFW и iptables

0
35

Настройка UFW для перенаправления трафика

Как открыть порт в Linux через ufw, iptables и firewalld - изображение номер один
Как открыть порт в Linux через ufw, iptables и firewalld — изображение номер один

Чтобы организовать ufw проброс портов, потребуется внести изменения в конфигурационные файлы этого межсетевого экрана. Механизм позволяет направлять входящие пакеты на другие адреса внутри локальной сети или на иные интерфейсы системы.

Основные шаги включают:

  • Включение маршрутизации в ядре (параметр net.ipv4.ip_forward=1).
  • Добавление правил перенаправления через before.rules.
  • Перезапуск службы для применения настроек.

Включение маршрутизации и форвардинга пакетов

How to manage Ubuntu firewall using UFW commands - YouTube - изображение номер два
How to manage Ubuntu firewall using UFW commands — YouTube — изображение номер два

Прежде чем пакеты начнут транслироваться между интерфейсами, системе нужно разрешить эту операцию. Без соответствующей настройки узел будет просто отбрасывать трафик, не предназначенный ему напрямую.

  • Проверьте текущее состояние параметра net.ipv4.ip_forward. Команда sysctl net.ipv4.ip_forward покажет значение 0 (выключено) или 1 (активно).
  • Для временной активации (до перезагрузки) выполните: sysctl -w net.ipv4.ip_forward=1.
  • Чтобы закрепить настройку навсегда, отредактируйте файл /etc/sysctl.conf или создайте отдельный конфиг в /etc/sysctl.d/. Добавьте туда строку net.ipv4.ip_forward = 1, затем примените изменения через sysctl -p.

Аналогичную операцию стоит проделать для IPv6, если он используется: параметр net.ipv6.conf.all.forwarding.

Добавление правил для проброса через ufw

Чтобы разрешить передачу трафика к определённому порту, модифицируйте конфигурацию встроенного файрвола. Процедура сводится к активации нужного правила в командной строке. Рассмотрим типовые сценарии:

  • Открыть доступ извне: sudo ufw allow 8080/tcp
  • Разрешить трафик для конкретного приложения: sudo ufw allow 'Apache Full'
  • Указать направление (входящий/исходящий): sudo ufw allow in 22/tcp

После внесения изменений обязательно перезагрузите межсетевой экран командой sudo ufw reload. Проверить результат можно через sudo ufw status numbered — в выводе отобразятся все активные записи.

Проброс портов через iptables в Ubuntu

Основные настройки Iptables, или Как настроить файрвол в Linux - изображение номер три
Основные настройки Iptables, или Как настроить файрвол в Linux — изображение номер три

Для перенаправления трафика к локальным службам в системе часто применяется утилита iptables. Она позволяет настроить трансляцию адресов и управлять пакетами. Рассмотрим, как выполняется проброс портов ubuntu с помощью этой технологии.

Базовая команда для перенаправления

Порты в Linux: как проверить, открыть и закрыть (UFW, firewalld, nftables) - изображение номер четыре
Порты в Linux: как проверить, открыть и закрыть (UFW, firewalld, nftables) — изображение номер четыре

Основная конструкция выглядит так:

  1. Включите маршрутизацию: sysctl -w net.ipv4.ip_forward=1.
  2. Добавьте правило в цепочку PREROUTING:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80

Здесь внешний порт 8080 направляется на внутренний адрес 192.168.1.100:80.

Сохранение настроек после перезагрузки

Чтобы правила не сбрасывались, используйте пакет iptables-persistent:

Действие Команда
Установка sudo apt install iptables-persistent
Сохранение sudo netfilter-persistent save

Это гарантирует, что перенаправление портов через iptables останется активным даже после отключения питания.

Правила DNAT для входящих соединений

Allow Ports Through UFW Firewall in Ubuntu - изображение номер пять
Allow Ports Through UFW Firewall in Ubuntu — изображение номер пять

DNAT (Destination NAT) меняет адрес назначения у пакета, пришедшего извне. Настройка выполняется в цепочке PREROUTING таблицы nat. Типичная ситуация — перенаправление трафика с порта роутера на внутренний IP сервера.

  • Обязательно указывай интерфейс (например, eth0), иначе правило может сработать некорректно.
  • Проверяй, что на целевом устройстве открыт соответствующий порт в локальном файрволе (ufw или iptables).
ЧИТАЙТЕ ТАКЖЕ:  Чем отличаются мобильные приложения от веб: функционал
Параметр Пример значения
Протокол tcp
Внешний порт 8080
Внутренний IP 192.168.1.100

После добавления правила не забудь сохранить конфигурацию через iptables-save, иначе после перезагрузки оно исчезнет.

Правила SNAT для обратного трафика

Iptables Русскоязычная документация по Ubuntu - изображение номер шесть
Iptables Русскоязычная документация по Ubuntu — изображение номер шесть

При настройке трансляции адресов для ответных пакетов применяется механизм SNAT. Он подменяет исходный IP обратного пакета на адрес шлюза. Без этого правила клиент из внешней сети не получит ответ от сервера, так как пакет уйдёт напрямую, минуя маршрутизатор. В iptables это реализуется так:

  • Для интерфейса eth0 (внешний) — MASQUERADE.
  • Для статического IP — SNAT --to-source.

Без SNAT обратный трафик «заблудится» в сети.

Проверка работоспособности проброса

Как открыть порт в Linux через ufw, iptables и firewalld - изображение номер семь
Как открыть порт в Linux через ufw, iptables и firewalld — изображение номер семь

После настройки необходимо удостовериться, что внешние запросы достигают целевого приложения. Первым делом проверьте, открыт ли порт снаружи — для этого подойдут специализированные онлайн-утилиты (например, portchecker.co). Если сервис сообщает, что соединение установлено, конфигурация корректна. В противном случае стоит перепроверить цепочки правил в брандмауэре. Для внутреннего тестирования используйте утилиту telnet или nc (netcat) с локального хоста и из соседней подсети.

Тестирование с помощью netcat и curl

После настройки перенаправления трафика необходимо проверить, работает ли оно. Для этого пригодятся две утилиты — netcat и curl. Первая (nc) позволяет проверить доступность порта изнутри системы, вторая — протестировать HTTP(S)-ответ снаружи.

  • Локальная проверка: выполните nc -zv localhost 8080. Если порт открыт, утилита сообщит об успешном соединении.
  • Внешняя проверка: на удалённом устройстве (или через мобильную сеть) отправьте запрос curl -v http://ваш_IP:8080. Ответ сервера подтвердит, что маршрутизация настроена корректно.

Просмотр активных правил ufw

How to Use UFW Firewall on Debian, Ubuntu, Linux Mint - изображение номер восемь
How to Use UFW Firewall on Debian, Ubuntu, Linux Mint — изображение номер восемь

Проверить, какие именно предписания сейчас задействованы в межсетевом экране, можно одной командой. Это полезно, если вы настраивали перенаправление трафика и хотите убедиться, что всё корректно. Вывод покажет статус утилиты и перечень разрешённых подключений.

  • sudo ufw status verbose — отобразит полную информацию с детализацией.
  • sudo ufw status numbered — перечислит правила с нумерацией для удобного удаления.

Если экран неактивен, система сообщит: Status: inactive. В такой ситуации сначала включите его через sudo ufw enable, а затем повторно запросите список.

Автоматизация правил после перезагрузки

Advanced UFW Firewall Configuration In Ubuntu 22.04 - Ubuntu-Server.com - изображение номер девять
Advanced UFW Firewall Configuration In Ubuntu 22.04 — Ubuntu-Server.com — изображение номер девять

Настроив перенаправление трафика, важно убедиться, что конфигурация не сбросится после выключения питания. Для этого применяются специальные утилиты или скрипты, загружающиеся при старте системы.

  • Самый надёжный способ — внести инструкции в файл /etc/rc.local.
  • Либо создать systemd-сервис, который будет запускать команды iptables в автоматическом режиме.

Такой подход гарантирует, что после каждой загрузки ОС сетевые каналы останутся открытыми без ручного вмешательства.

Сохранение правил iptables через iptables-persistent

После настройки фильтрации пакетов вручную все внесённые изменения исчезают после перезагрузки системы. Чтобы этого избежать, применяется пакет iptables-persistent. Он фиксирует текущую конфигурацию и восстанавливает её при старте.

  • Установка: sudo apt install iptables-persistent
  • Во время инсталляции система предложит сохранить действующие настройки для IPv4 и IPv6.

Если нужно обновить сохранённый набор после правок, выполните:

sudo netfilter-persistent save
sudo netfilter-persistent reload

Файлы правил хранятся в /etc/iptables/ (для IPv4 — rules.v4, для IPv6 — rules.v6). Их можно редактировать напрямую, но удобнее пользоваться утилитой iptables-save. Такой подход гарантирует, что после перезагрузки сервера механизм проброса продолжит работать корректно без ручного вмешательства.

Создание скрипта автозагрузки для ufw

Открытие портов на VPS - инструкция - изображение номер десять
Открытие портов на VPS — инструкция — изображение номер десять

Чтобы настройки межсетевого экрана восстанавливались после перезагрузки системы, удобно использовать пользовательский bash-сценарий. Его помещают в автозагрузку через systemd или init.d. Ниже приведён простой пример такого файла.

  • Создайте скрипт /etc/init.d/ufw-custom-rules с правами на выполнение.
  • Внутри пропишите команды ufw allow для нужных портов.
  • Добавьте его в автозагрузку через update-rc.d или systemd-юнит.