Три зміни змішуються щоразу, коли VPN зустрічає OpenWrt: відкриття порту, дозвіл переспрямування й увімкнення маскування. Вони відповідають на різні питання, і зазвичай лише одна з них є справжньою вимогою. Читання кожного елемента керування за роллю трафіку, яким він керує, перетворює здогад на рішення й також підказує, якого симптому чекати, коли зміна неправильна. Почніть із назви ролі, яка не спрацювала, а не з прапорця, який ви пам'ятаєте.

Назвіть роль трафіку, перш ніж торкатися елемента керування

Вхід зони вирішує, що може досягти самого маршрутизатора. Вихід зони охоплює трафік, який створює сам маршрутизатор, переспрямування зони — це значення за замовчуванням для трафіку, що проходить через зону, а маскування вирішує, чи переписується адреса джерела на виході. Це чотири різні питання, і політика зони відповідає на всі одразу одним і тим самим значенням, тому зміна для всієї зони — грубий інструмент. Іменоване правило може відповісти на одне з них, не зачіпаючи інших.

Корисна карта — за роллю трафіку, бо саме це можна спостерігати, коли щось не працює. Кожна роль нижче має один елемент керування, що її визначає, і один симптом, що на неї вказує:

Traffic roleControl that decides itWhere it lives in the configSymptom when it is wrong
A client reaching a listener on the routerInput policy of the zone that carries the connection, or a rule for the portoption input in the zone stanza, or a named ruleThe handshake never completes and the tunnel log says nothing
A tunnel client reaching the router itselfInput policy of the tunnel zoneoption input in the VPN zoneA ping to the gateway fails
A tunnel client reaching another LAN hostForwarding from the tunnel zone to the LAN zoneconfig forwarding plus the zone assignmentThe gateway answers and the file share times out
The router's own traffic leaving the WANOutput policy, and translation if the far side needs itoption output and option masqThe tunnel never establishes, or replies vanish

Слухачеві на маршрутизаторі потрібне одне вузьке правило входу

Сервер OpenVPN на маршрутизаторі приймає трафік, адресований маршрутизатору, тому його зовнішнє з'єднання залежить від політики входу зони, яка його несе. Дозвольте налаштований транспорт і порт, а все інше в цій зоні залиште відхиленим. Одне правило для порту — значно менша зміна, ніж дозвіл для всієї зони, і саме його ви зможете пояснити й через рік.

Дві речі роблять те правило безпечним для збереження: воно називає порт, який служба справді використовує, і стоїть поруч із визначенням зони, щоб наступна людина бачила, чому воно існує. Рядки нижче — це лише форма, а порт замінює те, що налаштовано на сервері. Змінюйте цей порт в обох місцях, коли служба переїжджає, бо правило, залишене на старому, непомітне до аудиту.

config zone
    option name 'wan'
    option input 'REJECT'
    option forward 'REJECT'
    option output 'ACCEPT'
    option masq '1'

config rule
    option name 'allow-openvpn'
    option src 'wan'
    option proto 'udp'
    option dest_port '1194'
    option target 'ACCEPT'

Перевірте перед перезавантаженням, бо синтаксична помилка у файлі брандмауера може залишити маршрутизатор без робочого набору правил. У випуску з fw4 перевірка — окрема команда, і вона гучно завершується помилкою замість того, щоб мовчки прийняти пошкоджений блок. Перезавантажуйте лише після успішної перевірки й зберігайте попередній файл там, звідки його можна повернути.

fw4 check
service firewall reload

Запит клієнта проходить через переспрямування, а не через вхід

Після автентифікації запит клієнта тунелю до служби LAN створює переспрямований потік, тому елементом керування, що це вирішує, є відношення переспрямування між зоною тунелю й зоною LAN. Призначте інтерфейс тунелю потрібній зоні, потім оголосіть напрямок, джерела й службу. Саме призначення зони надає сенсу правилу переспрямування, і обидва мають сенс лише разом прочитані. Відношення переспрямування, де зона тунелю названа джерелом, а зона LAN — призначенням, читається як одне свідоме рішення, тоді як два дозволи для всієї зони читаються як випадковість.

Доступ до самого маршрутизатора досі йде шляхом входу, тому ping до шлюзу нічого не каже про файловий ресурс за ним. Ці дві відмови живуть у різних блоках і виправляються різними змінами. Запишіть обидва шляхи окремо, перш ніж змінювати будь-який із них.

Маскування — це рішення про маршрутизацію, а не дозвіл

Маскування переписує адресу джерела вибраного вихідного трафіку. Воно може врятувати схему виходу, де в дальньої сторони немає зворотного маршруту, а також приховує адреси окремих клієнтів від будь-якої служби, яка журналює або авторизує за адресою. Його вимкнення — це вибір маршрутизації зворотного шляху, а не перемикач безпеки, що закриває вхідну діру. Тунель, який працює з увімкненим перетворенням і відмовляє в момент його вимкнення, зазвичай не має зворотного маршруту, а не правила брандмауера.

Маршрутизована альтернатива вимагає зворотного маршруту на дальній стороні замість перетворення. Жоден із варіантів не дає дозволу брандмауера або облікового запису застосунку, тому вимкнення маскування майже ніколи не виправляє клієнта тунелю, який нікуди не потрапляє. Розглядайте політику IPv4 та IPv6 теж окремо, оскільки одне налаштування перетворення не описує обидві родини.

Доведіть рішення дозволеним і відхиленим запитом

Надішліть один запит, який має бути дозволений, і один, який має бути відхилений, а потім визначте елемент керування, що ухвалив кожне рішення. Сторінка, яка випадково завантажилася, не є доказом; доказ — це правило, що збіглося, у ланцюжку, де воно збіглося. Відмова важить не менше за успіх, бо показує: політика щось робить, а не все дозволено.

Дві команди дають цей доказ у поточному випуску. Лічильник на відповідному правилі зсувається, коли запит прийнято, а журнал показує відкидання, якщо ви ввімкнули журналювання для правила:

nft list chain inet fw4 forward_wan
logread -f | grep -i -E 'DROP|REJECT'

Збережіть шлях адміністрування, яким ще можете користуватися, перш ніж змінювати будь-яку політику брандмауера, і дотримуйтеся процесу перевірки та відкату власника конфігурації. Зміна, яка замикає вас поза маршрутизатором, — це не результат тесту, а другий інцидент. Записуйте зону й роль трафіку поряд із кожним спостереженням, щоб пара результатів пояснювала політику, а не описувала щасливе завантаження сторінки.

Схожі статті