Я настроил обратный SSH-туннель между ноутбуком Linux и удаленным сервером с помощью следующей команды:
ssh -4nNT -R 2222:localhost:22 somehost.com
То есть к ноутбуку, находящемуся за брандмауэром, можно получить доступ по ssh с помощью следующей команды:
ssh -p 2222 -l joe somehost.com
в sshd_config на somehost.com я включил Gatewayports=yes.
Я рад сказать, что все это отлично работает. Однако, одна вещь меня огорчает: iptables
на somehost.com запущено приложение, у которого НЕ открыт порт 2222. Несмотря на то, что этот туннель работает, как это возможно? Как удаленный туннель ssh работает за кулисами? Может кто-нибудь любезно объяснить?
вот вывод iptables -L:
target prot opt source destination
ACCEPT icmp -- anywhere anywhere icmp destination-unreachable
ACCEPT icmp -- anywhere anywhere icmp time-exceeded
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT icmp -- anywhere anywhere icmp echo-reply
DROP tcp -f anywhere anywhere
DROP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
DROP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,PSH,ACK,URG/NONE
DROP tcp -- anywhere anywhere tcp flags:FIN,SYN/FIN,SYN
DROP tcp -- anywhere anywhere tcp flags:FIN,ACK/FIN
DROP tcp -- anywhere anywhere tcp flags:SYN,RST/SYN,RST
DROP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,ACK,URG
DROP udp -- anywhere anywhere udp spt:bootps dpt:bootpc
DROP tcp -- anywhere anywhere tcp dpt:kazaa
DROP udp -- anywhere anywhere udp dpt:kazaa
LOG tcp -- anywhere somehost.com tcp dpt:ssh state NEW LOG level warning tcp-options ip-options prefix "firewall-> ssh1: "
ACCEPT tcp -- anywhere somehost.com tcp dpt:ssh
LOG tcp -- anywhere somehost.com tcp dpt:2023 state NEW LOG level warning tcp-options ip-options prefix "firewall-> Check: "
ACCEPT tcp -- anywhere somehost.com tcp dpt:2023
LOG tcp -- anywhere somehost.com tcp dpt:http state NEW LOG level warning tcp-options ip-options prefix "firewall-> HTTP: "
ACCEPT tcp -- anywhere somehost.com tcp dpt:http
LOG tcp -- anywhere somehost.com tcp dpt:https state NEW LOG level warning tcp-options ip-options prefix "firewall-> HTTPS: "
ACCEPT tcp -- anywhere somehost.com tcp dpt:https
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp spt:http
решение1
На somehost.com запущен демон ssh, называемый sshd. Ваш вызов ssh с -R 2222:localhost:22 сообщает sshd на somehost.com, что он должен туннелировать трафик, который отправляется на порт 2222, на ваш ноутбук за брандмауэром через порт 22. Поскольку вы установили Gatewayports=yes, sshd отправляет весь трафик с других хостов, который отправляется на порт 2222, на ваш ноутбук через туннель на порт 22.
Для дальнейшего чтения я ссылаюсь наhttps://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work.