Python+Nginx实现邮件POP、IMAP、SMTP代理配置介绍

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

说到Python,大家都知道,是在运维方面的管理人员需要掌握的一门技术,为什么这么说呢?在运维方面Python开发语言应用比较广,以致可以帮助管理员提高工作效率,具体我就不多少了,接着我们说说邮件代理,因为公司的邮箱系统是使用是IBM的Domino Lotus服务,如果对Lotus了解的都知道,Lotus是文件数据库类型的服务器类型,用户的所有邮箱数据库都是独立的xxx.nsf,而通过数据库模板xxx.ntf进行创建或者定时刷新数据,来保证数据库的额稳定性。而当用户数量多的话,就需要创建多台邮件服务器来承载用户访问了,那问题又来了,当有多台服务器的时候,不同的用户是创建在不同的服务器上的,这样一来不同的用户需要通过不同的服务器地址进行访问,这样对于管理员来说就不太方便管理,当然我们也有办法来解决虽然有多台不同的服务器,我们也可以使用带来将用户的访问信息通过代理服务器进行同一绑定访问。那什么代理可以做呢?我们在之前的文章中有介绍,是通过Perditon服务进行代理的,通过长期的研究,发现我们可以通过另外一种方法来实现同样的效果,那就是通过开发语言+Nginx进行配合实现代理POP、IMAP、SMTP的服务,以致让用户的访问域名进行统一。我们刚才有提到Nginx,我们大家都知道Nginx其实跟Apache类似,是一个web服务,而我们通过开发语言及Nginx是怎么实现的呢?其大概原理为:

获取Nginx的Http Requerst Header的用户和密码,然后通过开发程序连接到Domino的Ldap验证用户和密码的有效性,如果账户及密码有效,那就从Ldap中获取用户所在的服务器(Mailserver),然后将Auth-Status,Auth-Server,Auth-Port,添加到Http Response的Header中,具体还需要大家去官网查看详细说明,我们今天的介绍是Python+Nginx实现POP、IMAP、SMTP代理配置介绍,下一篇我们介绍Java+Nginx 实现POP、IMAP、SMTP代理配置介绍:具体见下:

我们在此安装了一台Centos7的操作系统,具体安装步骤就跳过了,

服务器配置信息:

Hostname:proxy.abc.com

IP:192.168.2.163

Role:Proxy Server

为我们首先是需要对新安装的操作系统进行配置修改;

Systemctl stop firewalld.service 停止防火墙服务

Systemctl disable firewalld.service 禁用防火墙随机启动

关闭selinux

Vim /etc/selinux/config

Setenforce 1 ==disabled

同时关闭不用的服务

Systemctl stop postfix 关闭系统自带的postfix邮箱服务

Systemctl disable postfix 禁用系统自带的postfix邮件服务

如果不禁用带系统在nginx下配置了SMTP的配置,nginx将会无法正常启动,会提示错误,错误的原意你是由于25端口已经被占用

clip_image002

个人习惯性的为了方便安装vim及wget插件:

1
Yum  install  vim

clip_image004

1
Yum  install  wget

clip_image006

然后修改计算机名

1
Hostnamectl  set - hostname  proxy.abc.com

clip_image008

reboot后即可看见修改后的计算机名

然后修改静态ip:

1
  vim /etc/sysconfig/network-scripts/ifcfg-eno16777984

clip_image010

1
Vim  /etc/sysconfig/network-script/ifcfg-eno16777984

clip_image012

修改dns

1
Vim  /etc/reolv .conf

clip_image014

然后我们ping www.baidu.com解析及正常出网是否正常

clip_image016

环境准备好后,我们就准备开始安装nginx了

在准备安装nginx之前,我们需要先通过命令确认系统本身是否自带了nginx,如果自带了,我们需要卸载之后安装最新的

1
2
Rpm -qa |  grep  nginx
Find -name nginx

clip_image017

系统没有自带nginx,那接下来我们就开始通过yum 来安装nginx

Yum install nginx

clip_image019

我们发现提示没有在线的安装包,所以我们需要先安装yum资源库,将nginx添加到yum资源舱中

1
2
3
Yum  install 
http: //nginx .org /packages/centos/7/noarch/RPMS/
nginx-release-centos-7-0.el7.ngx.noarch.rpm

两种方式都可以,我选择下面的一种,上面的是官网的repo

1
2
3
Yum  install 
http: //dl .fedoraproject.org /pub/epel/7/x86_64/e/
epel-release-7-5.noarch.rpm

clip_image021

clip_image023

repo仓库安装好后,我们就开始安装nginx了

1
Yum  install  nginx

clip_image025

clip_image027

接下来查看安装默认路径

1
2
/etc/nginx/nginx .conf
Find -name nginx

clip_image028

接下来我们要配置nginx的配置文件

1
Vim  /etc/nginx/nginx .conf

默认配置文件

clip_image030

我们为了方便需要将该配置文件内的内容全部清空,使用以下命令来完成

1
Echo > /etc/nginx/nginx .conf

清空nginx.conf内的内容

clip_image032

clip_image034

然后再次编辑该配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Vim  /etc/nginx/nginx .conf 添加以下代码,然后根据自己的环境修改代码内容保存即可
user nginx;
worker_processes 4;
pid  /var/run/nginx .pid;
events {
worker_connections 1024;
}
error_log  /var/log/nginx/error .log info;
mail {
server_name proxy. test .com;
auth_http http: //localhost :8000 /auth/ ;
imap_capabilities IMAP4rev1 UIDPLUS IDLE LITERAL+ QUOTA;
pop3_auth plain apop cram-md5;
pop3_capabilities LAST TOP USER PIPELINING UIDL;
smtp_auth login plain cram-md5;
smtp_capabilities  "SIZE 10485760"  ENHANCEDSTATUSCODES 8BITMIME DSN;
xclient off;
server {
listen 110;
protocol pop3;
proxy on;
proxy_pass_error_message on;
}
server {
listen 143;
protocol imap;
proxy on;
}
server {
listen 25;
protocol smtp;
proxy on;
}
}

