Протокол 47 срещу TCP порт 47: два заглавки, две правила
Номерът на протокола и портът живеят в различни заглавки, затова едно правило не може да замени другото. PPTP разделя двете, а поле за порт не може да изрази GRE.
Хотелските мрежи и конферентните защитни стени често показват специално поле за разрешение и някой въвежда 47 в него, очаквайки PPTP да работи. Правилото се създава, тунелът все още не тръгва, а следващият опит използва друг номер. Проблемът е в самия пакет: IPv4 има поле за протокол, което посочва какво следва след заглавката IP, докато TCP и UDP имат полета за порт, които съществуват само когато си вътре в една от тези заглавки. Това не са два начина на записване на едно и също разрешение.
Заглавката IPv4 посочва следващия протокол
Полето за протокол е един байт в заглавката IPv4 и съдържа число, описващо полезния товар: 6 за TCP, 17 за UDP, 47 за GRE, 50 за ESP. Всичко, което филтрира пакети, чете тази стойност, преди да погледне по-дълбоко, защото по-дълбоката заглавка има смисъл само след като типът е известен. Сменете порт по-късно в разговора и това поле не е помръднало.
Следователно правило, написано срещу протокол 47, описва слоя IP. Никакъв порт не участва в решението.
Портовете съществуват в TCP и UDP, никъде другаде
Портовете са шестнадесетбитови идентификатори в заглавките TCP и UDP и тяхната задача е да разделят разговори, които споделят един адрес. Заглавката GRE носи стойност за тип протокол, често EtherType, плюс незадължителни ключове за мултиплексиране. Затова изразът порт 47 не назовава нищо, с което пакет GRE би могъл да съвпадне.
Интерфейсите на защитните стени се различават по това колко от това показват. Някои приемат номер на протокол, други предлагат именуван списък, а малцина приемат само TCP или UDP с портове.
PPTP използва двата слоя едновременно
PPTP е най-ясният пример, защото умишлено разделя работата си между двете. Контролната връзка е TCP сесия към порт 1723, а пътят на данните е GRE, протокол 47, без никъде да участва порт. Защитна стена, която разрешава 1723 и нищо друго, позволява преговорите да започнат и след това изхвърля полезния товар. Тунелът изглежда като че виси след удостоверяването, вместо да не успее да се свърже, и затова симптомът често се докладва като проблем с паролата.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
Четете двата реда поотделно, когато пишете правилото, и проверявайте всеки срещу синтаксиса на доставчика. Единият ред се нуждае от порт, другият — от номер на протокол, и нито един запис не покрива и двете.
Защо страница за пренасочване на порт не може да изрази GRE
Формуляр за пренасочване, който приема само TCP и UDP, не може да опише GRE, както и да се нарича формулярът. Транслирането на адреси добавя втора трудност, защото GRE няма портове и транслаторът трябва да следи вместо това идентификатора на повикването. Някои домашни маршрутизатори идват с помощник, който се справя; много не, и никакъв допълнителен запис за разрешаване на TCP няма да създаде това поведение.
Когато истинското изискване е модерен тунел, изберете дизайн, който умишлено използва TCP или UDP, вместо да се надявате транслаторът да познае правилно.
Инкапсулацията определя какво вижда филтърът
Инкапсулацията променя външния пакет и именно външният пакет е това, с което съвпада правилото. Родният ESP е протокол 50, докато преминаването през NAT обвива ESP в UDP 4500, за да оцелее при транслиране на адреси. Филтър, който разрешава UDP 4500, никога не вижда протокол 50, а филтър, написан за протокол 50, никога не съвпада с обвитата форма.
Попитайте за коя инкапсулация са се договорили клиентът и шлюзът, после напишете правилото точно за тази външна форма и нищо повече.
Напишете правилото така, че някой да може да го провери
Изразявайте всяко правило като семейство адреси, външен протокол, транспортни портове, ако има такива, посока и двете крайни точки. Рецензентът може да сравни това изречение със запис на пакети и да стигне до присъда. Инструкция да се отвори 47 не може да бъде проверена от никого и точно затова оцелява с години в процедурните книги.
Добавете теста, който го доказва: свържете се, докато правите запис на външния интерфейс, и потвърдете външния протокол и порт, които действително се появяват в следата.