使用frp透传软件搭建本地运行的私有邮箱服务器

起因:随着我公司在线应用软件的增多,比如wordpress、 next cloud、SuitCRM 、iFair等,许多场合都要求填写邮箱地址,绑定邮箱。因为不想将过多的数据存储于第三方空间,因此考虑在公司局域网内搭建一个私有的电子邮箱服务器,再通过公司域名,实现功能的透传。

零、用到的服务器环境介绍

0.1 外网固定ip的vps

Debian12 最小化安装,frps 0.53.2, nginx , 假设绑定的域名 www.abctest.com   mail.abctest.com

该vps上运行了 公司的官方网站,采用的是html5 + CSS 编写的静态单页网站,结合私有ssl证书,通过 https://www.abctest.com 访问。

0.2 局域网搭建的iRedMail邮箱服务器

Debian12 最小化安装,frpc 0.53.2

一、邮件服务器的搭建

1.1  假设域名: abctest.com   邮箱服务器: mail.abctest.com

这里服务器环境为Debian12最小化安装;邮箱服务器采用可交互式安装的 iRedMail,安装过程可以参考官网;安装的过程中,选择使用了PostgreSQL数据库,密码假设为: Abctest888;要求设置邮箱域,输入  abctest.com 即可;还要求设邮箱管理员postmaster@abctest.com 的密码,这里假设为 Abctest888 

1.2  安装完成后如何进入邮箱:

  这里假设邮件服务器在本地局域网的ip为 192.168.1.250

管理员模式登录:
* - iRedMail Admin: https://192.168.1.250/iredadmin
管理员账号:postmaster@abctest.com  密码:Abctest888普通用户模式登录  
* - Roundcube webmail: https://mail.abctest.com    ## 默认的webGUI
* - SOGo groupware: https://mail.abctest.com/SOGo/ ## SOGo登录GUI

1.3  安装完成后可以查看服务器的总体配置

