Почтовые роботы — это программы, выполняющие определенные действия в ответ на получение электронных писем. В мире Unix они применяются испокон веку, однако в Windows все еще остаются диковинкой — пересчитать их можно буквально по пальцам, при этом одни не бесплатны, другие созданы под конкретный почтовый сервер.
![]() |
Рис. 1. Различные каналы доставки почтовому роботу сообщений с командами |
Поскольку почтовые роботы фактически используются (не считая совсем банальных случаев) для удаленного управления компьютером, у многих наверняка возникнет вопрос о целесообразности их создания и применения. Действительно, в настоящее время наблюдается расцвет программных средств и даже онлайновых служб, позволяющих дистанционно получить полный контроль над вашим компьютером, однако существуют ситуации и задачи, для которых использовать подобные решения неэффективно или вообще невозможно. Несмотря на то что почтовые роботы, безусловно, не являются альтернативой таким универсальным инструментам, в некоторых случаях они вполне удобны, а иногда попросту незаменимы:
- как правило, оформить и отправить письмо проще и быстрее, чем установить полноценную сессию с удаленным компьютером;
- даже если в настоящий момент в вашем распоряжении лишь мобильный телефон, вы сможете воспользоваться SMS;
- при нестабильности или высокой загрузке канала связи традиционное удаленное управление может превратиться в сущее мучение;
- почтовые роботы также хороши как резервный способ администрирования в случае отказа некоторых системных служб;
- как правило, организация удаленного управления требует открытия дополнительных портов брандмауэра, что не всегда приветствуется, онлайновые же службы, хоть и обходятся одним HTTP, не бесплатны.
Таким образом, почтовый робот вполне заслуживает того, чтобы стать еще одним инструментом в арсенале системного администратора — применяемым по ситуации, но от этого не менее полезным.
Что касается воплощения такого робота в жизнь, то тут стоит, пожалуй, обратить внимание читателя на следующий момент — опытный системный администратор часто предпочтет отказаться от сторонней утилиты, если ее функциональность хотя бы отчасти дублирует возможности стандартных средств. Гораздо мудрее и надежнее досконально разобраться в уже имеющихся технологиях и инструментах, а при необходимости связывать их друг с другом с помощью командных файлов или скриптов. Именно этот принцип мы и возьмем на вооружение.
Что нам понадобится
Для того чтобы создать простой (с точки зрения реализации, а не возможностей) почтовый робот, понадобится совсем немногое. Прежде всего напомним, что речь идет о платформе Windows, поэтому и выбор программных средств будет соответствующим.
Раз наш робот — почтовый, то ему, естественно, необходим собственный почтовый ящик, размещенный на сервере, поддерживающем протоколы POP3 и SMTP, — хоть внутрикорпоративном, хоть публичном вроде mail.ru (в этом случае управляемый компьютер, естественно, должен быть подключен к Интернету). Во избежание путаницы и различных неприятностей этот ящик не рекомендуется использовать ни для каких других целей.
Для получения корреспонденции роботу необходим почтовый клиент, который поддерживал бы работу из командной строки. В каких-то ситуациях можно было бы приспособить, скажем, и Outlook, но в общем случае эта программа — не лучший вариант. Мы остановим свой выбор на Postie, идеально вписывающейся в постановку задачи.
Общее управление будет осуществлять стандартный планировщик задач Windows — для наших целей его вполне достаточно. В качестве альтернативы можно рассмотреть программу nnCron, которая, в частности, умеет самостоятельно проверять наличие корреспонденции в указанных почтовых ящиках.
Реализация
![]() |
![]() |
Рис. 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, и результаты его работы также заносить в журнал.
- Отправлять специальный файл с результатами работы на ваш (либо любой другой указанный) адрес, а после — удалять его.
Дополнительно мы добавили команды, проверяющие наличие старых рабочих файлов и при необходимости уничтожающие их. По-скольку этот набор из трех командных файлов фактически и есть сам почтовый робот, разместим его в папке 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
|
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: