Редактирование: 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 диктофон на кафедре]
-
* [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'''.
+
Есть такая вещь, как netcat.
-
Еще есть '''tcpdump'''.
+
Еще есть 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 ==
+
Telnet — волшебная программа, которую по назначению никто не использует.
-
'''telnet''' — волшебная программа, которую по назначению никто не использует.
+
Можно сесть за свою машину, подключится к другой машине и работать с ней по сети.
Можно сесть за свою машину, подключится к другой машине и работать с ней по сети.
Это было чудесно в 80-х гг, а потом в 90-х или даже раньше, стало очевидно, что данные передаются в нешифрованном виде.
Это было чудесно в 80-х гг, а потом в 90-х или даже раньше, стало очевидно, что данные передаются в нешифрованном виде.
Строка 133: Строка 115:
Можно смотреть сайты, если в голове есть парсер html.
Можно смотреть сайты, если в голове есть парсер html.
-
Реально лучше использовать '''netcat''', например, в скриптах.
+
Реально лучше использовать netcat, например, в скриптах.
С его помощью можно скачивать куски сайта.
С его помощью можно скачивать куски сайта.
Преобразует сетевой трафик в что-то понятное.
Преобразует сетевой трафик в что-то понятное.
Строка 146: Строка 128:
Есть даже специальные утилиты для этого.
Есть даже специальные утилиты для этого.
-
== tcpdump ==
+
Утилита tcpdump же — вещь полезная.
-
Утилита '''tcpdump''' же — вещь полезная.
+
Она переводит карту в беспорядочный режим.
Она переводит карту в беспорядочный режим.
Мы увидим не только фреймы ethernet, но и дешифровку трафика транспортного уровня.
Мы увидим не только фреймы ethernet, но и дешифровку трафика транспортного уровня.
-
В иллюстративном плане '''tcpdump''' весьма полезен.
+
В иллюстративном плане 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 ==
+
Программа netcat, занимающаящася чем?
-
Программа '''netcat''', занимающаящася чем?
+
Говорим ей порт, она подсоединяется, мы посылаем с клавиатуры текст, что-то происходит.
Говорим ей порт, она подсоединяется, мы посылаем с клавиатуры текст, что-то происходит.
Можно сделать программу listener'ом, тогда к ней можно подключиться и она выведет то, что ей пошлют.
Можно сделать программу listener'ом, тогда к ней можно подключиться и она выведет то, что ей пошлют.
Можно отправить ответ с клавиатуры.
Можно отправить ответ с клавиатуры.
- 
Идея программы.
Идея программы.
Есть сервер, принимающий запросы, отправляющий ответы.
Есть сервер, принимающий запросы, отправляющий ответы.
Строка 235: Строка 200:
Программа-фильтр, по терминологии UNIX-систем.
Программа-фильтр, по терминологии UNIX-систем.
Запускаем программу командой server > file.
Запускаем программу командой server > file.
- 
Осталось сделать так, чтобы это работало с сетью, а не с вводом-выводом.
Осталось сделать так, чтобы это работало с сетью, а не с вводом-выводом.
Можно использовать netcat, но лучше использовать метадемон inetd.
Можно использовать netcat, но лучше использовать метадемон inetd.
Он регистрируется в качестве listener на список заданных портов.
Он регистрируется в качестве listener на список заданных портов.
- 
Можно написать RPC-сервер.
Можно написать RPC-сервер.
Обрабатывает одно подключение по порту, либо сколько угодно подключений на один порт.
Обрабатывает одно подключение по порту, либо сколько угодно подключений на один порт.
Строка 245: Строка 208:
Так могут работать популярные ftp-серверы и другие программы.
Так могут работать популярные ftp-серверы и другие программы.
-
== inetd ==
+
Происходит жесткое разделение на транспортный уровень, за который отвечает inetd, и прикладной уровень, за который отвечает программа.
-
Происходит жесткое разделение на транспортный уровень, за который отвечает '''inetd''', и прикладной уровень, за который отвечает программа.
+
Единственный недостаток — это существенно медленнее работает, чем когда работает сама программа.
Единственный недостаток — это существенно медленнее работает, чем когда работает сама программа.
Все работает через канал.
Все работает через канал.
- 
Канал нельзя забивать, иначе начнется непролезание.
Канал нельзя забивать, иначе начнется непролезание.
Это нагружает систему, если задача — сложная.
Это нагружает систему, если задача — сложная.
-
Сервер http обычно через '''inetd''' не пишут.
+
Сервер http обычно через inetd не пишут.
Популярный сервер получает много подключений, которые будут тормозить систему.
Популярный сервер получает много подключений, которые будут тормозить систему.
-
'''inetd''' — юниксовый демон, большой пакет.
+
Inetd — юниксовый демон, большой пакет.
Тип подключение — tcp-udp, какую программу запускать, с какими ограничениями.
Тип подключение — tcp-udp, какую программу запускать, с какими ограничениями.
Например, сколько соединений в секунду разрешать, или сколько соединений с одного IP.
Например, сколько соединений в секунду разрешать, или сколько соединений с одного IP.
-
В большинстве используется '''xinetd'''.
+
В большинстве используется xinetd.
Он умеет обрабатывать RPC-запросы.
Он умеет обрабатывать RPC-запросы.
У него не один конфиг-файл, а много.
У него не один конфиг-файл, а много.
Строка 266: Строка 227:
В книге Курячий-Маслинский есть описание, как за полторы минуты сделать сервис, выдающий календарь на текущий месяц.
В книге Курячий-Маслинский есть описание, как за полторы минуты сделать сервис, выдающий календарь на текущий месяц.
-
== Что дальше? ==
 
Почему это переход к прикладному уровню?
Почему это переход к прикладному уровню?
Демон xinetd никакого разбора не делает.
Демон xinetd никакого разбора не делает.
Строка 276: Строка 236:
Без протокола DNS «не работает Интернет».
Без протокола DNS «не работает Интернет».
-
= Конспект eSyr =
+
Конспект eSyr:
<div style="font-size:50%">
<div style="font-size:50%">
О различии адресов трансп. и сетевого уровня. На сет. уровне есть IP-адреса, на трансп. тоже. Одно явно произв. из другого, но не всегда однозн. соотв. имеет место. Там есть всякие жёствие зависимости, но в общем случае можно говорить о том, что есть адр. сетевого, есть адр. трансп., и это разные вещи.
О различии адресов трансп. и сетевого уровня. На сет. уровне есть IP-адреса, на трансп. тоже. Одно явно произв. из другого, но не всегда однозн. соотв. имеет место. Там есть всякие жёствие зависимости, но в общем случае можно говорить о том, что есть адр. сетевого, есть адр. трансп., и это разные вещи.

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы