Удаленное управление Octoprint или защити меня полностью. Часть 1 - правильная ОС и Telegram

maniak26
Идет загрузка
Загрузка
26.09.2016
15775
54
Техничка

Подпишитесь на автора

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

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

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

Дано: Orange Pi PC + D-bot CoreXY.

Для начала, в свете относительно недавних событий (обнаружение backdoor в ядре Linux для процессоров Allwinner) не стоит выбирать стандартные образы Linux для Orange PI PC и даже сборки на их основе.

Для комфортной работы рекомендую Armbian - стабильно работает и регулярно обновляется.
Ставится просто - качаем образ, программу для записи образов, выбираем файл образа, выбираем диск, немного ждем и все готово.
Базовую настройка отлично описана тут. Могу добавить к ней следующее:

Чтобы настроить wi-fi и не хранить пароль от сети в открытом виде на диске нужно подправить пару конфигов:

1. Выполнить команду

wpa_passphrase ssid password

где ssid - имя точки доступа, password - он и в Африке пароль пароль к ней.

получим:

network={

ssid='ssid'

#psk='password'

psk=44116ea881531996d8a23af58b376d70f196057429c258f529577a26e727ec1b

}

2. Узнать bssid точки доступа (не обязательно, но если на роутере стоит wpa2 шифрование, без этого не обойтись):

выполняем команду:

sudo iwlist wlan0 scan | egrep 'Address|ESSID|Channel'

Получаем список точек. Ищем нашу, копируем набор букв после слова 'Address'

пример вывода команды:

Cell 01 - Address: AA:AA:AA:AA:AA:AA

Channel:7

Frequency:2.442 GHz (Channel 7)

ESSID:'ssid'

3. Подправить файл конфигурации точек wifi

sudo nano -w /etc/wpa_supplicant/wpa_supplicant.conf

добавляем в него строки:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel

network={

bssid=AA:AA:AA:AA:AA:AA

ssid='ssid'

scan_ssid=1

key_mgmt=WPA-PSK

psk=44116ea881531996d8a23af58b376d70f196057429c258f529577a26e727ec1b

}

сохранить файл и выйти из редактора - Crtl+O + Enter + CrtlX

4. Изменить файл настроек сетевых интерфейсов:

sudo nano -w /etc/network/interfaces

добавляем:

allow-hotplug wlan0

iface wlan0 inet dhcp

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

5. Перезагрузить плату

sudo reboot

После перезагрузки wifi подключится автоматом.

Решение первое. Telegram.

Настройка octoprint без проблем проходит по этой инструкции, следует лишь доставить один пакет для telegram-клиента:

sudo apt-get install libjpeg-dev

Запускаем telegram.

Получаем токен для бота. Со своего telegram-аккаунта пишем в личку @BotFather
чтобы получить все команды бота, отправьте /help
регистрируем бота командой /newbot - @BotFather спросит отбражаемое имя для нового бота:
следующим вопросом спросит username для бота. После регистрации бот будет доступен по нику @username_bot.

Требования - в конце username обязательно должно быть написано bot. (и как выяснилось, тире в имени бота тоже нельзя использовать).
В ответ на свободное имя пользователя, @BotFather пришлет токен для бота:
Открываем Octoprint, заходим в настройки (Settings) -> Менеджер плагинов (Plugin manager) -> находим telegram, устанавливаем
после установки octoprint следует перезагрузить командной из командной строки

sudo service octoprint restart

снова открываем Octoprint, заходим в настройки (Settings) -> появился пункт Telegtam, выбираем его

в поле telegtam bot token вводим набор цифр/букв полученный от @BotFather, жмем Test this token. Зеленая надпись говорит о том что мы на правильном пути.
Снова открываем telegtam, пишем сообщение на @имя_бота_которое_указали_BotFather

для начала пишем /start
Каждому встречному принтер не даст собой управлять.

В настройках telegram бота появится чат с нами:
В разделе Command ставим список тех команд, которые может выполнять этот пользователь:
в разделе Notify ставим нужные уведомления:
Сохраняем настройки. Теперь можно рулить принтером через telegram.

К примеру, смотрим список доступных файлов:
Печатаем нужный, узнаем статус во время печати, получаем уведомление об окончании печати:
Так же можно добавить системные команды в octoprint:

из консоли выполняем

sudo -s

echo 'pi ALL=NOPASSWD: /sbin/shutdown' > /etc/sudoers.d/octoprint-shutdown

exit

где pi - имя пользователя, под которым работает octoprint. Нужно заменить на свое

Далее ставим плагин Sytem Command Editor
после перезапуска octoptint в настройках появляется возможность создавать системные команды:
После перезапуска сервиса данные команды будут доступны и через telegram
- потенциал этой функции просто огромный. К примеру, если завести управление БП принтера через GPIO платы Orange PI PC, то можно будет через telegram включать и выключать принтер по питанию. Данная функция уже есть в планах на будущее при построении наших D-bot.

Сам по себе telegram достаточно безопасная штука (регулярно проводятся конкурсы на взлом с солидными призами), но чтобы еще больше обезопасить свой telegram-аккаунт, рекомендую добавить двухфакторную авторизацию. С ней чтобы получить доступ к аккаунту, необходимо не только перехватить смс от telegram, но и выпытать пароль.

В следующем выпуске расскажу о том как сделать безопасный доступ к octoprint без применения сторонних сервисов - будем строить бункер защищенное соединение напрямую к веб-интерфейсу octoprint.

Подпишитесь на автора

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

Отписаться от уведомлений вы всегда сможете в профиле автора.

44
Комментарии к статье

Комментарии

26.09.2016 в 12:25
2

Очень круто! аффтар жги еще!

26.09.2016 в 12:28
0

В армбиане дырка была закрыта быстро, если мне память не изменяет. А так - хорошая работа. Управление принтером через чатик с осьминогом.

26.09.2016 в 14:02
0

Я проще сделал. Вэбкамера и розетка WiFi.
По сути управление через интерфейс octoPrint мне не нужно. Я про удаленное управление, если что. ;)(Я вот честно не понимаю зачем оно нужно, ну кроме выключения. Может объясните мне)
В итоге задача одна - выключить принтер если печать закончилась или что-то пошло не так.
Пробрасываем на роутере нужный порт. Транслируем картинку, понимаем, что печать закончилась/что-то пошло не так - с помощью розетки отключаем принтер. Все.
Зачем столько телодвижений делать с этим Телеграмом?
Я, наверное, что-то не понимаю в этой жизни.
)))
ЗЫ Про б/п вы забыли сказать - нужен ATX, светодиодный, насколько я знаю, функцию отключения не поддерживает.

26.09.2016 в 14:23
0

На вебкамеру смотреть надо, а так оно само пришлет сообщение что печать закончена).
Телеграм потому что привычный уже. Зайти в чат с принтером чуть быстрее чем открыть браузер и ввести адрес. Хотя дело привычек.
Во второй части как раз расскажу как к веб-интерфейсу цепляться и при этом не бояться что кто-то чужой подсмотрит что печатается.

АТХ бп это самый простой вариант. А так, у нас же 3d принтер - можно и робо-руку с сервами придумать, которая вилку из розетки выдергивать будет =) главное что есть управляющи сигнал, а какую последовательность действий он запустит - это уже дело техники =)

26.09.2016 в 14:54
0

А засор в сопле=недоэкструзия (не даай Бог, но допустим), конец филамента, возгорание (свят, свят, свят! Но допустим), ну и всякую мелкую пакость Телеграм тоже увидит и смс пошлет?
Ну как бы глянуть что там принтер печатает не особо и трудно и дело пары кликов.

26.09.2016 в 15:03
0

При наличии веб-камеры окта может еще и фото аттачить к сообщению, но у меня ее пока нет =/

Если датчики поставить, то будет рапортовать о чем угодно - хоть о любопытных кошках в радиусе xx метров)

28.09.2016 в 10:07
0

