Објављивање Docker портова и VPN извори: два подударања која пропуштате
IP адреса VPN сервера није увек извор који Docker види, а порт после DNAT-а није објављени порт. Ускладите обе чињенице са стварном путањом.
Правило каже дозволите адресу VPN сервера ка објављеној услузи, а веза се ипак прекида. Такав исход је уобичајен и није грешка у Docker-у. Два одвојена подударања су погрешна: извор који сте написали можда није извор који домаћин прима, а порт који сте написали можда није порт који филтер види. Исправљање оба захтева гледање у путању пакета, а не у дијаграм услуге.
Мит: дозволите VPN сервер и готови сте
Усмерени VPN може сачувати адресу клијентског тунела све до Docker домаћина. Пролаз који обавља превођење извора може ту адресу заменити својом. Оба решења су легитимна и дају различите изворе за исту радњу корисника.
Дакле, израз IP адреса VPN сервера описује претпоставку, а не запажање. Док не знате које је од два решења пред вама, правило је нагађање.
Извор: клијентски базен или преведени пролаз
Проверите четири ствари по реду. Прво, базен клијентских адреса, на пример 10.90.0.0/24. Друго, преводи ли пролаз тај базен пре него што стигне до домаћина. Треће, који извор домаћин стварно види за једну нову везу. Четврто, разликује ли аутентификација апликације појединачне кориснике, јер заједничка преведена адреса то не може.
Ако се базен чува, правило које одговара само јавној адреси пролаза промашује сваког клијента. Ако пролаз намерно преводи, допуштање преведене адресе пропушта сваког корисника иза ње, што може бити прихватљиво за услугу са сопственом пријавом, а неприхватљиво за све остало.
Порт: DNAT мења број који упоређујете
Код обичног објављивања преко Linux моста уз Docker iptables, пресликавање домаћина са 8443 на порт контејнера 443 преводи се пре него што се покрене филтер за прослеђивање. Пакет стиже до филтера са одредишним портом 443. Правило које у том тренутку одговара 8443 никада се не активира, иако је 8443 оно што је клијент уписао.
Објављени порт и даље постоји у праћењу веза, зато се изворно одредиште тамо може упоредити када вам то заиста треба.
Одлучите који број изражава намеру. Упоредите порт контејнера након DNAT-а када правило штити услугу унутар контејнера. Упоредите изворно одредиште са опцијом conntrack када правило мора да опише шта је клијент затражио, и прихватите додатни трошак упоређивања и пажњу на редослед правила која с тим долазе.
Ланац: DOCKER-USER, а не INPUT
Docker водич за iptables смешта корисничку политику прослеђивања у ланац DOCKER-USER, који се оцењује пре Docker-ових сопствених правила прослеђивања. Правило копирано из услуге на домаћину у ланац INPUT филтрира саобраћај упућен домаћину, а не саобраћај прослеђен у контејнер. Та грешка даје правило које изгледа исправно и нема учинка на путању контејнера.
Држите распон извора, ефективни одредишни порт, протокол и улазно сучеље заједно у истом правилу. Допуштање само по извору за свако прослеђено одредиште шире је од допуштања једне објављене услуге.
Проверите новим везама
Тестирајте оба смера новим везама: један дозвољени VPN клијент и један извор који треба да остане одбијен. Постојеће стање везе може одржати сесију живом након промене политике, па стара веза не доказује ништа о новом правилу. Затим проверите путању одговора, јер контејнер се ипак мора усмерити назад на извор који види.
Редослед ланаца и понашање превођења портова иза ових провера документује Docker водич за iptables. Прочитајте га пре копирања рецепта и потврдите који позадински механизам користи инсталирани Docker, јер nftables позадина другачије интегрише политику.