最近在研究如何将pfsense日志通过邮件发送给指定人员,遇到不少问题,经过google,终于解决,现整理一下,以作备忘,希望可以帮助有需要的人。
调度脚本mytask-daily.sh内容(打包日志,并调用sendmail-with-MIME-LITE.sh,发送邮件):
#!/bin/bash
echo $(date +%Y-%m-%d" "%T)" DailyTask Begin - [pfSense fw0 log send]"
Today=$(date +%Y%m%d);
cd /root
rm -f pfsense-log*.tar.gz
cd /var/log
tar -zcf /root/pfsense-log-${Today}.fw0.tar.gz *.log
cd /root
./sendmail-with-MIME-LITE.sh
echo $(date +%Y-%m-%d" "%T)" Finished!"
其中sendmail-with-MIME-LITE.sh为邮件发送脚本,内容如下:
#!/usr/bin/perl
# Sending Email with Perl Best Practice
# see http://www.revsys.com/writings/perl/sending-email-with-perl.html
# see http://www.perlmonks.org/?node_id=819376
# see MIME types: http://help.dottoro.com/lapuadlp.php (such as: .gz: application/gzip .png: image/png .txt text/plain)
# step 1
# install perl module under pfSense
# 1. perl-5.10.1_1.tbz installed with system
# 2. setenv PACKAGESITE ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/8.1-RELEASE/packages/Latest/
# 3. pkg_add -r p5-MIME-Lite-HTML.tbz p5-MIME-Lite-TT-HTML.tbz p5-MIME-Base64.tbz p5-Net-SMTP-SSL.tbz p5-Net-SSLeay.tbz p5-IO-Socket-SSL.tbz p5-Authen-SASL.tbz
# step 2
# modify the smtp server, mail sender and receiver infomation
# step 3
# modify and copy the test.txt.tt and test.html.tt, modify the path to actual position
# step 4
# modify the attachment path and info
use strict;
use warnings;
use MIME::Lite::TT::HTML;
use Net::SMTP::SSL;
use MIME::Base64;
use Authen::SASL;
use Time::localtime;
my $tm = localtime;
my $today=sprintf("%04d%02d%02d", $tm->year+1900, ($tm->mon)+1, $tm->mday);
my %params;
$params{first_name} = 'admin';
$params{last_name} = 'pfsense';
$params{today} = $today;
my %options;
$options{INCLUDE_PATH} = '/root';
my $msg = MIME::Lite::TT::HTML->new(
From => 'xxx@163.com',
To => 'xxx@qq.com',
Subject => "pfsense log today-$today",
Template => {
text => 'test.txt.tt',
html => 'test.html.tt',
},
TmplOptions => \%options,
TmplParams => \%params,
);
#$msg->attach(
# Type => 'image/png',
# Path => '/root/1.png',
# Id => 'img1',
# );
$msg->attach(
Type => 'application/gzip',
Path => "/root/pfsense-log-$today.fw0.tar.gz",
Id => 'log1',
);
#这样需修改smtp服务器的信息,不同smtp 服务器的端口不一样,在登录对应邮箱后在帮助页面查询到
my $smtp_server='smtp.163.com';
my $port=465;
my $AuthUser='xxx@163.com';
my $AuthPass='password';
my $sender='xxx@163.com';
my $receiver='xxx@qq.com';
my $smtp;
$smtp = Net::SMTP::SSL->new($smtp_server, Port=>$port) or die "Can't connect";
$smtp->auth($AuthUser, $AuthPass) or die "Can't authenticate:".$smtp->message();
$smtp->mail($sender) or die "Error:".$smtp->message();
$smtp->to($receiver) or die "Error:".$smtp->message();
$smtp->data() or die "Error:".$smtp->message();
$smtp->datasend($msg->as_string) or die "Error:".$smtp->message();
$smtp->dataend() or die "Error:".$smtp->message();
$smtp->quit() or die "Error:".$smtp->message();
print("send mail to done! (FROM: $sender, TO: $receiver)\n");
需参考脚本开头的注释,完成 step1 perl模块及MIME-LITE-TT-HTML的安装:
setenv PACKAGESITE ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/8.1-RELEASE/packages/Latest/
pkg_add -r p5-MIME-Lite-HTML.tbz p5-MIME-Lite-TT-HTML.tbz p5-MIME-Base64.tbz p5-Net-SMTP-SSL.tbz p5-Net-SSLeay.tbz p5-IO-Socket-SSL.tbz p5-Authen-SASL.tbz
test.txt.tt 及 test.html.tt 为邮件内容模板,可自己定义,需要拷贝到脚本运行目录,
test.txt.tt 内容:
Hi [% first_name %],
This is the log of pfsense today: [% today %].
Thank you!
test.html.tt内容
<html>
<body>
<strong>Hi [% first_name %]</strong>,
<p>
This is the log of pfsense today: [% today %].
</p>
<p>
Thank you!
</p>
</body>
</html>
最后,修改上述两个脚本的权限为可执行,将调度脚本加入到定时计划任务里,定时执行:
#用指令添加:
crontab -e -u root
添加如下内容(触发时间自己定义):
30 3 * * * /bin/sh /root/mytask-daily.sh >> daily-task.log