Уявіце медыяпрыстаўку на хатняй лініі, якая павінна выходзіць у інтэрнэт толькі праз тунель. Калі тунель падае, праграма павінна спыніцца, а не ціха працягваць працу праз фізічны інтэрфейс. Такія паводзіны — гэта задача файрвола, а не маршрутызацыі, і розніца важная, бо маршрут можна замяніць перазапускам дэмана, а фільтр застаецца там, куды вы яго паставілі. Далей — як шлях пакета насамрэч прымае рашэнне і як потым абмежаваць выключэнні, якія дазваляюць тунелю перападключыцца.

Лакальны выхад — гэта іншы хук, чым перасылка

Пакет, які пакідае праграму на машыне, праходзіць праз хук выхаду; пакет, які машына маршрутызуе для іншага хоста, праходзіць праз перасылку. Палітыка, якая згадвае толькі forward, абмяжоўвае другі выпадак і пакідае першы цалкам адкрытым, таму шматлікія замкі выхаду выглядаюць правільна і нічога не робяць. Супастаўленне інтэрфейса належыць у тое ж правіла: oifname "tun0" accept прапускае трафік, які ўжо быў накіраваны праз тунель. Маршрутызацыя і фільтрацыя таксама застаюцца асобнымі рашэннямі, таму маршрут да правайдэра можа існаваць, пакуль фільтр адхіляе пакет. Менавіта на гэтае раздзяленне вы і разлічваеце.

Шлюз, які перасылае трафік іншых прылад, патрабуе абодвух хукаў. Замыканне толькі выхаду абараняе саму машыну і пакідае кожнаму кліенту ніжэй магчымасць выцякаць.

Спіс выключэнняў пішыце ад канчатковага пункта вонкі

Пачніце з канчатковага пункта тунеля: адзін адрас прызначэння або невялікі зацверджаны набор, пратакол транспарту і порт прызначэння, напрыклад udp dport 1194 ip daddr 203.0.113.7 accept. Калі кліент развязае імя хоста, пачатковы абмен DNS патрабуе ўласнага правіла, абмежаванага рэзалверам і портам 53, а не бланкетнага дазволу на адрас гэтага рэзалвера. Кожнае выключэнне павінна называць прычыну свайго існавання. Дазвол на ўвесь UDP-трафік да порта VPN пакрывае значна больш, чым адзіная аўтэнтыфікаваная служба, якую вы мелі на ўвазе.

Менавіта на пачатковым развязанні замкі звычайна гніюць. Набор адрасоў, які абнаўляецца па таймеры, патрабуе вызначаных паводзін пры няўдалым абнаўленні, і гэтыя паводзіны не могуць палягаць у адкрыцці лініі да поспеху. Абнаўляйце праз тунель, пакуль ён узняты, а інакш вяртайцеся да апошняга вядомага спраўнага пункта.

Лакальная адміністрацыя патрабуе таго ж падыходу. Кіравальная падсетка не заслугоўвае даверу толькі таму, што яе адрасы прыватныя, а правіла, якое ёй давярае, запрашае другі шлях вакол замка.

Супастаўленне інтэрфейса не даказвае спраўнасці тунеля

Правілы, якія прымаюць усё, што выходзіць з tun0, мяркуюць, што пакет на гэтым інтэрфейсе прыйшоў з тунеля. Імёны інтэрфейсаў пераствараюцца, а імя не з'яўляецца крыптаграфічнай тоеснасцю. Акрамя таго, партнёр можа знікнуць, пакуль інтэрфейс застаецца узнятым, і тады правіла робіцца вельмі пераканаўчым бяздзейным.

Адсочванне злучэнняў дадае падобную пастку. Шырокае правіла для ўсталяваных злучэнняў паўтарае дазвол, які паток атрымаў раней, таму сеанс, пачаты да падзення тунеля, працягвае працаваць пасля. Абмяжуйце прыём па стане толькі тымі інтэрфейсамі і адрасамі, якія вы сапраўды маеце на ўвазе, інакш вы пабудавалі замак, які сам сябе адчыняе. Правілы ўваходу і выхаду таксама адказваюць на розныя пытанні, і ўзмацненне аднаго пры ігнараванні другога пакідае машыну дасяжнай у кірунку, пра які вы не падумалі.

Што перажывае крах дэмана

Фільтр, усталяваны скрыптам, які запускаецца пасля ўзняцця тунеля, знікае разам з тунелем — менавіта ў той момант, калі ён быў патрэбны. Загружайце замак пры загрузцы і дазвольце дэману кіраваць толькі сваімі выключэннямі.

Выдаленне маршруту па змаўчанні таксама не заменіць яго. Маршрут — гэта стан, якім валодае і які перапісвае дэман, і яго выдаленне можа адабраць шлях, патрэбны для перападлучэння. IPv6 патрабуе ўласнага плана, бо выяўленне суседзяў і аб'явы маршрутызатараў — гэта службы канала, якія мусяць працаваць, пакуль звычайны трафік заблакаваны. DHCP адносіцца да той жа катэгорыі. Запішыце гэта як выключэнні з мэтай, а не выяўляйце потым як збоі.

Шлях аднаўлення перад разгортваннем

Праверце замак так, як ён адмовіць: загрузка без тунеля, забойства дэмана, змена канчатковага пункта і перападлучэнне. Кожны выпадак павінен спыняць праграмы і пакідаць канал аднаўлення працаздольным. Рабіце гэта з кансолі, бо аддаленая абалонка — гэта сеанс, які найчасцей замыкаецца вашым жа правілам.

Затым праверце, да чаго звычайная праграма яшчэ можа дацягнуцца, выкарыстоўваючы бясшкоднае прызначэнне і запыт, які вы можаце праверыць. Патрэбны вам вынік — адмова на лініі і поспех праз тунель, а не неадназначны таймаўт, які можа азначаць любое з двух. Трымайце набор правілаў пад тым жа ўладальнікам, што і астатні файрвол, замест замены ўсёй табліцы са скрыпта абалонкі. Палітыка, у якой кожны дазвол можа апраўдаць сябе, каштоўнейшая за доўгі набор правіл, якога ніхто не можа растлумачыць.

Падобныя артыкулы