centos7 搭建SMTP简单邮件服务器 postfix+dovecot

归类于Linux 参与评论

第一:准备环境

1.硬件环境

在服务商处购买的虚拟主机一个:IP地址为:ip
win7客户端一台,安装有Foxmail(可自行下载最新版),测试用

2.linux系统环境

购买的虚拟主机,安装linux CentOS7版本

[root@vultr ~]# cat /etc/redhat-release //查看当前系统版本

截图如下:
当前系统版本

检查我们的服务器能否telnet通我们要发送的一些邮件服务商的端口,比如qq,163,gmail等,如果不通的话需要更换服务器,因为此服务器商将这些给拦截了,

[root@vultr ~]# telnet smtp.qq.com 25

正常的现象是:

01

我们需要开放我们需要的端口,端口有25(SMTP服务,用于发送邮件),110(pop3服务,用于接收邮件)143(imap服务,用于接收邮件)

开放端口,命令如下

[root@vultr ~]# firewall-cmd –add-port=25/tcp –permanent
[root@vultr ~]# firewall-cmd –add-port=110/tcp –permanent
[root@vultr ~]# firewall-cmd –reload

备注:
如果你只想用pop3服务,那么我们只需要打开110和25端口即可;
如果想用imap服务,还需要打开143端口;
如果我们使用了ssl的话,
pop3就需要开放我们的465(发件) 995(收件)端口
imap就需要开放我们的465(发件) 993(收件)端口

配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致

查看当前服务器主机名称

[root@vultr ~]# hostname

截图如下

04

设置主机名称为mail.dayuservice.com,既是mail.域名。命令如下

[root@vultr ~]# hostnamectl set-hostname mail.dayuservice.com

编辑主机名文件 /etc/hosts,命令如下

[root@vultr ~]# vi /etc/hosts

看到如下的文件界面

05

其中127.0.0.1 vultr.guest那行修改为127.0.0.1 mail.dayuservice.com(既修改为127.0.0.1 mail.域名),修改后,保存如下

06

reboot 重启一下服务器

[root@vultr ~]# reboot

再次查看当前服务器主机名,如果修改成功,如下:

07


第二:实验内容总览

一、DNS域名解析

二、安装postfix服务并配置,测试普通发信

三、安装dovecot服务并配置,测试普通收信

四、本地foxmail登录邮箱,收发信测试


第三:开始实验

一、DNS域名解析配置

我用的是dnspod.cn,添加域名dayuservice.com的解析如下:

1.添加一个二级域名指向服务器IP
2.添加一个MX记录到这个二级域名,优先级设为10
3.添加一个TXT记录,记录值为 v=spf1 mx ~all

DNS

二、安装postfix服务并配置,测试普通发信

在centos7里我们的postfix是系统自带的,但是centos7以前的版本是默认不带的, centos7版本以前自带的是sendmail,如果有sendmail先删除sendmail,再安装postfix,
删除sendmail,命令如下:

[root@mail ~]# yum remove sendmail

安装postfix命令如下 :

[root@mail ~]# yum install postfix -y

备注:
若postfix已安装好,则会支持这两个功能,若不支持,表示postfix未安装好;

验证是否支持cyrus dovecot功能

[root@mail ~]# postconf -a

验证支持显示结果如图:

1118

配置postfix相关文件

修改

[root@mail ~]# vi /etc/postfix/main.cf

修改内容如下:

# 取消注释,设置hostname
myhostname = mail.dayuservice.com
# 取消注释,设置域名
mydomain = dayuservice.com
# 取消注释
myorigin = $mydomain
# 默认是localhost,我们需要修改成all
inet_interfaces = all
# 推荐ipv4,如果支持ipv6,则可以为all
inet_protocols = ipv4
# 添加
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain# 取消注释,邮件保存目录
home_mailbox = Maildir/
# 添加
smtpd_banner = $myhostname ESMTP
# 添加到最后
# 规定邮件最大尺寸为10M
message_size_limit = 10485760
# 规定收件箱最大容量为1G
mailbox_size_limit = 1073741824
# SMTP认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

