Avahi linux что это такое
Качаем образ Ubuntu Server и записываем его на флешку:
Далее потребуются ненужный системный блок, монитор, мышка и клавиатура.
Ставим Ubuntu, в качестве имени хоста указываем, например, ubuntu-server , не забываем отметить Install OpenSSH Server , так как для управления сервером мы будем использовать ssh. После успешной установки перегружаемся.
Ставим на сервере Avahi Daemon, который делает машину доступной в локальной сети по имени хоста как <имя-хоста>.local .
Проверяем запущен ли сервис:
В Ubuntu особой настройки Avahi не требуется.
Делаем файлопомойку. У меня, например, есть несколько HDD, которые я объеденил в RAID-0 массив. Данные в RAID-0 записываются поочередно на два и более устройств, что увеличивает скорости чтения и записи. Недостатком является утеря данных при выходе одного из дисков, но для файлопоймойки это не принципиально.
Для общего доступа к файлам юудет использоваться NFS. Альтернативой NFS является Samba, которая сложна в настройке и без тонкой конфигурации показывает довольно низкую скорость передачи данных 7-11 MiB/s.
В /etc/exports добавляем строку:
И чтобы применить изменения вызываем:
Lines below this comment will be discarded
Подключение к серверу
Avahi нужен для того чтобы заработало подключение к хосту по имени (этот шаг можно пропустить и в дальнейшем подключаться по IP).
Так же нужно отредактировать /etc/nsswitch.conf , строчку hosts , добавив mdns_minimal [NOTFOUND=return] до resolve :
Запускаем Avahi демона:
Подлючение по SSH
Генерируем пару RSA-ключей для подключения по SSH (если требуется):
Чтобы не вводить постоянно пароль, добавляем пуьличный ключ на сервер:
Подкоючаемся к серверу:
Способы подключения по SSH
Запускаем PowerShell от имени администратора и ставим Putty:
Если у вас установлен WSL, то одключение к серверу ничем не будет отличаться от способа для Linux.
Доступ к расшаренным данным
Баг моей версии Windows: если при подключении сетевого диска указать имя хоста, то в проводнике он будет отображаться как Disconnected Network Drive.
Я, как старый линуксоид, когда впервые установил Ubuntu и увидел незнакомое слово avahi, конечно же сразу посмотрел в google. Потыкался в несколько ссылок, увидел другие непонятные слова, типа zeroconf, multicast dns, bonjour. Сразу понял, что это какая то мутная технология от Apple и нафиг мне ненужная.
Однако, с ростом локальной сети внутри моей квартиры, подумал, что неплохо бы было полюбопытствовать, как можно приспособить zeroconf, чтобы облегчить себе жизнь.
-
— это протокол, разработанный Apple и призванный решать следующие проблемы:
- выбор сетевого адреса для устройства;
- нахождение компьютеров по имени;
- обнаружение сервисов, например принтеров.
Для разрешения имен (name resolving) используется протокол Multicast DNS или сокращено mDNS. Он позволяет устройству выбрать имя в зоне .local. Работает это почти как обычный DNS, но с нюансами. Каждый компьютер хранит записи своей зоны ( A , MX , SRV ) сам и сам же обслуживает запросы к ним. Когда какой либо компьютер хочет узнать запись зоны, скажем определить IP-адрес по имени (получить запись A для заданной зоны), он обращается по multicast-адресу 224.0.0.251 . Соответственно, запрос получают все компьютеры в локальной сети, а отвечает тот, кто хранит зону для интересующего нас имени.
Для поиска и обнаружения сервисов используется протокол DNS based Service Discovery или DNS-SD. Для того, чтобы прорекламировать, какие сервисы доступны на устройстве, используются DNS-записи типа SRV , TXT , PTR .
- Поставить пакеты avahi-daemon , avahi-autoipd , libnss-mdns . Если у вас стоит Ubuntu, то скорее всего эти пакеты уже установлены.
- Включить IPv4LL. Этот шаг совершенно не обязателен. Если у вас есть любой IP-адрес, который нормально маршрутизируется в локальной сети, то использовать IPv4LL не нужно и даже вредно, так как по стандарту, маршрутизатуры не должны форвардить пакеты с link-local адресами ( 169.254.* ). Иными словами, пробросить интернет через NAT скорее всего не удастся (мне не удалось). Но если вы уж решились, то достаточно для сетевого интерфейса локальной сети, в файле /etc/network/interfaces поставить тип ipv4ll . Что-то типа такого:
Avahi - это система, которая позволяет программам публиковать и обнаруживать службы и хосты, работающие в локальной сети . Например, пользователь может подключить компьютер к сети и заставить Avahi автоматически рекламировать сетевые службы, запущенные на его компьютере, облегчая доступ пользователей к этим службам.
СОДЕРЖАНИЕ
Архитектура программного обеспечения
Avahi реализует спецификацию Apple Zeroconf , mDNS , DNS-SD и RFC 3927 / IPv4LL . Другие реализации включают платформу Apple Bonjour (компонент mDNSResponder которой лицензирован по лицензии Apache ).
Avahi предоставляет набор языковых привязок ( Python , Mono и т. Д.) И поставляется с большинством дистрибутивов Linux и BSD . Благодаря модульной архитектуре основные компоненты рабочего стола, такие как виртуальная файловая система GNOME и архитектура ввода-вывода KDE, уже интегрируют Avahi.
Авахи против Бонжура
Проект Avahi начался в 2004 году, потому что реализация Apple Zeroconf, Bonjour , использовала несовместимую с GPL лицензию Apple Public Source License . В 2006 году Apple повторно лицензировала часть Bonjour под лицензией Apache .
Выступления Авахи напоминают Бонжур, иногда даже превосходя его; однако Avahi может потерять услуги при одновременном управлении большим количеством запросов.
История
Avahi был разработан Леннартом Поеттерингом и Трентом Ллойдом. Это результат слияния в 2005 году оригинальной реализации Poettering mDNS / DNS-SD под названием «FlexMDNS» и оригинального кода Ллойда под названием «Avahi». Хотя большая часть сегодняшнего кода происходит от первого проекта, имя последнего использовалось для совместного проекта. Разработка FlexMDNS началась в конце 2004 года, а работа над оригинальным Avahi началась в начале 2004 года.
Имя Авахи - это малагасийское местное имя и научное латинское название рода шерстистых лемуров , семейства приматов, коренных жителей Мадагаскара . Трент Ллойд нашел это имя, понравилось, и оно прижилось. Логотип отражает это. Возможно, по совпадению, Авахи наоборот - это «I-hav-a», описание рекламы открытия.
Это перевод статьи Марка Э. Хааса, впервые опубликованной в блоге Hyperion Gray. Перевела Алёна Георгиева.
Что такое mDNS?
Официальные сайты Multicast DNS и DNS Service Discovery способны скорее запутать, чем пролить свет на суть этих технологий. Поэтому — прежде чем погружаться в вопросы безопасности mDNS и DNS-SD — мы обсудим, почему вообще эти протоколы существуют и чем они на самом деле занимаются.
Оба протокола являются частью Zeroconf — пакета технологий, который помогает сетевым устройствам находить друг друга автоматически. Когда ты отправляешь документ на печать, а твой компьютер сам предлагает на выбор ближайшие принтеры, скорее всего, он использует именно Zeroconf. Протоколы связаны с DNS, так что здесь нужно хотя бы на базовом уровне понимать, как устроена система DNS.
Обычно DNS работает «одноадресно» (unicast) — это значит, что каждый запрос отправляется на конкретный IP-адрес. Слово multicast (то есть «многоадресность») в mDNS означает, что запрос веерно рассылается всем девайсам широковещательного домена (broadcast domain). Сам по себе термин «широковещательный домен» означает, грубо говоря, все сообщающиеся устройства второго уровня — например, компьютеры, соединенные сетевыми коммутаторами. Это важный момент, ведь запросы mDNS не проходят через роутеры — потому что роутеры уже устройства третьего уровня.
Разберемся на примере. Мой MacBook Pro имеет в системе mDNS имя MehBook.local . Выяснить это можно во вкладке «Общий доступ» (Sharing) системных настроек.
Чтобы вычислить IP макбука, мы можем использовать инструмент DNS-запросов вроде dig :
$ dig @224.0.0.251 -p 5353 +short MehBook.local
10.105.0.203
Обрати внимание, что имя заканчивается на .local — это домен верхнего уровня, зарезервированный специально под mDNS. Если ты видишь подобное имя — то, вероятно, сможешь вычислить айпишник, используя mDNS. Такие доменные имена называются именами локальной связи (link-local names), потому что увидеть их можно только внутри локальной сети.
Имей в виду: некоторые сисадмины некорректно используют местный домен верхнего уровня вместе с одноадресным DNS. Следи за собой, будь осторожен!
Вместо того чтобы посылать запрос DNS-серверу на порт 53, мы используем порт 5353 и специальный адрес 224.0.0.251 — собственно, мультикастомный. Этот конкретный адрес зарезервирован специально для mDNS. Когда на адрес 224.0.0.251 приходит запрос, все устройства сети получают копию этого запроса и могут на него ответить. В нашем примере мой макбук увидел запрос и вернул по нему свой собственный айпишник — 10.105.0.203 .
IP моего макбука динамический, через какое-то время он поменяется — а вот mDNS-имя останется прежним! Так что мы можем взаимодействовать с доменными именами без запуска DNS-сервера. Сам понимаешь, чем это полезно в домашних и небольших офисных сетях.
Что такое DNS-SD?
В примере с mDNS мы выясняли айпишник устройства с уже известным именем. Но что, если ты хочешь связаться с девайсом, имя которого не знаешь, — например, с принтером? Эту проблему как раз и решает протокол обнаружения сервисов (Service Discovery). Он позволяет устройствам заявлять о конкретных сервисах, которые они предлагают, — так, чтобы можно было обнаружить их без централизованной настройки.
Начнем с вычисления принтеров:
Тут нам помогут те же мультикастомный DNS-адрес и порт, но на сей раз мы запрашиваем PTR-записи и используем специальное доменное имя _printer._tcp.local — оно как раз предназначено для распознавания принтеров. В ответ на этот запрос мой принтер Brother вернул свое локальное доменное имя.
Если ты хочешь запросить устройства с другими сервисами, то стоит свериться с их официальным реестром. Например, там есть любопытная служба RAOP — она же протокол Apple, известный как AirTunes. Давай-ка его вычислим:
Запрос показывает устройство в моей сети, предлагающее сервис RAOP, — это Apple TV под названием «Гостиная» (Living Room). На самом деле в моей сети два Apple TV, но dig выводит только первый полученный ответ. К счастью, есть инструменты и получше. На macOS это команда dns-sd в программном модуле Rendezvous (Bonjour), эппловской реализации Zeroconf.
Эта команда разошлет запрос и отобразит все полученные ответы (чтобы избавиться от них, нужно будет нажать Ctrl-C). Теперь мы видим оба моих Apple TV.
На Linux тот же набор инструментов предлагает пакет Avahi (на Debian/Ubuntu он называется avahi-utils ).
$ avahi-browse _raop._tcp
+ IPv6 D0D2B0XXXXXX@Bedroom AirTunes Remote Audio local
+ IPv6 C8D083XXXXXX@Living Room AirTunes Remote Audio local
+ IPv4 D0D2B0XXXXXX@Bedroom AirTunes Remote Audio local
+ IPv4 C8D083XXXXXX@Living Room AirTunes Remote Audio local
^C
Avahi умеет переводить имена служб типа _raop._tcp.local в более понятные — AirTunes Remote Audio local , например. Также Avahi может вычислить айпишник с помощью mDNS, так что dig здесь вообще не нужен:
Обрати внимание, что при mDNS-запросе мы не вставляем значения типа _raop._tcp — потому что это название службы, а не устройства. Также мы ничего не пишем слева от символа @ .
Вычисляем устройства
Теперь ты видишь, чем пакет Zeroconf интересен пентестерам: благодаря ему можно быстро найти целый список доступных устройств буквально за пару запросов. А Avahi еще и позволяет автоматизировать этот процесс. Например, вполне реально упаковать обнаружение сервисов и пробивание IP через mDNS в один шаг.
$ avahi-browse --resolve _printer._tcp
+ enp4s0 IPv4 Brother DCP-L2540DW series UNIX Printer local
= enp4s0 IPv4 Brother DCP-L2540DW series UNIX Printer local
hostname = [brotherB85F3190.local]
address = [10.105.0.3]
port = [515]
txt = ["UUID=e3248000-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
"TBCP=F" "Transparent=T" "Binary=T" "PaperCustom=T"
"Scan=T" "Fax=F" "Duplex=T" "Copies=T" "Color=F" …]
^C
В результате мы получаем локальное имя хоста, IP-адрес и порт ( tcp/515 — дефолтный порт для Line Printer Daemon). Плюс много информации о возможностях принтера в поле txt .
Использованная здесь команда — отличный способ пересчитать все устройства конкретного типа, однако Avahi способен на большее! Следующая команда вычисляет вообще все типы сервисов сразу.
$ avahi-browse --all
+ IPv6 8FB20F14F5966F78620XXXX iPod Touch Music Library local
+ IPv6 276A1455BC533567B08XXXX iPod Touch Music Library local
+ IPv4 8FB20F14F5966F78620XXXX iPod Touch Music Library local
+ IPv4 276A1455BC533567B08XXXX iPod Touch Music Library local
+ IPv6 8FB20F14F5966F78620XXXX _appletv-v2._tcp local
+ IPv6 276A1455BC533567B08XXXX _appletv-v2._tcp local
+ IPv4 8FB20F14F5966F78620XXXX _appletv-v2._tcp local
+ IPv4 276A1455BC533567B08XXXX _appletv-v2._tcp local
^C
Наконец, Avahi может слушать запросы по протоколам Zeroconf от других устройств, что позволяет вычислять девайсы фоново.
$ avahi-browse -a
+ IPv6 MehBook _companion-link._tcp local
+ IPv6 Bedroom _companion-link._tcp local
+ IPv6 Living Room _companion-link._tcp local
+ IPv4 MehBook _companion-link._tcp local
^C
Обе эти команды можно сочетать с --resolve , чтобы получить информацию об айпишниках и портах каждого девайса. Все устройства сети как на ладони!
И конечно, нельзя не упомянуть, что Nmap поддерживает вычисление устройств Zeroconf с помощью скрипта broadcast-dns-service-discovery.
Этот скрипт не включен в категорию default — его можно найти только в safe .
Немного об ограничениях
- Это работает только внутри локальной сети, так что нужно иметь к ней доступ.
- Большие корпоративные сети обычно сегментированы, поэтому потребуется опорная точка именно внутри интересующего тебя сегмента.
- Есть много важных служб, которые не заявляют о себе через DNS-SD, — такие устройства в большинстве случаев придется вычислять как-то иначе.
- Из-за того, что это широковещательные протоколы, нужно хорошенько подумать — позволяют ли твоя тактика и стратегия их использовать?
Эксплуатация
Окей, вычисление устройств — это прикольно и все такое, но есть ли здесь что поэксплуатировать? Мы нашли связку принтеров и Apple TV — и.
Во-первых, держи в уме, что продукты для домашней и небольшой офисной сети, использующие Zeroconf, с высокой вероятностью имеют неправильные настройки и уязвимости. Один простой пример: если принтер аутентифицируется через LDAP-сервер, а у того стоит дефолтный пароль производителя, ты можешь захватить контроль над сервером, заставить принтер к нему обратиться и таким образом украсть LDAP-аттестат принтера. Этим способом можно довольно быстро угнать доменный аккаунт!
Продолжение доступно только участникам
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Читайте также: