菜鸟学Linux 第061篇笔记 postfix配置,pop3

本文涉及的产品
.cn 域名,1个 12个月
简介:

菜鸟学Linux 第061篇笔记 postfix配置,pop3



SMTP --> SSMTPS

ESMTP 


POP3: Post Office Protocol v3

IMAP4: Internet Mail Access Protocol


SASL: Simple Authentication Secure Layer

v1, v2


MDA: Mail Delivery Agent

procmail, maildrop


MUA: Mail User Agent

mutt, mail


MTA: Mail Transfer Agent

sendmail(主流地位), qmail, exim

 postfix(流行,模块化设计) master(/etc/postfix/master.cf)

  (/etc/postfix/main.cf)

 postfix -d(默认选项) -n(修改选项) -M(支持查找表类型) -A(客户端可用SASL插件)

   -a(服务器端支持的SASL插件类型) 



SMTP:

helo

mail from

rcpt to

data 

.

quit



tom@a.org --> c.com (MX) --> Jerry@b.net


Mail Relay:




为postfix提供service 脚本

#!/bin/bash

#

# postfix      Postfix Mail Transfer Agent

#

# chkconfig: 2345 80 30

# description: Postfix is a Mail Transport Agent, which is the program \

#              that moves mail from one machine to another.

# processname: master

# pidfile: /var/spool/postfix/pid/master.pid

# config: /etc/postfix/main.cf

# config: /etc/postfix/master.cf


# Source function library.

. /etc/rc.d/init.d/functions


# Source networking configuration.

. /etc/sysconfig/network


# Check that networking is up.

[ $NETWORKING = "no" ] && exit 3


[ -x /usr/sbin/postfix ] || exit 4

[ -d /etc/postfix ] || exit 5

[ -d /var/spool/postfix ] || exit 6


RETVAL=0

prog="postfix"


start() {

# Start daemons.

echo -n $"Starting postfix: "

        /usr/bin/newaliases >/dev/null 2>&1

/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"

RETVAL=$?

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix

        echo

return $RETVAL

}


stop() {

  # Stop daemons.

echo -n $"Shutting down postfix: "

/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"

RETVAL=$?

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix

echo

return $RETVAL

}


reload() {

echo -n $"Reloading postfix: "

/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"

RETVAL=$?

echo

return $RETVAL

}


abort() {

/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"

return $?

}


flush() {

/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"

return $?

}


check() {

/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"

return $?

}


restart() {

stop

start

}


# See how we were called.

case "$1" in

  start)

start

;;

  stop)

stop

;;

  restart)

stop

start

;;

  reload)

reload

;;

  abort)

abort

;;

  flush)

flush

;;

  check)

check

;;

  status)

   status master

;;

  condrestart)

[ -f /var/lock/subsys/postfix ] && restart || :

;;

  *)

echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"

exit 1

esac


exit $?


# END


为此脚本赋予执行权限:

# chmod +x /etc/rc.d/init.d/postfix


将postfix服务添加至服务列表:

# chkconfig --add postfix


设置其开机自动启动:

# chkconfig postfix on


使用此脚本重新启动服务,以测试其能否正常执行:

# service postfix restart





postfix配置

1. 将主机名配置为name.域名

例 mail.mysky.com

2. 将DNS 的MX记录指向mail 服务器


验证MX记录和PTR记录是否设置正确

dig -t MX mysky.com @192.168.11.122

dig -x 192.168.11.122 @192.168.11.122

(说明一下我因为是在做测试所以邮件服务器和DNS服务器装在一台机器上)


3. /etc/postfix/main.cf  配置文件

(此配置文件里允许使用$parameter 引用相应参数的值)

启用如下选项

myhostname = mail.mysky.com

mydomain = mysky.com

myorigin = $mydomain

mydestination = $mydomain, $myhostname, localhost, ns.$mydomain

mynetworks = 192.168.11.0/24, 127.0.0.0/8

(注意原先这几项都是前边加#号的,后边的参数自行定义)


说明:

myhostname  参数指定运行postfix邮件系统的主机的主机名,

默认情况下,其值被设定为本地机器名;

mydomain 参数指定您的域名,默认情况下,

 postfix将myhostname的第一部分删除而作为mydomain的值;

myorigin 参数用来指明发件人所在的域名,即做发件地址伪装;

mydestination 参数指定postfix接收邮件时收件人的域名,

  即您的postfix系统要接收到哪个域名的邮件;

mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户

   是远程的还是本地的,如果是本地网络用户则允许其访问;

(配置完成后即可正常发送邮件)





配置邮件接收服务器(pop3, imap4)

MRA Mail Retrival Agent:cyrus-imap, dovecot

pop3 110/tcp

imap4 143/tcp

以明文方式工作



邮箱格式:

mbox 一个文件存储所有邮件

maildir 一个文件存储一封邮件,所有邮件存储在一个目录中;



dovecot rpm包依赖mysql客户端 

SSL (Secure Socket Layer)

IMAP (Internet Message Access Protocol)

支持四种协议:pop3, imap4, pops, imaps


安装 dovecot 

# yum install dovecot


配置文件/etc/dovecot.conf

将protocol选项的#去掉,保留 imap, pop3

#protocols = imap imaps pop3 pop3s(原型)

protocols = imap pop3


开启dovecot 

# service dovecot start


检查dovecot 是否正常工作(查看监听端口是否打开)

# netstat -tnlp | grep dovecot



测试可否接收邮件

telnet mail.mysky.com 110

USER username

PASS password

LIST (列出邮件)

RETR number (Retrieval 取回)


(至此我们的邮件服务器即可简单的接收和发送邮件,但无认证功能)




为邮件服务器实现用户认证功能


1、启动sasl, 启动sasl服务

/etc/rc.d/init.d/saslauthd (启动脚本)

/etc/sysconfig/saslauthd (配置文件)


saslauthd -v (显示当前主机saslauthd服务所支持的认证机制,默认为pam)


配置其配置文件/etc/sysconfig/saslauthd

将MECH=pam 改为 MECH=shadow


启动sasl服务

# service saslauthd start

设置为开机启动

# chkconfig saslauthd on

检查是否开机启动

# chkconfig --list saslauthd


测试sasl是否可以进行用户认证

testsaslauthd -u username -p password

(注意这里的username和password是存在于shadow文件中的用户)

例如:(这个是我的主机里的用户)

 # testsaslauthd -u tomcat -p tomcat

 0: OK "Success."


2、使postfix配置sasl认证

如果只有postfix软件,默认客户端只要可以和安装postfix服务器连接即可发送邮件,

无论你mail地址是什么,要发往哪里,都给中继,而加上sasl认证机制后即可控制

postfix为哪些用户或者IP进行中继


查看postfix可用SASL服务器插件类型

postconf -a


(postfix编译之前确保已经安装cyrus-sasl-devel和cyrus-sasl-plain)


控制smtp中继功能

connection smtpd_client_restrictions = check_client_access hash:/PATH

helo smtpd_helo_restrictions = check_helo_access hash:/PATH

mail from smtpd_sender_restrictions = check_sender_access hash:/PATH

rcpt to  smtpd_recipient_restrictions = check_recipient_access hash:/PATH

permit_mynetworks, reject_unauth_destination 这两项必须添加

data smtpd_data_restrictions = check_data_access hash:/PATH



实现示例1


这里以禁止192.168.11.2这台主机通过工作在192.168.11.122上的postfix服务发送邮件为例演示说明其实现过程。访问表使用hash的格式。


(1)首先,编辑/etc/postfix/access文件,以之做为客户端检查的控制文件,在里面定义如下一行:

172.16.100.200 REJECT


(2)将此文件转换为hash格式

# postmap /etc/postfix/access


(3)配置postfix使用此文件对客户端进行检查

编辑/etc/postfix/main.cf文件,添加如下参数:

smtpd_client_restrictions = check_client_access hash:/etc/postfix/access


(4)让postfix重新载入配置文件即可进行发信控制的效果测试了。

# service postsfix {reload|restart}





真正设置postfix认证


#vim /etc/postfix/main.cf

去除mynetworks = 里的192.168.11.0/24 只保留127.0.0.0/8

添加以下内容:

############################CYRUS-SASL############################

broken_sasl_auth_clients = yes

smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination

smtpd_sasl_auth_enable = yes

smtpd_sasl_local_domain = $myhostname

smtpd_sasl_security_options = noanonymous

smtpd_sasl_path = smtpd

smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!



# vim /usr/lib/sasl2/smtpd.conf

添加如下内容:

pwcheck_method: saslauthd

mech_list: PLAIN LOGIN


让postfix重新加载配置文件

#/usr/sbin/postfix reload



# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

220 Welcome to our mail.mysky.com ESMTP,Warning: Version not Available!

ehlo mail.mysky.com

250-mail.mysky.com

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH PLAIN LOGIN

250-AUTH=PLAIN LOGIN               (请确保您的输出以类似两行)

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN



验证是否是只有shadow里有的用户才可能进行登录 (这里没研究明白用时2天待以后处理)

说是更换版本,,,可是我已经最新版本了!!!!

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1886452如需转载请自行联系原作者


Winthcloud

相关文章
|
2月前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
176 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
3天前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
57 7
|
1月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
1月前
|
缓存 资源调度 安全
深入探索Linux操作系统的心脏——内核配置与优化####
本文作为一篇技术性深度解析文章,旨在引领读者踏上一场揭秘Linux内核配置与优化的奇妙之旅。不同于传统的摘要概述,本文将以实战为导向,直接跳入核心内容,探讨如何通过精细调整内核参数来提升系统性能、增强安全性及实现资源高效利用。从基础概念到高级技巧,逐步揭示那些隐藏在命令行背后的强大功能,为系统管理员和高级用户打开一扇通往极致性能与定制化体验的大门。 --- ###
73 9
|
1月前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
58 5
|
2月前
|
Java Linux 网络安全
NIFI在Linux服务区上的部署配置过程是什么?
【10月更文挑战第21天】NIFI在Linux服务区上的部署配置过程是什么?
80 2
|
2月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
116 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
625 3
|
网络协议 关系型数据库 MySQL
|
网络协议 安全 关系型数据库