以上对应的对应的行数位置可能随着版本不同会有差异。

保存退出。

[root@mail ~]# postfix check //检查语法错误
[root@mail ~]# systemctl restart postfix //重启服务,使刚才修改的配置生效
[root@mail ~]# postconf -n //查看postfix的非默认并已经生效的配置

增加邮件测试账号

[root@mail ~]# groupadd mailusers //创建组mailusers给测试账号
[root@mail ~]# useradd -g mailusers -s /sbin/nologin testuser1 //创建testuser1用户只属于mailusers组,并不能登录系统
[root@mail ~]# passwd testuser1 //创建testuser1密码
[root@mail ~]# useradd -g mailusers -s /sbin/nologin testuser2 //创建testuser2用户只属于mailusers组,并不能登录系统
[root@mail ~]# passwd testuser2 //创建testuser2密码

创建测试用户 1

链接服务器的25端口,进行简单发信测试

[root@mail ~]# telnet mail.dayuservice.com 25 //链接成功开始写信
helo mail.dayuservice.com //声明本机的主机
mail from:admin@dayuservice.com //声明发件人地址
rcpt to:postservice@dayuservice.com //声明收件人地址
data //写正文
. //正文结束标记
quit //退出

测试发信

使用root查看testuser2用户是否收到刚才发送的邮件

[root@mail ~]# cd /home/testuser2/Maildir/new //访问邮箱testuser2对应的邮件保存目录
[root@mail new]# ls //查看该目录下的文件列表

新邮件

[root@mail new]# cat 1540964810.Vfd01I1f69eM643771.mail.dayuservice.com ///查看该文件

接收邮件

打开发现正是刚才用户testuser1发送给testuser2的邮件内容。

至此,发信服务设置成功。

三、安装dovecot服务并配置,测试普通收信

[root@mail new]#cd /root //回到root目录
[root@mail ~]# yum install -y dovecot //安装dovecot收信服务

安装之后,修改dovecot.conf

[root@mail ~]# vi /etc/dovecot/dovecot.conf

修改内容,并退出保存。

# 如果不使用IPv6,请修改为*
listen = *
#在主配置文件中的第48行,设置允许登录的网段地址,也就是说我们可以在这里限制只有来自于某个网段的用户才能使用电子邮件系统。如果想允许所有人都能使用,则不用修改本参数
login_trusted_networks = 192.168.10.0/24更改内容

修改文件10-auth.conf

vi /etc/dovecot/conf.d/10-auth.conf

修改内容如下,并退出保存.

# 取消注释并修
改 disable_plaintext_auth = no
# 添加修改
auth_mechanisms = plain login

修改文件10-mail.conf

vi /etc/dovecot/conf.d/10-mail.conf

修改内容如下,并退出保存。

# 取消注释并添
加 mail_location = maildir:~/Maildir

修改文件10-master.conf

vi /etc/dovecot/conf.d/10-master.conf

修改内容如下,退出并保存

# 取消注释并添加 # Postfix smtp验证
unix_listener /var/spool/postfix/private/auth {
mode = 0666
user = postfix
group = postfix
}

注意:如果我们没有使用ssl的话需要修改下面的文件10-ssl.conf。使用了则不需要。

vi /etc/dovecot/conf.d/10-ssl.conf

修改内容如下,退出并保存

# 将ssl的值修改
为 ssl = no

重启dovecot服务,使上述修改配置生效。

[root@mail ~]# systemctl restart dovecot

dovecot配置完成,开始收信验证测试

[root@mail ~]# telnet mail.dayuservice.com 110
user testuser2 //收件人登录
pass xxxxxx //邮箱密码
list //列表查看邮件
retr 1 //读取编号为1的邮件
quit //退出邮箱

收信

正确读取,测试验证成功。

四、win7系统上 foxmail登录邮箱,收发信测试

打开foxmail客户端,主菜单-账户管理-新建账户-手动设置,进入如下界面:

foxmail 1

分别填写

接收服务器类型pop3或则imap,我这里选填的是pop3服务

邮件账号testuser1

密码:创建用户的时候的密码

