Записки IT специалиста
7.97K subscribers
1.57K photos
51 videos
15 files
2.24K links
IT-канал, просто о сложном
https://interface31.ru

Купить рекламу:
https://telega.in/c/interface31
Download Telegram
​​Система отслеживания состояния соединений conntrack, часть 1

Conntrack – важная часть сетевого стека Linux ответственная за определение сетевых соединений и связывания с ними конкретных пакетов. На основе состояния соединения строится логика работы брандмауэра netfilter, а также высокоуровневых интерфейсов к нему, таких как iptables и nftables.

Несмотря на видимую простоту с работой conntrack связано множество заблуждений и в этой заметке мы постараемся разобрать некоторые из них.

Прежде всего соединения conntrack, равно как и их состояния существуют сугубо в пределах брандмауэра и нигде более. Кроме того, это исключительно Linux-технология и в среде других ОС она не применима.

В рамках пользовательского пространства доступно четыре состояния, это всем известные NEW, ESTABLISHED, RELATED и INVALID.

Трассировка соединений происходит в цепочке PREROUTING или OUTPUT, если пакет был порожден локальным процессом. Первый пакет соединения получает статус NEW.

И вот здесь есть один важный момент, как conntrack определяет, что этот пакет первый. Например, для TCP мы можем ориентироваться на флаг SYN, но как быть с UDP, где каждый пакет, по сути, первый и последний?

Тут все просто, анализируется адрес и порт источника, адрес и порт приемника и если такой записи в таблице трассировщика нет, то пакет становится первый и ему присваивается состояние NEW.

Таким образом если в брандмауэр придет TCP пакет уже установленного соединения (без SYN), то conntrack все равно повесит ему состояние NEW и отправит дальше по цепочкам.

Это позволяет подхватывать уже установленные TCP-соединения если таблица трассировщика была утеряна (скажем мы перезагрузили роутер).

Что будет с пакетом NEW дальше? Он пойдет по цепочкам брандмауэра и будет либо пропущен, либо отброшен.

С отброшен все понятно, соединение было отвергнуто с нашей стороны и все повторные попытки соединения снова получат состояние NEW.

А вот если пакет был пропущен, то ему присваивается состояние ESTABLISHED? А вот и нет. Для перехода соединения в состояние ESTABLISHED требуется, чтобы через conntrack прошел ответ на этот пакет.

И только при наличии ответа узла состояние соединения перейдет в установленное – ESTABLISHED. Причем данное состояние устанавливается как для TCP, так и для UDP, хотя последний в принципе не подразумевает установление соединений.

Но, напоминаем, все эти соединения живут только внутри брандмауэра Linux и никак не отражаются в самих пакетах.

Для времени жизни UDP соединения используется таймаут, если за указанное в нем время через соединение не прошел ни один пакет – оно считается закрытым. Если пакет прошел – то таймаут сбрасывается и начинается новый отсчет.

С TCP все немного сложнее, при нормальном завершении соединения после получения FIN соединение в брандмауэре переходит в состояние TIME OUT (буферное время) и еще в течении некоторого времени считается ESTABLISHED. Это сделано для того, чтобы через брандмауэр могли пройти пакеты «застрявшие» где-то там по дороге.

Если соединение было закрыто по RST, то оно сразу переходит в состояние закрытого без выделения буферного времени.

При аварийном завершении TCP-соединения его состояние в conntrack будет ESTABLISHED до истечения тайм-аута.

Еще интереснее с ICMP, может ли ICMP быть ESTABLISHED? Может, и даже становится. Почему? Потому что многие типы ICMP подразумевают ответ на запрос. Поэтому пришедший ICMP пакет получит состояние NEW, а ответ на него переведет соединение в состояние ESTABLISHED.

Однако conntrack понимает, что дальнейшей передачи данных такое «соединение» не подразумевает и после прохождения ответного пакета через netfilter запись о соединении из таблицы трассировщика удаляется.
10👍19🔥41
Please open Telegram to view this post
VIEW IN TELEGRAM
🤮11🤣42
Электроника ВМ-12

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

