Промена на правило во огнен ѕид не работи: редослед на правилата и состојба на врската
Променето правило може да стои зад претходно дозволување или да биде прескокнато од следењето врски. Одвојте ги двата теста, користете нов тек и задржете пат за враќање.
Го уредивте правилото, го вчитавте множеството правила одново, а тунелот се однесува точно како порано. Овој резултат има два чести причини, и тие бараат различни тестови. Или новото правило стои по претходно правило што веќе го прифатило пакетот, или размената што ја набљудувате е следена врска што промената никогаш не ја преоценува. Правилото во датотека изразува намера; за судбината на пакетот одлучува активниот пат на кој наидува. Поминете ги проверките подолу по ред и притоа држете отворен пат за враќање.
Редоследот на правилата и состојбата на врската се различни дефекти
Подредените синџири се оценуваат од горе надолу, и првото правило што ќе стигне до конечна пресуда го завршува минувањето низ тој синџир. Ставете широко дозволување над внимателно напишано правило за заклучување и правилото за заклучување станува документација: тоа е во множеството, неговиот бројач е нула, и ниту еден пакет никогаш нема да го стигне. Истиот текст применет на друг синџир исто така не докажува ништо. Во nftables основните синџири се прикачуваат на куки по приоритети, па дозволувањето во еден синџир не спречува друг синџир на друга кука или приоритет да го види истиот пакет.
Следењето врски го создава вториот симптом, и однадвор изгледа идентично. Кога текот е во табелата на состојби, дозволување за established-or-related близу до врвот на синџирот се враќа пред вашето ново правило воопшто да биде разгледано. NAT пресликувањата ја имаат истата особина: преводот бил фиксиран кога текот започнал, па уреденото postrouting правило не ја препишува сесијата што веќе работи. Затоа промената изгледа дека работи во 09:00 за нова врска и изгледа дека не прави ништо за сесијата што некој ја отворил во 08:55.
Облачните безбедносни групи додаваат трет модел што фаќа луѓе што учеле на iptables. Нивните влезни правила се список на дозволи што се оценува како множество, а не како минување по прво совпаѓање, тие се со состојба, и отстранувањето на правило за дозвола не ги прекинува тековите што веќе се следени. Претпоставувањето семантика на прво совпаѓање на платформа што ја нема води до самоуверени, погрешни заклучоци.
Читајте го активното множество правила, а не датотеката што ја уредивте
Започнете со она што јадрото го спроведува токму сега. Зачувана конфигурација што никогаш не била применета објаснува изненадувачки многу непроменети однесувања, и нејзиното исклучување чини една команда:
nft list ruleset
iptables-saveПотоа прашајте дали вашето правило воопшто се достигнува. Бројачите на пакети одговараат директно и одговараат подобро од какво било расудување за намерата:
iptables -L FORWARD -v -n --line-numbers
nft list chain inet filter forwardПравило за заклучување со нула пакети по вистински обид за тест не е проблем на политика, тоа е проблем на позиција. Неговото преместување е промена во еден ред, а синтаксата е точно она што ја предизвикало првобитната грешка. Со iptables -I вметнува, а -A додава на крајот; со nftables insert поставува правило на почетокот на синџирот, а add додава на крајот. Кога правилото мора да победи, кажете го тоа експлицитно наместо да се потпирате на редот што случајно се вчитал.
Докажете дали текот се следи
Пред да го обвините правилото, проверете дали сообраќајот воопшто е следена врска. Прашајте ја табелата на состојби за конкретниот тек наместо да ја истурите целата:
conntrack -L -p tcp --dport 1194
conntrack -E -p tcp --dport 1194Списокот ја покажува состојбата и преостанатиот рок, и така разликувате воспоставена сесија од нов обид; режимот на настани печати ажурирања додека се случуваат, што е корисно додека повторно поврзувате клиент. Ако текот е присутен со воспоставена состојба пред да допрете нешто, ниту едно уредување на филтерските правила нема да ја промени неговата судбина. Тоа не е дефект во огнениот ѕид, тоа е договорот на филтрирањето со состојба.
Спротивставете се на кратенката да ја исчистите целата табела на производна порта. conntrack -F е достапно, и исто така го уништува секој следен тек на машината, вклучувајќи ја административната сесија од која работите и тунелот што ја носи вашата обвивка. Поединечните записи можат да се избришат кога навистина ви треба, но нов тек од нов изворен порт обично е почист експеримент.
Некои патеки не се следат, и тие се однесуваат обратно. Сообраќај означен како notrack во табелата raw, некои тунели што ги заобиколуваат нормалните куки, и асиметричното рутирање што го дели текот меѓу две порти, сите создаваат пакети што се оценуваат еден по еден, или состојба што никогаш не се создава на двата краја. Ако бројачите се движат со секој пакет, посомневајте се во таков пат пред да се посомневате во редоследот.
Тестирајте од нов тек со пат за враќање
Пред да тестирате правило што може да го прекине далечинскиот пристап, воспоставете пат за обновување: конзолата на давателот, сериска конзола, адреса за управување надвор од опсегот, или втор интерфејс што правилото не може да го совпадне. Тајмер за враќање е разумен придружник, бидејќи ќе го врати претходното множество правила дури и ако вашата сесија умре на средината од тестот.
Потоа тестирајте со размена што состојбата не можела веќе да ја покрие. Исклучете и повторно поврзете го клиентот за да се создаде нова петорка, и набљудувајте ги двата краја додека тоа се случува:
tcpdump -ni eth0 'tcp port 1194'
journalctl -k -n 50 --no-pagerИзведете го тестот во двете насоки. Правило што го блокира новото влезно ракување сепак може да го дозволи патот на одговорот, или обратно, и еднонасочниот резултат е вообичаената причина зошто заклучувањето работи на половина. Поврзете се уште еднаш по тестот за да ја потврдите стабилната состојба, и проверете дали легитимниот пристап за управување преживеал; правило напишано за еден порт има навика да совпадне со поширок опсег од предвиденото.
Запишете ја целта и позицијата заедно со правилото
Правило без запишана цел е правило што никој не се осмелува да го отстрани. Покрај секој запис за заклучување држете го текот што го штити, синџирот и куката во која живее, позицијата што мора да ја држи во однос на пошироките дозволи, и тестот што го докажал тоа. Кога некој по шест месеци ќе го уреди околното множество правила, таа забелешка е единственото предупредување дека позицијата била намерна.
Пред да ја затворите промената, потврдете четири работи: работното множество правила се совпаѓа со датотеката, новото правило има бројачи различни од нула по нов обид, обратната насока и пристапот за управување работат и понатаму, и еднаш сте се поврзале повторно за да ја докажете стабилната состојба, а не состојбата на сесија постара од промената. Ако нешто од тоа не е проверено, промената не е завршена, што и да прави тунелот.