Почтовые роботы -- это программы, выполняющие определенные действия в ответ на
получение электронных писем. В мире 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
\programs\postie\postie -host:pop.mail.ru -user:mailrobot -pass:password
-msg:1 -file:commands\!in_mail.bat -extract --rm
!send_msg.bat
\programs\postie\postie -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 >> archive\archive.txt
echo Time stamp: ------------------- >> archive\archive.txt
date /t >> archive\archive.txt
time /t >> archive\archive.txt
echo Command data: ----------------- >> archive\archive.txt
type commands\!in_mail.bat >> archive\archive.txt
echo Command output: --------------- >> archive\archive.txt
cd commands
call !in_mail.bat >> ..\archive\archive.txt
cd ..
echo ------------------------------- >> archive\archive.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 |
Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365