Java+Nginx实现POP、IMAP、SMTP邮箱代理服务

Java+Nginx实现POP、IMAP、SMTP邮箱代理服务,第1张

Java+Nginx实现POP、IMAP、SMTP邮箱代理服务

Java+Nginx实现POP,IMAP,SMTP邮箱代理服务

上次介绍了Python+Nginx实现POP、IMAP、SMTP邮箱代理服务,今天介绍java+Nginx实现POP、IMAP、SMTP邮箱代理服务。我们这次使用的环境是Centos7,Java程序通过eclipse导出的war包在linux下的tomcat下执行。详情见下文:

环境介绍:

主机名:java.iternalsoft.com

IP:192.168.2.163

角色:代理服务器

*** 作系统:Centos7

我们通过以下命令修改新安装的服务器信息:

Hostnamectl set-hostname customname 修改计算机名 Systemctl stop firewalld.serice 停止防火墙服务 Systemctl disable firewall.service 禁止防火墙服务随机启动 Systemctl stop postfix 停止postfix服务 Systemctl disable postfix 禁用postfix服务随机启动 Vim /etc/selinux/config 修改selinux的状态为disabled

首先,我们安装Nginx服务。在安装Nginx之前,我们需要安装Nginx的仓库。

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

回购仓安装好之后,我们就开始安装nginx。

Yum install nginx

接下来,检查安装默认路径。

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

接下来,我们将配置nginx的配置文件。

Vim /etc/nginx/nginx.conf 默认配置文件

为了方便起见,我们需要清除空这个配置文件中的所有内容,并使用下面的命令来完成它。

Echo >/etc/nginx/nginx.conf 清空nginx.conf内的内容

但是,为了完成配置,我们建议先进行备份。

Cp /etc/nginx/nginx.conf /etc/nginx/cginx.conf.bak

然后跑。

echo > /etc/nginx/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 java.abc.com; auth_http http://localhost:8080/imail/index.jsp; 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服务。

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

下一步是安装java运行时环境(JDK),java运行时环境,并在这里安装tomcat。

首先,linux一般是JDK,有自己的java环境。

下一步是准备安装新的jdk文件。首先,让我们运行命令。

uname -a


检查系统版本以及数字是32还是64。

如果x86_64是64位 *** 作系统,如果不是,则是32位 *** 作系统。

下载jdk

http://www.Oracle.com/technetwork/Java/javase/downloads/JDK8-downloads-2133151.html

Wget  http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz?AuthParam=1433902875_8682334a55c7231fd0cb3cdbc5c9dcc9

我们通过ls查看下载的文件,然后需要解压。

Tar-zxvfjdk1.8.0……..

解压缩完成,不需要安装。

然后我们通过cd命令输入路径。

在/usr/创建java的目录,然后将解压的jdk移动到该目录 Cd /usr/ 进入usr目录

Mkdir java 创建java文件夹

然后我们可以移动jdk1.8…...将当前目录的文件解压缩到java目录。

Mv jdk1.8.xx /usr/java

Vim /etc/profile 编辑环境变量 添加环境变量 JAVA_HOME=/usr/java/jdk1.8.0_45    JRE_HOME=/usr/java/jdk1.8.0_45/jre    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib    export JAVA_HOME JRE_HOME PATH CLASSPATH

我们保存,退出,然后重启系统,发现jdk的版本已经是我们新安装的版本了。

接下来,我们需要安装tomcat

首先,下载。

http://tomcat.apache.org/download-80.cgi

我们打开tomcat官网找到合适的安装包后,右键点击复制下载链接,通过wget在线下载。

wget  http://apache.dataguru.cn/tomcat/tomcat-8/v8.0.23/bin/apache-tomcat-8.0.23.tar.gz

下载完成

  下载完毕,我们就可以开始解压了。

Tar -zxvf apache_tomcat1.8.-0 tar.gz

解压缩完成

我们需要将apache-tomcat文件移动到/usr/ie。

Mv apache-tomcat /usr

接下来,启动tomcat服务

Cd /usr/apache-tomcat18.0.23/bin ./startup.sh

然后我们检查tomcat相关的服务端口。

Netstat -anlpt

net-tools服务需要在Centos7下单独安装。

Yum install -y net-tools

Netstat -anlpt

然后我们用ie浏览器访问。

我们也可以通过修改apache-tomcat默认的服务端口 在apache-tomcat/conf/server.xml下

HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong) HashEnv.put(Context.SECURITY_PRINCIPAL, "cn="+username+",o=beyondsoft"); HashEnv.put(Context.SECURITY_PRINCIPAL, username); //AD的用户名 HashEnv.put(Context.SECURITY_CREDENTIALS, password); //AD的密码 HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // HashEnv.put(com.sun.jndi.ldap.connect.timeout, 3000);//连接超时设置为3秒 HashEnv.put(Context.PROVIDER_URL, "ldap://"+host+":"+port);// 默认端口389 try { ctx = new InitialDirContext(HashEnv);// 初始化上下文 Attributes attrs = ctx.getAttributes("cn="+username+",o=beyondsoft"                 ); System.out.println("Mailserver: " + attrs.get("mailserver").get()); String attDomain=attrs.get("mail").get().toString(); String attServer=attCN.split(",")[0].split("=")[1]+"." + attDomain.substring(attDomain.indexOf("@")+1) ; System.out.println(Inet4Address.getByName(attServer).getHostAddress()); return attCN.split(",")[0].split("=")[1];

然后我们需要定制java运行程序,它实际上是。战争包裹。

定义完程序后,我们会将程序的代码导出为.war包,然后通过winscp或mount复制到tomcat的安装目录下的webapp中。启动tomcat服务器系统会自动解压war包。

Tomcat服务启动后,我们通过浏览器访问,提示500页。其实500页是正常的,我们打不开页面是因为我们在程序里post请求传输。

接下来,为了测试代码是否有问题,我们将使用以下命令进行测试:

curl -i -H 'Auth-User: iiosoft' -H 'Auth-Pass: 123' -H 'Auth-Protocol: pop3'  http://localhost:8080/imail/Index.jsp

我们可以测试您是否可以正常返回诸如身份验证服务器、身份验证状态、身份验证端口、身份验证用户、身份验证通过等信息。,所以没有问题。我们可以通过telnetmailserver110对此进行验证,但是在验证过程中发现无法验证,代码确实没有问题。验证怎么会失败?

我们找到资料,确认nginx需要通过ldap返回的是auth-server,必须是服务器的ip地址。如果是服务器名,就无法解析,只能在代码中翻译。默认情况下,返回服务器名称。

HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong) HashEnv.put(Context.SECURITY_PRINCIPAL, "cn="+username+",o=beyondsoft"); HashEnv.put(Context.SECURITY_PRINCIPAL, username); //AD的用户名 HashEnv.put(Context.SECURITY_CREDENTIALS, password); //AD的密码 HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // HashEnv.put(com.sun.jndi.ldap.connect.timeout, 3000);//连接超时设置为3秒 HashEnv.put(Context.PROVIDER_URL, "ldap://"+host+":"+port);// 默认端口389 try { ctx = new InitialDirContext(HashEnv);// 初始化上下文 Attributes attrs = ctx.getAttributes("cn="+username+",o=beyondsoft"                 ); System.out.println("Mailserver: " + attrs.get("mailserver").get()); System.out.println("Mailserver: " + attrs.get("mail").get()); String attDomain=attrs.get("mail").get().toString(); String attCN=attrs.get("mailserver").get().toString(); String attServer=attCN.split(",")[0].split("=")[1]+"." + attDomain.substring(attDomain.indexOf("@")+1) ; // System.out.println(Inet4Address.getByName(attServer).getHostAddress()); //return attCN.split(",")[0].split("=")[1]; return Inet4Address.getByName(attServer).getHostAddress().toString();

接下来,我们通过修改代码来解决这个问题:

怎么解决?在初始化之前,我们想到了从LDAP中获取用户的mailserver和mailaddress值,得到的格式是a1/server,user@domain.com。那么我们就可以在左边得到a1,在右边得到@之后的内容,然后再拼接一遍就是一个服务器地址。A1.domain.com;最后,我们可以通过使用InetAddress.getByName将其转换为ip。

转换成ip后,我们再测试;

我们也通过outlook进行测试。

测试成功后,我们通过在dns中添加一个解析指向192.168.2.163,然后我们通过域名再次测试。

如果nginx要代理smtp,我们需要编辑nginx.conf来添加配置文件。

server { listen 25; protocol smtp; smtp_auth login plain; xclient off; }

注意:因为我们在Nginx下添加了SMTP代理,所以添加了SMTP的服务器区。

我们添加了重启后的发现,以表明nginx无法重启。

我们认为提示端口被使用了,系统自带的后缀启动了。

Systemctl stop postfix Systemctl disable postfix

然后我们再重启nginx。

我们通过outlook配置进行了测试。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/779984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存