粘贴保存

clip_image036

接下来设置nginx服务

1
2
3
Systemctl  enable  nginx.service nginx服务开启随机启动
Systemctl start nginx.service  nginx服务启动
Systemctl status nginx.service nginx服务运行状态

clip_image038

接下来我们查看运行端口状态

1
Netstat -anlpt 提示未找到命令

clip_image040

我们需要安装netstatl 的相关工具

1
Yum  install  –y net-tools

clip_image042

clip_image044

安装完成后,我们就可以运行

1
netstat  -anlpt

查看端口状态了

clip_image046

接下来就是安装python了

1
2
Python  install 的方式
Yum  install  python-ldap

clip_image048

clip_image050

1
Easy_install pip

clip_image052

1
Pip  install  Django

clip_image054

1
Django-admin startproject mailauth

clip_image055

1
2
3
Cd mailauth
Ls
Django-admin startapp mauth

clip_image057

1
Vim mailauth /setting .py

clip_image058

1
添加一行  'mauth'

, 然后保存退出

clip_image060

1
Vim mailauth /urls .py

clip_image061

添加一行url 然后保存退出

1
2
From mauth.views  import  auth
url(r '^auth/$' , auth),

clip_image063

1
Vim mauth /views .py

clip_image064

粘贴以下代码(根据自己的环境进行修改)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from django.shortcuts  import  render
from django.http  import  HttpResponse
import  ldap
import  socket
class DoLdapAct(object):
def __init__(self):
try:
user = request.META[ 'HTTP_AUTH_USER' ]
password = request.META[ 'HTTP_AUTH_PASS' ]
except KeyError:
response.write( 'user and pass Failuer' )
return  response
r_dict = dla.get_auth_server(user, password)
if  r_dict[ 'status' ]:
response[ 'Auth-Status' ] =  'OK'
response[ 'Auth-Server' ] = r_dict[ 'server' ]
if  request.META[ 'HTTP_AUTH_PROTOCOL' ] ==  'imap' :
response[ 'Auth-Port' ] = 143
elif  request.META[ 'HTTP_AUTH_PROTOCOL' ] ==  'pop3' :
response[ 'Auth-Port' ] = 110
response.write( 'OK' )
print( 'OK' )
return  response
else :
response[ 'Auth-Status' ] =  'Invalid login or password'
response[ 'Auth-Wait' ] = 3
response.write( 'Failure' )
return  response

clip_image066

添加保存后,我们需要启动python服务

1
2
Cd  /root/mailauth
. /manage .py runserver 0.0.0.0:8000 启动服务

clip_image068

然后我们修改hosts文件

1
Vim  /etc/hosts

添加domino解析地址

192.168.6.162 mail

clip_image070

我们同样在dns上添加一条关于proxy的解析地址,因为linux不会再dns上自动创建dns记录

clip_image072

clip_image074

添加后,我们就可以开始测试了

我们在domino上创建一个测试用户进行测试

1
2
Username :testuser password:123
curl -i -H  'Auth-User: testuser'  -H  'Auth-Pass: 123'  -H  'Auth-Protocol: pop3'  http: //192 .168.2.163:8000 /auth/

clip_image076

clip_image078

我们通过配置Outlook进行测试,通过

clip_image080

通过域名也测试通过


clip_image082

注:附件的格式为.7z格式,需要修改扩展名



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

相关文章
|
6天前
|
应用服务中间件 BI nginx
Nginx的location配置详解
【10月更文挑战第16天】Nginx的location配置详解
|
13天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
179 0
|
6天前
|
监控 应用服务中间件 测试技术
确保正则表达式在 Nginx 代理中的准确性和稳定性
【10月更文挑战第19天】总之,正则表达式在 Nginx 代理中具有重要作用,但要确保其准确性和稳定性需要付出一定的努力和关注。通过以上方法的综合运用,我们可以提高正则表达式配置的可靠性,为用户提供更好的服务体验。
|
3天前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
18 7
|
6天前
|
应用服务中间件 API nginx
使用正则表达式实现 Nginx 代理
【10月更文挑战第19天】在不断发展的互联网技术中,掌握正则表达式在 Nginx 代理中的应用是非常重要的。不断探索和实践,将有助于我们在实际工作中更好地运用这一技术,提升项目的质量和效率。
|
6天前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
12天前
|
前端开发 JavaScript 应用服务中间件
终极 Nginx 配置指南
本文介绍了Nginx的基本配置及其优化方法。首先,通过删除注释简化了Nginx的默认配置文件,使其更易于理解。接着,文章将Nginx配置文件分为全局块、events块和http块三部分进行详细解释。此外,还提供了如何快速上线网站、解决前端history模式404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离的具体配置示例。最后,附上了Nginx的基础命令,包括安装、启动、重启和关闭等操作。
|
16天前
|
负载均衡 应用服务中间件 nginx
Nginx的6大负载均衡策略及权重轮询手写配置
【10月更文挑战第9天】 Nginx是一款高性能的HTTP服务器和反向代理服务器,它在处理大量并发请求时表现出色。Nginx的负载均衡功能可以将请求分发到多个服务器,提高网站的吞吐量和可靠性。以下是Nginx支持的6大负载均衡策略:
62 7
|
14天前
|
缓存 前端开发 JavaScript
一、nginx配置
一、nginx配置
103 1
|
13天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
80 0