Назад | Перейти на главную страницу

Ubuntu / iptables: использование сервера в качестве посредника для связи с сервером с брандмауэром

У меня есть ситуация, когда мне нужно общаться с API, который разрешает соединения только с одного определенного IP-адреса.

Итак, api.example.com принимает соединения на порт 443 от белого списка ip.

Я хочу иметь возможность подключаться отовсюду к порту 443 ip из белого списка, перенаправлять пакеты на api.example.com на порт 443 и отправлять ответы обратно на подключающуюся машину.

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

Я пробовал следовать приведенным здесь примерам (http://www.tldp.org/HOWTO/TransparentProxy-6.html), используя приведенные ниже инструкции, но безуспешно.

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j DNAT --to api.example.com:443
iptables -t nat -A POSTROUTING -o eth1 -d api.example.com -j SNAT --to whitelisted-ip

Любая помощь будет оценена.

Обновить:

Я также пробовал следующее, но безрезультатно:

iptables -t nat -A PREROUTING  -p tcp -d whitelisted-ip  --dport 443 -j DNAT --to api.example.com:443
iptables -t nat -A POSTROUTING -p tcp -s api.example.com --sport 443 -j SNAT --to whitelisted-ip:443

Спасибо

Я только что понял, что это дубликат другого вопроса:

Как сделать переадресацию портов с одного ip на другой в той же сети?

Я заставил его работать с:

iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination api.example.com:443
iptables -t nat -A POSTROUTING -p tcp -d api.example.com --dport 443 -j SNAT --to-source whitelisted-ip

Вместе с sysctl переадресации ip:

echo 1 > /proc/sys/net/ipv4/ip_forward

В оболочке whitelisted-ip вы можете попробовать использовать netcat для таких задач.

Выполнив команду ниже в оболочке whitelisted-ip, вы собираетесь привязать порт 4443 и перенаправить соединение на api.example.com:443.

nc -l -p 4443 -c "nc api.example.com 443"

Таким образом, вы можете подключиться к whitelisted-ip: 4443 с любых других конечных точек.

Напоминание: я не рекомендую привязывать это к любому общедоступному интерфейсу без какой-либо защиты, вы могли бы скорее привязать порт к интерфейсу обратной связи, добавив -s 127.0.0.1 аргумент.

Насколько я понимаю, вы хотите получить доступ к серверу из любого места с одним IP-адресом (белый список-IP), который не является клиентским IP-адресом, который вы используете. Вы не можете этого сделать, потому что вы можете связаться с сервером с белым списком-ip, но сервер не сможет ответить, потому что это просто не ваш IP-адрес в сети.