sshuttle супраць поўнага VPN: што насамрэч пакрывае яго метад
sshuttle пераносіць толькі тое, што падтрымлівае яго метад перасылкі: спачатку праверце ахоп TCP, DNS і UDP, патрэбныя лакальныя правы і аддаленага памочніка.
sshuttle выбіраюць таму, што SSH ужо працуе і крыптаграфія выглядае знаёмай, а такое разважанне абыходзіць адзінае пытанне, якое вырашае прыдатнасць. Якія пакеты пакідаюць машыну, які рахунак нясе іх на іншым баку і колькі лакальных правоў патрабуе інструмент. Гэтыя тры адказы залежаць ад метаду перасылкі, таму налада, якая працуе для адной праграмы, можа ціха зламацца для наступнай. Разбор ніжэй пачынаецца з пратакола, які праграма насамрэч патрабуе.
Пачніце з пратакола, які патрабуе праграма
Падтрымка пратаколаў у sshuttle 2.0 залежыць ад абранага метаду. Метады NAT і nft у Linux апрацоўваюць TCP разам з DNS, а TPROXY дадае агульны UDP. Кожная платформа і кожны метад маюць свае межы, а macOS перахоплівае зусім іншым механізмам. Запішыце ўсталяваную версію, абраны метад і пратаколы, патрэбныя праграме, перш чым нешта выбіраць.
Таму працоўны запыт TCP вельмі мала даказвае пра праграму UDP ці пра кожны запыт DNS. sshuttle таксама разглядае TCP як патокі, а не тунелюе цэлыя IP-пакеты, таму выснова пра прапускную здольнасць, запазычаная ў звычайнага VPN, сюды не пераносіцца. Параўнайце механізм, які вы сапраўды запускаеце, з нагрузкай, якая ў вас сапраўды ёсць.
| Approach | What it carries | What it needs locally |
|---|---|---|
| SSH local forward | One explicitly named TCP destination | Nothing beyond the SSH client |
| sshuttle, nft or nat method | TCP and DNS to the routed prefixes | Root or sudo for firewall rules |
| sshuttle, tproxy method | TCP, DNS and general UDP | Root or sudo, and kernel support |
| IP VPN | Routed IP traffic in a tunnel | A client with the required privileges |
Што кліенту патрэбна лакальна
Задакументаваная схема кліента патрабуе root або sudo, бо яна ўсталёўвае лакальныя правілы перахопу, а не стварае інтэрфейс тунеля. Гэты адзіны факт змяняе гісторыю бяспекі: працэс з такімі правамі можа перанакіроўваць трафік усёй машыны, а не адной праграмы. Разглядайце правы як частку праекта, а не як дэталь усталёўкі.
Пераканайцеся, якія правілы ўсталяваў інструмент і што яны знікаюць пры выхадзе. Сеанс, які зваліўся і пакінуў правілы перахопу, можа загнаць трафік у чорную дзірку праз доўгі час пасля таго, як аператар лічыць, што злучэнне скончана, і сімптом выглядае як збой сеткі, а не як забытае правіла.
sudo sshuttle --method nft --dns 172.19.4.0/24
nft list ruleset | grep -i sshuttle
ip route
Першая каманда — гэта форма тыповага выкліку, з прэфіксам, які вам сапраўды патрэбны. Другая паказвае, што ўсталяваў інструмент, а трэцяя пацвярджае, што інтэрфейс тунеля не з'явіўся, што і чакаецца для гэтага праекта.
Што запускае аддалены бок
Аддалены бок — гэта аўтарызаваны рахунак SSH плюс сумяшчальнае асяроддзе памочніка на Python. Уваход, які ўдаецца ў абмежаванай абалонцы, не дае аўтаматычна дазволу запускаць гэтага памочніка, а рахунак, які можа запускаць памочніка, не дасягае аўтаматычна кожнай мэтавай службы. Абодва факты належаць да запыту на доступ, а не да нататак аб пошуку няспраўнасцяў.
Абараняйце праверку ідэнтычнасці хоста і аўтэнтыфікацыю рахунку. Прыняцце невядомага ключа хоста, каб першае злучэнне спрацавала, выдаляе праверку, што аддалены бок — гэта менавіта тая машына, і гэта тут важней, чым у перасылцы для адной мэты.
Абмяжуйце аддалены рахунак службамі, патрэбнымі працэсу працы, і ўзгадніце гэтыя межы з тымі, хто кіруе хостам. Яны частка даверных адносін, і ніякая налада на баку кліента гэтага не змяняе.
Дзе праходзіць мяжа даверу
Перасылка прыватнага злучэння API праз SSH не дае дазволу на кожную аперацыю API. TLS праграмы і ўваход у праграму па-ранейшаму дзейнічаюць, і інструмент не можа зрабіць неаўтэнтыфікаваную службу бяспечнай. Наступны крок з аддаленага хоста таксама не аўтаматычна той самы абаронены сегмент, што і канал SSH, бо другое злучэнне ідзе па тых правілах, якія ёсць у аддаленага хоста.
Запішыце мяжу адным сказам: трафік да гэтых прэфіксаў выходзіць праз гэты рахунак на тым хосце. Калі сказ патрабуе абзаца выключэнняў, праект робіць больш, чым заяўляе яго дакументацыя, і заслугоўвае другога позірку перад выпускам.
Дакажыце гэта па кожным пратаколе, потым выбірайце інструмент
Праверце кожны патрэбны пратакол бясшкодным запытам, уключна з шляхам рэзалвера і сямействамі адрасоў, якія выкарыстоўвае праграма. Уключыце ў тэст разрыў злучэння, каб дазволеныя паводзіны праграмы пры збоі сталі вядомым вынікам, а не нечаканасцю падчас інцыдэнту. Сеанс, які правільна перасылаў, пакуль дзейнічаў, нічога не кажа пра тое, што адбудзецца пасля яго разрыву.
Для некалькіх службаў, названых відавочна, звычайная лакальная перасылка прасцейшая ў валоданні і аўдыце. Для трафіку праграм, які адпавядае яго метаду, sshuttle прапануе законны кампраміс. Калі патрабаванне — шырокае IP-злучэнне, праект VPN і ёсць сумленны адказ, а выбар ідзе за ахопам і аперацыйнай адказнасцю, а не за рэйтынгам алгарытмаў шыфравання.