Но, в конце 90-х и начале нулевых эти видеомагнитофоны пользовались ажиотажным спросом. Их искали по комиссионкам, по объявлениям в газетах, сами давали такие объявления.

Зачем? И почему? Какие секреты хранил советский видик?
🔥14🥱3👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
​​Электроника ВМ-12 – как много в этом слове…

Конец 90-х и начало нулевых были не простыми в экономическом плане, только – только страна отошла от дефолта 98-го, и проблема добычи средств насущных стояла остро, особенно для студентов и молодых специалистов.

Ну а где студенту взять денег? Бегали по домам, переустанавливали Windows, что-то загружали-разгружали и вообще крутились как могли.

Отдельной статьей дохода была сдача лома радиодеталей, в частности конденсаторов КМ, которые содержали палладий и скупались тогда по цене 1$ за грамм.

Поиск КМ в те годы стал одним из «национальных видов спорта» для всех, кто был в теме, ну а нам, студентам-электронщикам мимо пройти было никак.

Сначала под дерибан пошли все свои радиолюбительские запасы, затем наличествовавшая в доме электроника. Выпаять нужный конденсатор и заменить аналогом труда не представляло.

Также в дело пошли барахолки, которые были на рынках каждого города и продавалось там все подряд, включая радиодетали россыпью, платы, старую электронику.

Отдельная статья – это вынос с производства, причем как новых деталей, так и выдранных из оборудования, но нас это не касались, мы работали преимущественно в правовом поле.

Постепенно сложилась некая «табель о рангах» советской электроники откуда можно было достать такие конденсаторы. На его вершине, с огромным отрывом от остальных стоял советский видеомагнитофон Электроника ВМ-12.

В те годы он как видеомагнитофон был не нужен абсолютно никому и купить его в хорошем состоянии можно было за 500 – 800 руб. Если пересчитать на доллары, то выходило 18-30$ или такой же эквивалент в конденсаторах.

А накусать из него можно было спокойно грамм сто, а то и более. В моей практике максимум был 135 грамм, но сотка всегда накусывалась спокойно, ну или очень близко к ней.

Что такое 100$ в те времена? Это 2700 руб. или месячная зарплата начинающего специалиста. Я очень скоро пошел на свою первую работу с окладом в 2500 руб., на руки выходило со всеми надбавками примерно 2800 руб.

А когда я через два года ушел в компьютерную фирму на 4000 руб. то все считали, что мне хорошо повезло и за такое место надо держаться.

А тут вы получали чистыми (за вычетом затрат на покупку магнитофона) 2000 руб., за полчаса несложной работы кусачками.

Перепаивать конденсаторы в ВМ-12 смысла не было, очень много работы, а выхлоп копеечный. Хотя и этим занимались, когда цены на магнитофоны стали расти.

Уже через некоторое время, когда эта информация широко разошлась в народ, цены на ВМ-12 резко выросли, до 1000 – 1500 руб. Но все равно это оставалось выгодным, так как на выхлопе получалось практически еще столько сверху. Да, условная 1000 руб. – это куда хуже 2000 руб., но и она на дороге не валялась, а тут просто легкие деньги.

Доходило до того, что тебя могли тормознуть местные пацаны на районе и спросить, мол ты в КМ-ках соображаешь? Оказывается, они откопали где-то ВМ-12, но понятия не имели что оттуда выкусывать и просили помочь за долю малую. Обычно за 10-15 грамм. Иногда побольше, но в этом случае еще просили сходить с ними на сдачу, чтобы барыга их не обул как лохов (а такие случаи были).

Поэтому очень скоро ВМ-12 стал настоящим дефицитом, а при покупке его обязательно надо было открыть и убедиться, что в нем действительно стоят искомые конденсаторы КМ, так как нарваться на перепаянный магнитофон стало проще простого. Иногда на ценниках в комиссионках так и писали – КМ нет!!!

Что касается самих денег, то покупательная способность рубля тоже была иной, по причине студенческого возраста хорошо помню я в те годы только цены на пиво. Так средний пивас стоил тогда 3 – 3,5 руб. за бутылку, сейчас такое пиво в среднем 60 руб., т.е. разница примерно в 18 раз.

Посему в нынешних ценах выхлоп с одного ВМ-12 составлял 18 – 36 тыс. руб. (1000 – 2000 руб. теми деньгами), что очень неплохо даже по сегодняшним меркам.

Сегодня КМ вроде тоже скупают, примерно по 150 руб. грамм, таким образом ВМ-12 спокойно тянет на 15 тыс. грязными. Сумма, конечно, поскромнее, но все еще привлекательная.
210👌4👍1🥱1
Please open Telegram to view this post
VIEW IN TELEGRAM
​​С днем рождения Linux!

25 августа 1991 года в рассылке новостей группы пользователей OC MINIX появилось сообщение:

 всем пользователям minix!

Я пишу (бесплатную) операционную систему (это просто хобби, ничего большого и профессионального вроде gnu) для AT 386(486). Я вожусь с этим с апреля, и она, похоже, скоро будет готова. Напишите мне, кому что нравится/не нравится в minix, поскольку моя ОС на неё похожа (кроме всего прочего, у неё — по практическим соображениям — то же физическое размещение файловой системы).

Пока что я перенёс в неё bash (1.08) и gсс (1.40), и всё вроде работает. Значит, в ближайшие месяцы у меня получится уже что-то работающее, и мне бы хотелось знать, какие функции нужны большинству. Все заявки принимаются, но выполнение не гарантируется :-)

Линус (torvalds@kruuna.helsinki.fi)