OctoPrint - это не только вебка и телеграм. OctoPrint на микропк - это сервер печати, с удобным удаленным интерфейсом. Возможность загружать задачи не бегая с SD картой, это пульn управления из телефона через приложения (у окты есть апи). Это гребенка GPIO интерфейсов под все возможные датчики и манипуляторы, в том числе датчик дыма, датчик окончания филманета и даже датчик толщины филамента с автокорекцией на лету.

Конечно все можно свести к вифи розетке (которая будет стоить как все выше перечисленное, ну или не на много дешевле), только вы крому вкл/выкл ничего больше не получите. Мне к примеру удобно подойти к принтеру с телефоном, опустить стол и подкрутить если надо что-то.  Удобно лежа на диване включить принтер, прогреть стол, запустить печать.

Конечно каждому свое, если вам достаточно вифи розетки, значит это решение просто не для вас. Тут не в чем убеждать, каждому свое.

28.09.2016 в 10:22
0

И зачем вы мне рассказываете про прописные истины? Юзаю Октопринт давно, все прелести знаю.
Вы не поняли, что я написал. Через октопринт слежу за печатью, когда она заканчивается или наступает форс-мажор, я выключаю питание принтера с помощью вифи-розетки, если нахожусь вне дома. И я писал что мне не нужно УДАЛЕННОЕ управление принтером, т.е. когда я вне дома.
А дома я так же, как и вы, управляю принтером с планшета, лежа на диване ))))
Розетка как дополнение к ОктоПринт.
И да - вифи розетка стоит менее 1000 руб., что дешевле Orange Pi PC, если уж на то пошло. ;)
ЗЫ И зачем мне Телеграмм этот, если я им не пользуюсь? Только место занимать в смарте.

28.09.2016 в 11:03
0

Я действительно не понял значит (=

Но розетка в принципе не нужна, слабенькое реле на АТХ БП решает задачу. Телеграм тоже не обязательно, есть АПИ и есть приложения которые с ним работают.

28.09.2016 в 11:08
0

Вы о5 прочитали мой пост вначале крайне невнимательно!
Повторю для вас!
Был бы у меня ATX БП, я бы розеткой не заморачивался. 
Но LED БП не умеет из вне отключаться, только если отключать 220. А для этого розетка и нужна )))

28.09.2016 в 11:31
0

Тогда просто реле на 220 с током до потребляемого + 30%. Все дешевле решение. Просто розерка при наличии уже подкюченного микропк, немного избыточное решение, и создает разрозненость в управлении.

28.09.2016 в 13:55
0

Но розетку то можно ВКЛЮЧИТЬ! (вдруг понадобится!) ;) А реле, управляемое МК, уже не включить )))))

28.09.2016 в 14:05
1

У меня Atx бп, апельсин висит на линии постоянно подключеных 5в) бп он без проблем может и включать и выключать) 

28.09.2016 в 14:06
0

del

28.09.2016 в 14:05
0

Ошибаетесь, eсть +5vsb (;

28.09.2016 в 15:29
0

А ну да! Забыл!
Но мы же реле отключаем 220 (так надежнее, как мне кажется) и ни каких 5 вольт дежурных нет! ;)

26.09.2016 в 14:09
0

А если использовать астропринт и рулить через облако?

26.09.2016 в 14:22
0

Облака, белогривые лошадки. Я лично им не доверяю. А так, в целом, ок.
Мой путь - никакого вайфая, проводная сеть, если надо из враждебного мира доступ - то OpenVPN.

26.09.2016 в 14:24
0

а чего им не доверять? Это как домашнему вайфаю не доверять (даже если поломают, что там важного?). Ну и openvpn - это адский перебор как мне кажется.

26.09.2016 в 14:27
0

Ну, лишняя паранойка. Вайфай только для 80/443 портов :)
А VPN как надо было сделать разок давно, для проброса видеонаблюдения, так и привык.

26.09.2016 в 14:31
0

и не гонять без ssl, а то поснифают и своруют :)
Мне кажется, проще не морочиться. Астропринт сломать сложнее, чем сниффером найти http порт на открытом ip без авторизации.

