linux下smtp服务器搭建

linux下smtp服务器搭建

  • postfix安装和配置
    • postfix安装
    • 安装sasldb、saslauthd
    • 配置postfix并启用smtp
    • 查看postfix配置文件的所有配置项
    • sasldb2建立smtp用户和密码
    • 测试postfix配置文件并启动postfix
  • 配置DNS服务器
    • 编辑主配置文件
    • 修改区域配置文件
    • 编辑区域数据配置文件
    • 创建反向区域数据配置文件
    • 启动DNS服务
    • 测试smtp服务器是否正常使用
  • client端配置发件人
    • 配置smtp服务器和默认发件人
    • 配置DNS
    • 发件命令

postfix安装和配置

参考 https://blog.jjonline.cn/linux/185.html 作者:晶晶
使用postfix搭建smtp服务器,主要用于测试防火墙垃圾邮件识别

postfix安装

#开始yum安装前 更换yum源 建议aliyun源 参考:https://blog.jjonline.cn/linux/171.html
#备份原先的yum源信息

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

#从阿里云镜像站下载centos6的repo

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo

#最后yum重新生成缓存

yum makecache
yum remove sendmail #卸载sendmail
yum remmove postfix #卸载postfix
yum install postfix #重新安装postfix

#yum安装会自动建立postfix用户组和用户名

yum install crontabs #因为卸载postfix的时候系统定时服务也被卸载 核心服务 也同步安装下

安装sasldb、saslauthd

yum install cyrus-sasl* #提供smtp的虚拟账户和密码服务

#sasldb2包含在saslauthd当中 就不要再问为什么没有安装sasldb2的shell代码了
#当前mta查看
alternatives --display mta

#设置mta
/usr/sbin/alternatives --set mta /usr/sbin/sendmail.postfix

#再次查看mta
alternatives --display mta

#输出结果最后一行会有类似如下的提示:mta即设置完毕
#Current `best’ version is /usr/sbin/sendmail.postfix.

postfix开机启动设置,因为采用sasldb2提供postfix的smtp账户和密码,无需saslauthd服务运行,故而saslauthd服务不用启动—看吧,使用sasldb2还减少资源占用:

chckconfig postfix on

配置postfix并启用smtp

postfix配置文件在/etc/postfix目录下,主要修改的配置文件为:/etc/postfix/main.cf

vi /etc/postfix/main.cf
#vi编辑postfix配置文件
#找到如下配置项酌情修改

myhostname = mail.jjonline.com.cn
#postfix主机名,修改成你的域名 此项需要添加A记录并指向postfix所在主机公网IP

mydomain = jjonline.com.cn
#域名

myorigin = $mydomain
#本机postfix的邮箱域名后最 此项默认值使用myhostname
#此处使用了前项mydomain 也就是说本机postfix邮箱后缀为:@jjonline.com.cn

inet_interfaces = localhost
#指定postfix系统监听的网络接口 此处必须是localhost或127.0.0.1或内网ip
#若注释或填入公网ip 服务器的25端口将对公网开放
#默认值为all 即监听所有网络接口
#此项指定localhost后 本机postfix就只能发邮件不能接收邮件

inet_protocols = ipv4
#网络协议 ipv6在国内还不怎么普及 这里ipv4即可

mydestination = $myhostname, localhost.$mydomain, localhost
#指定postfix接收邮件时收件人的域名,换句话说,也就是你的postfix系统要接收什么样的邮件。
#此项配置中$myhostname表示postfix接受@$myhostname为后缀的邮箱的邮件 逗号分割支持指多项
 #此项默认值使用myhostname

local_recipient_maps =
#此项制定接收邮件的规则 可以是hash文件 此项对本次配置无意义 可以直接注释

mynetworks = 42.121.107.189, 10.200.9.xxx, 127.0.0.1
#指定你所在的网络的网络地址
#鄙人生产服务器公网IP42.121.107.189、内网ip10.200.9.xxx(第四位做了隐藏)、以及localhost的ip127.0.0.1
#请依据实际情况修改
#如果配置不正确发送邮件时会报Relay access denied,配置信任的接收的ip地址

