Зашто правило блокирања OpenVPN клијента никада не погађа FORWARD
Саобраћај између клијената може остати унутар OpenVPN процеса и никада не прећи FORWARD ланац домаћина, па нула на бројачу ништа не доказује.
Два клијента на истом OpenVPN серверу могу достићи један другог чак и након што сте додали DROP правило за њихов пул. Правило стоји у FORWARD ланцу, саобраћај очигледно тече, а бројач тог правила остаје на нули. Природан закључак је да је заштитни зид покварен. Чешће пакет никада није ни ушао у ланац.
Постоје два пута којима пакет партнера може проћи кроз OpenVPN сервер, а одређује их конфигурација, не заштитни зид. Знање који се пут користи говори вам да ли је правило домаћина уопште на правом месту.
Два пута којима пакет партнера може проћи
Када је опција интерног прослеђивања искључена, пакет од клијента A долази на тунелски интерфејс са одредиштем унутар додељене адресе клијента B. Табела рутирања сервера га шаље назад кроз исти тунелски интерфејс, јер рута до адресе B припада серверу. То је ток унутра и ван кроз домаћина, а пут прослеђивања IPv4 га процењује.
Када је опција интерног прослеђивања укључена, процес сервера повезује пакет са повезаним клијентом и записује га назад директно том клијенту. Пакет се обрађује унутар демона и никада поново не улази у тунелски уређај, па се пут прослеђивања домаћина потпуно прескаче. Приручник за OpenVPN 2.6 описује ову опцију као интерно прослеђивање од клијента ка клијенту, и управо зато правило заштитног зида домаћина не може да га види.
Постоји трећа варијанта у инсталацијама које податковни канал пребацују на модул језгра. Одлука о прослеђивању и шифровање излазе из корисничког простора, а да ли netfilter види ток зависи од тога како је изграђен пут пребацивања. Никада не претпостављајте да се стари скуп правила понаша на пребаченом серверу исто као на оном у корисничком простору. Потврдите режим из конфигурације која ради, а не из верзије пакета.
Када се бројач никада не помери
Нула на бројачу значи да пакет није одговарао том правилу у тој тачки, а разлога је неколико. Први је горње заобилажење: саобраћај никада није стигао до ланца. Други је неслагање у интерфејсу, смеру, извору или одредишту, што је уобичајено када је пул поново нумерисан, а правило још наводи стари префикс.
Трећи је положај. Правило раније у ланцу може прихватити ток пре него што се ваш DROP процени, а правило касније може бити оно које заправо одлучује о исходу. Читајте ланац редом са видљивим бројачима, затим проверите ком правилу број расте када поновите тест.
Изведите једну контролисану размену између два клијента чије сте стварне адресе потврдили из самог стања сервера, а не из закупа којег се сећате. Ако се одговарајући бројач још не помера, сумњајте на пут пре него што препишете подударање. Ако се помера али веза још успева, одбацивање се касније надјачава и проблем је у редоследу. Тај одговор одлучује да ли је поправка промена правила или промена топологије, па га прибавите пре било каквог уређивања.
Избор границе која може да филтрира
Ако политика мора да живи у заштитном зиду домаћина, сместите саобраћај тамо где га заштитни зид може видети. Искључивање интерног прослеђивања је подржани начин да саобраћај партнера прође кроз тунелски интерфејс и пут прослеђивања, уз цену слања сваког пакета партнера кроз стек домаћина.
Затим прецизно упарите ток. Саобраћај долази на тунелски интерфејс и одлази са тунелског интерфејса, у оба смера, па се правила која разматрају само физички интерфејс неће упарити. Правила заснована на адресама требају тренутни пул и морају узети у обзир повратни смер као и предњи.
Многим инсталацијама боље служи филтрирање на нивоу клијента или групе, где је идентитет познат и политика следи корисника уместо адресе која се мења при поновном повезивању. То је другачији механизам од ланца домаћина и њих двоје не треба мешати без јасног разлога.
Не преносите скуп правила старе топологије кроз миграцију непромењен. Пулови адреса, имена интерфејса и режими прослеђивања сви утичу на то да ли се правило подудара, а копирано правило које је некад радило најзаводљивија је врста доказа. Почните од тока који желите да дозволите и напишите правило које му одговара.
Тестирање изолације уместо веровања правилу
Тестирајте забрањени случај и дозвољени случај у истом извршавању. Покрените нову везу са једног клијента на други и потврдите да не успева, затим потврдите да веза која би требало да буде дозвољена још ради. Ако се тестира само прво, заштитни зид који блокира све изгледа као успех.
Поновите након поновног учитавања конфигурације сервера и након што се клијент поново повеже, јер су интерно прослеђивање и доделе пулова извршно стање. Проверите бројаче у оба смера, јер правило које одговара једном смеру а не одговору ствара делимичну изолацију коју је у брзом тесту тешко приметити.
Изолација је уочени резултат на граници која стварно носи ток. DROP правило негде у домаћину није доказ; неуспела веза и померен бројач на правилу које ју је проузроковало јесу.