Как перенаправить приложение с порта 7443 на порт 443 с помощью IPTABLES: пошаговое руководство

Настройка редиректа трафика на сервере Python с использованием iptables

В этой статье мы рассмотрим, как настроить HTTP-сервер на Python с IP-адресом IP1, работающим на порту 7443, и перенаправить внешние запросы на порт 443 таким образом, чтобы они направлялись на 7443. Мы также обсудим, как блокировать все входящие соединения, кроме SSH и редиректированного трафика.

Задача

Наша основная задача заключается в том, чтобы:

  1. Заблокировать все входящие соединения на порт 7443 из внешнего мира.
  2. Разрешить доступ к серверу через порт 443, который будет перенаправлять запросы на порт 7443.
  3. Позволить входящие соединения на порт 22 для SSH.

Условия работы

  • Сервер запущен на всех интерфейсах (0.0.0.0:7443).
  • Правила iptables должны быть настроены для перенаправления трафика.

Настройка iptables

Для реализации нашей задачи мы будем использовать iptables. Вот необходимые правила, которые стоит применить:

# Настройка цепочек
*nat
:PREROUTING ACCEPT [3589:735248]
:POSTROUTING ACCEPT [40:5729]

# Перенаправление входящего трафика на порт 443 на порт 7443
-A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:7443

COMMIT

*filter
:INPUT ACCEPT [3526:729437]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [40:5729]

# Разрешить пакеты для уже установленных соединений
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 

# Разрешить локальный трафик
-A INPUT -p tcp -i lo -j ACCEPT

# Разрешить входящие соединения на порт 443
-A INPUT -p tcp --dport 443 -j ACCEPT

# Разрешить входящие SSH соединения на порт 22
-A INPUT -p tcp --dport 22 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

# Блокировка всех остальных входящих соединений
-A INPUT -j DROP

COMMIT

Примечания

  1. Логирование: Каждое правило может быть дополнено логированием для упрощения отладки. Например, добавьте -j LOG перед действием, которое хотите отслеживать.
  2. Проверка работы: Убедитесь, что сервер действительно запускается на адресе 0.0.0.0:7443 и оставляет только разрешенные порты открытыми.

Почему не работает перенаправление

Если у вас возникает проблема с доступом к серверу на порту 7443, причина может заключаться в том, что сам порт 7443 остается открытым. Если добавить правило -A INPUT -p tcp --dport 7443 -j ACCEPT, сервер станет доступным и по этому порту. Это не то, что требуется.

Использование conntrack

Для более строгого контроля можно использовать модуль conntrack. Он позволяет фильтровать соединения, перенаправленные при помощи NAT:

-A INPUT -m conntrack --ctstate DNAT -m tcp --dport 7443 -j ACCEPT

Это правило позволит принимать только те соединения, которые перенаправляются с порта 443, и блокировать прямые запросы на 7443.

Заключение

Установка и конфигурация iptables для редиректа интернет-трафика – это не только удобный, но и необходимый шаг для обеспечения безопасности вашего сервера. Настроив правила правильно, вы сможете контролировать доступ к вашему Python-серверу, минимизируя риски и поддерживая безопасность вашей системы.

Источник

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *