Бір клиент екінші клиенттің SSH қызметіне жетуі керек, ал пулдың қалған бөлігі бүгінгідей оқшауланған күйде қалуы тиіс. Азғыратын ажыратқыш — client-to-client, ол теңдестер арасындағы рұқсатты бәріне бірден қосады және шешімді ядроның орнына OpenVPN-ға береді. Тар жауап бұл ажыратқышты өшірулі ұстайды және сервердің өз маршруттауы мен қауіпсіздік қабырғасына дәл бір ағынды көтеруге мүмкіндік береді.

Механизм ереже мәтінінен маңыздырақ, өйткені екі тәсіл пакетті әртүрлі жерлерге қояды. Қайсысын таңдағаныңызды білу ештеңе істемейтін сияқты көрінетін ережені де, онсыз қосылатын теңдесті де түсіндіреді.

client-to-client пакетті қайда жылжытады

client-to-client қосулы кезде сервер теңдес пакетін туннель құрылғысынан қайта шығарудың орнына іштей жібереді, сондықтан пакет ешқашан ядроның өткізу жолына жетпейді. Бұл ыңғайлы және қауіпсіздік қабырғаңыз бақылауы тиіс ағынды ешқашан көрмейтінін білдіреді. Параметрді өшірулі қалдырыңыз, сервер пакетті сол интерфейстен қайта сыртқа бағыттайды, бұл оны netfilter алдына қояды. Сол интерфейс кіреді, сол шығады, және FORWARD тізбегінің сөзі бар.

Айырбас анық: бір саясат нүктесін аласыз және қысқа жол сіз үшін жасаған маршруттау мен өткізуді өз мойныңызға аласыз. Бұл жұмыс бір ағын үшін шағын және қосқан әрбір ерекшелікпен өседі. Ерекшеліктерді қазір санаңыз, өйткені теңдестер арасындағы саясат шын мәнінде ережелер жиынтығында өмір сүреді.

Теңдес пакеті шын мәнінде жүретін жол

Linux Community OpenVPN 2.6 қызметін, DCO орнына пайдаланушы кеңістігінде TUN өңдеуін, subnet топологиясын, tun0 және клиент A 10.44.0.21-де, клиент B 10.44.0.37-де орналасқан 10.44.0.0/24 пулын болжаңыз. Subnet топологиясында A алған мекенжай мен маска пулды әлдеқашан қамтиды, сондықтан A пакетті қосымша итерілген маршрутсыз туннель құрылғысына жібереді. A-дағы нақты маршрутты болжамай, тексеріңіз.

Серверде пакет B мекенжайына келеді, бұл жергілікті мекенжай емес, сондықтан өткізіледі. Бұл мүлдем болуы үшін IPv4 өткізу қосулы болуы керек және маршрут іздеу пакетті қайта tun0 арқылы сыртқа жіберуі тиіс. Сондықтан қауіпсіздік қабырғасы екі жақта да бірдей интерфейсті өткізілген ағынды көреді, және бұл көптеген ережелер жиынтығы өткізіп жіберетін бөлшек. Мұнда бастауышты аудару қажет емес, және A мекенжайын бүлінбеген күйде сақтау B-ға өзінің бастауышқа негізделген ережесін қолдануға мүмкіндік беретін нәрсе.

Серверде екі ереже, осы ретпен

Үш ереже бүкіл рұқсатты көтереді: өткізу, жұп ерекшелігі және туннель жұбы үшін әдепкі тастау. Қабылдау ережесі жұп пен қызметті атайды, сондықтан рұқсат өсіп келе жатқан пулда да сақталады. Оны туннель-туннель трафигі үшін кез келген жалпы тыйымнан бұрын қойыңыз, өйткені бірінші сәйкестік жеңеді:

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROP

Бұл пәрмендер үлгілі және хостыңыз ережелерді сақтау үшін пайдаланатын механизмге жатады; жұмыс кезінде енгізілген қосымша келесі жүктеуде жоғалады. Күйлі ереже B жауаптары мен TCP қол алысуының екінші, айна қабылдаусыз қайтуына мүмкіндік береді.

Кейін ережелер тізімін емес, санауыштарды тексеріңіз, өйткені ешқашан сәйкеспейтін ереже жұмыс істейтіннен айнымайды. Санауыштар нөлде қалса, пакет сіз ойлаған жолмен жүрмейді.

B әлі неге рұқсат беруі керек

SSH қызметін B жүргізеді, сондықтан туннель мекенжайында бірдеңе тыңдап тұр ма және өз хостының қауіпсіздік қабырғасы бастауышты қабылдай ма, мұны B шешеді. Сервердегі желілік рұқсат B-дағы ешбір тіркелгі үшін рұқсат емес, ал хост кілтін тексеру мен пайдаланушыны аутентификациялау кез келген басқа жерден болғандай күшінде қалады.

Алдымен оң жағдайды сынаңыз: A-дан B туннель мекенжайына жаңа SSH қосылымы, күтілетін хост кілтімен қабылдансын. Сосын басқа теңдесті немесе басқа портты сынаңыз және қабылданбағанын растаңыз, өйткені үнсіз бәріне рұқсат беретін рұқсат маңызды болғанша жұмыс істейтінінен ажыратылмайды. Бұл сынақтың екі жартысы да қажет, ал екіншісі — адамдар тастап кететін жартысы.

Бөлінген мекенжайларды, екі клиенттегі нақты маршруттарды және сервердегі және B-дегі дәл ережелерді жазып алыңыз. Шлюзге сәтті ping немесе серверде ашық порт бұлардың ешқайсысын дәлелдемейді, өйткені теңдестер арасындағы өткізу әлі бұғатталған кезде екеуі де дұрыс болуы мүмкін. Бұл сандарды туннель көтерілген кезде жазыңыз, өйткені клиент қайта қосылғаннан кейін алатын мекенжай басқа болуы мүмкін.

Қатысты мақалалар