1.3.1  基本配置如下
cat iRedMail-1.6.8/configexport STORAGE_BASE_DIR='/var/vmail'
export WEB_SERVER='NGINX'
export BACKEND_ORIG='PGSQL'
export BACKEND='PGSQL'
export VMAIL_DB_BIND_PASSWD='s9SmJbOlKpPzm5T8j5qDrxobekuDbpvL'
export VMAIL_DB_ADMIN_PASSWD='IhSdIIPzbzSSXUK0BfMM5rKmtri0qPsk'
export MLMMJADMIN_API_AUTH_TOKEN='qBQyzRCwHEOvRAYlhja5tAaXhhmBXQh4'
export NETDATA_DB_PASSWD='yx0nFXuiWJs7D26xeVCwZw4RAdjEtnCA'
export PGSQL_ROOT_PASSWD='Abctest888'
export FIRST_DOMAIN='abctest.com'
export DOMAIN_ADMIN_PASSWD_PLAIN='Abctest888'
export USE_IREDADMIN='YES'
export USE_ROUNDCUBE='YES'
export USE_SOGO='YES'
export USE_NETDATA='YES'
export USE_FAIL2BAN='YES'
export AMAVISD_DB_PASSWD='tPpwOzq33oVMISgktgS3f55IeRTWjKKz'
export IREDADMIN_DB_PASSWD='EVIH8ZTsCDv3jbowtmSMEd94LLDAkVtW'
export RCM_DB_PASSWD='y9lMIKGYsjtwE07MTIsZU1EzTbGIDZyT'
export SOGO_DB_PASSWD='21NHY4yp1Yjw1qkeF4mZ2EBzBlzKW5JM'
export SOGO_SIEVE_MASTER_PASSWD='QfnTNbkQmfSn965EnGiyNzysGO3shnou'
export IREDAPD_DB_PASSWD='7QcVfbX0QTSi0Lprxisefp1YIOtdmYxn'
export FAIL2BAN_DB_PASSWD='9D4j3twgaQTS06ioSluhPeXHPnELI2kI'
#EOF
1.3.2 安装完成后的邮箱服务器信息如下
cat iRedMail-1.6.8/iRedMail.tipsAdmin of domain abctest.com:* Account: postmaster@abctest.com* Password: Abctest888You can login to iRedAdmin with this account, login name is full email address.First mail user:* Username: postmaster@abctest.com* Password: Abctest888* SMTP/IMAP auth type: login* Connection security: STARTTLS or SSL/TLSYou can login to webmail with this account, login name is full email address.* Enabled services:  rsyslog postfix postgresql nginx php8.2-fpm dovecot clamav-daemon amavis clamav-freshclam sogo memcached fail2ban cron nftablesSSL cert keys (size: 4096):- /etc/ssl/certs/iRedMail.crt- /etc/ssl/private/iRedMail.keyMail Storage:- Mailboxes: /var/vmail/vmail1- Mailbox indexes:- Global sieve filters: /var/vmail/sieve- Backup scripts and backup copies: /var/vmail/backupPostgreSQL:* Admin user: postgres, Password: Abctest888* Bind account (read-only):- Name: vmail, Password: s9SmJbOlKpPzm5T8j5qDrxobekuDbpvL* Vmail admin account (read-write):- Name: vmailadmin, Password: IhSdIIPsacSSXUK0BfMM5rKrtmi0qPsk* Database stored in: /var/lib/postgresql/15/main* RC script: /etc/init.d/postgresql* Config files:* /etc/postgresql/15/main/postgresql.conf* /etc/postgresql/15/main/pg_hba.conf* Log file: /var/log/postgresql/* See also:- /root/iRedMail-1.6.8/runtime/pgsql_init.pgsql- /var/lib/postgresql/.pgpassSQL commands used to initialize database and import mail accounts:- /root/iRedMail-1.6.8/runtime/*.sqlPostfix:* Configuration files:- /etc/postfix- /etc/postfix/aliases- /etc/postfix/main.cf- /etc/postfix/master.cf* SQL/LDAP lookup config files:- /etc/postfix/pgsqlDovecot:* Configuration files:- /etc/dovecot/dovecot.conf- /etc/dovecot/dovecot-ldap.conf (For OpenLDAP backend)- /etc/dovecot/dovecot-mysql.conf (For MySQL backend)- /etc/dovecot/dovecot-pgsql.conf (For PostgreSQL backend)- /etc/dovecot/dovecot-used-quota.conf (For real-time quota usage)- /etc/dovecot/dovecot-share-folder.conf (For IMAP sharing folder)* Syslog config file:- /etc/rsyslog.d/1-iredmail-dovecot.conf (present if rsyslog >= 8.x)* RC script: /etc/init.d/dovecot* Log files:- /var/log/dovecot/dovecot.log- /var/log/dovecot/sieve.log- /var/log/dovecot/lmtp.log- /var/log/dovecot/lda.log (present if rsyslog >= 8.x)- /var/log/dovecot/imap.log (present if rsyslog >= 8.x)- /var/log/dovecot/pop3.log (present if rsyslog >= 8.x)- /var/log/dovecot/sieve.log (present if rsyslog >= 8.x)* See also:- /var/vmail/sieve/dovecot.sieve- Logrotate config file: /etc/logrotate.d/dovecotNginx:* Configuration files:- /etc/nginx/nginx.conf- /etc/nginx/sites-available/00-default.conf- /etc/nginx/sites-available/00-default-ssl.conf* Directories:- /etc/nginx- /var/www/html* See also:- /var/www/html/index.htmlphp-fpm:* Configuration files: /etc/php/8.2/fpm/pool.d/www.confPHP:* PHP config file for Nginx:* Disabled functions: posix_uname,eval,pcntl_wexitstatus,posix_getpwuid,xmlrpc_entity_decode,pcntl_wifstopped,pcntl_wifexited,pcntl_wifsignaled,phpAds_XmlRpc,pcntl_strerror,ftp_exec,pcntl_wtermsig,mysql_pconnect,proc_nice,pcntl_sigtimedwait,posix_kill,pcntl_sigprocmask,fput,phpinfo,system,phpAds_remoteInfo,ftp_login,inject_code,posix_mkfifo,highlight_file,escapeshellcmd,show_source,pcntl_wifcontinued,fp,pcntl_alarm,pcntl_wait,ini_alter,posix_setpgid,parse_ini_file,ftp_raw,pcntl_waitpid,pcntl_getpriority,ftp_connect,pcntl_signal_dispatch,pcntl_wstopsig,ini_restore,ftp_put,passthru,proc_terminate,posix_setsid,pcntl_signal,pcntl_setpriority,phpAds_xmlrpcEncode,pcntl_exec,ftp_nb_fput,ftp_get,phpAds_xmlrpcDecode,pcntl_sigwaitinfo,shell_exec,pcntl_get_last_error,ftp_rawlist,pcntl_fork,posix_setuidClamAV:* Configuration files:- /etc/clamav/clamd.conf- /etc/clamav/freshclam.conf- /etc/logrotate.d/clamav* RC scripts:+ /etc/init.d/clamav-daemon+ /etc/init.d/clamav-freshclamAmavisd-new:* Configuration files:- /etc/amavis/conf.d/50-user- /etc/postfix/master.cf- /etc/postfix/main.cf* RC script:- /etc/init.d/amavis* SQL Database:- Database name: amavisd- Database user: amavisd- Database password: tPpwOzq33oVMISgktgS3f55IeRTWjKKzDNS record for DKIM support:; key#1 2048 bits, s=dkim, d=abctest.com, /var/lib/dkim/abctest.com.pem
dkim._domainkey.abctest.com.        3600 TXT ("v=DKIM1; p=""MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs9BKQ0Q821NN1IC8FbzC""3Uq1XGF/10xypU6LUZpNudmvqApCAQDXcyvMIiYwFhejtMdeLbk+qbywuiHGRs3Y""OlJ/fGTTgIUL8qx3IfxEjtvvsU90fi94721+1kCKy7SyFHXgkyjlRTUXkUnF3HplIV6""TWlXBp9GvpSXW5ZNfBG3zFM2NZTt3A8psKbHs6FQyZ6Z7fMi+cKEktRrg2e4P2kx""wfJ25W+FGTVI//H1AsE3ZfjV+RQj1rjB2d5Vpls1SZCA3Q6nqc5lDufPxnmviC9F""VvjN3K9XcF9beSCV3oTgQUz6PRNuli7/5TMkTUP/DqigodyQqubARdMFPDNn3+pX""JQIDAQAB")
SpamAssassin:* Configuration files and rules:- /etc/mail/spamassassin- /etc/mail/spamassassin/local.cfiRedAPD - Postfix Policy Server:* Version: 5.3.3* Listen address: 127.0.0.1, port: 7777* SQL database account:- Database name: iredapd- Username: iredapd- Password: 7QcVfbX0QTSi9Lprxisekl1YIOtdmYvz* Configuration file:- /opt/iredapd/settings.py* Related files:- /opt/iRedAPD-5.3.3- /opt/iredapd (symbol link to /opt/iRedAPD-5.3.3iRedAdmin - official web-based admin panel:* Version: 2.5* Root directory: /opt/www/iRedAdmin-2.5* Config file: /opt/www/iRedAdmin-2.5/settings.py* Web access:- URL: https://mail.abctest.com/iredadmin/- Username: postmaster@abctest.com- Password: Abctest888* SQL database:- Database name: iredadmin- Username: iredadmin- Password: EVIH8ZTsCDa9jbowtmSMEd63LLDAkVtWRoundcube webmail: /opt/www/roundcubemail-1.6.5* Config file: /opt/www/roundcubemail-1.6.5/config* Web access:- URL: http://mail.abctest.com/mail/ (will be redirected to https:// site)- URL: https://mail.abctest.com/mail/ (secure connection)- Username: postmaster@abctest.com- Password: Abctest888* SQL database account:- Database name: roundcubemail- Username: roundcube- Password: y5lMIKGYsjtwE07MTIsZU2EzTbGIDZyT* Cron job:- Command: "crontab -l -u root"SOGo Groupware:* Web access: httpS://mail.abctest.com/SOGo/* Main config file: /etc/sogo/sogo.conf* Nginx template file: /etc/nginx/templates/sogo.tmpl* Database:- Database name: sogo- Database user: sogo- Database password: 75NHY4yp1Yjw1qkeF3mZ2EBzBlzKW0JM* SOGo sieve account (Warning: it's a Dovecot Master User):- file: /etc/sogo/sieve.cred- username: sogo_sieve_master@not-exist.com- password: QfnTNbkQmfSn371EnGiyNzysGO8shnou* See also:- cron job of system user: sogonetdata (monitor):- Config files:- All config files: /opt/netdata/etc/netdata- Main config file: /opt/netdata/etc/netdata/netdata.conf- Modified modular config files:- /opt/netdata/etc/netdata/go.d- /opt/netdata/etc/netdata/python.d- HTTP auth file (if you need a new account to access netdata, pleaseupdate this file with command like 'htpasswd' or edit manually):- /etc/nginx/netdata.users- Log directory: /opt/netdata/var/log/netdata- SQL:- Username: netdata- Password: yx4nFXuiWJs9D38xeVCwZw1RAdjEtnCA- NOTE: No database required by netdata.

1.4 管理员登录界面和普通用户登录界面

二 、frp 软件的设置 

可参考我的两篇文章

frp透传软件最新toml格式的配置文件的使用_frpc toml设置-CSDN博客

利用frps搭建本地自签名https服务的透传_frp配置ssl-CSDN博客

假设我们的域名服务器就是frps服务器,也就是  www.abctest.com

2.1 frps.toml的配置

cat /etc/frp/frps.tomlbindPort = 7777
vhostHTTPSPort = 443
vhostHTTPPort = 8080

2.2 frpc.toml的配置

主要是对 邮箱服务所需的特定端口进行绑定,类型都是tcp

 cat /etc/frp/frpc.tomlserverAddr = "www.abctest.com"
serverPort = 7777[[proxies]]
name = "ssh-250"
type = "tcp"
localIP = "127.0.0.1"
localPort = 33250
remotePort = 33250[[proxies]]
name = "web-250"
type = "https"
localPort = 443
customDomains = ["mail.abctest.com"][[proxies]]
name = "smtp-250"
type = "tcp"
localPort = 25
remotePort = 25[[proxies]]
name = "submission-250"
type = "tcp"
localPort = 587
remotePort =587[[proxies]]
name = "pop3-250"
type = "tcp"
localPort = 110
remotePort =110[[proxies]]
name = "pop3s-250"
type = "tcp"
localPort = 995
remotePort =995[[proxies]]
name = "imap-250"
type = "tcp"
localPort = 143
remotePort = 143[[proxies]]
name = "imaps-250"
type = "tcp"
localPort = 993
remotePort = 993

三、 服务端nginx对域名 mail.abctest.com 的自动转发

因为外网vps运行的是 frps以及一个官网网页,所以已经占据了80端口和443端口,要想实现对 https://mail.abctest.com 的转发,需要新增一个 nginx 虚拟机的配置。配置文件内容如下

 cat /etc/nginx/conf.d/mail.confserver {listen      80 ;listen      [::]:80 ;server_name mail.abctest.com;rewrite ^/(.*)$ https://mail.abctest.com:443/$1 permanent;#               location / {#  proxy_pass http://127.0.0.1:443;# }}

局域网内 iRedMail服务器的 nginx设置

将  /etc/nginx/sites-enabled/{00-default-ssl.conf,00-default.conf} 这两个配置文件中 的  server_name 配置上 mail.abctest.com  即可!!

重启vps和本地iRedMail 服务器上的 nginx

连接测试一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识计算机网络 | 计算机网络的发展 | 协议初识

1.计算机网络的发展 “矛盾是普遍存在的,矛盾是事物联系的实质内容和事物发展的根本动力!” 计算机在诞生之初,在军事上用来计算导弹的弹道轨迹!在发展的过程中(商业的推动,国家政策推动)&…

ChatGLM论文解读

GLM GLM: General Language Model Pretraining with Autoregressive Blank Infilling 论文地址 1. 背景介绍 1)主流预训练框架 模型介绍结构特点训练目标autoregressive自回归模型,代表GPT,本质上是一个从左到右的语言模型,常用于无条件生成任务(unconditional generat…

composer安装hyperf后,nginx配置hyperf

背景 引入hyperf项目用作微服务,使用composer 安装hyperf后,对hyperf进行nginx配置。 配置步骤 因为hyperf监听的是端口,不像其他laravel、lumen直接指向文件即可。所有要监听端口号。 1 配置nginx server {listen 80;//http&#xff1a…

如何使用宝塔面板配置Nginx反向代理WebSocket(wss)

本章教程,主要介绍一下在宝塔面板中如何配置websocket wss的具体过程。 目录 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 2、代理配置内容 三、注意事项 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 map $http_upgrade $connection_…

【算法Hot100系列】不同路径

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

LIMS源码,实验室信息系统源码,后端框架:asp.net

LIMS(laboratory information management system)即实验室信息管理系统是实验室管理科学发展的成果,是实验室管理科学与现代信息技术结合的产物,是利用计算机网络技术、数据存储技术、快速数据处理技术等,对实验室进行全方位管理的计算机软件…

【Linux】糟糕,是心动的感觉——与Linux的初次相遇

初识Linux 导言一、计算机的发展1.1 历史背景1.2 计算机的发明 二、操作系统2.1 什么是操作系统?2.2 操作系统的诞生2.3 操作系统的发展2.3.1 批处理系统的发展2.3.2 分时系统2.3.3 实时系统2.3.4 通用操作系统 2.4 UNIX操作系统2.4.1 UNIX的诞生2.4.2 UNIX的发展 2…

开源 C/C++(DuckX)操作docx文旦

目录 1.详情 2.项目示例 1.详情 创建、读取和写入 Microsoft Office Word docx 文件,可以不使用Microsoft Office组件。目前看操作docx文件绕不开Microsoft Office组件,虽然本项目可以读取docx文档,但是里面排版都消失了,除此之…

BP神经网络需要像深度学习一次次的迭代训练吗?

BP神经网络 答案:是的,BP神经网络需要像深度学习一次次的迭代训练。总结(BP神经网络和深度学习在本质上有以下区别) 答案:是的,BP神经网络需要像深度学习一次次的迭代训练。 BP神经网络(误差反…

2024.1.24 GNSS 学习笔记

1.伪距观测值公式 2.载波相位观测值公式 3.单点定位技术(Single Point Positionin, SPP) 仅使用伪距观测值&#xff0c;不使用其他的辅助信息获得ECEF框架下绝对定位技术。 使用广播星历的轨钟进行定位&#xff0c;考虑到轨钟的米级精度&#xff0c;所以对于<1米的误差&…

Linux:gcc的相关知识

目录 gcc的翻译&#xff08;编译&#xff09;过程&#xff1a; 预处理&#xff1a; 条件编译&#xff1a; 编译&#xff1a; 汇编&链接&#xff1a; 什么是链接&#xff1f; 安装静态库&#xff1a; 静态库的使用&#xff1a; 动态静态的对比&#xff1a; 优缺对比…

IDEA插件(MyBatis Log Free)

引言 在Java开发中&#xff0c;MyBatis 是一款广泛使用的持久层框架&#xff0c;它简化了SQL映射并提供了强大的数据访问能力。为了更好地调试和优化MyBatis应用中的SQL语句执行&#xff0c;一款名为 MyBatis Log Free 的 IntelliJ IDEA 插件应运而生。这款插件旨在帮助开发者…

Oracle、MySQL数据库常规命令语法-简易记录(非常规持续更新)

前言:呈现的是非常基础必备命令以及常规关联语法,因涉及到不同数据库其表达都会有所区别,此篇纯属做个仓库记录更非常规持续更新,专业人士可忽略,且看且珍惜… MySQL: 关系型数据库、重点开源、支持大型规模、标准SQL数据语言、多平台多架构、高可用集群、可定制开发等等、…

Spring Cloud+SkyWalking全链路监控部署及使用分享

先了解 SkyWalking 极简入门 | Apache SkyWalking 版本&#xff1a;apache-skywalking-apm-9.7.0.tar.gz OAP服务和UI服务 apache-skywalking-java-agent-9.1.0.tgz JAVA-AGENT服务 环境&#xff1a;linux 项目&#xff1a;spring cloud 记录下碰到的问题&#xff1a; 1、s…

阿赵UE学习笔记——12、植物系统

阿赵UE学习笔记目录 大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的用法。这次需要使用植物系统在地形上添加一些草和石头的装饰。 一、素材准备 之前介绍过&#xff0c;可以在Quixel上面获取免费的资源&#xff0c;所以我这里就下载了一些资源&#xff0c;有草和石头的…

windbg:设置断点 bp, bu, bm

bp、bu和bm命令设置一个或多个软件断点。您可以组合位置、条件和选项来设置不同类型的软件断点。 本文中的调试代码示例如下&#xff1a; #include <iostream>using namespace std;struct JKGirl{std::string name;int age;friend ostream& operator <<(ostr…

一文分清:Less、Sass、Scss、stylus,看看与css的对比

一、什么是css预处理器&#xff0c;有什么作用 CSS 预处理器是一种将预先定义的语法和功能添加到 CSS 中的工具。它们允许开发人员使用变量、嵌套规则、混合、继承等功能&#xff0c;以更高效和可维护的方式编写样式表。 CSS 预处理器的作用包括&#xff1a; 变量和计算&…

php项目中laravel框架下用postman调用接口实战总结

一.项目接口实战总结: 1.传参赋值错乱问题&#xff0c;如下&#xff1a; SQLSTATE[HY093]: Invalid parameter number (SQL: select count(*) as aggregate from cars where company_id 3345 and status ! 7 and user_id in (2148, 2060, 2061, 2432, 2136, 1970, 1987, 202…

【unity实战】实现实体子弹射击

文章目录 射击脚本新增子弹预制体子弹挂载脚本&#xff0c;实现触碰销毁子弹添加拖尾效果完结 射击脚本 public class Weapon : MonoBehaviour {public GameObject bulletPrefab; // 子弹预制体public Transform bulletSpawn; // 子弹生成位置public float bulletVelocity 30…

重构改善既有代码的设计-学习(三):重新组织数据

1、拆分变量&#xff08;Split Variable&#xff09; 有些变量用于保存一段冗长代码的运算结果&#xff0c;以便稍后使用。这种变量应该只被赋值一次。 如果它们被赋值超过一次&#xff0c;就意味它们在函数中承担了一个以上的责任。如果变量承担多个责任&#xff0c;它就应该被…