Вашиот уред стои зад NAT на операторот, може да отвора излезни врски и работи SSH сервер до кој никој не може да стигне. Барањето што пристигнува обично се формулира како "дајте му VPN", што е еден одговор меѓу неколку. Пред да го прифатите, одлучете дали ви треба еден административен TCP порт или рутирана патека до цела подмрежа, зашто тоа се различни проекти со различно изложување.

Обратниот тунел добро одговара на тесната верзија. Уредот ѕвони на вашиот јазол, бара од јазолот да слуша на loopback порт и го препраќа тој порт назад на сопствената SSH услуга. Потоа администраторите стигнуваат до слушателот преку јазолот, а не преку јавниот интернет.

Три услови што ја решаваат одлуката

Запишете ги пред било каква конфигурација. Тие се границата меѓу ограничен административен влез и проширување на мрежата, а нивното мешање е начинот на кој тунел од пет реда станува безсопственичка рамна мрежа.

ConditionReverse tunnel fitsSomething else is needed
How many services must be reachable?One, or a small fixed set on loopbackAnything that needs many ports or dynamic discovery
Who connects, and how are they authenticated?Named administrators with their own hub accountsThird parties, or anything needing per-flow audit you do not control
Does the device's own LAN need to be reachable?NoYes, so a routed VPN or a managed platform is the honest answer

Третиот ред е оној за кој луѓето се расправаат. Тунел до SSH портата на уред не ги става неговите соседи на вашата мрежа и не треба да се прави да изгледа како да го прави преку синџир од дополнителни препраќања. Ако барањето навистина е LAN, кажете го тоа и проектирајте го него наместо тоа.

Страна на јазолот: ограничена сметка за реле

Дајте на секој уред сопствена сметка за реле со автентикација со јавен клуч и без интерактивна сесија. Match блокот ограничен на таа сметка го држи одобрувањето мало, а приватниот клуч останува на уредот каде што му е местото.

Match User relay-dev-7
    AuthenticationMethods publickey
    PubkeyAuthentication yes
    AllowTcpForwarding remote
    PermitListen 127.0.0.1:21022
    GatewayPorts no
    MaxSessions 0
    PermitTTY no
    X11Forwarding no
    AllowAgentForwarding no

MaxSessions 0 е интересниот ред. Тој одбива сесии на лушпа и потсистеми, а сепак го дозволува препраќањето што му е потребно на уредот, па украден клуч не може да се претвори во интерактивно најавување. PermitListen ја фиксира адресата и портата на слушателот на страната на јазолот, и GatewayPorts no го држи на loopback наместо да го отвора за мрежата во која стои јазолот.

Тестирајте ја ефективната конфигурација пред повторно вчитување и држете втора сесија отворена додека го правите тоа. Match блок што случајно се применува на сите, или печатна грешка во име на опција, е класичниот начин да се заклучите надвор од машината што ја зајакнувате. Исфрлете ја конфигурацијата што работи и прочитајте ги опциите повторно, наместо да ѝ верувате на датотеката што штотуку ја напишавте. Забележете дека поддршката за опции се разликува меѓу верзиите, така што ред прифатен во понов сервер може едноставно да биде игнориран од постар.

Страна на уредот: препраќање што гласно пропаѓа

Уредот ја отвора врската и го бара слушателот. Двете адреси во аргументот -R значат различни работи, а нивното читање од лево кон десно е најбрзиот начин да се запамети која е која.

ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=30 \
    -o ServerAliveCountMax=3 \
    -R 127.0.0.1:21022:127.0.0.1:22 \
    [email protected]

Левиот пар е местото каде што јазолот треба да слуша. Десниот пар е она кон што уредот се поврзува кога пристигнува барање, решено од сопствената страна на уредот. Нивната замена создава тунел што чисто се крева и препраќа на погрешно место, што е полошо од неуспех.

ExitOnForwardFailure=yes предизвикува командата да излезе кога бараниот слушател не може да се воспостави, па јамката за повторно стартување ви ја кажува вистината наместо да остави полуработна сесија. Не кажува ништо за тоа дали локалната SSH услуга е здрава подоцна, затоа поврзете го со менаџер на процеси и повремен вистински тест на врската.

Никогаш не ја заменувајте адресата за слушање на loopback со џокер за да избегнете дополнителен скок. Таа единствена промена е разликата меѓу административна патека и јавно достапна порта, и обично се случува при отстранување грешки, а потоа останува. Ако колега не може да стигне до портата преку јазолот, поправете ја конфигурацијата на скокот наместо да го проширите врзувањето. Loopback е целиот безбедносен аргумент на овој дизајн.

Пристап на администратор преку јазолот

Администратор со обична сметка на јазолот може да прескокне преку него до препратената порта. Сметката за реле не се користи за ова, и токму тоа е смислата да се држат одделени.

ssh -J [email protected] -o HostKeyAlias=device-7 \
    -p 21022 [email protected]

Проверете го клучот на домаќинот на уредот под избраниот псевдоним, зашто тој клуч го идентификува уредот на крајот од синџирот, а тунелот е само транспорт. Најавувањето од крај до крај сѐ уште ги автентикува двата краја; тунел што завршува на заеднички јазол не го прави сам по себе доверлива патека.

Преземете го животниот циклус

Стартувајте ја командата на уредот под менаџер на процеси со точно една активна инстанца и политика за повторно стартување што сте ја избрале свесно. Опциите keepalive откриваат мртов партнер; тие не оживуваат процес што излегол.

Потоа напишете ја постапката за повлекување. Секој уред добива свој слушател и свој клуч, па повлекувањето значи отповикување на таа сметка и отстранување на тој клуч, а не ротирање на тајна што ја делат сите уреди.

На крајот запомнете што ви дава loopback. Тој го ограничува мрежното изложување и не прави ништо за другите локални корисници на заеднички јазол, па политиката за пристап на самиот јазол сѐ уште мора да биде точна. Референца за sshd_config документира секоја од опциите користени погоре, и вреди целосно да се прочитаат деловите за препраќање пред да се прошири која било од нив.

Поврзани статии