linux маршрутизация исходящего трафика порта 80 через SSH туннель, iptables или простой маршрут

У меня есть два хоста, A и B. хост a хостов услуг на порту 8080 и имеет исходящие правила интернет-брандмауэра, позволяющие порт 80 и 443 доступ к хосту C.

хост B находится в той же подсети, что и хост A. хост B заблокирован от достижения Интернет-Хоста C. хост A, однако, имеет исходящие правила на внешнем брандмауэре, который позволяет порту 80 и 443 исходящие на хост C.

хост B запускает программный клиент с жестко запрограммированными URL-адресами для загрузки с хоста A (порт http 8080) и Хоста C (http порт 80). Опять же, хост B заблокирован от достижения Хоста C через брандмауэр. Клиент на хосте B не поддерживает SOCKS или любую другую возможность прокси. Единственный способ, которым я могу добраться до хоста C: 80, - это перенаправление или туннелирование через хост A.

У меня есть корневой доступ к хосту A и хосту B. Как хост B может достичь Хоста C через хост A на порту 80?

Почему это не работает на хосте B?

ssh-L 80:hostC: 80 root@hostA-N

Я включил AllowTCPForwarding и GatewayPorts на хосте А. подходит для этого или есть iptables трюк, который я могу использовать?

Это изображение является схема хотите сделать с тем, что у меня есть: http://i.imgur.com/rOhQ9Us.png

5
задан Brett Bonner
04.12.2022 9:10 Количество просмотров материала 2767
Распечатать страницу

3 ответа

Как сказал @Nathan Adams, картина была бы особенно полезна в решении этой проблемы. Я не сталкивался с тем, что вы пытаетесь сделать раньше, но после создания диаграммы для себя и чтения команды-L для SSH, я подозреваю, что проблема в том, что вам нужно запустить ее как root, так как порт, который вы пытаетесь привязать, является привилегированным портом (т. е. < 1025).

0
отвечен davidgo 2022-12-05 16:58

где находится файервол, на б сам или внешний?

ваша команда ssh не работает, потому что она связывает порт 80 на B для пересылки на C через A. из вашего описания у вас есть жестко запрограммированный адрес, что означает, что B не пытается подключиться к порту 80 сам по себе. Жестко заданный адрес является ключом к вашей проблеме. Содержит ли URL логический адрес или фактический жестко закодированный IP-адрес?

Если брандмауэр находится на B, вы должны избегать пакетов, адресованных C. Я предполагаю, что это не так, поскольку у вас есть root на B. Однако решение в этом случае также должно работать независимо от того, что, а именно найти способ получить соединения с C, чтобы перейти к A. Это можно сделать, манипулируя DNS или используя правило перезаписи брандмауэра.

другой трюк будет иметь a в качестве маршрута по умолчанию для B. предполагая, что C является внешним и попадет в брандмауэр при попытке вернуть пакеты в B, вы хотели бы иметь do NAT для B. действительно грубый подход иметь ответ на запросы ARP, чтобы обмануть трафик в прохождение его, но это вряд ли будет жизнеспособным кроме как в очень маленьких установках.

0
отвечен Hod 2022-12-05 19:15

видел это в поисках чего-то другого, но подумал, что отвечу, хотя и старый:

On Хост B:

ssh -L 8080:hostC:80 user@hostA -N -f
sudo iptables -t nat -A OUTPUT -d hostC -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080

программного обеспечения Хост B встроен для подключения к HostC:80 (за вопрос), поэтому необходимо перенаправлять подключение идти через SSH-туннель создан. Кроме того, с вышеуказанными изменениями вам не нужно запускать что-либо от root.

0
отвечен Michael Kropat 2022-12-05 21:32

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

firewall
iptables
linux
networking
ssh
Вверх