2

У меня есть Oracle dbms на удаленной машине Linux (AWS Linux, должно быть похоже на RHEL).

К сожалению, сеть, в которой я нахожусь, разрешает только исходящий трафик на порты 80, 443 и 22.

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

Я не могу использовать прокси-сервер http, так как трафик действительно будет трафиком пользовательского протокола оракула на порту 1521, но я слышал, что linux позволяет просто пересылать данные «из коробки». Не могли бы вы сказать мне, как это сделать? Спасибо

2 ответа2

2

Честное предупреждение, я не эксперт по netfilter (iptables).

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

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 1521

Возможно, вам придется изменить eth0 на правильное имя устройства для сетевого адаптера сервера. Это должно привести к тому, что любые пакеты, поступающие на порт 80, будут приняты СУБД Oracle, прослушивающей порт 1521.

Я пошел дальше и посмотрел, что делают эти опции (потому что я не очень хорошо знаком с управлением netfilter вручную). Леме, сломай это:

-t nat -A PREROUTING

При этом выбирается таблица NAT и добавляется (-A) новое правило в цепочку PREROUTING таблицы NAT. Обычно, когда вы перенаправляете с одного порта на другой, это относится к таблице NAT. Цепочка PREROUTING происходит очень рано, когда Netfilter обрабатывает входящие пакеты. Обычно это самая первая цепочка для входящих пакетов.

-i eth0 -p tcp -dport 80

Это фильтрующая часть правила. Мы сообщаем ему, на каком интерфейсе (-i) и протоколе (-p) вы хотите, чтобы это правило влияло на пакеты. В этом примере мы создаем правило для TCP-трафика на интерфейсе eth0 . Мы также сообщаем ему, какой порт назначения (-dport) искать в пакетах ... в этом случае пакеты с портом назначения 80 (tcp).

Когда вы пытаетесь подключиться к порту 80 tcp на сервере с СУБД Oracle, пакеты tcp, отправляемые вашей машиной, будут иметь порт назначения 80 в своих заголовках.

--j REDIRECT --to-ports 1521

Это мясо правила. Здесь вы говорите, что пакеты, которые соответствуют вышеупомянутым фильтрам, должны быть перенаправлены (--j REDIRECT) на порт 1521 (--to-ports 1521). Когда сетевой фильтр находится в той же системе, что и приложение, для которого вы хотите перенаправить трафик, вы используете REDIRECT . Когда приложение находится на другом сервере, вы должны использовать вместо него DNAT (и указать как IP, так и порт).

Пожалуйста, дайте мне знать, если это работает.

Эти настройки не являются постоянными; чтобы сделать их постоянными, я бы посоветовал вам посмотреть установку iptables-persistent . Вы можете найти больше информации здесь на StackOverflow .

2

Один из способов сделать это (к сожалению, не «из коробки», как вы упоминаете), это использовать программу под названием socat . Он доступен в большинстве репозиториев пакетов, поэтому вы можете использовать yum install socat в своем сценарии (в Debian работает apt install socat ).

Используемая команда:socat tcp-listen:[public accessible port],reuseaddr,fork tcp:localhost:[actual port] . В вашем случае это будет sudo socat tcp-listen:80,reuseaddr,fork tcp:localhost:1521 . (Обратите внимание, что вам могут потребоваться привилегии суперпользователя в зависимости от вашей конфигурации.)

Дополнительные ответы вы можете посмотреть здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .