Редактирование: UNИX, осень 2008, 09 лекция (от 26 ноября)
Материал из eSyr's wiki.
Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.
ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет 40 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
- | * '''Диктофонная запись:''' | + | * '''Диктофонная запись:''' [http://esyr.org/lections/audio/uneex_2008_winter/uneex_08_11_26.0.ogg диктофон в нагрудном кармане лектора], [http://esyr.org/lections/audio/uneex_2008_winter/uneex_08_11_26.1.ogg диктофон на кафедре] |
- | + | ||
- | + | ||
- | = Лекция = | ||
- | == Вступление == | ||
Лектор пытался узнать, что он забыл в прошлый раз. | Лектор пытался узнать, что он забыл в прошлый раз. | ||
Продолжаем тему транспортного уровня, с выходом в прикладной уровень. | Продолжаем тему транспортного уровня, с выходом в прикладной уровень. | ||
Строка 23: | Строка 19: | ||
Есть NAT. | Есть NAT. | ||
Можно добавить рассказ о шейпинге трафика, но там много всего. | Можно добавить рассказ о шейпинге трафика, но там много всего. | ||
- | Есть такая вещь, как | + | Есть такая вещь, как netcat. |
- | Еще есть | + | Еще есть tcpdump. |
- | == SSL == | ||
Начнем разговор с защиты потока данных на траспортном уровне. | Начнем разговор с защиты потока данных на траспортном уровне. | ||
SSL. | SSL. | ||
Строка 36: | Строка 31: | ||
Есть две дырки, а что между ними — непонятно. | Есть две дырки, а что между ними — непонятно. | ||
- | === Идея === | ||
Идея SSL состоит в том, чтобы прикрутить к этим дыркам шифрование. | Идея SSL состоит в том, чтобы прикрутить к этим дыркам шифрование. | ||
Если не вдаваться ни в какие подробности, то тут можно было бы и закончить. | Если не вдаваться ни в какие подробности, то тут можно было бы и закончить. | ||
Нужно передать данные о алгоритме шифрования, должен быть сам алгоритм шифрования. | Нужно передать данные о алгоритме шифрования, должен быть сам алгоритм шифрования. | ||
Зашифрованные сообщения должны циркулировать между абонентом и адресатом. | Зашифрованные сообщения должны циркулировать между абонентом и адресатом. | ||
- | |||
Никаких дополнительных ограничений на транспортный уровень не накладывается. | Никаких дополнительных ограничений на транспортный уровень не накладывается. | ||
Прикрутили с обоих сторон дырки шифровальные машинки, на лету шифрующие сообщения, которые затем проходят через Интернет. | Прикрутили с обоих сторон дырки шифровальные машинки, на лету шифрующие сообщения, которые затем проходят через Интернет. | ||
Строка 49: | Строка 42: | ||
Если он открыт, получается как у Ильфа и Петрова (строго спрашивал у всех пропуск, а у кого не было, пускал так). | Если он открыт, получается как у Ильфа и Петрова (строго спрашивал у всех пропуск, а у кого не было, пускал так). | ||
Можно где-то хранить, но тут есть проблемы. | Можно где-то хранить, но тут есть проблемы. | ||
- | |||
Факт того, что мы передали кому-то пароль фактически значит, что пароль раскрыт. | Факт того, что мы передали кому-то пароль фактически значит, что пароль раскрыт. | ||
Решение в использовании двух паролей — один для шифрования, другой для дешифрования. | Решение в использовании двух паролей — один для шифрования, другой для дешифрования. | ||
Строка 60: | Строка 52: | ||
Нужно вначале раздать ключ, но как проверить подлинность выдавшего ключ? | Нужно вначале раздать ключ, но как проверить подлинность выдавшего ключ? | ||
Нужно вначале еще как-то проверить, что именно тот адресат присал этот ключ. | Нужно вначале еще как-то проверить, что именно тот адресат присал этот ключ. | ||
- | |||
При асимметричном шифровании ключ выдается один раз. | При асимметричном шифровании ключ выдается один раз. | ||
Приходим к сертификатам. | Приходим к сертификатам. | ||
Подпись Васи Пупкина, за которого ручается более мощный Вася Пупкин, который очень богатый и которого нельзя подкупить. | Подпись Васи Пупкина, за которого ручается более мощный Вася Пупкин, который очень богатый и которого нельзя подкупить. | ||
- | === Практика === | ||
Шифрование SSL используется довольно часто. | Шифрование SSL используется довольно часто. | ||
Все знают про https — протокол http, натянутый поверх ssl. | Все знают про https — протокол http, натянутый поверх ssl. | ||
Строка 76: | Строка 66: | ||
Либо мы попадаем на сайт с самоподписанным сертификатом. | Либо мы попадаем на сайт с самоподписанным сертификатом. | ||
Формально тут возможна фальсификация, потому что мы не знаем, что это именно тот, кто подписался. | Формально тут возможна фальсификация, потому что мы не знаем, что это именно тот, кто подписался. | ||
- | |||
Но довольно редко передается очень серьезная информация. | Но довольно редко передается очень серьезная информация. | ||
Чаще нужно просто защитить логин/пароль. | Чаще нужно просто защитить логин/пароль. | ||
Строка 92: | Строка 81: | ||
Осуществляется соединение к первому сайту (Вася Пупкин) по 443 порту. | Осуществляется соединение к первому сайту (Вася Пупкин) по 443 порту. | ||
Соединение осуществляется по IP. | Соединение осуществляется по IP. | ||
- | |||
На уровне SSL невозможно различить что-то на прикладном уровне. | На уровне SSL невозможно различить что-то на прикладном уровне. | ||
С одной стороны, упираемся в грамотное разделение прикладного и транспортного уровня. | С одной стороны, упираемся в грамотное разделение прикладного и транспортного уровня. | ||
Но те люди, которые выписывают сертификаты, выписывают их на адреса прикладного уровня. | Но те люди, которые выписывают сертификаты, выписывают их на адреса прикладного уровня. | ||
- | |||
Из двух сертификатов будет выбран только один. | Из двух сертификатов будет выбран только один. | ||
Будет еще более страшное предупреждение о том, что сертификат выдан другим людям. | Будет еще более страшное предупреждение о том, что сертификат выдан другим людям. | ||
Строка 103: | Строка 90: | ||
TLS требует модификации протокола. | TLS требует модификации протокола. | ||
- | == stunnel == | ||
Программа stunnel. | Программа stunnel. | ||
Предназначена для превращения протокола, незащищенного по SSL в протокол, защищенный про SSL. | Предназначена для превращения протокола, незащищенного по SSL в протокол, защищенный про SSL. | ||
Строка 109: | Строка 95: | ||
Можем подключиться, ввести логин/пароль и работать. | Можем подключиться, ввести логин/пароль и работать. | ||
Можем предоставить Telnet с SSL. | Можем предоставить Telnet с SSL. | ||
- | |||
Не SSH, а просто защищенное соединение. | Не SSH, а просто защищенное соединение. | ||
stunnel осуществляет подключение к порту на удаленной машине. | stunnel осуществляет подключение к порту на удаленной машине. | ||
На транспортном уровне осуществляет шифрование. | На транспортном уровне осуществляет шифрование. | ||
В качестве результата выдает на локальной машине порт, по которому служба уже расшифрована. | В качестве результата выдает на локальной машине порт, по которому служба уже расшифрована. | ||
- | |||
Подключение к такому порту возможно обычным способом, потом stunnel переложит его в зашифрованный сокет и там уже будет делать всю работу по шифрованию за нас. | Подключение к такому порту возможно обычным способом, потом stunnel переложит его в зашифрованный сокет и там уже будет делать всю работу по шифрованию за нас. | ||
На сервере может быть аналогичная ситуация. | На сервере может быть аналогичная ситуация. | ||
Мы можем не шифровать логин/пароль, а переставлять систему каждую неделю. | Мы можем не шифровать логин/пароль, а переставлять систему каждую неделю. | ||
- | |||
Можно использовать stunnel. | Можно использовать stunnel. | ||
Он подключится по локальному порту к службе, делает зашифрованный порт на нашей же машине, к которому можно подключиться снаружи. | Он подключится по локальному порту к службе, делает зашифрованный порт на нашей же машине, к которому можно подключиться снаружи. | ||
Stunnel перекладывает из одного сокета в другой. | Stunnel перекладывает из одного сокета в другой. | ||
- | + | Telnet — волшебная программа, которую по назначению никто не использует. | |
- | + | ||
Можно сесть за свою машину, подключится к другой машине и работать с ней по сети. | Можно сесть за свою машину, подключится к другой машине и работать с ней по сети. | ||
Это было чудесно в 80-х гг, а потом в 90-х или даже раньше, стало очевидно, что данные передаются в нешифрованном виде. | Это было чудесно в 80-х гг, а потом в 90-х или даже раньше, стало очевидно, что данные передаются в нешифрованном виде. | ||
Строка 133: | Строка 115: | ||
Можно смотреть сайты, если в голове есть парсер html. | Можно смотреть сайты, если в голове есть парсер html. | ||
- | Реально лучше использовать | + | Реально лучше использовать netcat, например, в скриптах. |
С его помощью можно скачивать куски сайта. | С его помощью можно скачивать куски сайта. | ||
Преобразует сетевой трафик в что-то понятное. | Преобразует сетевой трафик в что-то понятное. | ||
Строка 146: | Строка 128: | ||
Есть даже специальные утилиты для этого. | Есть даже специальные утилиты для этого. | ||
- | + | Утилита tcpdump же — вещь полезная. | |
- | Утилита | + | |
Она переводит карту в беспорядочный режим. | Она переводит карту в беспорядочный режим. | ||
Мы увидим не только фреймы ethernet, но и дешифровку трафика транспортного уровня. | Мы увидим не только фреймы ethernet, но и дешифровку трафика транспортного уровня. | ||
- | В иллюстративном плане | + | В иллюстративном плане tcpdump весьма полезен. |
Имеет даже некоторые прикладные протоколы. | Имеет даже некоторые прикладные протоколы. | ||
- | == NAT == | ||
Когда мы говорили про сетевой уровень и диапазонные адреса, говорили, что предусмотрены диапазоны адресов, не обязанные быть уникальными в масштабе Интернета. | Когда мы говорили про сетевой уровень и диапазонные адреса, говорили, что предусмотрены диапазоны адресов, не обязанные быть уникальными в масштабе Интернета. | ||
Если мы не хотим регистрировать все машины в сети, даже раскрывать машины в сети, можем использовать их. | Если мы не хотим регистрировать все машины в сети, даже раскрывать машины в сети, можем использовать их. | ||
На самом деле такие машины могут ходить в Интернет, это повседневная практика — делать внутренние адреса и делать преобразование сетевых адресов. | На самом деле такие машины могут ходить в Интернет, это повседневная практика — делать внутренние адреса и делать преобразование сетевых адресов. | ||
- | |||
- | === Идея === | ||
Можно посылать пакеты и, что важно, получать их. | Можно посылать пакеты и, что важно, получать их. | ||
Есть машина, производящая трансляцию сетевых адресов. | Есть машина, производящая трансляцию сетевых адресов. | ||
Есть абонент, посылающий пакет на сервер NAT, тот преобразует его адрес отправителя в свой. | Есть абонент, посылающий пакет на сервер NAT, тот преобразует его адрес отправителя в свой. | ||
- | |||
Все выглядит кристально, если не начать думать. | Все выглядит кристально, если не начать думать. | ||
У нас много машин с внутренними IP-адресами. | У нас много машин с внутренними IP-адресами. | ||
Строка 175: | Строка 152: | ||
Как понять, какой из внутренних машин предназначен ответ? | Как понять, какой из внутренних машин предназначен ответ? | ||
Если пакет был частью TCP-трафика, мы не можем ничего понять. | Если пакет был частью TCP-трафика, мы не можем ничего понять. | ||
- | |||
- | === Таблица NAT === | ||
Введем таблицу. | Введем таблицу. | ||
В таблице можно запомнить адрес транспортного уровня — отправитель-порт, получатель-порт. | В таблице можно запомнить адрес транспортного уровня — отправитель-порт, получатель-порт. | ||
Строка 188: | Строка 163: | ||
Мы не анализируем состояние TCP. | Мы не анализируем состояние TCP. | ||
Ждем либо FIN, либо большого таймаута. | Ждем либо FIN, либо большого таймаута. | ||
- | |||
- | === Проблемы === | ||
Есть одна загвоздка — если внутри много машин, на всех может не хватить портов. | Есть одна загвоздка — если внутри много машин, на всех может не хватить портов. | ||
Проблема червей, нерезанного осла. | Проблема червей, нерезанного осла. | ||
Раз несколько тысяч соединений, два несколько тысяч и адресное пространство кончается (65 тысяч). | Раз несколько тысяч соединений, два несколько тысяч и адресное пространство кончается (65 тысяч). | ||
- | == Другие фишки сетевого уровня == | ||
- | === Запросы-ответы === | ||
На уровне IP есть ICMP. | На уровне IP есть ICMP. | ||
Там каждый запрос сопровождается уникальным номером-идентификатором. | Там каждый запрос сопровождается уникальным номером-идентификатором. | ||
Строка 207: | Строка 178: | ||
Когда приходит датаграмма, подменяем данные и возвращаем клиенту. | Когда приходит датаграмма, подменяем данные и возвращаем клиенту. | ||
- | === Приоритеты === | ||
Свойства транспортного уровня позволяют вытворять с потоками данных различные малоприличные штуки. | Свойства транспортного уровня позволяют вытворять с потоками данных различные малоприличные штуки. | ||
- | |||
Опознавать трафик и переставлять пакеты в зависимости от типа трафика. | Опознавать трафик и переставлять пакеты в зависимости от типа трафика. | ||
Один пакет от Васи Пупкина, другой от начальника. | Один пакет от Васи Пупкина, другой от начальника. | ||
Принятый от начальника, пусть недавно, отправляем сразу же. | Принятый от начальника, пусть недавно, отправляем сразу же. | ||
Пакеты перераспределяются по приоритетам. | Пакеты перераспределяются по приоритетам. | ||
- | |||
Другой вариант — равные приоритеты. | Другой вариант — равные приоритеты. | ||
Нагрузка от абонентов разная, но пересылаем по одному пакету от абонента. | Нагрузка от абонентов разная, но пересылаем по одному пакету от абонента. | ||
Еще можно дропнуть один пакет умным маршрутизатором, если идет много больших пакетов. | Еще можно дропнуть один пакет умным маршрутизатором, если идет много больших пакетов. | ||
Тогда клиент произведет откат. | Тогда клиент произведет откат. | ||
- | |||
TCP — довольно удобный инструмент для организации трафика, ограничения трафика и т.д. | TCP — довольно удобный инструмент для организации трафика, ограничения трафика и т.д. | ||
- | + | Программа netcat, занимающаящася чем? | |
- | Программа | + | |
Говорим ей порт, она подсоединяется, мы посылаем с клавиатуры текст, что-то происходит. | Говорим ей порт, она подсоединяется, мы посылаем с клавиатуры текст, что-то происходит. | ||
Можно сделать программу listener'ом, тогда к ней можно подключиться и она выведет то, что ей пошлют. | Можно сделать программу listener'ом, тогда к ней можно подключиться и она выведет то, что ей пошлют. | ||
Можно отправить ответ с клавиатуры. | Можно отправить ответ с клавиатуры. | ||
- | |||
Идея программы. | Идея программы. | ||
Есть сервер, принимающий запросы, отправляющий ответы. | Есть сервер, принимающий запросы, отправляющий ответы. | ||
Строка 235: | Строка 200: | ||
Программа-фильтр, по терминологии UNIX-систем. | Программа-фильтр, по терминологии UNIX-систем. | ||
Запускаем программу командой server > file. | Запускаем программу командой server > file. | ||
- | |||
Осталось сделать так, чтобы это работало с сетью, а не с вводом-выводом. | Осталось сделать так, чтобы это работало с сетью, а не с вводом-выводом. | ||
Можно использовать netcat, но лучше использовать метадемон inetd. | Можно использовать netcat, но лучше использовать метадемон inetd. | ||
Он регистрируется в качестве listener на список заданных портов. | Он регистрируется в качестве listener на список заданных портов. | ||
- | |||
Можно написать RPC-сервер. | Можно написать RPC-сервер. | ||
Обрабатывает одно подключение по порту, либо сколько угодно подключений на один порт. | Обрабатывает одно подключение по порту, либо сколько угодно подключений на один порт. | ||
Строка 245: | Строка 208: | ||
Так могут работать популярные ftp-серверы и другие программы. | Так могут работать популярные ftp-серверы и другие программы. | ||
- | + | Происходит жесткое разделение на транспортный уровень, за который отвечает inetd, и прикладной уровень, за который отвечает программа. | |
- | Происходит жесткое разделение на транспортный уровень, за который отвечает | + | |
Единственный недостаток — это существенно медленнее работает, чем когда работает сама программа. | Единственный недостаток — это существенно медленнее работает, чем когда работает сама программа. | ||
Все работает через канал. | Все работает через канал. | ||
- | |||
Канал нельзя забивать, иначе начнется непролезание. | Канал нельзя забивать, иначе начнется непролезание. | ||
Это нагружает систему, если задача — сложная. | Это нагружает систему, если задача — сложная. | ||
- | Сервер http обычно через | + | Сервер http обычно через inetd не пишут. |
Популярный сервер получает много подключений, которые будут тормозить систему. | Популярный сервер получает много подключений, которые будут тормозить систему. | ||
- | + | Inetd — юниксовый демон, большой пакет. | |
Тип подключение — tcp-udp, какую программу запускать, с какими ограничениями. | Тип подключение — tcp-udp, какую программу запускать, с какими ограничениями. | ||
Например, сколько соединений в секунду разрешать, или сколько соединений с одного IP. | Например, сколько соединений в секунду разрешать, или сколько соединений с одного IP. | ||
- | В большинстве используется | + | В большинстве используется xinetd. |
Он умеет обрабатывать RPC-запросы. | Он умеет обрабатывать RPC-запросы. | ||
У него не один конфиг-файл, а много. | У него не один конфиг-файл, а много. | ||
Строка 266: | Строка 227: | ||
В книге Курячий-Маслинский есть описание, как за полторы минуты сделать сервис, выдающий календарь на текущий месяц. | В книге Курячий-Маслинский есть описание, как за полторы минуты сделать сервис, выдающий календарь на текущий месяц. | ||
- | == Что дальше? == | ||
Почему это переход к прикладному уровню? | Почему это переход к прикладному уровню? | ||
Демон xinetd никакого разбора не делает. | Демон xinetd никакого разбора не делает. | ||
Строка 276: | Строка 236: | ||
Без протокола DNS «не работает Интернет». | Без протокола DNS «не работает Интернет». | ||
- | + | Конспект eSyr: | |
<div style="font-size:50%"> | <div style="font-size:50%"> | ||
О различии адресов трансп. и сетевого уровня. На сет. уровне есть IP-адреса, на трансп. тоже. Одно явно произв. из другого, но не всегда однозн. соотв. имеет место. Там есть всякие жёствие зависимости, но в общем случае можно говорить о том, что есть адр. сетевого, есть адр. трансп., и это разные вещи. | О различии адресов трансп. и сетевого уровня. На сет. уровне есть IP-адреса, на трансп. тоже. Одно явно произв. из другого, но не всегда однозн. соотв. имеет место. Там есть всякие жёствие зависимости, но в общем случае можно говорить о том, что есть адр. сетевого, есть адр. трансп., и это разные вещи. |