smtpd_banner = JJonline.Cn ESMTP Server
#指定MUA通过smtp连接postfix时返回的header头信息
#原始配置附带有postfix版本号 去掉即可,此项酌情处理

#SMTP Config
#有的配置文件中没有显示下面的命令,手打敲上即可
broken_sasl_auth_clients = ye
#指定postfix兼容MUA使用不规则的smtp协议--主要针对老版本的outlook 此项对于本次配置无意义

smtpd_client_restrictions = permit_sasl_authenticated
#指定可以向postfix发起SMTP连接的客户端的主机名或ip地址
#此处permit_sasl_authenticated意思是允许通过sasl认证(也就是smtp链接时通过了账号、密码效验的用户)的所有用户

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
#发件人在执行RCPT TO命令时提供的地址进行限制规则 此处照搬复制即可

smtpd_sasl_auth_enable = yes
#指定postfix使用sasl验证 通俗的将就是启用smtp并要求进行账号、密码效验

smtpd_sasl_local_domain = $mydomain
#指定SMTP认证的本地域名 本次配置可以使用 smtpd_sasl_local_domain = '' 或干脆注释掉 默认为空

smtpd_sasl_security_options = noanonymous
#取消smtp的匿名登录 此项默认值为noanonymous smtp若能匿名登录危害非常大 此项请务必指定为noanonymous

message_size_limit = 5242880
#指定通过postfix发送邮件的体积大小 此处表示5M

smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,defer_unauth_destination
#防止出现Relay access denied报错

查看postfix配置文件的所有配置项

postconf #不带任何命令参数 即可输出所有postfix配置项以及默认值

sasldb2建立smtp用户和密码

某种意义上来讲:smtp的账户密码建立也就是建立邮箱账户(类似[email protected]的邮箱地址)。

#配置postfix启用sasldb2作为smtp的账号秘密效验方式
#编辑通过sasl启用smtp账号密码效验的配置

vi /etc/sasl2/smtpd.conf #vi写入或编辑内容如下:

 pwcheck_method: auxprop
 auxprop_plugin: sasldb
 mech_list: plain login CRAM-MD5 DIGEST-MD5

#这里需要注意的是:这个配置文件的位置是64位机器上的,32位机器应该在:/usr/lib/sasl2/smtpd.conf

#创建smtp账号

saslpasswd2 -c -u postconf -h mydomain test #回车会要求输入密码,连续两次
#表示创建test@$mydomain的邮箱账号(也是smtp的账号)和密码
#本例就是创建[email protected]账号和密码
#此处注意的是smtp登录用的账号并不是单纯的用户名 而是整个邮箱地址字符串
#假设此处设置的smtp账号[email protected]密码为test123 下方测试时要用到

#查看sasldb2的用户和密码

sasldblistusers2
#此命令进用户查看sasldb的用户情况
#此命令回车后会输出诸如这样的内容:[email protected]: userPassword

#每次添加smtp用户完毕之后需重启postfix或reload

测试postfix配置文件并启动postfix

#测试postfix配置文件
service postfix check
#没有问题的话会返回着色[ok]字样
#启动postfix
service postfix start
#设置postfix开机启动
chkconfig postfix on
#更改sasldb2数据的权限,让postfix可以读取
chmod 755 /etc/sasldb2

配置DNS服务器

参考https://blog.51cto.com/12227558/2074095 作者:0行云流水0
#安装DNS服务
yum install bind -y

编辑主配置文件

#主要修改
listen-on port 53 { 10.180.X.X; };#修改自己DNS的ip,这里是10.180.X.X的ip,为linux的管理ip

