再次利用nginx反向代理发送邮件隐藏源站IP

越来越发觉nginx是个神器,从上次隐藏回调IP,现在再次利用它来隐藏邮件发送的源站IP!

这两天网站加了CDN,目的是隐藏源站IP,现在问题来了,前置CDN解决了IP暴露问题,但是对于使用邮件注册会员的系统来说,就产生了IP暴露的问题,我们来看看是怎么回事

我使用的是QQ域名邮箱,显示邮件原文后就可以看到源站IP,这不是直接脱了裤子让人家打吗,问题总是需要解决的,研究了下nginx的用法,发现nginx可以TCP反代,这可是好东西啊!

先设置源站的nginx配置文件

stream {
upstream mail.com {
server 172.16.110.13:465 weight=1;
server 172.16.110.12:465 weight=1;
server 172.16.110.14:465 weight=1;
}

server {
    listen       465;
    proxy_pass   mail.com;
}

}

然后设置源站的hosts文件

127.0.0.1 mail.com

最后设置3台代理服务器的nginx配置

stream {
server {
listen 465;
proxy_pass smtp.qq.com:465;
}
}

因为使用的是SSL,采用465端口,自己看就明白了,举一反三,其他端口应该也差不多!

邮件配置

email.host=mail.com
email.port=465
email.username=service@umistrong.com.cn
email.password=password
email.from=service@umistrong.com.cn

最后贴一下我用的邮件发送工具类,是SSL版本的


import java.security.GeneralSecurityException;
import java.util.; import javax.mail.;
import javax.mail.internet.*;
import com.sun.mail.util.MailSSLSocketFactory;
public class EmailUtils {

private static String host = PropertiesUtils.getProperties().getProperty("email.host");
private static String port = PropertiesUtils.getProperties().getProperty("email.port");
private static String userName = PropertiesUtils.getProperties().getProperty("email.username");
private static String password = PropertiesUtils.getProperties().getProperty("email.password");
private static String from = PropertiesUtils.getProperties().getProperty("email.from");

public static void sendHTMLEmail(String to,String subject,String content) throws GeneralSecurityException{
    // 获取系统属性
    Properties properties = System.getProperties();

    // 设置邮件服务器
    properties.setProperty("mail.smtp.host", host);
    properties.put("mail.smtp.port", port);

    properties.put("mail.smtp.auth", "true");
    MailSSLSocketFactory sf = new MailSSLSocketFactory();
    sf.setTrustAllHosts(true);
    properties.put("mail.smtp.ssl.enable", "true");
    properties.put("mail.smtp.ssl.socketFactory", sf);
    // 获取默认session对象
    Session session = Session.getDefaultInstance(properties,new Authenticator(){
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(userName,password); //发件人邮件用户名、密码
        }
    });

    try{
        // 创建默认的 MimeMessage 对象
        MimeMessage message = new MimeMessage(session);

        // Set From: 头部头字段
        message.setFrom(new InternetAddress(from));

        // Set To: 头部头字段
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

        // Set Subject: 头部头字段
        message.setSubject(subject);

        // 设置消息体
        message.setContent(content,"text/html; charset=utf-8");

        // 发送消息
        Transport.send(message);
    }catch (MessagingException mex) {
        mex.printStackTrace();
    }
}
}

这样搞完以后,对原先支付系统无需任何改动,只需要改动配置文件的邮件发送服务器地址即可,负载均衡发邮件,美滋滋!!!

收工睡觉,哈哈哈!

“再次利用nginx反向代理发送邮件隐藏源站IP”的4个回复

  1. 试了下umistrong.cn不能访问,还以为没人注册,刚想去抢注然后高价卖你,结果发现已经被注册了(手动滑稽)
    不过话说回来,阿里的企业邮箱都比腾讯那破邮箱好看且好用,我最近却开始喜欢Outlook

      1. 我把我名字、公司名字,公司缩写、英文名字、中文拼音全注册了,com org net 。。。
        只差一个我自己的中国的名字的.cn拼音域名被别人注册了,我找他要买他也没回复,哎

发表评论

电子邮件地址不会被公开。 必填项已用*标注