PS. Она свободна от кода minix и включает мультизадачную файловую систему. Она НЕ переносима (используется переключение задач 386 и пр.) и, возможно, никогда не будет поддерживать ничего, кроме АТ-винчестеров, потому что у меня больше ничего нет :-(


Вряд ли кто-то тогда мог подумать, что оно серьезно изменит компьютерный мир уже в течении этого десятилетия. Простой студенческий проект никому не известного финского парня…

Изначально система должна была называться Freax, но Ари Лемке, который предоставил место для проекта на своем FTP сервере назвал каталог pub/OS/Linux, которое и закрепилось в качестве названия системы.

Важной вехой в развитии системы стала кооперация с проектом GNU, который еще с 1983 года под руководством Ричарда Столлмана занимался созданием полностью открытой и свободной операционной системы.

К 1991 году у Столлмана было практически все, что нужно, кроме ядра. Собственные попытки разработать ядро Hurd не привели к успеху (причем до сих пор) и тут появилось ядро, которому как раз нужно было прикладное ПО.

Уже через год начали появляться первые дистрибутивы, так в 1992 году увидел свет Slackware Патрика Фолькердинга, а в 1993 Debian Яна Мёрдока, в 1994 появились S.U.S.E и Red Hat.

В этом же году увидело свет ядро 1.0.0 содержавшее 176 250 строчек кода, а уже в 1996 была выпущена версия 2.0, началась эпоха стремительного развития молодой системы.

В этом же году появился официальный талисман системы – пингвин Tux, его нарисовал Ларри Юинг. Слово Tux придумал Джеймз Хьюз, соединив два слова: (T)orvalds (U)ni(X).

В 1998 году Матиас Эттрих представил первый выпуск KDE, которая предлагала законченную среду рабочего стола с набором программ базировавшуюся на Qt, а годом позже Мигель де Иказа и Федерико Мен выпустили первую версию GNOME на GTK+.

Менее чем за 10 лет Linux прошел путь от небольшого студенческого проекта до полноценной ОС с графической оболочкой.

В дальнейшем система продолжила развиваться и занимать новые ниши, так уже в 2002 году увидел свет Red Hat Enterprise Linux.

Домашние пользователи тоже не остались без внимания, в 1998 году появился Mandrake Linux, позже Mandriva – один из самых дружелюбных дистрибутивов того времени.

В это же время появился дистрибутив Linux-Mandrake Russian Edition, который впоследствии занялся полностью собственной разработкой и теперь мы его знаем как ALT Linux.

А сам Mandrake/Mandriva прошел сложный путь, несколько раз менял владельца пока не превратился в ROSA Linux.

Еще одно знаковое событие произошло в 2004 году, с выходом дистрибутива Ubuntu Linux, который сделал систему ближе в прямом и переносном смысле.

В те времена широкополосный интернет был еще дорог и труднодоступен, поэтому Canonical рассылала диски с Ubuntu почтой бесплатно в любую точку земного шара.

А дальше вы и так, наверное, все знаете, размер заметки не позволяет продолжать наше повествование. Поэтому еще раз вспомним как все начиналось и поздравим Linux c днем рождения.
1🔥21157👏6
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
​​Система отслеживания состояния соединений conntrack, часть 2

В прошлой части мы разобрали состояние NEW и ESTABLISHED, сегодня поговорим об более интересных состояниях.

Начнем с RELATED, вроде бы просто – это соединения, связанные с уже установленным соединением. Но если начинать разбираться, то вопросов становится больше, чем ответов.

Что такое связанное соединение? Это новое соединение, которое является частью уже существующего, хорошие примеры таких протоколов – это FTP, PPTP или SIP. Для них характерно наличие управляющего соединения и связанных с ним соединений для передачи данных.

Важно понимать и то, что связанное соединение может быть инициировано как изнутри, так и снаружи, при этом порт передачи данных обычно выбирается динамически, что создает проблемы с фильтрацией таких соединений.

Поэтому conntrack как-то должен понять, что это не самостоятельное соединение, иначе оно получит состояние NEW и пойдет в брандмауэр со всеми вытекающими.

Для этого он при помощи специальных модулей ядра ipconntrackNNN анализирует данные управляющих протоколов и на их основании выделяет связанные соединения.

Если новый пакет соединения, определенного как связанное попадает в брандмауэр, то ему присваивается состояние RELATED. После того, как на этот пакет будет получен ответ связанное состояние перейдет в состояние установленного – ESTABLISHED.

Таким образом RELATED – это аналог состояние NEW, но только для связанных соединений, установленных соединений с таким статусом не бывает. Все установленные соединения только ESTABLISHED.

Если у вас пакеты связанного соединения не определяются как RELATED, то это может говорить о том, что отсутствует загруженный модуль для работы с используемым протоколом.

И последнее состояние соединения – INVALID. Очень часто оно трактуется и понимается неправильно.

Скажем нам пришел TCP-пакет уже установленного соединения, но в таблице трассировщика данные о таком соединении отсутствуют. Перед нами типичный INVALID?

Вовсе нет. Если корректно указаны все необходимые поля пакета, то он получит состояние NEW. Об этом мы говорили вчера, такое поведение позволяет подхватывать уже установленные соединения без обрыва сеанса связи.

Что касается UDP, то там каждый пакет является первым, так как протокол не подразумевает установку соединения.

Тогда что такое INVALID? Это пакет, который не может быть идентифицирован, например, имеет некорректно заполненные поля или поврежден. Также сюда относятся ICMP-ответы, для которых отсутствуют соединения породившие запросы.

Напоминаем, что для типов ICMP подразумевающих ответы создается соединение с состоянием NEW и переходит в ESTABLISHED и закрывается только после получения ответа.

Поэтому если есть ответ, но нет соответствующего ему соединения, то такой пакет будет помечен как INVALID.

Также подобное состояние мы можем получить и для вполне легальных пакетов при недостатке ресурсов брандмауэра, например, закончилась свободная память или высокая нагрузка на процессор, перегрев и т.д.

Поэтому INVALID не указывает на однозначно вредоносные пакеты, а говорит о том, что conntrack не смог разобраться с идентификацией пакета и резкий всплеск получения подобного состояния может указывать именно не недостаток ресурсов, а не сетевую атаку.

В тоже время пренебрегать блокированием INVALID тоже не стоит, так как позволяет эффективно защититься от ряда атак, чаще всего через поддельные ICMP-ответы.

Но, повторимся, INVALID – это не только неправильный пакет, а любой, который conntrack по какой-либо причине не смог идентифицировать.

Непонимание этого может заставить искать вас черную кошку в темной комнате, которой там нет (сетевую атаку), вместо того, чтобы проверить режим работы оборудования.
9👍6