Pam mae rhestrau FTP yn hongian y tu ôl i borth VPN sy’n gwneud NAT
Mae mewngofnodi a PWD yn llwyddo tra mae LIST a RETR yn stopio pan fo NAT yn ailysgrifennu penawdau yn unig. Gwelwch ble mae’r cynorthwyydd FTP i fod a sut i drwsio’r modd goddefol.
Mae’r mewngofnodi yn gweithio, mae PWD yn gweithio, ac yna mae LIST yn hongian nes bod y cleient yn rhoi’r gorau iddi neu’n newid i fodd data arall. Y rhaniad hwnnw yw’r arwydd: mae’r cysylltiad rheoli i borth 21 yn iach, tra mae’r cysylltiad data yn cael ei adeiladu o gyfeiriad neu borth na all yr ochr bell gyrraedd. Y tu ôl i borth VPN sy’n gwneud NAT hefyd, y drwgdybiaeth arferol yw gorchymyn FTP y mae ei lwyth yn enwi cyfeiriad tiwnel fel 10.8.0.6. Nid yw cyfieithu penawdau byth yn cyffwrdd â’r gwerth hwnnw.
Yr hyn sy’n dilyn yw o ble mae’r gwerth hwnnw’n dod, a pha flwch sy’n cael ei newid.
Y llwyth sy’n torri, nid y tiwnel
Mae FTP yn rhoi pwynt diwedd y data y tu mewn i’r ffrwd reoli. Yn y modd gweithredol mae’r cleient yn anfon PORT gyda’i gyfeiriad a’i borth ei hun, ac mae’r gweinydd yn galw’n ôl i’r pâr hwnnw. Yn y modd goddefol mae’r gweinydd yn ateb 227 gyda phâr, ac mae’r cleient yn galw hwnnw yn lle hynny.
Mae’r ddau ffurf yn cario’r un math o ddatganiad: cysyllta â’r cyfeiriad hwn, ar y porth hwn. Mae dyfais sy’n ailysgrifennu penawdau IP a TCP yn unig yn gadael y datganiad yn llonydd, felly mae un pen yn dal i geisio cyrraedd cyfeiriad nad yw’n bodoli ond ar ochr arall tiwnel. Mae’r cysylltiad data yn stopio ar ôl i’r cysylltiad rheoli gael ei ddatgan yn iach eisoes.
Tri modd, tri llwyth
Mae’r tabl isod yn dangos pa ochr sy’n cael ei threfnu i alw, a beth all NAT sy’n ailysgrifennu penawdau yn unig ei wneud am hynny.
Darllenwch y golofn olaf fel y peth sy’n methu gyntaf. Yn y modd gweithredol y gweinydd sy’n galw i gyfeiriad preifat; yn y modd goddefol y cleient sydd; gyda FTPS y llwyth yw testun sifr a does gan y blwch canol lai fyth i weithio ag ef.
| Mode | Value in the control stream | Who dials whom | Header-only NAT leaves |
|---|---|---|---|
| Active (PORT) | client address and port | server dials the client | a server dialing an unreachable tunnel address |
| Passive (227) | server address and port | client dials the server | a client dialing an address it cannot route to |
| FTPS | the same values, inside TLS | as above | ciphertext, so no rewrite happens at all |
Rhowch y cynorthwyydd lle mae’r cyfieithu’n digwydd
Ar Linux y cynorthwyydd nf_conntrack_ftp sy’n ailysgrifennu’r llwyth. Mae’n gwylio’r cysylltiad rheoli, yn dysgu’r porth a drafodwyd, yn creu disgwyliad ar gyfer y ffrwd ddata, ac ar flwch NAT mae’n ailysgrifennu’r cyfeiriad a’r porth y tu mewn i’r llwyth. Dim ond ar y ddyfais sy’n cyfieithu cyfeiriad y cleient y mae’n helpu. Mae ei lwytho ar y cleient, neu ar lwybrydd sy’n anfon y ffrwd ymlaen yn unig, yn newid dim am y sesiwn.
Mae’r tri gorchymyn hyn yn dangos a yw’r modiwl yn bresennol, a yw’n gysylltiedig, ac a oes disgwyliad tra mae sesiwn ar agor:
modprobe nf_conntrack_ftp
lsmod | grep nf_conntrack_ftp
conntrack -L expect | grep ftp
Nid yw llwytho’r modiwl yr un peth ag ymlynu wrtho. Mae creiddiau o 4.7 ymlaen yn dod gyda net.netfilter.nf_conntrack_helper=0, felly mae’r cynorthwyydd yn aros am reol amlwg, er enghraifft iptables -t raw -A PREROUTING -p tcp --dport 21 -j CT --helper ftp. Os yw’r rhestr ddisgwyliadau’n aros yn wag tra ceisir trosglwyddiad, yr ymlyniad sydd i’w wirio, nid y modiwl.
Modd goddefol: dywedwch wrth y gweinydd beth i’w hysbysebu
Mae’r modd goddefol yn haws ei wneud yn benderfyniadol oherwydd gellir dweud wrth y gweinydd beth i’w roi yn ateb 227. Yn vsftpd hwnnw yw pasv_address, ynghyd â pasv_min_port a pasv_max_port; mae ProFTPD yn defnyddio MasqueradeAddress a PassivePorts. Gosodwch y rheini’n gyntaf, oherwydd mae cyfeiriad hysbysebwyd cywir yn dileu’r angen i ailysgrifennu dim ar yr ochr honno.
Yna gadewch i’r amrediad porthladdoedd hwnnw’n union fynd drwy’r porth, er enghraifft -A FORWARD -i tun0 -p tcp --dport 30000:30100 -j ACCEPT, fel bod y rheol yn cyd-fynd â’r hyn y mae’r gweinydd yn ei hysbysebu.
Rhaid i’r ddau osodiad gytuno. Mae gweinydd y dywedir wrtho i hysbysebu 30000-30100 tra mae’r porth yn caniatáu 40000-40100 yn methu yn y modd lleiaf defnyddiol: mae’r sgwrs reoli’n edrych yn iach ac mae pob cysylltiad data’n marw. Cymharwch y rhifau cyn dadfygio unrhyw beth arall.
Dau arwydd methiant, a’r hyn y mae FTPS yn ei ddileu
Mae hongian ar LIST yn cyfeirio at gysylltiad data cyntaf y sesiwn, lle mae’n rhaid i ailysgrifennu cyfeiriad a’r disgwyliad weithio ill dau. Mae hongian ar RETR ar ôl LIST sy’n gweithio yn cyfeirio at y trosglwyddiad ei hun, sef yr amrediad goddefol neu MTU y tiwnel. Nid yw’r ail arwydd hwnnw’n broblem llwyth, ac ni fydd gosodiadau’r cynorthwyydd yn ei drwsio.
Mae FTP dros TLS yn dileu’r llwyth y mae’r cynorthwyydd yn ei ddarllen. Ni all blwch canol ailysgrifennu gwerth PORT neu PASV na all ei ddadgryptio, felly’r dewisiadau sy’n weddill yw dirprwy sy’n terfynu TLS, gweinydd sy’n hysbysebu cyfeiriad cyraeddadwy o fewn amrediad cyfyngedig, neu brotocol trosglwyddo gwahanol.
Trefn fer o wiriadau
Gweithiwch allan o’r symptom. Cadarnhewch fod LIST yn methu tra mae PWD yn llwyddo, dal y cyfeiriad y tu mewn i lwyth PORT neu 227, a gofynnwch pa ddyfais sy’n cyfieithu’r cyfeiriad hwnnw. Cysylltwch y cynorthwyydd yno, gwyliwch y rhestr ddisgwyliadau yn ystod un trosglwyddiad, yna trwsiwch y modd goddefol ar y gweinydd a drychwch yr amrediad yn rheol y porth.
Cadwch fethiant y llwybr data ar wahân i fethiant y trosglwyddiad swmp, oherwydd maent yn eich anfon at osodiadau gwahanol.