Обзоры Обзоры 07.10.2004 в 21:00 comment

Почтовый робот своими руками

author avatar
https://secure.gravatar.com/avatar/2f8d57cddfeb455ba418faa11ee01bb0?s=96&r=g&d=https://itc.ua/wp-content/uploads/2023/06/no-avatar.png *** https://secure.gravatar.com/avatar/2f8d57cddfeb455ba418faa11ee01bb0?s=96&r=g&d=https://itc.ua/wp-content/uploads/2023/06/no-avatar.png *** https://itc.ua/wp-content/themes/ITC_6.0/images/no-avatar.svg

ITC.UA

автор

Почтовые роботы — это программы, выполняющие определенные действия в ответ на получение электронных писем. В мире Unix они применяются испокон веку, однако в Windows все еще остаются диковинкой — пересчитать их можно буквально по пальцам, при этом одни не бесплатны, другие созданы под конкретный почтовый сервер.

Почтовый робот своими руками
Рис. 1. Различные каналы доставки почтовому роботу сообщений с командами

Поскольку почтовые роботы фактически используются (не считая совсем банальных случаев) для удаленного управления компьютером, у многих наверняка возникнет вопрос о целесообразности их создания и применения. Действительно, в настоящее время наблюдается расцвет программных средств и даже онлайновых служб, позволяющих дистанционно получить полный контроль над вашим компьютером, однако существуют ситуации и задачи, для которых использовать подобные решения неэффективно или вообще невозможно. Несмотря на то что почтовые роботы, безусловно, не являются альтернативой таким универсальным инструментам, в некоторых случаях они вполне удобны, а иногда попросту незаменимы:

  • как правило, оформить и отправить письмо проще и быстрее, чем установить полноценную сессию с удаленным компьютером;
  • даже если в настоящий момент в вашем распоряжении лишь мобильный телефон, вы сможете воспользоваться SMS;
  • при нестабильности или высокой загрузке канала связи традиционное удаленное управление может превратиться в сущее мучение;
  • почтовые роботы также хороши как резервный способ администрирования в случае отказа некоторых системных служб;
  • как правило, организация удаленного управления требует открытия дополнительных портов брандмауэра, что не всегда приветствуется, онлайновые же службы, хоть и обходятся одним HTTP, не бесплатны.

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

Что касается воплощения такого робота в жизнь, то тут стоит, пожалуй, обратить внимание читателя на следующий момент — опытный системный администратор часто предпочтет отказаться от сторонней утилиты, если ее функциональность хотя бы отчасти дублирует возможности стандартных средств. Гораздо мудрее и надежнее досконально разобраться в уже имеющихся технологиях и инструментах, а при необходимости связывать их друг с другом с помощью командных файлов или скриптов. Именно этот принцип мы и возьмем на вооружение.

Что нам понадобится

Для того чтобы создать простой (с точки зрения реализации, а не возможностей) почтовый робот, понадобится совсем немногое. Прежде всего напомним, что речь идет о платформе Windows, поэтому и выбор программных средств будет соответствующим.

Англійська для IT від Englishdom.
В межах курсу можна освоїти ключові ІТ-теми та почати без проблем говорити з іноземними колегами.
Дійзнайтеся більше

Раз наш робот — почтовый, то ему, естественно, необходим собственный почтовый ящик, размещенный на сервере, поддерживающем протоколы POP3 и SMTP, — хоть внутрикорпоративном, хоть публичном вроде mail.ru (в этом случае управляемый компьютер, естественно, должен быть подключен к Интернету). Во избежание путаницы и различных неприятностей этот ящик не рекомендуется использовать ни для каких других целей.

Для получения корреспонденции роботу необходим почтовый клиент, который поддерживал бы работу из командной строки. В каких-то ситуациях можно было бы приспособить, скажем, и Outlook, но в общем случае эта программа — не лучший вариант. Мы остановим свой выбор на Postie, идеально вписывающейся в постановку задачи.

Общее управление будет осуществлять стандартный планировщик задач Windows — для наших целей его вполне достаточно. В качестве альтернативы можно рассмотреть программу nnCron, которая, в частности, умеет самостоятельно проверять наличие корреспонденции в указанных почтовых ящиках.

Реализация

Англійська для IT від Englishdom.
В межах курсу можна освоїти ключові ІТ-теми та почати без проблем говорити з іноземними колегами.
Дійзнайтеся більше
Почтовый робот своими руками
Почтовый робот своими руками
Рис. 2. Не поленитесь подробно разобраться с настройками планировщика

Для начала создадим в корневом каталоге диска C: папку Programs, а в ней — подпапки Postie и MailRobot. В первую установим одноименную утилиту, а во второй заведем еще две подпапки: Archive — для журнала операций и Commands — для инструкций роботу.

Далее займемся созданием вспомогательных командных файлов. Первый (!get_msg.bat) будет получать письма из почтового ящика, выделенного роботу, а второй (!send_msg.bat) — отправлять результаты выполнения команд по указанному адресу. Тексты обоих приведены в листингах, в каждом случае используется только один вызов postie, однако программе необходимо передать правильные параметры (в нашем примере предполагается применение mail.ru) — подробности вы найдете в документации.

Обратите также внимание, что !get_msg.bat удаляет очередное письмо с сервера, а его содержимое сохраняет в файле !in_mail.bat. В свою очередь, !send_msg.bat предполагает наличие файла !out_mail.txt с результатами выполнения команд.

Теперь создадим основной командный файл !proceed.bat, который будет работать по следующему алгоритму:

  1. Получать сообщение из почтового ящика, выделенного роботу, и сохранять его в командном файле.
  2. Делать в журнале соответствующую пометку, содержащую текущие время и дату, а также текст команды.
  3. Выполнять командный файл, полученный на шаге 1, и результаты его работы также заносить в журнал.
  4. Отправлять специальный файл с результатами работы на ваш (либо любой другой указанный) адрес, а после — удалять его.

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

