|
Почтовые роботы -- это программы, выполняющие определенные действия в ответ на получение электронных писем. В мире Unix они применяются испокон веку, однако в Windows все еще остаются диковинкой -- пересчитать их можно буквально по пальцам, при этом одни не бесплатны, другие созданы под конкретный почтовый сервер.
Системные администраторы --
народ переборчивый. Одни любят маленькие утилиты и командные файлы, другие
предпочитают сложные корпоративные приложения. Кто-то без промедления
приступает к изучению очередного обновления какого-нибудь Resource Kit, а
кто-то, волею судьбы перебравшись на платформу Windows, никак не может
расстаться со своим Unix-прошлым. Однако никто из них наверняка не
откажется познакомиться с новой технологией или идеей, способной повысить
эффективность труда или упростить решение определенных задач. Надеемся, в
сегодняшнем материале они также найдут для себя кое-что интересное.
Почтовые роботы -- это
программы, выполняющие определенные действия в ответ на получение
электронных писем. В мире 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
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:mailrobot@mail.ru
-to:user@mail.ru
-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
Автор: Вячеслав Колдовский
Источник: www.itc.ua
|
|
|