Практикалык кеңештер, мисалдар жана SSH туннелдери
Практикалык мисалдар SSH, ал алыскы система администратору катары жөндөмүңүздү жаңы деңгээлге көтөрөт. Буйруктар жана кеңештер колдонууга гана эмес, жардам берет SSH, бирок ошондой эле тармакта сабаттуу багыттоо.
Бир нече амалдарды билүү ssh каалаган система администратору, тармак инженери же коопсуздук боюнча адис үчүн пайдалуу.
Төмөнкү мисалда алыскы серверге туташуу учурунда көп кездешүүчү жалпы параметрлер колдонулат SSH.
localhost:~$ ssh -v -p 22 -C neo@remoteserver
-v: Мүчүлүштүктөрдү оңдоо натыйжасы аутентификация көйгөйлөрүн талдоодо өзгөчө пайдалуу. Кошумча маалыматты көрсөтүү үчүн бир нече жолу колдонулушу мүмкүн.
- p 22: байланыш порту алыскы SSH серверине. 22 көрсөтүлбөшү керек, анткени бул демейки маани, бирок протокол башка портто болсо, анда биз аны параметр аркылуу көрсөтөбүз. -p. Угуу порту файлда көрсөтүлгөн sshd_config түрдө Port 2222.
-C: Туташуу үчүн кысуу. Эгер сизде жай туташсаңыз же көп текстти көрсөңүз, бул байланышты тездетет.
neo@: @ символунун алдындагы сап алыскы серверде аутентификация үчүн колдонуучунун атын көрсөтөт. Эгер аны көрсөтпөсөңүз, ал сиз учурда кирип турган каттоо эсебинин колдонуучу атына демейки болуп калат (~$whoami). Колдонуучуну параметр аркылуу да көрсөтсө болот -l.
remoteserver: кошула турган хосттун аты ssh, бул толук квалификациялуу домен аты, IP дареги же жергиликтүү хост файлындагы каалаган хост болушу мүмкүн. IPv4 жана IPv6 экөөнү тең колдогон хостко туташуу үчүн, сиз параметрди буйрук сабына кошо аласыз -4 же -6 туура чечүү үчүн.
Жогорудагы параметрлердин бардыгы кошумча болуп саналат remoteserver.
Конфигурация файлын колдонуу
Көптөр файл менен тааныш болсо да 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 конфигурация файлында эки хост жазуусу бар. Биринчиси порт 2222 конфигурациясынын параметрин колдонгон бардык хостторду билдирет, экинчиси хост үчүн деп айтылат алыскы сервер башка колдонуучу аты, порт, FQDN жана IdentityFile колдонулушу керек.
Конфигурация файлы белгилүү бир хостторго туташууда өркүндөтүлгөн конфигурацияны автоматтык түрдө колдонууга мүмкүндүк берүү менен терүү убактысын үнөмдөй алат.
SCP аркылуу SSH аркылуу файлдарды көчүрүү
SSH кардары файлдарды көчүрүү үчүн дагы эки ыңгайлуу куралдар менен келет шифрленген ssh байланышы. scp жана sftp буйруктарынын стандарттуу колдонулушунун мисалы үчүн төмөндө караңыз. Көптөгөн ssh параметрлери бул буйруктарга да тиешелүү экенин эске алыңыз.
Бул мисалда файл mypic.png көчүрүлгөн алыскы сервер папкага /медиа/дата жана деп өзгөртүлдү mypic_2.png.
Порт параметриндеги айырманы унутпаңыз. Бул жерде көптөгөн адамдар ишке киргенде кармалат scp буйрук сабынан. Бул жерде порт параметри -PАл эмес, -p, ssh кардарындагыдай! Унутасың, бирок кабатыр болбо, баары унутат.
Консолду жакшы билгендер үчүн ftp, көптөгөн буйруктар окшош sftp. Сиз кыла аласыз түртүү, коюу и lsжүрөк каалагандай.
sftp neo@remoteserver
Практикалык мисалдар
Бул мисалдардын көбүндө натыйжаларга ар кандай ыкмаларды колдонуу менен жетишүүгө болот. Биздин бардыгыбыздагыдай окуу китептери жана мисалдар, жөн гана өз ишин аткарган практикалык мисалдарга артыкчылык берилет.
1. SSH байпак прокси
SSH Proxy өзгөчөлүгү жакшы себептерден улам №1 болуп саналат. Бул көптөр түшүнгөндөн күчтүүрөөк жана сизге алыскы сервер кире алган каалаган системага, дээрлик бардык тиркемелерди колдонууга мүмкүнчүлүк берет. SSH кардары бир жөнөкөй буйрук менен SOCKS прокси аркылуу трафикти туннельдей алат. Алыскы системаларга трафик алыскы серверден келерин түшүнүү маанилүү, бул веб-сервер журналдарында көрсөтүлөт.
Бул жерде биз TCP 8888 портунда байпак проксисин иштетебиз, экинчи буйрук порттун угуу режиминде активдүү экендигин текшерет. 127.0.0.1 кызмат жергиликтүү хостто гана иштей турганын көрсөтөт. Биз бардык интерфейстерде, анын ичинде ethernet же wifi, угуу үчүн бир аз башкача буйрукту колдоно алабыз, бул биздин тармагыбыздагы башка тиркемелерге (браузерлерге ж.б.) ssh socks прокси аркылуу прокси кызматына туташуу мүмкүнчүлүгүн берет.
Эми биз браузерди байпак проксиге туташуу үчүн конфигурациялай алабыз. Firefox-та, тандаңыз Орнотуулар | Негизги | Тармак орнотуулары. Туташуу үчүн IP даректи жана портту көрсөтүңүз.
Браузериңиздин DNS сурамдары SOCKS прокси аркылуу өтүшү үчүн форманын ылдый жагындагы параметрге көңүл буруңуз. Эгер сиз жергиликтүү тармагыңыздагы веб-трафикти шифрлөө үчүн прокси серверди колдонуп жатсаңыз, DNS сурамдары SSH туташуусу аркылуу туннелдештирилиши үчүн бул параметрди тандагыңыз келет.
Chrome'до socks прокси иштетилүүдө
Chrome'ду белгилүү бир буйрук сабынын параметрлери менен ишке киргизүү байпак проксисин иштетет, ошондой эле серепчиден DNS сурамдарын туннелдейт. Ишен, бирок текшер. Колдонуу tcpdump DNS сурамдары көрүнбөй калганын текшерүү үчүн.
Көптөгөн башка колдонмолор да байпак проксилерин колдонушу мүмкүн экенин эстен чыгарбаңыз. Веб браузер алардын эң популярдуусу. Кээ бир колдонмолордо прокси серверди иштетүү үчүн конфигурация параметрлери бар. Башкалар жардамчы программасы менен бир аз жардамга муктаж. Мисалы, прокси чейндер байпак прокси Microsoft RDP аркылуу иштетүүгө мүмкүндүк берет, ж.б.
Socks прокси конфигурациясынын параметрлери proxychains конфигурация файлында коюлган.
Ишара: эгер сиз Windows'та Linuxдан алыскы иш тактасын колдонсоңуз? кардарды сынап көрүңүз FreeRDP. Бул караганда заманбап ишке ашыруу болуп саналат rdesktop, бир топ жылмакай тажрыйбасы менен.
Байпак прокси аркылуу SSH колдонуу опциясы
Сиз кафеде же мейманканада отурасыз жана ишенимсиз WiFi колдонууга аргасызсыз. Биз ноутбуктан ssh проксисин ишке киргизебиз жана жергиликтүү Rasberry Piдеги үй тармагына ssh туннелин орнотобуз. Браузерди же байпак прокси үчүн конфигурацияланган башка тиркемелерди колдонуу менен биз үй тармагындагы каалаган тармак кызматтарына же үй байланышы аркылуу Интернетке кире алабыз. Ноутбугуңуз менен үй сервериңиздин ортосундагы баары (Wi-Fi жана үйүңүзгө интернет аркылуу) SSH туннелинде шифрленген.
2. SSH туннели (портту багыттоо)
Жөнөкөй түрдө, SSH туннели сиздин жергиликтүү тутумуңузда туннелдин башка четиндеги башка портко туташкан портту ачат.
Келгиле, параметрди карап көрөлү -L. Бул угуунун жергиликтүү жагы катары кароого болот. Ошентип, жогорудагы мисалда 9999 порт локалдык хост тарабында угуп жатат жана 80 порт аркылуу алыскы серверге жөнөтүлөт. Сураныч, 127.0.0.1 алыскы сервердеги локалдык хостко тиешелүү экенин эске алыңыз!
тепкичке чыгалы. Төмөнкү мисал локалдык тармактагы башка хосттор менен угуу портторун байланыштырат.
Бул мисалда биз туннелди алыскы серверден 10.10.10.10 иштеген веб-серверге багыттап жатабыз. Алыскы серверден 10.10.10.10 чейин трафик мындан ары SSH туннелинде эмес. 10.10.10.10 веб-сервер алыстан серверди веб-суроолордун булагы деп эсептейт.
4. Reverse SSH туннели
Бул жерде биз алыскы сервердеги угуу портун конфигурациялайбыз, ал кайра биздин localhost (же башка система)дагы жергиликтүү портко туташат.
Бул SSH сессиясы алыскы сервердеги 1999 портунан биздин жергиликтүү кардарыбыздагы 902 портуна байланышты орнотот.
5. SSH Reverse Proxy
Бул учурда, биз ssh байланышыбызда байпак проксисин орнотуп жатабыз, бирок прокси сервердин алыскы четинде угуп жатат. Бул алыскы проксиге туташуулар азыр туннелден биздин локалдык хосттон келген трафик катары көрүнөт.
Эгер сизде алыскы SSH параметрлери менен көйгөйлөр бар болсо, текшериңиз netstat, угуу порту башка кандай интерфейстерге туташтырылган. Биз мисалдарда 0.0.0.0 көрсөткөнүбүз менен, бирок мааниси болсо GatewayPorts в sshd_config коюу жок, анда угуучу localhost менен гана байланат (127.0.0.1).
Коопсуздук эскертүүсү
Туннелдерди жана байпак проксилерин ачуу менен, ички тармак ресурстары ишенимсиз тармактарга (мисалы, Интернетке!) жеткиликтүү болушу мүмкүн экенин эске алыңыз. Бул олуттуу коопсуздук коркунучу болушу мүмкүн, андыктан угуучу эмне экенин жана алар эмнеге кире аларын түшүнгөнүңүздү текшериңиз.
6. SSH аркылуу VPN орнотуу
Чабуул ыкмалары боюнча адистердин арасында кеңири таралган термин (пентестер ж.б.) "тармактагы таяныч пункту" болуп саналат. Бир системада байланыш орнотулгандан кийин, ал система тармакка андан ары кирүү үчүн шлюз болуп калат. кеңдикте жылдырууга мүмкүндүк берүүчү таяныч пункту.
Мындай таяныч үчүн биз SSH прокси жана колдоно алабыз прокси чейндер, бирок кээ бир чектөөлөр бар. Мисалы, розеткалар менен түздөн-түз иштөө мүмкүн болбой калат, андыктан биз тармактын ичиндеги портторду сканерлей албайбыз. NmapSYN.
Бул өнүккөн VPN опциясын колдонуу менен, байланыш төмөндөйт деңгээл 3. Андан кийин биз трафикти стандарттуу тармак багыттоосу аркылуу туннел аркылуу жөн эле багыттай алабыз.
Метод колдонот ssh, iptables, tun interfaces жана маршруттоо.
Биринчиден, сиз бул параметрлерди орнотуу керек sshd_config. Биз алыскы жана кардар системаларынын интерфейстерине өзгөртүүлөрдү киргизип жаткандыктан, биз эки тараптан тең тамыр укуктары керек.
PermitRootLogin yes
PermitTunnel yes
Андан кийин биз tun түзмөктөрүн инициализациялоону талап кылган параметрди колдонуу менен ssh байланышын орнотобуз.
localhost:~# ssh -v -w any root@remoteserver
Интерфейстерди көрсөтүүдө бизде тун түзмөгү болушу керек (# ip a). Кийинки кадам туннель интерфейстерине IP даректерди кошот.
SSH кардар тарабы:
localhost:~# ip addr add 10.10.10.2/32 peer 10.10.10.10 dev tun0
localhost:~# ip tun0 up
SSH сервер тарабы:
remoteserver:~# ip addr add 10.10.10.10/32 peer 10.10.10.2 dev tun0
remoteserver:~# ip tun0 up
Эми бизде башка хостко түз жол бар (route -n и ping 10.10.10.10).
Сиз каалаган ички тармакты башка тараптагы хост аркылуу багыттай аласыз.
localhost:~# route add -net 10.10.10.0 netmask 255.255.255.0 dev tun0
Алыскы тараптан сиз иштетишиңиз керек ip_forward и iptables.
Бум! 3-тармак катмарында SSH туннели аркылуу VPN. Эми бул жеңиш.
Эгер кандайдыр бир көйгөйлөр пайда болсо, колдонуңуз tcpdump и pingсебебин аныктоо үчүн. Биз 3-кабатта ойноп жаткандыктан, биздин icmp пакеттерибиз бул туннелден өтөт.
7. SSH ачкычын көчүрүңүз (ssh-copy-id)
Муну жасоонун бир нече жолу бар, бирок бул буйрук файлдарды кол менен көчүрбөй, убакытты үнөмдөйт. Ал жөн гана ~/.ssh/id_rsa.pub (же демейки ачкычты) тутумуңуздан көчүрөт ~/.ssh/authorized_keys алыскы серверде.
localhost:~$ ssh-copy-id user@remoteserver
8. Буйрукту алыстан аткаруу (интерактивдүү эмес)
команда ssh Жалпы, колдонуучуга ыңгайлуу интерфейс үчүн башка буйруктарга байланыштырса болот. Жөн гана тырмакчадагы акыркы параметр катары алыскы хостто иштеткиңиз келген буйрукту кошуңуз.
Бул мисалда grep ssh каналы аркылуу журнал жүктөлүп алынгандан кийин локалдык системада аткарылат. Эгер файл чоң болсо, аны иштетүү ыңгайлуу grep жөн гана эки буйрукту кош тырмакчага алуу менен алыскы тарапта.
Дагы бир мисал ошол эле функцияны аткарат ssh-copy-id 7 мисалдан.
9. Wiresharkта алыскы пакетти басып алуу жана көрүү
Мен өзүбүздүн бирөөнү алдым tcpdump мисалдары. Аны пакеттерди алыстан тартып алуу жана натыйжаларды түздөн-түз жергиликтүү Wireshark GUIде көрсөтүү үчүн колдонуңуз.
:~$ ssh root@remoteserver 'tcpdump -c 1000 -nn -w - not port 22' | wireshark -k -i -
10. Жергиликтүү папканы SSH аркылуу алыскы серверге көчүрүү
Колдонуу менен папканы кысып турган жакшы трюк bzip2 (бул командадагы -j параметри tar), анан агымды чыгарат bzip2 экинчи жагынан, алыскы серверде кайталанган папканы түзүү.
11. SSH X11 багыттоо менен алыскы GUI колдонмолору
Эгерде X кардарда жана алыскы серверде орнотулган болсо, анда сиз GUI буйругун жергиликтүү иш тактаңыздагы терезе менен алыстан аткара аласыз. Бул өзгөчөлүк көптөн бери бар, бирок дагы эле абдан пайдалуу. Мен бул мисалдагыдай алыскы веб браузерди же VMWawre Workstation консолун ишке киргизиңиз.
localhost:~$ ssh -X remoteserver vmware
Керектүү сап X11Forwarding yes файлда sshd_config.
12. Rsync жана SSH аркылуу файлды алыстан көчүрүү
rsync алда канча ыңгайлуу scp, эгер сизге каталогдун, көп сандагы файлдардын же өтө чоң файлдардын мезгил-мезгили менен камдык көчүрмөлөрү керек болсо. Өткөрмө катасынан калыбына келтирүү жана өзгөртүлгөн файлдарды гана көчүрүү функциясы бар, бул трафикти жана убакытты үнөмдөйт.
Бул мисалда компрессия колдонулат gzip (-z) жана архивдөө режими (-a), бул рекурсивдүү көчүрүүгө мүмкүндүк берет.
Torsocks прокси үчүн localhost 9050 портун колдонот. Адаттагыдай эле, Торду колдонууда сиз трафиктин туннели болуп жатканын жана башка оперативдүү коопсуздук (opsec) маселелерин кылдат текшеришиңиз керек. Сиздин DNS сурамдарыңыз кайда барат?
14. SSH - EC2 инстанциясы
EC2 инстанциясына туташуу үчүн сизге купуя ачкыч керек. Аны (.pem кеңейтүүсү) Amazon EC2 башкаруу панелинен жүктөп алып, уруксаттарды өзгөртүңүз (chmod 400 my-ec2-ssh-key.pem). Ачкычты коопсуз жерде сактаңыз же аны өз папкаңызга салыңыз ~/.ssh/.
параметр -i жөн гана ssh кардарына бул ачкычты колдонууну айтат. Файл ~/.ssh/config ec2 хостуна туташууда ачкычтын колдонулушун автоматтык түрдө конфигурациялоо үчүн идеалдуу.
Host my-ec2-public
Hostname ec2???.compute-1.amazonaws.com
User ubuntu
IdentityFile ~/.ssh/my-ec2-key.pem
15. VIM аркылуу ssh/scp аркылуу тексттик файлдарды түзөтүү
Бардык сүйүүчүлөр үчүн vim Бул кеңеш бир аз убакытты үнөмдөйт. Жардамы менен vim файлдар бир буйрук менен scp аркылуу түзөтүлөт. Бул ыкма жөн гана жергиликтүү файлды түзөт /tmpандан кийин биз аны сактагандан кийин кайра көчүрөт vim.
localhost:~$ vim scp://user@remoteserver//etc/hosts
Эскертүү: формат адаттагыдан бир аз айырмаланат scp. Үй ээсинен кийин бизде эки эселенген //. Бул абсолюттук жол шилтемеси. Бир сызык сиздин үй папкаңызга салыштырмалуу жолду көрсөтөт users.
Эгер бул катаны көрсөңүз, буйрук форматын эки жолу текшериңиз. Бул адатта синтаксистик катаны билдирет.
16. Алыскы SSHди SSHFS менен жергиликтүү папка катары орнотуу
Жардамы менен sshfs - файл тутумунун кардары ssh - биз шифрленген сеанста бардык файлдардын өз ара аракеттенүүсү менен локалдык каталогду алыскы жерге туташтыра алабыз ssh.
localhost:~$ apt install sshfs
Пакетти Ubuntu жана Debianга орнотуңуз sshfs, анан жөн гана алыскы жайгашкан жерди биздин системага орнотуңуз.
Демейки боюнча, колдонуудагы алыскы серверге байланыш бар болсо ssh экинчи байланышты колдонуу ssh же scp кошумча аутентификация менен жаңы сессияны түзөт. Опция ControlPath учурдагы сессияны бардык кийинки байланыштар үчүн колдонууга мүмкүндүк берет. Бул процессти кыйла тездетет: эффект локалдык тармакта да байкалат, андан да алыскы ресурстарга туташууда.
Host remoteserver
HostName remoteserver.example.org
ControlMaster auto
ControlPath ~/.ssh/control/%r@%h:%p
ControlPersist 10m
ControlPath жигердүү сеанс бар же жок экенин көрүү үчүн жаңы туташууларды текшерүү үчүн розетканы белгилейт ssh. Акыркы параметр консолдон чыккандан кийин да, учурдагы сеанс 10 мүнөткө чейин ачык бойдон кала берет, андыктан бул убакыттын ичинде сиз учурдагы розеткага кайра туташа аласыз. Көбүрөөк маалымат алуу үчүн, жардамды караңыз. ssh_config man.
18. VLC жана SFTP аркылуу SSH аркылуу видео агымы
Ал тургай, көптөн бери колдонуучулар ssh и vlc (Video Lan Client) тармак аркылуу видеону чындап көрүү керек болгондо, бул ыңгайлуу опцияны дайыма эле биле бербейт. Жөндөөлөрдөн File | Тармак агымын ачыңыз эмес програмдардын тили vlc катары жайгашкан жерди киргизе аласыз sftp://. Эгер сырсөз талап кылынса, эскертүү пайда болот.
sftp://remoteserver//media/uploads/myvideo.mkv
19. Эки факторлуу аутентификация
Банк эсебиңиз же Google эсебиңиз сыяктуу эки фактордук аутентификация SSH кызматына колдонулат.
Албетте, ssh башында сырсөз жана SSH ачкычы дегенди билдирген эки фактордук аутентификация функциясы бар. Аппараттык токендин же Google Authenticator колдонмосунун артыкчылыгы бул, адатта, башка физикалык түзмөк.
Бул жерде түшүнүү керек болгон негизги нерсе, бул буйрук менен бирдей эмес ssh host1ошондо user@host1:~$ ssh host2 ж.б. -J опциясы жергиликтүү хостту чынжырдагы кийинки хост менен сеанс түзүүгө мажбурлоо үчүн багыттоону акылдуу колдонот. Ошентип, жогорудагы мисалда биздин localhost хост4 үчүн аутентификацияланган. Башкача айтканда, биздин localhost ачкычтары колдонулат, ал эми localhostтан host4ке чейинки сессия толугу менен шифрленген.
Мындай мүмкүнчүлүк үчүн ssh_config конфигурация опциясын белгилеңиз ProxyJump. Эгер сиз дайыма бир нече хост аркылуу өтүшүңүз керек болсо, анда конфигурация аркылуу автоматташтыруу көп убакытты үнөмдөйт.
21. iptables колдонуп SSH катаал күч аракеттерин бөгөттөө
SSH кызматын башкарган жана журналдарды караган ар бир адам ар бир саат сайын катаал күч колдонуу аракеттеринин санын билет. Журналдардагы ызы-чууну азайтуунун тез жолу - SSHти стандарттуу эмес портко жылдыруу. Файлга өзгөртүүлөрдү киргизиңиз sshd_config конфигурация параметри аркылуу Порт##.
Жардамы менен iptables Белгилүү бир чекке жеткенде портко туташуу аракеттерин оңой эле бөгөттөсөңүз болот. Муну жасоонун оңой жолу - колдонуу OSSEC, анткени ал SSH-ны гана блоктоп койбостон, хосттун аталышына негизделген чабуулду аныктоо (HIDS) чараларынын бир тобун аткарат.
22. Порт багытын өзгөртүү үчүн SSH Escape
Жана биздин акыркы мисал ssh учурдагы сессиянын ичинде порт багыттоосун өзгөртүү үчүн иштелип чыккан ssh. Бул сценарийди элестетиңиз. Сиз тармакта тереңсиз; балким, жарым ондогон хостторду секирип, эски Windows 2003 системасынын Microsoft SMBсына жөнөтүлгөн жумушчу станцияда жергиликтүү порт керек болушу мүмкүн (кимдир бирөө ms08-67 эсиндеби?).
Басуу enter, консолго кирип көрүңүз ~C. Бул учурдагы байланышка өзгөртүүлөрдү киргизүүгө мүмкүндүк берген сеансты башкаруу ырааттуулугу.
Бул жерден биз жергиликтүү 1445 портубузду ички тармактан тапкан Windows 2003 хостуна жөнөткөнүбүздү көрө аласыз. Эми жөн эле чурка msfconsole, жана сиз уланта аласыз (бул хостту колдонууну пландаштырсаңыз).
айактоо
Бул мисалдар, кеңештер жана буйруктар ssh башталышын берүү керек; Ар бир буйруктар жана мүмкүнчүлүктөр жөнүндө көбүрөөк маалымат man беттеринде жеткиликтүү (man ssh, man ssh_config, man sshd_config).
Дүйнөнүн каалаган жеринде системаларга кирүү жана буйруктарды аткаруу жөндөмү мени ар дайым кызыктырчу. сыяктуу куралдар менен жөндөмүңүздү өнүктүрүү менен ssh сиз ойногон ар кандай оюнда эффективдүү болосуз.