SSH Sshuttle: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 88: Строка 88:
 
UserKnownHostsFile=/dev/null
 
UserKnownHostsFile=/dev/null
 
</PRE>
 
</PRE>
  +
=Как заворачивается трафик=

Версия 11:08, 14 мая 2024

Shuttle

Заметка что бы не забыть что да как

Пример:

sshuttle --remote mcc-user@10.238.27.69  10.238.56.0/24  -vv --dns --ssh-cmd "ssh -F /Users/mmazur/ssh_config -vv"
  • --remote mcc-user@10.238.27.69 - через какой хост завернуть трафик (туда и только туда нужен доступ по логину/ключу/2FA )
  • 10.238.56.0/24 - какую сеть маршрутизировать (в случае МакОС - добавлю подробности!)
  • -vv - подробный вывод
  • --dns - в том числе использовать для DNS
  • --ssh-cmd "ssh -F /Users/mmazur/ssh_config -vv" - как и с какими параметрами подключаться к хосту 10.238.27.69


Работает только для tcp/udp/icmp

Еще примеры

Весь трафик

Например для работы в небезхопастных сетях

sshuttle -r user@remoteserver 0.0.0.0/0 -vv

Теперь о том, как работает. 1) в момент запуска sshuttle копирует на удаленный сервер некий assembler.py (/usr/lib/sshuttle/assembler.py с ноута) 2) запускает assembler.py на удаленном сервере (python2 -c import sys; skip_imports=1; verbosity=2; exec compile(sys.stdin.read(764), «assembler.py», «exec»)) 3) запускает на локалхосте /usr/lib/sshuttle/main.py 4) в iptables (в линкус) добавляет правило, по которым весь tcp трафик заворачивается в ssh-туннель.

DNS трафик через туннель тоже

# sshuttle -r user@remoteserver 0.0.0.0/0 -vv --dns

(учтите, что если у вас в resolv.conf прописаны провайдерские dns-резолверы, то к ним вас после этой команды могут «не пустить». Впрочем — кто такой херней страдает и оставляет провайдерские dns?)

Используем ssh-ключ для коннекта

# sshuttle -r user@remoteserver 0.0.0.0/0 -vv --dns --ssh-cmd "ssh -i /home/username/.ssh/id_dsa"

Используем ssh-агента для коннекта

# sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" sshuttle -r root@messer.qs.biz 0.0.0.0/0 -vv

Отроутим трафик через ssh только до определенных сетей/хостов

# SSH_AUTH_SOCK="$SSH_AUTH_SOCK" sshuttle -r root@remotehost.tld 188.40.35.183/32 153.121.72.212/32 153.121.72.211/32 173.194.122.0/24 -vv

Да, ещё где-то в недрах «это ж опенсорс!» есть версия, которая умеет роутить вообще весь трафик (и icmp, и весь udp), но она не очень похожа на стабильную. https://github.com/brianmay/sshuttle/tree/tproxy — вот здесь (это НЕ апстрим проекта).

ssh-cmd

Можно например так - проброс через несколько хостов

sshuttle -r user@10.245.56.195 10.236.0.0/14  -vv --dns --ssh-cmd "ssh -F /Users/mmazur/ssh_config -vv"

Тут фокус в том что

  • За счет строки конфига ProxyJump citadel.some-domin.tld,osbastion.some-domin.tld подключение к хосту 10.245.56.195 будет идти через два джамп-хоста, после чего сеть 10.236.0.0/14 будет доступна уже через это соединение
  • подключение к osbastion.some-domin.tld происходит через ProxyJump citadel.some-domin.tld

Host *some-domin.tld
    User                mmazur2
    ForwardAgent        yes

Host osbastion.some-domin.tld
    Hostname            10.252.13.102
    ProxyJump           citadel.some-domin.tld
    ServerAliveInterval 3600
    DynamicForward      127.0.0.1:6666

Host ssh.some-domin.tld
  Hostname 10.252.12.6

Host 10.245.56.* 10.245.57.* 10.245.58.* 10.245.59.* 10.245.60.* 10.34.187.*
    ForwardAgent                yes
    ProxyJump                   citadel.some-domin.tld,osbastion.some-domin.tld
    StrictHostKeyChecking       no
    User                        mcc-user
    IdentitiesOnly              yes
    IdentityFile                ~/path/to/ssh.key
    UserKnownHostsFile          /dev/null
    PasswordAuthentication no
    GSSAPIAuthentication no
    UserKnownHostsFile=/dev/null

Как заворачивается трафик