top
logo


Бэкап на почту (Pfsense) PDF Печать E-mail
Автор: adm   
01.08.11 10:32

Бэкап на почту

 

Тем, кто периодически крутит свой pfsense, посвящается.
Бэкап как известно хорош регулярностью. И чем дальше хранится он от сервака тем не хуже  
Поэтому я решил бэкапиться на Gmail, ибо нефиг!
Тут меня ожидал небольшой полярный собака, нету в pfsense 1.2.3 почтаря как класса, но где наши не пропадали...

Делай раз:
Ставим пакадж "Stunnel" (потому как Gmail тоже собака и без SSL к нему не подъедешь)
stunnel, тоже самка собаки, потому как в его GUI нет чудесной галки "Client mode", поэтому её можно прописать или руками в конфиг, или дорисовать в веб морду
рисуем морду в "stunnel.xml"

после

<field>
                       <fielddescr>Outgoing source IP</fielddescr>
                       <fieldname>sourceip</fieldname>
                       <description>Enter the source IP address for outgoing connections.</description>
                       <type>input</type>
               </field>

добавляем

<field>
                       <fielddescr>Client mode</fielddescr>
                       <fieldname>clientmode</fieldname>
                       <description>Check this to enable "Client mode".</description>
                       <type>checkbox</type>
               </field>

 

добавляем логику в stunnel.inc
после

foreach($config['installedpackages']['stunnel']['config'] as $pkgconfig) {
               fwrite($fout, "\n[" . $pkgconfig['description'] . "]\n");

добавляем

if($pkgconfig['clientmode']) fwrite($fout, "client = yes" . "\n");

 

Делай два:
добавляем туннель с такими параметрами

Listen on IP :           127.0.0.1
Listen on port:         25
Certificate:              default
Redirects to IP:        smtp.gmail.com
Redirects to Port:     465
Outgoing source IP:  "адрес смотрящий в инет"
Client mode:             "отмечено"

записываем и вуаля, туннель готов



Делай три:
пишем скрипт отправки на шелле.
Gmail требует имя пользователя и пароль в кодировке BASE64, поэтому озаботимся этим заранее, например тут http://www5.rptea.com/base64/
делаем ANSI->Base64
ну и вот он, наш красавец, скрипт отправки

CODE

#!/bin/sh

SUBJECT=""
CONTENT=""

MAILSRV="127.0.0.1"
SUBJECT="SUBJECT: Current config file: "`date +%Y" "%m" "%d`
CONTENT="/cf/conf/config.xml"

if [ -n "$SUBJECT" ]; then
    (
            sleep 1
            echo "EHLO pfsense"
            sleep 1
            echo "AUTH LOGIN"
            sleep 1
            echo "login_IN_BASE64"
            sleep 1
            echo "password_IN_BASE64"
            sleep 1
            echo "MAIL FROM:< Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. >"
            sleep 1
            echo "RCPT TO:< Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. >"
            sleep 1
            echo "DATA"
            sleep 1
            echo $SUBJECT
            sleep 1
            echo "TO:< Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. >"
            sleep 1
            echo " "
            cat "$CONTENT"
            sleep 1
            echo "."
            sleep 1
            echo "QUIT"
    ) | telnet $MAILSRV 25
fi

exit

 

кидаем в папочку рута или куда там положено кидать выполняемые скрипты и делаем это добро выполняемым.
Делай четыре:
Ставим пакадж "Cron"  и у нас появится возможность нарисовать задание на выполнение нашей прелести скажем раз в неделю.
особым шиком я считаю не ставить этот пакадж и в консоли штатными средствами "crontab -e" используя чудо редактор vi, прописать
нужное нам расписание.

ну и на последок, на Gmail-e делаем правило сортировки по содержимому типа "Current config file:" -> кидать в папочку "ххх"
и нехай оно там тухнет

В заключение:
Вот такой набор костылей у меня получился. Во второй версии сенса почтовый агент уже добавлен, так что всё будет сильно проще.
Да и делалось это больше "Just for fun"

Использованная литература:
Google по словам и сочетаниям: gmail stunnel pfsense smtp telnet

 

Вариант2 с использованием phpmailer.

скачиваем пакет, например отсюда
https://code.google.com/a/apache-extras.org/p/phpmailer/
разворачиваем куда нибудь, и немного переписываем пример "PHPMailer_5.2.2\examples\test_smtp_gmail_advanced.php"
добавляем строку для запуска php интерпретатора и делаем скрипт исполняемым

у меня получилось так

----от-сих-tg2.php----
#!/usr/local/bin/php -f
<?php
require_once('../class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
$mail->CharSet = 'Windows-1251';  //Без этой строчки русские буквы кодируются не правильно
$mail->IsSMTP(); // telling the class to use SMTP

try {
$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server
$mail->Port       = 465;                   // set the SMTP port for the GMAIL server
$mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
$mail->Username   = " Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ";  // GMAIL username
$mail->Password   = "bla-bla-bla";            // GMAIL password
$mail->AddAddress(' Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ', 'bla-bla');
$mail->SetFrom(' Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ', 'First Last');
$mail->AddReplyTo(' Данный адрес e-mail защищен от спам-ботов, Вам необходимо включить Javascript для его просмотра. ', 'First Last');
$date = date(DATE_RFC822);
$mail->Subject = "Pfsense текущий конфиг на $date";  
$mail->Body     = "текущий конфиг";
$mail->AddAttachment('/conf/config.xml'); // attachment
$mail->Send();
echo "Message Sent OK\n";
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
?>
----до-сих-tg2.php----
ну и как заработает отключаем дебуг и вешаем на крон

 

ссылка на статью: http://thin.kiev.ua/index.php?option=com_content&view=article&id=396:2011-08-01-08-44-55&catid=50:pfsense&Itemid=81

оригинал и обсуждение:  http://forum.pfsense.org/index.php/topic,39476.0.html

 

{jcomments on}

Последнее обновление 20.12.12 17:19
 
Интересная статья? Поделись ей с другими:

bottom

 

Unreal Commander PfSense по русски Яндекс.Метрика