Кіру жұмыс істейді, PWD жұмыс істейді, содан кейін LIST клиент бас тартқанша немесе басқа деректер режиміне ауысқанша ілініп тұрады. Бұл бөліну — дәл сол белгі: 21 портқа бақылау қосылымы сау, ал деректер қосылымы қарсы жақ жете алмайтын мекенжайдан немесе порттан құрылып жатыр. NAT-ты да жасайтын VPN шлюзінің артында әдеттегі кінәлі — пайдалы жүктемесінде 10.8.0.6 сияқты туннель мекенжайы аталған FTP командасы. Тақырыпшаларды аудару бұл мәнге ешқашан тимейді.

Әрі қарай — бұл мән қайдан келеді және қай қорап оны өзгертуге құқылы.

Сынған нәрсе — пайдалы жүктеме, туннель емес

FTP деректердің соңғы нүктесін бақылау ағынының ішіне қояды. Белсенді режимде клиент өз мекенжайы мен портымен PORT жібереді, ал сервер сол жұпқа кері қоңырау шалады. Пассивті режимде сервер 227-мен жұп қайтарады, ал клиент оның орнына сол жұпқа қоңырау шалады.

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

Үш режим, үш пайдалы жүктеме

Төмендегі кесте қай жаққа қоңырау шалу бұйырылғанын және тек тақырыпшаларды қайта жазатын NAT бұған не істей алатынын көрсетеді.

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

ModeValue in the control streamWho dials whomHeader-only NAT leaves
Active (PORT)client address and portserver dials the clienta server dialing an unreachable tunnel address
Passive (227)server address and portclient dials the servera client dialing an address it cannot route to
FTPSthe same values, inside TLSas aboveciphertext, so no rewrite happens at all

Көмекшіні аудару жүретін жерге қойыңыз

Linux-та пайдалы жүктемені қайта жазуды nf_conntrack_ftp көмекшісі жасайды. Ол бақылау қосылымын қадағалайды, келісілген портты үйренеді, деректер ағыны үшін күту жасайды және NAT қорабында пайдалы жүктеменің ішіндегі мекенжай мен портты қайта жазады. Ол клиент мекенжайын аударатын құрылғыда ғана көмектеседі. Оны клиентке немесе ағынды тек жіберетін маршрутизаторға жүктеу сессияда ештеңені өзгертпейді.

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

modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp

Модульді жүктеу оны қосумен бірдей емес. 4.7-ден бастап ядролар net.netfilter.nf_conntrack_helper=0-мен келеді, сондықтан көмекші айқын ережені күтеді, мысалы iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. Егер тасымалдауға әрекет жасалғанда күтулер тізімі бос қалса, тексерілетін нәрсе — қосу, модуль емес.

Пассивті режим: серверге нені жариялау керегін айтыңыз

Пассивті режимді детерминді ету оңайырақ, өйткені серверге 227 жауабына нені қою керегін айтуға болады. vsftpd-те бұл pasv_address, pasv_min_port және pasv_max_port-пен бірге; ProFTPD MasqueradeAddress пен PassivePorts қолданады. Оларды бірінші кезекте орнатыңыз, өйткені дұрыс жарияланған мекенжай сол жақта бірдеңені қайта жазу қажеттігін жояды.

Содан кейін дәл сол порт ауқымын шлюзден өткізіңіз, мысалы -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, ереже сервер жариялағанға сәйкес болуы үшін.

Екі параметр келісуі керек. 30000-30100-ді жариялауға бұйырылған сервер, ал шлюз 40000-40100-ге рұқсат берсе, ең пайдасыз түрде сәтсіз болады: бақылау әңгімесі сау көрінеді, ал әрбір деректер қосылымы өледі. Басқа нәрсені жөндеуден бұрын сандарды салыстырыңыз.

Екі ақау белгісі және FTPS нені жояды

LIST-те ілігу сессияның бірінші деректер қосылымына нұсқайды, онда мекенжайды қайта жазу да, күту де жұмыс істеуі керек. Жұмыс істеп тұрған LIST-тен кейінгі RETR-де ілігу тасымалдаудың өзіне, яғни пассивті ауқымға немесе туннельдің MTU-сына нұсқайды. Бұл екінші белгі пайдалы жүктеме мәселесі емес, көмекші параметрлері оны түзетпейді.

TLS үстіндегі FTP көмекші оқитын пайдалы жүктемені жояды. Аралық қорап шеше алмайтын PORT немесе PASV мәнін қайта жаза алмайды, сондықтан қалған нұсқалар — TLS-ті аяқтайтын прокси, шектеулі ауқымда қолжетімді мекенжай жариялайтын сервер немесе басқа тасымалдау протоколы.

Тексерулердің қысқа реті

Симптомнан сыртқа қарай жұмыс жасаңыз. PWD сәтті болғанда LIST сәтсіз болатынын растаңыз, PORT немесе 227 пайдалы жүктемесінің ішіндегі мекенжайды ұстап алыңыз және қай құрылғы сол мекенжайды аударатынын сұраңыз. Көмекшіні сол жерде қосыңыз, бір тасымалдау кезінде күтулер тізімін бақылаңыз, содан кейін серверде пассивті режимді түзетіңіз және ауқымды шлюз ережесінде көрсетіңіз.

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

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