Перенаправление портов

LinuxBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы научитесь настраивать перенаправление портов.

Представьте, что вы живёте по адресу, на который приходит почта. Затем вы переезжаете в другую комнату и хотите, чтобы вся почта, отправленная на старый номер комнаты — комнату 80, — автоматически доставлялась в новую комнату — комнату 8080. Вам не нужно просить всех изменить свои адресные книги: достаточно, чтобы перенаправлением занимался управляющий здания.

Перенаправление портов — это часть NAT (Network Address Translation, преобразование сетевых адресов). Оно изменяет входящий трафик так, чтобы запросы, поступившие на один порт, перенаправлялись в другое место назначения.

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

Сценарий:

На порту 8080 работает веб-сервер. Однако стандартные веб-браузеры ищут веб-сайты на порту 80. Вместо изменения настроек веб-сервера вы сообщите брандмауэру: «Если кто-то обращается к порту 80, отправьте запрос непосредственно на порт 8080».

В этой лабораторной работе вы:

  1. Подготовите брандмауэр к обработке трафика — включите маскарадинг.
  2. Создадите правило для перенаправления порта 80 на порт 8080.
  3. Проверите работу перенаправления портов и разберётесь в его поведении.

Включение маскарадинга

Прежде чем firewalld сможет перенаправлять порты, ему нужно разрешение на изменение сетевых пакетов. Эта возможность называется маскарадингом.

Маскарадинг — это разновидность преобразования адресов. Во многих реальных системах именно он позволяет брандмауэру или шлюзу выступать посредником и создавать впечатление, что трафик поступает из другого адресного контекста, а не из того, где он был создан.

Представьте, что маскарадинг даёт брандмауэру разрешение быть посредником: он переписывает адресные метки в пакетах, чтобы доставить их в нужное место.

Примечание: в этой лабораторной среде активной зоной является зона trusted, чтобы веб-терминал продолжал работать.

Сначала проверьте, какая зона сейчас активна.

sudo firewall-cmd --get-active-zones

Скорее всего, в выводе вы увидите trusted вместе с вашим сетевым интерфейсом, например eth0.

Теперь включите маскарадинг в зоне trusted.

sudo firewall-cmd --zone=trusted --add-masquerade

Проверьте, включён ли он.

sudo firewall-cmd --zone=trusted --query-masquerade

Если команда вывела yes, можно переходить дальше.

Создание правила перенаправления

Теперь создадим правило перенаправления.

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

Нам нужно задать следующее правило: «Для зоны trusted перенаправлять любой TCP-трафик, предназначенный для порта 80, на порт 8080».

Выполните команду:

sudo firewall-cmd --zone=trusted --add-forward-port=port=80:proto=tcp:toport=8080

Разберём параметры команды:

  • port=80: исходное место назначения — старый номер комнаты.
  • proto=tcp: используемый протокол — веб-трафик работает поверх TCP.
  • toport=8080: новое место назначения — новый номер комнаты.

Проверьте, что правило добавлено правильно.

sudo firewall-cmd --zone=trusted --list-forward-ports

В выводе должно отображаться это правило.

Проверка перенаправления

В рамках настройки мы запустили простой веб-сервер на порту 8080. Сначала убедитесь, что он работает, обратившись к нему напрямую.

curl http://127.0.0.1:8080

Вы должны увидеть сообщение: «Hello from Port 8080! Port Forwarding is working.»

Теперь проверим перенаправление портов, обратившись к собственному IP-адресу через порт 80.

Узнайте свой IP-адрес:

MY_IP=$(hostname -I | awk '{print $1}')
echo "My IP is: $MY_IP"

Попробуйте подключиться к порту 80, используя этот IP-адрес.

curl http://$MY_IP:80

Примечание о проверке: во многих средах Linux, включая эту лабораторную среду, вы можете получить ошибку Connection refused. Это известное ограничение называется NAT Loopback. Ядро часто не позволяет компьютеру подключаться к собственному внешнему IP-адресу для правил NAT.

Об этом ограничении важно помнить: оно помогает отличать правильность настройки от результатов локальной проверки. Иногда правило работает корректно, даже если самопроверка с того же компьютера даёт результат, вводящий в заблуждение.

В реальной ситуации посетитель с другого компьютера был бы успешно перенаправлен. То, что на предыдущем шаге команда list-forward-ports показала правило, является настоящим подтверждением успеха.

Удаление правила

После завершения работы рекомендуется удалить временные настройки. Удалите правило перенаправления, чтобы трафик снова обрабатывался обычным образом.

Очистка особенно важна при администрировании брандмауэра: устаревшие правила могут незаметно менять доступность приложений ещё долго после завершения исходной проверки.

Чтобы удалить правило, используйте --remove-forward-port с точно такими же параметрами, какие использовались при его добавлении.

sudo firewall-cmd --zone=trusted --remove-forward-port=port=80:proto=tcp:toport=8080

Проверьте, что правило удалено.

sudo firewall-cmd --zone=trusted --list-forward-ports

Вывод должен быть пустым.

Итоги

В этой лабораторной работе вы научились перенаправлять сетевой трафик с помощью перенаправления портов. Вы:

  1. Включили маскарадинг, чтобы брандмауэр мог изменять пакеты.
  2. Создали правило для перенаправления трафика с порта 80 на порт 8080.
  3. Узнали о механизме NAT Loopback и о том, почему локальная проверка иногда может быть неточной.
  4. Удалили правило и восстановили исходное состояние.

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