Я настроил обратный туннель SSH с помощью следующей команды между ноутбуком Linux и удаленным сервером:

ssh -4nNT -R 2222:localhost:22 somehost.com

То есть к ноутбуку, который находится за брандмауэром, можно получить доступ через ssh с помощью следующей команды:

ssh -p 2222 -l joe somehost.com

на sshd_config somehost.com я включил Gatewayports = yes.

Я рад сказать, что все это прекрасно работает. Однако, одна вещь меня побеждает: на somehost.com работает iptables , у которого НЕ открыт порт 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 ответ1

0

На 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.

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