收发服务器都填写mail.dayuservice.com

如果使用ssl的话就勾选,不用不需要勾选

然后创建登录,往自己的邮箱发一封邮件看是否能正常接收,能正常接收并能正常回复邮件到我们搭建的邮箱账号,说明搭建邮件服务器搭建成功啦!!

给 Breazingforms 提交按钮添加 yandex 转化统计代码

归类于SEO & SEM 参与评论

1.在目录 /administrator/components/com_breezingforms/libraries/crosstec/classes/ 下找到相应表格采用的模板文件。
2.打开文件找到 echo ‘<button id=”bfSubmitButton” 这段代码

解决wordpress 分类文章详情页面随机rand图片不显示的问题

归类于wordpress 参与评论

分类详情页用到的文件模板是single.php,其中牵涉到问题部分的主要代码如下:

<div id=”titlep”><h1><?php the_title(); ?></h1></div>

<div id=”mynav2″>&nbsp;<a href=”<?php echo get_option(‘home’);?>/”>Home</a> »<?php gbc_category($idbok);?><a href=”<?php echo get_category_link($idbok)?>”><?php echo $idbname?></a></div>

<div id=”mge”></div>

<div id=”mge”></div>

<?php if(!in_category(‘Project’)){?>

<?php the_content(); ?>

<?php }else{ ?>

<?php echo showimglist(get_the_title(),get_the_content());?>

<?php }?>

<div id=”mge”></div>

showimglist(get_the_title(),get_the_content())这个函数牵涉到列表标题,列表描述和列表图片的显示,排查找到调用的函数在文件functions.php中,如下:

function showimglist($title,$content){

$content=trim($content);

if(substr($content,0,4) != ‘<h2>’) return $content;

preg_match_all(“/<h2>([sS ]*?)</p>/i”,$content,$match);

if(!$match[0]) return $content;

$content=””;

foreach($match[0] as $t){

preg_match(“/<hd>(.*?)</hd>/i”,$t,$m);

$alt=strtolower($m[1]);

$li=”<div class=”list”>”.show_rand_img($alt,1,”/rand/”).$t.”<a href=”#getinquiry” >Get Price</a>.</div> ”;

$content = $content.$li;

}

return $content;

}

function show_rand_img($alt=””,$num=1,$dir=”/rand/”){

$document_root=$_SERVER[“DOCUMENT_ROOT”];

$http_host=$_SERVER[‘HTTP_HOST’];

$imgdir=$document_root.$dir;

if(!file_exists($imgdir)) exit(“image error”);

$imgarr=scandir($imgdir);

if($num>count($imgarr)) $num=count($imgarr);

$re=””;

for($i=0;$i<$num;$i++){

$s=rand(0,count($imgarr));

if(!is_file($imgdir.$imgarr[$s])){$i–;continue;}

$re .= “<img src=”$dir$imgarr[$s]” alt=”$alt” class=”imglist”/>”;

}

return $re;

}

经调试得知$imgarr=scandir($imgdir);此行代码,不能正常获取目录文件,所以导致网页图片无法正常显示

问题出在哪里呢??

还是出在服务器环境的配置上,这是因为网站所在服务器禁用了php默认函数scandir

解决办法如下

1、找到php.ini的位置,如果你也是默认安装的话,路径应该是: /usr/local/php/etc/php.ini 也可以通过 http://你的域名/phpinfo.php查看到php.ini的路径;

2、然后用vi命令,或者ftp下载php.ini文件;

3、搜索disable_functions 函数,将其中的scandir去掉,文件位置如下图所示:

开启scandir函数

4、保存文件,如果用vi命令找到的,按esc,然后输入:wq! 保存即可,我是用ftp下载后修改的,再上传覆盖此文件;

5、最后需要重启服务器,在ssh下执行 /root/lnmp reload

到此,问题得以解决。

Exclude Mobile Apps from GDN

归类于Adwords 参与评论

https://support.google.com/adwords/answer/2454012?hl=zh-Hans
Simply exclude the placement called “adsenseformobileapps.com” from your list of placements.