options {
    listen-on port 53 { 10.180.X.X; };
    listen-on-v6 port 53 { ::1; };
    directory     "/var/named";
    dump-file     "/var/named/data/cache_dump.db";
    statistics-file "/var/named/data/named_stats.txt";
    memstatistics-file "/var/named/data/named_mem_stats.txt";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { any; };

#检查语法错误,没有提示表示没有语法错误
named-checkconf

修改区域配置文件

vi /etc/named.rfc1912.zones
#根据自己实际拓扑配置,这里的linux pc为多网卡pc,根据拓扑需要因此配置的ip为其他网卡的ip
#这里的域名为上面smtp服务器域名
#下面配置请手动自己添加

zone "jjonline.com.cn" IN {
         type master;
         file "jjonline.com.cn.zone";
};
zone "44.60.45.209.in-addr.arpa"{#注意这里的ip为反向ip,实际的ip为209.45.60.44
         type master;
         file "jjonline.com.cn.local";
};

#检查语法错误,没有提示表示没有语法错误
named-checkconf

编辑区域数据配置文件

cd /var/named
cp -p named.localhost jjonline.com.cn.zone
#创建正向区域数据配置文件(注意,由于我是复制另一个样式文件,复制文件时必须加“-P”,表示复制过来的时候文件权限保持不变)

#编辑正向区域数据配置文件
vi jjonline.com.cn.zone
#手动修改NS MX和IN A三条,注意域名后面有一个点

$TTL 1D
@      IN SOA    @ rname.invalid. (
                    0    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
    NS    mail.jjonline.com.cn.
    MX 10   mail.jjonline.com.cn.
mail    IN A    209.45.60.44

创建反向区域数据配置文件

cp -p named.localhost jjonline.com.cn.local
vi jjonline.com.cn.local
#手动修改NS MX和PTR三条,注意域名后面有一个点

$TTL 1D
@    IN SOA    ly6118.com.cn. rname.invalid. (
                    0    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
    NS    mail.jjonline.com.cn.
    MX 10   mail.jjonline.com.cn.
10      PTR     mail.jjonline.com.cn.

#检查语法错误,没有提示表示没有语法错误
named-checkconf

启动DNS服务

#启动命令
systemctl start named

#设置开机启动
systemctl enable named

#设置服务器域名
vi /etc/resolv.conf

原本配置域名为114.114.114.114
把新建的DNS服务器域名添加到第一条,不然解析不了,不影响其他正常上网活动

nameserver 10.180.X.X
nameserver 114.114.114.114

#解析域名
nslookup mail.jjonline.com.cn
#能够正常解析出域名和ip即可

测试smtp服务器是否正常使用

telnet mail.jjonline.com.cn 25

#可以通过查看mail日志确定是否发送成功
vi /var/log/maillog

client端配置发件人

client端仍然使用linux pc,也可以使用windows 直接telnet mail.jjonline.com.cn 25注意要配置域名解析
这里client端使用mailx
参考https://blog.csdn.net/liang19890820/article/details/53115334 作者:一去丶二三里
#安装mailx
yum install -y mailx

配置smtp服务器和默认发件人

#smtp协议是邮件发件协议,所有发出去的邮件都会先经过smtp server,然后再转发给对应的收件服务器,再转发给对应的收件人

vi /etc/mail.rc
#在文件末尾添加以下信息

set bsdcompat
set from=test@jjonline.com.cn
set smtp=mail.jjonline.com.cn
set smtp-auth-user=test@jjonline.com.cn
set smtp-auth-password=*******
set smtp-auth=login

配置DNS

vi /etc/resolv.conf
在第一条添加
nameserver 10.180.X.X
#ip为之前smtp server搭建的DNS服务器IP,要确保路由可达,不然很有可能解析不出来smtp server的域名

发件命令

#其中 echo 后面的是邮件的正文
echo “邮件正文” | mail -s “邮件主题” [email protected]
#以文件 file.txt 的内容为邮件正文发送
cat file.txt | mail -s “邮件主题” [email protected]

#这里发送简单邮件
echo “this is a test mail,thks” | mail -v -s “test mail” [email protected]

#在smtp server上通过查看日志可以看到是否发送成功
#要想在126等邮箱中收到可以参考https://www.cnblogs.com/ilanni/p/5294611.html

#本次smtp server搭建主要是用于测试经过防火墙能否识别垃圾邮件,由于大多商用邮件服务器比如126等都有反垃圾邮件功能,因此这里不关注是否收件人是否收到邮件,主要关注发件人群发邮件,经过防火墙被识别为垃圾邮件,并阻断发件人和smtp server之间的连接。

你可能感兴趣的:(smtp)