Cyhoeddi pyrth Docker a ffynonellau VPN: dau gyfuniad rydych yn eu colli
Nid IP gweinydd VPN yw’r ffynhonnell y mae Docker yn ei gweld bob tro, ac nid y porth ar ôl DNAT yw’r un a gyhoeddwyd. Cymharwch y ddau ffaith â’r llwybr gwirioneddol.
Mae’r rheol yn dweud caniatáu cyfeiriad gweinydd VPN i’r gwasanaeth a gyhoeddwyd, ac mae’n dal i ollwng y cysylltiad. Mae’r canlyniad hwnnw’n gyffredin, ac nid yw’n fai Docker. Mae dau gyfuniad ar wahân yn anghywir: efallai nad y ffynhonnell a ysgrifennwyd gennych yw’r ffynhonnell y mae’r gwesteiwr yn ei derbyn, ac efallai nad y porth a ysgrifennwyd gennych yw’r porth y mae’r hidlydd yn ei weld. Mae trwsio’r ddau yn gofyn am edrych ar lwybr y pecyn yn lle diagram y gwasanaeth.
Y myth: caniatáu gweinydd VPN ac mae’r gwaith drosodd
Gall VPN a lwybrwyd gadw cyfeiriad twnnel y cleient yr holl ffordd i westeiwr Docker. Gall porth sydd yn gwneud cyfieithu ffynhonnell ddisodli’r cyfeiriad hwnnw gyda’i un ei hun. Mae’r ddau gynllun yn ddilys, ac maent yn cynhyrchu ffynonellau gwahanol ar gyfer yr un weithred defnyddiwr.
Felly mae’r ymadrodd IP gweinydd VPN yn disgrifio tybiaeth, nid arsylwi. Hyd nes y gwyddoch pa un o’r dau gynllun sydd o’ch blaen, mae’r rheol yn ddyfaliad.
Ffynhonnell: cronfa cleientiaid neu borth a gyfieithwyd
Gwiriwch bedair peth yn eu trefn. Yn gyntaf, cronfa cyfeiriadau’r cleientiaid, er enghraifft 10.90.0.0/24. Yn ail, a yw’r porth yn cyfieithu’r gronfa honno cyn iddi gyrraedd y gwesteiwr. Yn drydydd, y ffynhonnell y mae’r gwesteiwr yn ei harsylwi mewn gwirionedd ar gyfer un cysylltiad newydd. Yn bedwerydd, a yw dilysu’r cymhwysiad yn gwahaniaethu rhwng defnyddwyr unigol, oherwydd ni all cyfeiriad cyfieithu a rennir wneud hynny.
Os cedwir y gronfa, mae rheol sy’n cyfateb yn unig i gyfeiriad cyhoeddus y porth yn colli pob cleient. Os yw’r porth yn cyfieithu’n fwriadol, mae caniatáu’r cyfeiriad a gyfieithwyd yn derbyn pob defnyddiwr y tu ôl iddo, a allai fod yn dderbyniol ar gyfer gwasanaeth sydd â’i fewngofnodi ei hun ac yn annerbyniol ar gyfer unrhyw beth arall.
Porth: mae DNAT yn newid y rhif rydych yn ei gyfateb
Ar gyfer cyhoeddi pont Linux cyffredin gyda Docker iptables, mae mapio gwesteiwr o 8443 i borth cynhwysydd 443 yn cael ei gyfieithu cyn i’r hidlydd anfon ymlaen redeg. Mae’r pecyn yn cyrraedd yr hidlydd gyda phorth cyrchfan 443. Nid yw rheol sy’n cyfateb i 8443 ar y pwynt hwnnw byth yn tanio, er mai 8443 yw’r hyn a deipiodd y cleient.
Mae’r porth a gyhoeddwyd yn dal i fodoli yn olrhain cysylltiadau, a dyna pam y gellir cyfateb y gyrchfan wreiddiol yno pan fydd ei hangen arnoch mewn gwirionedd.
Penderfynwch pa rif sy’n mynegi’r bwriad. Cyfatebwch borth y cynhwysydd ar ôl DNAT pan fo’r rheol yn amddiffyn y gwasanaeth y tu mewn i’r cynhwysydd. Cyfatebwch y gyrchfan wreiddiol gyda’r opsiwn conntrack pan fo’r rheol yn gorfod disgrifio’r hyn a ofynnodd y cleient, a derbyniwch y gost ychwanegol o gyfateb a’r gofal am drefn rheolau sy’n dod gyda hynny.
Cadwyn: DOCKER-USER, nid INPUT
Mae canllaw iptables Docker yn gosod polisi anfon ymlaen defnyddiwr yng nghadwyn DOCKER-USER, sy’n cael ei gwerthuso cyn rheolau anfon ymlaen Docker ei hun. Mae rheol a gopïwyd o wasanaeth gwesteiwr i gadwyn INPUT yn hidlo traffig a gyfeiriwyd at y gwesteiwr, nid traffig a anfonwyd ymlaen i gynhwysydd. Mae’r camgymeriad hwnnw’n cynhyrchu rheol sy’n edrych yn iawn ac nad oes ganddi unrhyw effaith ar lwybr y cynhwysydd.
Cadwch yr ystod ffynhonnell, y porth cyrchfan effeithiol, y protocol a’r rhyngwyneb mynediad gyda’i gilydd yn yr un rheol. Mae caniatâd sy’n seiliedig ar ffynhonnell yn unig ar gyfer pob cyrchfan a anfonir ymlaen yn fwy na chaniatáu un gwasanaeth a gyhoeddwyd.
Gwirio gyda chysylltiadau newydd
Profwch y ddau gyfeiriad gyda chysylltiadau newydd: un cleient VPN a ganiateir ac un ffynhonnell a ddylai aros yn wrthodedig. Gall cyflwr cysylltiad presennol gadw sesiwn yn fyw ar ôl i’r polisi newid, felly nid yw hen gysylltiad yn profi dim am y rheol newydd. Yna gwiriwch lwybr yr ateb, oherwydd mae’n rhaid i’r cynhwysydd lwybro’n ôl i’r ffynhonnell y mae’n ei gweld o hyd.
Mae canllaw iptables Docker yn dogfennu trefn y cadwyni a’r ymddygiad cyfieithu pyrth y tu ôl i’r gwiriadau hyn. Darllenwch ef cyn copïo rysáit, a chadarnhewch pa backend y mae’r Docker a osodwyd yn ei ddefnyddio, oherwydd mae backend nftables yn integreiddio polisi’n wahanol.