26.09.2016 в 14:34
0

Да понятно, что это загоны уже.

26.09.2016 в 14:29
0

А проводная сеть в экранированном кабеле?)

26.09.2016 в 14:30
0

Ага, в металлорукаве, а на RJ-45 презерватив надет :D

26.09.2016 в 14:27
1

В принципе те же задачи решает, но на сколько я понял распространяется только в виде дистрибутива под Raspberry Pi, то есть на эту плату уже не пойдет.
Да и облачные вещи в плане безопасности зачастую хромают. 
Тут получается то же самое облако, только свое, теплое, карманное =)

26.09.2016 в 14:32
0

ага, с управлением через командную строку :) Еще бы телеграм умел лайв видео показывать - тогда бы ок.

28.09.2016 в 10:12
0

Есть приложение окты, там можно смотреть. Так же вебка будет стримить, а значит можно посмотреть по ссылке (если прокинуть), в телеграме в боте к статусу можно приписать ссылку на стрим.

04.11.2016 в 01:29
0

А как его установить? Ему, я так понял, нужен белый ip?

26.09.2016 в 14:42
0

Ладно, это все прекрасно, осьминоги-няшки. 
Но Вы про самое интересное в этом принтере не пишете. Как вы делали сендвич стола? Какой чертеж поддержки под нагреватель и стекло? Как крепите стекло к грелке?

26.09.2016 в 14:48
0

Сендвич стола описывал тут (пока старый стол 20х20, как появится новый - будет статья-апдейт), а чертеж регулируемых крепежей тут. Не надо на меня наговаривать, я ничего не утаиваю =). Стекло к грелке на 8 прищепок канцелярских сейчас прилеплено.
Все никак не доберусь до клипс от ultimaker, таких:

А надо бы уже, а то задолбался прищепки по комнате собирать - их экструдер весело сносит)

26.09.2016 в 14:57
0

Вот про новый стол и интересно.
Как это лучше сделать? Основа из алюминия/текстолита(теплопроводность меньше)?
Как к ней крепить грелку и стекло? Какой чертеж поддержки сделать? Какая прочность нужна?

26.09.2016 в 15:20
0

основа из текстолита, наверное такой и останется. Алюминий гнет при нагреве. Сверху матовое стекло.
Основа и есть грелка, стекло на прищепках. Крепится все к 20x40 v-slot, жесткости точно хватает. Скоро статья будет по переделки конструкции D-bot, там будет много фото стола и объяснения что и зачем делалось

26.09.2016 в 15:55
0

Значит силиконовый хитер на 220В не используете? Для 300х300 на 12В нужны 12авг провода толщиной в мизинец

26.09.2016 в 16:11
0

Пара  проводов от сварочника не так страшна как 220в по железной раме)
На 12В подобные столы работают,, и достаточно успешно

26.09.2016 в 16:15
0

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

28.09.2016 в 10:16
0

И то и другое не проблемы (= 

Пожаробезопасность? - очень простое решение, это хороший провод.
Элкетробезопаность - хороший провод в кабельканале.

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

28.09.2016 в 10:45
0

Тут в обоих случаях провод - важное, но не главное. Больше чудес случается там, где этот провод с чем-нибудь соединяется.
А шимить стол - зачем? Или при большой мощности грелок уже надо?

28.09.2016 в 11:07
0

Шимить всегда можно) без этого на простых столах вылеты по 5 градусов. А если грелка мощнее, то вылеты будут больше.

28.09.2016 в 11:17
0

Нуу, на MK3, подключенном через реле, у меня 2 градуса гистерезиса стабильно отрабатываются. Но да, допускаю, что с большей мощностью больше спецэффекты будут.

28.09.2016 в 11:33
0

