Бэкап на почту
Тем, кто периодически крутит свой 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}
|