1- Go to Particular Adgroup or Campaign
2- Click “Display Network” tab near to Dimensions
3- Click +Targeting Button
4- Click Adgroup/Campaign Exclusion then click Placement
5- Now in placement write or copy paste adsenseformobileapps.com and save it.

If you want to exclude particulate app from Display network then here are steps:

For “Display Network – All features” campaigns, you can exclude specific apps in the Shared library, under campaign exclusions. For those types of exclusions, the format is “adsenseformobileapps.com/” followed by the app ID for iOS apps, or the package name for Android apps. For example:

To exclude the iOS LabPixies LineUp 2 app, you’d enter adsenseformobileapps.com/1-476954712.
To exclude the Android LabPixies ColorDrips game app, you’d enteradsenseformobileapps.com/com.labpixies.colordrips.

Linux 查询修改过的文件

归类于Linux 参与评论

查询当天修改过的文件
[root@book class]# find ./ -mtime -1 -type f -exec ls -l {} ;

查询过去30分钟内修改过的文件
[root@book class]# find ./ -mmin -30 -type f -exec ls -l {} ;

./ 这里是想查询的目录

Leverage Browser Caching

归类于LNMPA 参与评论

修改 /usr/local/nginx/conf/vhost/xxx.com.conf

//
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*.(js|css)?$
{
expires 12h;
}
//

改为:

//
location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
add_header Pragma public;
add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
}

location ~ .*.(js|css)?$
{
expires 30d;
add_header Pragma public;
add_header Cache-Control “public, must-revalidate, proxy-revalidate”;
}
//

建议用户更新Let’sEncrypt SSL证书续期规则

归类于Linux 参与评论

因Let’sEncrypt的certbot程序更新,参数发生些变化,可能导致SSL证书续期失败,建议8月23日前安装LNMP的用户更新一下crontab规则和lnmp管理脚本,自动更新命令:wget -O – http://soft.vpser.net/lnmp/ext/fix_renewssl.sh|bash

其他方法手动进行升级,执行:cd /tmp && wget http://soft.vpser.net/lnmp/lnmp1.4.tar.gz -O lnmp1.4.tar.gz && tar zxf lnmp1.4.tar.gz && cd lnmp1.4 && ./upgrade1.x-1.4.sh
升级lnmp管理脚本后再自行参考crontab教程,删除原certbot的规则,LNMP/LNMPA模式添加上0 3 */7 * * /bin/certbot renew –disable-hook-validation –renew-hook “/etc/init.d/nginx reload” ,LAMP模式添加上0 3 */7 * * /bin/certbot renew –disable-hook-validation –renew-hook “/etc/init.d/httpd restart”

手动更新的话建议再执行:/bin/certbot renew –disable-hook-validation –renew-hook “/etc/init.d/nginx reload” LAMP模式执行:/bin/certbot renew –disable-hook-validation –renew-hook “/etc/init.d/httpd restart” 看一下能否正常更新。

原文:https://lnmp.org/notice/fix-certbot-renew.html

OptiPNG, jpegoptim Linux 图片压缩工具

归类于Linux 参与评论

前言

网站中图片一直是储存和流量大户,在搬家的时候最能感受的出来了,一下子几百G的图片库真正人都傻掉。但还好现在还有图片压缩技术可以抢救一下,说不定一下子就是压缩除了十几个 G呢!

把图片库脱下来一张一张压缩那太傻了。在 Linux 系统下,我们完全可以做到开个命令喝杯咖啡就坐享其成了。

介绍

OptiPNG 是一个能无损压缩 PNG 的工具,也可以将非 PNG 的档案(BMP, GIF, PNM and TIFF) 转换成压缩过后的PNG。

jpegoptim 是一个用来优化 JPEG 文件的工具,提供无损的优化(基于哈夫曼表),同时也可设置质量因子实现的有损优化。

安装

RHEL、CentOS

yum install optipng jpegoptim
Debian、Ubuntu

apt-get install optipng jpegoptim
MAC

brew install optipng jpegoptim
使用

假设,我们的网站所在物理路径是:/home/mf8/mf8.biz/public_html

