分类 Linux 下的文章

我的个人博客:逐步前行STEP

出于技术上的好(zhuang)奇(bi),我想搭建一个自己的邮箱服务器,这样的话,以后的个人资料上面可以带上一个自己域名的邮箱,再也不怕简历带qq邮箱被嫌弃了。
首先是了解一下基本的邮件协议:

  1. POP3:邮局协议第三版本,主要用于从邮件服务器中检索邮件,并把所有的邮件信息立即下载到用户的计算机上。
  2. IMAP:互联网信息访问协议,可让用户在服务器上创建并管理邮件文件夹或邮箱、删除邮件、查询某封信的一部分或全部内容,完成所有这些工作时都不需要把邮件从服务器下载到用户的个人计算机上。
  3. SMTP:简单邮件传输协议,它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式

简单来说,POP3和IMAP用来收邮件,SMTP用来发邮件。而需要被安装用来收件的程序是:Dovecot,用来发件的程序是:Postfix,除此之外我们还需要一个管理邮件的web程序:RoundCube。

再介绍几个基本的概念:

  1. MUA:Mail User Agent,邮件用户代理,就是直接被用户操作来收发邮件的程序,比如qq邮箱客户端、Foxmail、Outlook等等
  2. MTA:Mail Transfer Agent,邮件传输代理,就是帮助一封邮件在网络中传输的节点
  3. MDA:Mail Delivery Agent,邮件投递代理,邮件经过若干个MTA传输后,最终到达MDA,保存在MDA的数据库中,也就是邮箱
    再需要被收件人查阅时,就需要再经过MUA取走。

所以,邮件的传输过程就是MUA(SMTP协议) 发送 -》MTA.......MAT=>MDA=>(POP3或IMAP协议) 收取 MUA

实践步骤:

  1. 首先是开放端口,25,465(SMTP服务,用于发送邮件),110,995(pop3服务,用于接收邮件)143,993(imap服务,用于接收邮件)
  2. 安装postfix
  3. 安装dovecot
  4. 配置LNMP环境
  5. 安装roundcube
    6、开启tls

每一项的细节,都能够在网上找到完整的教程,本人觉得并不能写的比别人好,并且过于繁琐,所以整理了以下参考博文链接:

1、3分钟安装配置Postfix邮件服务器

2、centos7搭建postfix邮件服务器

3、centos7邮件服务器SSL配置

4、搭建邮箱服务器

在使用roundcube时,很容易遇到一些问题,而且可能是因为这个web程序是国外的,或者使用上比较小众,不容易找到解决方案,我把自己遇到的问题以及解决方案分享一下:

  1. Plaintext authentication disallowed on non-secure (SSL/TLS) connections

     这个报错是由于未配置tls,但是dovecot、postfix配置了启用tls,需要将相关配置都注释掉:
    (1). /etc/dovecot/dovecot.conf     注释掉:
    
    
    disable_plaintext_auth=no
    ssl=yes
     (2). /etc/postfix/main.cf 注释掉:
     
    
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
  2. SMTP Error: Authentication failure

    发送邮件时报错, 需要在roundcube中加入以下配置:
    
    
    $config['imap_conn_options'] = array(
        'ssl' => array(
            'verify_peer' => false,
            'verfify_peer_name' => false,
        ),
    );
    
    
    $config['smtp_conn_options'] = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
        ),
    );
  3. SMTP Error: Connection failed: Failed to connect socket

     如果未配置好tls,就直接发邮件的话,可能会报这个错,只要先配置好tls就好了
    
  4. SMTP server does not support authentication

    开启tls之后,roundcube中的$config['smtp_server']未修改成tls协议,只要在原地址前面加:```tls://```即可。
    

其它可能出现的问题没有记下来,就不罗列了,建议postfix配置中做好限制策略,以免你的邮件服务器成为垃圾中转站或者被非法利用,比如我目前限制为:只有发送者为本域才会投递,只有接受者为本域指定账户的才会接受。

如果其中某个流程走不通的话,又很难查到解决方案的话,欢迎给我发邮件:email@hezehua.net。

补充:如果要发送邮件到外域的话,如果你的服务器是云主机,应该是发送不成功的,因为默认是不给开启25端口的,即使你安全组开启了25端口,即使你设置465端口发送也不行,只有发工单,要求解封25端口,然后做好限制策略保平安,免得因为转发垃圾邮件被封。

