Хотя многие знакомы с файлом sshd_config, есть ещё файл конфигурации клиента для
команды ssh. Значение по умолчанию ~/.ssh/config, но его можно определить как
параметр для опции -F.
Host *
Port 2222
Host remoteserver
HostName remoteserver.thematrix.io
User neo
Port 2112
IdentityFile /home/test/.ssh/remoteserver.private_key
В приведённом выше примерном файле конфигурации ssh две записи хоста. Первая обозначает
все хосты, для всех применяется параметр конфигурации Port 2222. Вторая говорит, что для
хоста remoteserver следует использовать другое имя пользователя, порт, FQDN и IdentityFile.
Для тех, кто знаком с консольным ftp, многие из команд похожи в sftp. Вы можете
сделать push, put и ls, как сердце пожелает.
sftp neo@remoteserver
Практические примеры
Во многих из этих примеров можно достичь результата разными методами. Как и во всех
наших учебниках и примерах, предпочтение отдаётся практическим примерам, которые просто
делают своё дело.
1. SSH socks-прокси
Функция SSH Proxy под номером 1 по уважительной причине. Она более мощная, чем многие
предполагают, и даёт вам доступ к любой системе, к которой имеет доступ удалённый сервер,
используя практически любое приложение. Клиент ssh может туннелировать трафик через
прокси-сервер SOCKS одной простой командой. Важно понимать, что трафик к удалённым
системам будет исходить от удалённого сервера, так будет указано в логах веб-сервера.
Здесь мы запускаем socks-прокси на TCP-порту 8888, вторая команда проверяет, что порт
активен в режиме прослушивания. 127.0.0.1 указывает, что служба работает только на localhost.
Мы можем применить немного другую команду для прослушивания всех интерфейсов, включая
ethernet или wifi, это позволит другим приложениям (браузерам и т д.) в нашей сети
подключаться к прокси-сервису через ssh socks-прокси.
Имейте в виду, что многие другие приложения тоже могут использовать socks-прокси. Веб-
браузер просто самое популярное из них. У некоторых приложений есть параметры
конфигурации для активации прокси-сервера. Другим нужно немного помочь вспомогательной
программой. Например, proxychains позволяет запустить через socks-прокси Microsoft RDP и др.
В простейшей форме SSH-туннель просто открывает порт в вашей локальной системе, который
подключается к другому порту на другом конце туннеля.
Разберём параметр -L. Его можно представить как локальную сторону прослушивания. Таким
образом, в примере выше порт 9999 прослушивается на стороне localhost и переадресуется через
порт 80 на remoteserver. Обратите внимание, что 127.0.0.1 относится к localhost на удалённом
сервере!
4. Обратный SSH-туннель
Общий термин среди спецов по методам атаки (пентестеры и проч.) — это «точка опоры в сети».
После установления соединения в одной системе эта система становится шлюзом для
дальнейшего доступа к сети. Точка опоры, которая позволяет двигаться вширь.
Для такой точки опоры мы можем использовать SSH-прокси и proxychains, однако есть
некоторые ограничения. Например, не получится работать напрямую с сокетами, поэтому мы не
сможем сканировать порты внутри сети через Nmap SYN.
Используя этот более продвинутый вариант VPN, подключение снижается до уровня 3. Затем
мы можем просто направить трафик через туннель, используя стандартную сетевую
маршрутизацию.
PermitRootLogin yes
PermitTunnel yes
Бум! VPN через туннель SSH на сетевом уровне 3. Вот это уже победа.
Тут есть несколько способов, но эта команда экономит время, чтобы не копировать файлы
вручную. Она просто копирует ~/.ssh/id_rsa.pub (или ключ по умолчанию) с вашей системы
в ~/.ssh/authorized_keys на удалённом сервере.
В данном примере grep выполняется на локальной системе после того, как лог скачался по ssh-
каналу. Если файл большой, удобнее запустить grep на удалённой стороне, просто заключив
обе команды в двойные кавычки.
Я взял один из наших примеров по tcpdump. Используйте его для удалённого перехвата пакетов
с выдачей результата непосредственно в GUI локального Wireshark.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i
-
10. Копирование локальной папки на удалённый сервер по SSH
Torsocks будет использовать для прокси порт 9050 на localhost. Как всегда при использовании
Tor необходимо серьёзно проверять, какой трафик туннелируется и другие проблемы
операционной безопасности (opsec). Куда идут ваши DNS-запросы?
Для подключения к инстансу EC2 необходим закрытый ключ. Скачайте его (расширение .pem)
из панели управления Amazon EC2 и измените разрешения (chmod 400 my-ec2-ssh-
key.pem). Храните ключ в надёжном месте или поместите его в свою папку ~/.ssh/.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
Примечание: формат немного отличается от обычного scp. После хоста у нас двойной //. Это
ссылка на абсолютный путь. Один слэш будет означать путь относительно домашней
папки users.
Если увидите такую ошибку, дважды проверьте формат команды. Обычно это означает
синтаксическую ошибку.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
ControlPath указывает сокет для проверки новыми соединениями на предмет наличия активной
сессии ssh. Последняя опция означает, что даже после выхода из консоли существующий сеанс
останется открытым 10 минут, так что в течение этого времени вы сможете повторно
подключиться по существующему сокету. Для дополнительной информации смотрите
справку ssh_config man.
Даже давние пользователи ssh и vlc (Video Lan Client) не всегда знают об этой удобной опции,
когда очень нужно посмотреть видео по сети. В настройках File | Open Network
Stream программы vlcможно ввести местоположение как sftp://. Если требуется пароль,
появится запрос.
sftp://remoteserver//media/uploads/myvideo.mkv
Такая же двухфакторная аутентификация, как у вашего банковского счёта или учётной записи
Google, применима к сервису SSH.
Если из-за сегментации сети приходится переходить через несколько хостов ssh, чтобы
добраться до конечной сети назначения, вам сэкономит время ярлык -J.
Любой, кто управлял сервисом SSH и просматривал логи, знает о количестве попыток
брутфорса, которые происходят каждый час каждый день. Быстрый способ уменьшить шум в
логах — перенести SSH на нестандартный порт. Внесите изменения в файл sshd_config с
помощью параметра конфигурации Port##.
localhost:~$ ~C
ssh> -h
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KL[bind_address:]port Cancel local forward
-KR[bind_address:]port Cancel remote forward
-KD[bind_address:]port Cancel dynamic forward
ssh> -L 1445:remote-win2k3:445
Forwarding port.
Здесь вы можете увидеть, что мы переадресовали наш локальный порт 1445 на хост Windows
2003, который нашли во внутренней сети. Теперь просто запустите msfconsole, и можно идти
дальше (предполагая, что вы планируете использовать этот хост).
Завершение