进入网站目录 cd /home/mf8/mf8.biz/public_html 压缩 PNG

find . -iname ‘*.png’ -print0 | xargs -0 optipng -o7 -preserve
之后,所有的目录下,包括子目录中的所有 png 文件都会被压缩,但是因为这货会参考多种方案后选择最佳方案来压缩,所以耗时贼 TM 长。100M 的图片我压缩花了两个小时。

压缩 JPG

find . -iname ‘*.jpg’ -print0 | xargs -0 jpegoptim –strip-all –preserve –totals –all-progressive
同样压缩所有 jpg 文件,但是速度会快很多。加入 –max=90 参数可以自定义有损压缩的大小,例如这里就是提供 90% 的有损压缩,来提高压缩效率。

进阶

10 2 * * * echo `date` >> /root/optipng.log && find /var/www/ -mtime -2 -iname ‘*.png’ -print0 | xargs -0 optipng -o7 -log /root/optipng.log -preserve && echo `date` >> /root/jpegoptim.log && find /var/www/ -mtime -2 -iname ‘*.jpg’ -print0 | xargs -0 jpegoptim –max=90 –preserve –totals –all-progressive >> /root/jpegoptim.log
输入这个,我们就会在凌晨两点对 /var/www 下的所有 png 和 jpg 文件,并在 /root 目录下生成目录。

注意点!

压缩这门手艺,极其占用 CPU 资源,几乎都是 100% 资源占用的。建议在访客最少的时候进行压缩,且不要在共享内核的机器上使用本软件,你肯定会因为 CPU 占用过高而被停号的!

当然了,我们可以用 cpulimit 来限制相关压缩软件的 CPU 利用率~ 教程:https://www.mf8.biz/cpulimit-make-none-suspend/

linux下查看最消耗CPU、内存的进程

归类于Linux 参与评论

1.CPU占用最多的前10个进程:

ps auxw|head -1;ps auxw|sort -rn -k3|head -10

2.内存消耗最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k4|head -10

3.虚拟内存使用最多的前10个进程

ps auxw|head -1;ps auxw|sort -rn -k5|head -10

4.也可以试试

ps auxw –sort=rss

ps auxw –sort=%cpu

5.看看几个参数含义

%MEM 进程的内存占用率

MAJFL is the major page fault count,

VSZ 进程所使用的虚存的大小

RSS 进程使用的驻留集大小或者是实际内存的大小(RSS is the “resident set size” meaning physical memory used)

TTY 与进程关联的终端(tty)

串行端口终端(/dev/ttySn)

伪终端(/dev/pty/)

控制终端(/dev/tty)

控制台终端(/dev/ttyn, /dev/console)

虚拟终端(/dev/pts/n)

STAT 检查的状态:进程状态使用字符表示的,如R(running正在运行或准备运行)、S(sleeping睡眠)、I(idle空闲)、Z (僵死)、D(不可中断的睡眠,通常是I/O)、P(等待交换页)、W(换出,表示当前页面不在内存)、N(低优先级任务)T(terminate终止)、W has no resident pages

D不可中断 Uninterruptible sleep (usually IO)

R正在运行,或在队列中的进程

S处于休眠状态

T停止或被追踪

Z僵尸进程

W进入内存交换(从内核2.6开始无效)

X死掉的进程

<高优先级 N低优先级 L有些页被锁进内存 s包含子进程 +位于后台的进程组; l多线程,克隆线程 multi-threaded (using CLONE_THREAD, like NPTL pthreads do)

常用通配符搜索命令

归类于Office 参与评论

以下查找命令供参考:
所有小写英文字母 [a-z]
所有大写英文字母 [A-Z]
所有西文字符 [^1-^127]
所有中文汉字和中文标点 [!^1-^127]
所有中文汉字(CJK统一字符) [一-龥] or [一-﨩]
所有中文标点 [!一-龥^1-^127]
所有非数字字符 [!0-9]

使用以上查找命令,必须点查找对话框的高级(2007以上版本)或更多(2003),勾选“使用通配符”。

顶部
Protected with SiteGuarding.com Antivirus