展开目录
sendmail用nginx做代理
sendmailcentos发邮件nginx代理
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

sendmail收件配置的限制比较繁琐,因此我使用nginx做反向代理控制收邮件。主要控制收件来源的频率,以及流量拦截,否则裸奔的sendmail还是比较危险的。

首先把sendmail的端口改掉(原本29876的地方写的是smtp):

DAEMON_OPTIONS(`Port=29876,Addr=0.0.0.0, Name=MTA)dnl

修改之后

m4 /etc/mail/sendmail.mc>/etc/mail/sendmail.cf

并重启sendmail,sendmail配置可参考 https://www.xdelve.com/usershare/fb0044daf15b007bda187891b53d9d97/19dw.asp

防火墙开启之后,对外开放的25端口交给nginx,29876作为内部端口使用。

然后就是nginx的配置了,首先确定nginx的配置信息,核心模块是--with-stream=dynamic,--with-stream_ssl_module,--with-mail=dynamic,--with-mail_ssl_module

image.png

nginx的配置文件设置代理信息,暂时只做一个代理,不进行身份验证:

加上这段,用于代理到内部邮件服务器:


load_module /usr/local/nginx/modules/ngx_stream_module.so;

stream {
    upstream smtp-server{
        server xdelve.com:29876 weight=3;
    }

    server {
        listen      2525;
        proxy_pass  smtp-server;
    }
}

mail {

    # See /etc/nginx/sites-available/mail_auth
    auth_http         localhost:8025/mail_auth/;

    proxy             on;
    proxy_pass_error_message on;

    smtp_auth         none;
    smtp_capabilities "SIZE 10485760" 8BITMIME ENHANCEDSTATUSCODES DSN ;


    ssl        off;
    xclient    off;

    server {
        listen     25;
        protocol   smtp;
    }
}

以及这段,我加上了频率限制的条件,一分钟一个ip只允许发送一封邮件,以免被别人不断发送邮件攻击:

limit_req_zone $binary_remote_addr zone=mailfeq:10m rate=1r/m;

server {
    listen      8025;
    server_name localhost;
    charset     utf-8;

    location ~ /mail_auth/ {
        limit_req   zone=mailfeq;
        add_header Auth-Status OK;
        add_header Auth-Server 127.0.0.1;
        add_header Auth-Port   2525;
        empty_gif;
        break;
    }
}

这两段加在对应位置,然后重启nginx即可。

参考:

  1. https://qiita.com/aya_eiya/items/dbd2ffff1f07a7bfedd6
  2. https://qiita.com/ma3ki/items/44dab8d93423978dd5d9
  3. https://qiita.com/ma3ki/items/ce458f010a732af00179
  4. https://serverfault.com/questions/858067/unknown-directive-stream-in-etc-nginx-nginx-conf86

相关文档

暂无

随便看看

  1. css3自定义滚动条样式

  2. 安卓文字偏上,文字顶部被遮罩

  3. mac 终端运行后台程序如何在终端关闭时继续运行

  4. raw.githubusercontent.com DNS被指向127.0.0.1

  5. nginx用域名来转发请求

  6. npm包命令行调用

  7. heroku登陆cli

  8. webrtc服务搭建

  9. dd备份/还原

  10. cdn资源列表

  11. webpack使用外部资源

  12. ssl 证书生成方式

  13. centos查看最近一次的开机时间

  14. youku电脑版跳过广告代码

  15. 配置mysql ssl连接

  16. html表格导出csv文件并下载

  17. 前端性能观察器

畅言模块加载中