安装好的邮件的WEB管理端是这样的:
在这里插入图片描述
在这里插入图片描述

我的个人博客:逐步前行STEP

在真机调试的时候,发现安卓端websocket连接老是报错,一番查证,在 https://www.myssl.cn/tools/check-server-cert.html 中确认是服务器缺少中间证书,于是在 https://www.myssl.cn/tools/downloadchain.html 中下载了一个中间证书。
使用方法:
1、将中间证书内容追加到原证书中
如:

#cat >> my.crt
-----BEGIN CERTIFICATE-----
VVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UE
ChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
ZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBs
NzExMDY5NDAxMTAvBgNVBAsTKFNlZSB3d3cucmFwaWRzc2wuY29tL3Jlc291cmNl
cy9jcHMgKGMpMDcxLzAtBgNVBAsTJkRvbWFpbiBDb250cm9sIFZhbGlkYXRlZCAt
XCKBNQNAzybtImcaJjXQsihqkuohYcWh2QuijBgXZC+o9IUl+2SNhw6OYXSJTuuD
09VFQFAaUC41rLcU9BDh6w7xmGnZJzZ0H8jm2E9NA6s6DId7qQ+f/YdkKePRR+Dw
p9GnjmheMvhqs0DFj+tCFhHX3PK8WGrYBYG8ejsgo8uKAKTkishpOMyTs4CmTlDX
chn5QGRjpq2FlIqqlTwLdMGpkeUSZjuAFblLhTQs158Q5VHC5SH+3DvJW+g7/CpT
jBhiTnfNyD19rUmrWZ2dmic50B32BAiIO9OepmVvI8nA1TBvNFfhX75cOCk=
-----END CERTIFICATE-----
(执行ctrl+d)

2、重启服务器

我的个人博客:逐步前行STEP

VIM批量注释与取消注释是vim编辑中很基础的一个操作,但是尴尬的是我尝试了很久才发现这个操作只有在VIM中才能成功,很无语。。。。不知道在VI中试了多少遍了,一直以为我的服务器上的VI配置是不是有问题为什么同样的操作命令,别人都很简单就成功了我一直没效果(泪),今天我想着试试VIM中操作批量注释看,结果。。。困扰很久的问题就解决了!!
也不知道确实是我的服务器上VI配置不对,还是网上的教程有坑,明明VI不能这么批量注释却在标题上写“VI/VIM批量注释与取消”之类的,毕竟不是运维,深究的事有空再说。将这个简单的操作记录一下,权当作纪念一下踩坑的难受。
注释:

1、进入文档,vim test.txt 后,按住ctrl+v进入VISUAL BLOCK模式,上下选择需要注释的行
2、按大写键,再按i,或者直接按shift+i,进入INSERT模式,输入注释符号(#或者//)
3、按esc键,之前选择的行首部会自动加上注释符

取消:

1、进入文档,vim test.txt 后,按住ctrl+v进入VISUAL BLOCK模式,上下选择需要注释的行
2、按d键删除注释符

我的个人博客:逐步前行STEP

NFS启动时会随机启动多个端口并向RPC注册,为了设置安全组以及iptables规则,需要设置NFS固定端口。
NFS服务需要开启 mountd,nfs,nlockmgr,portmapper,rquotad这5个服务,其中nfs、portmapper的端口是固定的,另外三个服务的端口是随机分配的,所以需要给mountd,nlockmgr,rquotad设置固定的端口。
其中,给mountd、rquotad设置端口的方式很简单,在/etc/sysconfig/nfs中添加一下设置即可:

RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004

重启rpc、nfs的配置与服务:

systemctl restart rpcbind.service
systemctl restart nfs.service

查看端口使用情况:

rpcinfo -p

可以看到mountd服务已经使用了配置的端口,但是nlockmgr的端口还是随机的,还需在/etc/modprobe.d/lockd.conf中添加以下设置:

options lockd nlm_tcpport=30002
options lockd nlm_udpport=30002

重新加载NFS配置和服务:

systemctl restart nfs-config
systemctl restart nfs-idmap
systemctl restart nfs-lock
systemctl restart nfs-server

然后重启服务器,nlockmgr的端口就是固定的端口了。