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

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

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


说到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端口已经被占用


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

   

Yum install vim

Yum install wget

然后修改计算机名

Hostnamectl set-hostname proxy.abc.com

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

然后修改静态ip:

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

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

修改dns

Vim /etc/reolv.conf


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


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

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


1

2

   

Rpm -qa | grep nginx

Find -name nginx

   



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

Yum install nginx


我们发现提示没有在线的安装包,所以我们需要先安装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

   




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


1

   

Yum install nginx

   




接下来查看安装默认路径


1

2

   

/etc/nginx/nginx.conf

Find -name nginx

   



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


1

   

Vim /etc/nginx/nginx.conf

   


默认配置文件


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


1

   

Echo >/etc/nginx/nginx.conf

   


清空nginx.conf内的内容



然后再次编辑该配置文件   

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;

}

}

   


粘贴保存


接下来设置nginx服务


1

2

3

   

Systemctl enable nginx.service nginx服务开启随机启动

Systemctl start nginx.service  nginx服务启动

Systemctl status nginx.service nginx服务运行状态

   



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


1

   

Netstat -anlpt 提示未找到命令

   



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


1

   

Yum install –y net-tools

   




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


1

   

netstat -anlpt

   


查看端口状态了


接下来就是安装python了


1

2

   

Python install的方式

Yum install python-ldap

   





1

   

Easy_install pip

   




1

   

Pip install Django

   




1

   

Django-admin startproject mailauth

   




1

2

3

   

Cd mailauth

Ls

Django-admin startapp mauth

   




1

   

Vim mailauth/setting.py

   




1

   

添加一行 'mauth'

   


, 然后保存退出



1

   

Vim mailauth/urls.py

   



添加一行url 然后保存退出


1

2

   

From mauth.views import auth

url(r'^auth/$', auth),

   




1

   

Vim mauth/views.py

   



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


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

   



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


1

2

   

Cd /root/mailauth

./manage.py runserver 0.0.0.0:8000 启动服务

   



然后我们修改hosts文件


1

   

Vim /etc/hosts

   


添加domino解析地址

192.168.6.162 mail


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



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

我们在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/

   




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


通过域名也测试通过



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

本文出自 “高文龙” 博客,请务必保留此出处http://gaowenlong.blog.51cto.com/451336/1676523



本文转自 Tenderrain 51CTO博客,原文链接:http://blog.51cto.com/tenderrain/1959882

相关文章
|
3月前
|
机器学习/深度学习 算法 机器人
使用 Python TorchRL 进行多代理强化学习
本文详细介绍了如何使用TorchRL库解决多代理强化学习(MARL)问题,重点讨论了在多代理环境中应用近端策略优化(PPO)。通过使用VMAS模拟器,该文展示了如何在GPU上并行训练多机器人系统,使其在避免碰撞的同时到达目标。文章涵盖了依赖项安装、PPO原理、策略与评论家网络设计、数据收集及训练循环,并强调了TorchRL在简化开发流程、提升计算效率方面的优势。无论是集中式还是分布式评论家配置,TorchRL均能有效支持复杂的MARL研究与实践。
59 5
使用 Python TorchRL 进行多代理强化学习
|
27天前
|
监控 应用服务中间件 测试技术
确保正则表达式在 Nginx 代理中的准确性和稳定性
【10月更文挑战第19天】总之,正则表达式在 Nginx 代理中具有重要作用,但要确保其准确性和稳定性需要付出一定的努力和关注。通过以上方法的综合运用,我们可以提高正则表达式配置的可靠性,为用户提供更好的服务体验。
|
3月前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
54 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
3月前
|
负载均衡 网络协议 Unix
Nginx七层(应用层)反向代理:SCGI代理scgi_pass篇
Nginx七层(应用层)反向代理:SCGI代理scgi_pass篇
64 1
|
14天前
|
前端开发 应用服务中间件 定位技术
|
9天前
|
负载均衡 前端开发 JavaScript
Nginx 代理多服务
以上是 Nginx 代理多服务的几种常见方式,在实际应用中,可以根据具体的业务需求和系统架构选择合适的代理方式,并结合其他 Nginx 的功能和配置来优化和完善系统的性能和功能。
|
1月前
|
负载均衡 应用服务中间件 Linux
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
这篇博客文章详细介绍了Nginx的下载、安装、配置以及使用,包括正向代理、反向代理、负载均衡、动静分离等高级功能,并通过具体实例讲解了如何进行配置。
150 4
nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件,很全
|
27天前
|
应用服务中间件 API nginx
使用正则表达式实现 Nginx 代理
【10月更文挑战第19天】在不断发展的互联网技术中,掌握正则表达式在 Nginx 代理中的应用是非常重要的。不断探索和实践,将有助于我们在实际工作中更好地运用这一技术,提升项目的质量和效率。
|
27天前
|
缓存 负载均衡 应用服务中间件
Nginx 实现一个端口代理多个前后端服务
【10月更文挑战第19天】Nginx 的强大功能不仅限于此,它还可以与其他技术和工具相结合,为我们的应用提供更强大的支持和保障。在不断发展的互联网时代,掌握 Nginx 的使用技巧将为我们的工作和生活带来更多的便利和效益。
|
1月前
|
存储 缓存 监控