Собственно, все, что нам осталось, — настроить планировщик задач, чтобы он ежеминутно запускал созданный нами на предыдущем шаге командный файл !proceed.bat. Не забудьте указать пользователя, от имени которого будет выполняться задание, и его пароль.

За дело

На этом создание почтового робота фактически завершено. Теперь достаточно направить на его адрес письмо, в теле которого следует разместить любые допустимые команды операционной системы или вызовы программ. Чтобы получить результаты их выполнения, необходимо перенаправлять консольный вывод в файл !out_mail.txt (при последовательном выполнении нескольких команд не забудьте использовать >> вместо >).

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

Например, иногда очень полезно просто проверить, что компьютер находится в рабочем состоянии. Для этого вполне подойдет файл hi.bat, содержащий одну строку:

echo "Robot Response - ALL OK!" > !out_mail.txt

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

А что делать, если вы уехали в командировку и забыли выключить компьютер? Ваш почтовый робот и здесь придет на помощь. Для этого понадобится файл sh.bat с командой:

shutdown -s

Напоследок предложим чуть менее тривиальный пример, перезапускающий определенную системную службу. Командный файл rsfw.bat с таким содержимым

REM Restart Firewall Service
net stop "Microsoft Firewall" >
!out_mail.txt
net start "Microsoft Firewall" >> !out_mail.txt

имеет непосредственное практическое значение, которое оценят администраторы, знакомые с Microsoft ISA Server: зачастую только таким образом можно решить проблемы с правилами публикации сервера. А если доступ к нему с помощью службы Remote Desktop невозможен, то без почтового робота просто не обойтись.

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

О безопасности

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

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

Для решения этой задачи можно предложить два очень простых, но довольно эффективных варианта, основанных на фильтрации корреспонденции:

  • специальная сигнатура или пароль в теме письма;
  • "белый" список адресатов, от которых допускается принимать корреспонденцию.

Оба варианта, конечно, имеют свои плюсы и минусы и, в принципе, могут применяться совместно.

Еще одним потенциально уязвимым местом при работе с почтовым роботом является ваш собственный почтовый ящик, откуда осуществляется отправка команд. В данном случае рекомендации также вполне традиционны — надежно удаляйте копии отправленных роботу писем (в том числе выполняя, когда возможно, операции "сжатия" почтовых папок). Также следует иметь в виду, что ваши письма могут быть просмотрены на внутрикорпоративном почтовом сервере. Из этих соображений вполне разумно использовать для отправки команд онлайновую службу, доступную через Web-интерфейс и поддерживающую безопасное соединение, или ваш личный мобильный телефон и SMS.

И последняя, наиболее общая, рекомендация: если вы серьезно заботитесь о безопасности, то одной из главных ее составляющих всегда было, есть и будет обеспечение конфиденциальности жизненно важной информации — не посвящайте никого в детали реализации вашего робота, тогда наверняка у вас будет меньше головной боли.

Дальнейшее развитие

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

Безопасность. Несмотря на свою кажущуюся простоту, используемый почтовый клиент postie поддерживает PGP — пожалуй, самый популярный инструмент обеспечения персональной конфиденциальности. С его помощью можно реализовать шифрование отправляемых писем/команд, чтобы никто даже не догадался об их содержании, либо просто применять цифровую подпись в качестве средства аутентификации.

Удобство использования. Набирать команды в SMS-сообщении достаточно неудобно. Читатели, знакомые с языком JAVA и обладающие мобильными телефонами с J2ME (а сейчас практически все новые модели, независимо от ценового диапазона, поддерживают эту платформу), могут попробовать свои силы в написании мидлета, который представлял бы собой оболочку для отправки заготовленных команд — что-то вроде "мобильной консоли удаленного управления".

Возможности. Реализация почтового робота в виде набора командных файлов существенно отражается на его функциональности. Если же вместо них использовать, скажем, сценарии на Windows Scripting Host, то возможности робота станут практически безграничными. В таком случае можно будет не просто выполнять простые команды, но и обеспечивать взаимодействие со сложными программными комплексами — как вам, например, такое: запросить через SMS у корпоративной АСУП объем полученной фирмой прибыли за текущий день?

Компоненты почтового робота

!get_msg.bat

programspostiepostie -host:pop.mail.ru -user:mailrobot -pass:password

-msg:1 -file:commands!in_mail.bat -extract --rm

!send_msg.bat

programspostiepostie -host:smtp.mail.ru -from:[email protected]

-to:[email protected] -file:commands!out_mail.txt

!proceed.bat

:start

if not exist commands!in_mail.bat goto :no_old_mail

del commands!in_mail.bat

:no_old_mail

if not exist commands!out_mail.txt goto :no_old_send_mail

del commands!out_mail.txt

:no_old_send_mail

call !get_msg.bat

if not exist commands!in_mail.bat goto :no_new_mail

echo NEW COMMAND ARRIVED >> archivearchive.txt

echo Time stamp: ------------------- >> archivearchive.txt

date /t >> archivearchive.txt

time /t >> archivearchive.txt

echo Command data: ----------------- >> archivearchive.txt

type commands!in_mail.bat >> archivearchive.txt

echo Command output: --------------- >> archivearchive.txt

cd commands

call !in_mail.bat >> ..archivearchive.txt

cd ..

echo ------------------------------- >> archivearchive.txt

if not exist commands!out_mail.txt goto :no_new_send_mail

call !send_msg.bat

del commands!out_mail.txt

:no_new_send_mail

goto :start

:no_new_mail


Loading comments...

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: