Есть ли способ сделать следующее с IPTables (Debian Squeeze): попросить пользователей подключиться к «хост-серверу» с помощью общей команды ssh и порта 22, а затем, как только соединение будет установлено, перенаправить их на другой адрес на основе строки они привыкли подключаться в первую очередь.
Например, при использовании сервера в облаке, на котором размещены виртуальные серверы, где мы можем использовать «фиктивные» адреса (так, чтобы у хост-сервера был один общедоступный адрес, а у гостевых серверов был свой собственный частный адрес), мы хотим, чтобы пользователи подключались к хост-сервер, используя общий внешний порт, а затем перенаправьте их на виртуальный сервер, используя отдельный адрес, основанный на исходной строке подключения ssh, которую они используют.
Чтобы установить начальное соединение, нам нужно использовать один порт ssh ... а затем перенаправить пользователей на их конкретные виртуальные серверы после того, как будет установлено начальное соединение.
Любая помощь приветствуется!
Похоже, вы хотите сделать переадресацию портов.
Вот хорошая ссылка сайт
редактировать
Per lain, чтобы мой ответ был более актуальным
Это непростое решение, но самое простое, что вы собираетесь сделать, - это использовать переадресацию портов и назначать определенные порты конкретным людям и направлять эти порты на определенные машины. Если вы хотите потратить время на создание собственного приложения, вы можете обойти эту проблему, но это займет много времени.
Итак, в вашем Linux-окне, контролирующем маршрутизацию, добавьте это в свои IPTABLES:
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -i eth1 -j ACCEPT
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
Примечание: вам не нужно указывать --source 11.22.33.44
, но лучше из соображений безопасности. Если люди подключаются с динамического адреса, то, вероятно, лучше этого не делать.
Итак, код IPTABLES, который я показал, принимает входящие запросы на порт 22 и перенаправляет их на 192.168.1.50:22. Итак, если я ssh CIA@server.com:22
, то меня перенаправят с server.com:22
на внутренний сервер 192.168.1.50.22
.
Вам придется использовать несколько записей для нескольких серверов. Так, например, для портов 22-25:
# Port 22
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -i eth1 -j ACCEPT
# Port 23
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 23 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 23 -i eth1 -j ACCEPT
# Port 24
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 24 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 24 -i eth1 -j ACCEPT
# Port 25
iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 25 -j DNAT --to 192.168.1.50:80
iptables -A INPUT -p tcp -m state --state NEW --dport 25 -i eth1 -j ACCEPT
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
iptables -A PREROUTING -t nat -i eth1 -p tcp --source 11.22.33.44 --dport 22 -j DNAT --to 192.168.1.50:22
При этом я также забыл, что вы, вероятно, тоже могли бы что-то сделать с профилями bash. Это означает, что если конкретный пользователь подключается через SSH, он будет перенаправлен по его профилю, а не по порту подключения. Это избавит от необходимости составлять длинный список правил IPTABLE и переадресации портов.
Чтобы отредактировать профиль пользователя bash
vi /home/user/.bash_profile
Добавьте эту строку в конец файла
ssh 192.168.1.50
Итак, какой бы порт вы ни использовали для SSH, все пользователи могут использовать один и тот же порт, и они автоматически перенаправляются из server.com
на внутренний сервер 192.168.1.50
и нет необходимости в беспорядочных конфигурациях IPTABLE или новых приложениях, пока пользователь существует как на сервере маршрутизации, так и на внутреннем сервере (ах).
Хммм ... Думаю, я ошибался. Был простой ответ. Это пришло мне в голову после того, как я прочитал ответ обезьяны.
То, что вы пытаетесь сделать, немного сложно реализовать на сетевом уровне, поскольку вам понадобится балансировщик нагрузки уровня 7 (уровень приложения) или проверка пакетов для реализации правил пересылки. Поскольку вы имеете дело с зашифрованным трафиком, вы не можете просто использовать что-то вне соединения, потому что оно не сможет прочитать зашифрованную часть, где находится нужная вам информация.
Как отметило ЦРУ, SSH включает в себя функцию пересылки TCP-портов с локального компьютера в удаленную сеть. Раньше я не пытался заставить сервер принудительно перенаправлять порт, поскольку клиент обычно указывает правила перенаправления портов. Вы можете по крайней мере ограничить, какие порты разрешено использовать клиенту, но это по-прежнему требует знаний / настройки со стороны клиента. Этот ТАК ответ обеспечивает authorized_keys
строка, чтобы настроить это.
Если вы хотите контролировать то, что происходит с пользователями, вы можете предоставить им оболочку на входящем ssh-сервере, которая дает им соединение с их виртуальным сервером только с помощью ключей или даже меню серверов.
client -> ruser@sshserver:/sbin/user_ssh_shell -> ruser@vserver:/bin/bash
Затем на sshserver
создать файл /bin/user_ssh_shell
#!/bin/sh
ssh -i /path/to/privatekey.rsa ruser@192.168.1.2
И сделайте так, чтобы оболочка пользователя
usermod ruser -s /sbin/user_ssh_shell