Надо проверять (=

26.09.2016 в 17:35
0

Кто бы еще снимал модели со стола?
Запилить что-ли каптоновую ленту от Makerbot?

26.09.2016 в 18:00
0

Я изделия с небольшой площадью основания и ощутимой высотой сшибал башкой :D

27.09.2016 в 16:19
0

добавить механическую руку. Или дворник

28.09.2016 в 10:19
0

Дворник над столом запилить, с небольшой пружинкой, что бы ковшом по поверхности прошелся. А на ковше снизу лезвие было, которое подденет модельку ((=

08.10.2016 в 19:04
0

А вот попробовал сделать как вы говорите. И ничего не вышло. Апельсинка горит зеленым и не грузится. После прошивки компутер не показывает никаких разделов. Образ армбиана битый? Попробовал образы из сборок, прошил тем же этчером, загрузка пошла.
Что я делаю не так с армбианом?

08.10.2016 в 22:22
0

Странно, возможно либо с образом действительно что-то не то, либо скачался криво. Какой именно качали? 
То что разделы перестаёт компьютер видеть - норма если это Windows 

05.11.2016 в 00:12
0

Почему-то не получается получать изображения. Подключена штатная камера. При попытке ботом дать фото - виснет катастрофически.
А это я считаю главная функция!

Зато получилось запускать Десктоп в обход серого ip просто посылая команду на Wake-on-lan через System OctoPrint :)
И еще /sys не понимает кириллицу, но что ж поделать.
Документация на github не помогает..

08.02.2017 в 17:10
0

А подскажите ток принтера при работе по линии 220 сколько? Нечем померять. Хочу использовать стандартное реле шилд от ардуины.  И вопрос, реле будет стоять рядом с опельсинкой  платой принтера, не поплохеет если я туда 220 заведу. Вдруг наводки какие нибудь пойдут?

14.03.2017 в 14:37
0

Лучший и самый простой вариант - поставить и настроить nginx с сертификатом https. Но для этого нужны знания. Правда то время, что автор потратил на ковыряние с линуксом стоило потратить на nginx. Прошу прощение за осуждение, но реально ужасает обсуждение чатов и дырок в ос...

14.03.2017 в 15:39
1

Настройка niginx с авторизацией по клиенским сертификатам была рассмотрена в следующей статье. 
Приятного чтения =)

14.03.2017 в 19:32
0

Неплохо, но самоподписанный сертификат и его заливка на телефон - это опять лишнее. Сейчас и тогда уже были сервисы с бесплатными настоящими сертификатами. Например let's encrypt. Также можно сделать автопродление на сервере. Хотя dns имя при этом наверное нужно купить.
Но вообще статьи у вас все же нужные. А про d-bot я буду ещё читать и читать! Спасибо!

06.03.2018 в 19:09
0

'Чтобы настроить wi-fi и не хранить пароль от сети в открытом виде на диске ' - те есть потом надо из файла 
[COLOR=#444444]/boot/octopi-network.txt [/COLOR]
[COLOR=#444444]удалить в разделе [/COLOR]WPA/WPA2 secured прописанные логин и пароль? 
Или что-то другое имелось в виду?

17.08.2018 в 11:53
0

Здравствуйте. Столкнулся с проблемой. Не могу установить телеграм плагин. Вылазит вот такая ошибка.

Command '/home/octoprint/OctoPrint/venv/bin/python -u -c 'import setuptools, tokenize;__file__='/tmp/pip-install-RH5Akn/pillow/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('
', '
');f.close();exec(compile(code, __file__, 'exec'))' install --record /tmp/pip-record-LG3FN5/install-record.txt --single-version-externally-managed --compile --install-headers /home/octoprint/OctoPrint/venv/include/site/python2.7/pillow' failed with error code 1 in /tmp/pip-install-RH5Akn/pillow/Error!Could not parse output from pip, see plugin_pluginmanager_console.log for generated output

18.01.2020 в 19:44
0

У кого появляется ошибка с установкой плагина 


или так 


надо в консоли прописать: sudo apt-get install zlib1g-dev

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Iron Man Magnet

Шнуровка для развивающего домика (бизиборда)

Jgmaker Magic. Магическое представление. Обзор принтера до 15к рублей.

Корпус блока управления лазером.

Зуб мегалодона.

Новый радиатор ZAV