设为首页 收藏本站
查看: 1391|回复: 0

[经验分享] 编译安装postfix+sasl+mysql+dovecot+extmail构建完成的邮件系统(一)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-10-10 10:27:01 | 显示全部楼层 |阅读模式
编译安装postfix
    在之前的文章我增提到过,目前linux常用的MTA软件有sendmail,qmail,exim,postfix。虽然目前使用最多的MTA是sendmail,但是sendmail实现的功能远没有postfix功能强大,而且postfix兼容sendmail,执行效率比sendmail更高,也更安全,postfix采用模块化设计。因此,由于具有众多的优点,postfix越来越流行。因此,此章主要是介绍如何使用postfix来搭建一台服务器,并使用sasl来为客户端提供认证功能。


使用postfix搭建邮件服务器步骤如下:
一、安装postfix前需要准备的事项:
1、我想大家都发过邮件的,在发送邮件的时候,我们一般指定收件人的格式是这样的:user@domain,

因此,当客户在发送一封邮件时,首先会到DNS服务器中查找该domain内的MX记录,并由MX记录找到这个domain内的邮件服务器(也就是该MX主机的A记录)。因此在安装前,需要配置好DNS的相关参数,在这里我不在详述如何来配置这些,只需要在该domain配置好MX,A,PTR记录(邮件服务器支持反向解析)即可。假设这里的domain为xsl.com,邮件服务器为mail.xsl.com,对于的A记录为192.168.108.251

2、安装以下开发所用到的rpm包组:
Development Libraries
Development Tools
Legacy Software Development
X Software Development

3、安装所需的rpm包,这包括以下这些:
httpd, mysql, mysql-server, mysql-devel, openssl-devel, dovecot, perl-DBD-MySQL, tcl, tcl-devel, libart_lgpl, libart_lgpl-devel, libtool-ltdl, libtool-ltdl-devel, expect

4、关闭sendmail(默认系统的邮件服务器软件是sendmail,且是开启的),并将它随系统开机自动启动的功能关闭
#service sendmail stop
#chkconfig sendmail off


二、安装mysql-5.5.28
1、准备数据存放的文件系统

新建一个逻辑卷,并将其挂载至特定目录即可。这里不再给出过程。

这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录。

2、新建用户以安全方式运行进程:

# groupadd -r mysql
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
# chown -R mysql:mysql /mydata/data

3、安装并初始化mysql-5.5.28

#tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local

#cd  /usr/local

#ln -sv mysql-5.5.28-linux2.6-i686  mysql

#cd mysql

#chown -R  mysql:mysql  .

#scripts/mysql_install_db --user=mysql --datadir=/mydata/data   

(#以mysql的身份来初始化数据库并指定数据的存放位置)

#chown  -R  root   .  #(将mysql目录的属主改为root,防止mysql进程被攻破,将具有mysql的一切权限)


4、为mysql通过配置文件

#cd  /usr/local/mysql

#cp support-files/my-large.cnf  /etc/my.cnf

说明:这个目录下有多个配置文件,需要根据自己的内存来选择

这些配置文件有(在/usr/local/mysql/support-files目录下),my-small.cnf、my-medium.cnf、my-large.cnf、my-huge.cnf等等。我这里选择的是my-large.cnf作为我的配置文件

并且编辑/etc/my.cnf,找到[mysqld]的这一段落,修改thread_concurrency的值为你的CPU个数乘以2,比如这里使用如下行:
thread_concurrency = 2

另外还需要添加如下行指定mysql数据文件的存放位置:
datadir = /mydata/data


在这里说明一下。mysql的配置文件有多个,因此mysql在加载配置文件的顺序是:

/etc/my.cnf---->/etc/mysql/my.cnf--->$BASEDIR/my.cnf--->~/.my.cnf


5、为mysql通过Sysv服务脚本

#cd /usr/local/mysql

#cp support-files/mysql.server  /etc/rc.d/init.d/mysqld

#chmod +x  /etc/rc.d/init.d/mysqld


6、添加至服务列表

chkconfig  --add  mysqld

如果想让mysqld开机自动启动,可以使用chkconfig  mysqld   on命令来实现


通过上述6步就完成mysql的安装了,并且也可以进行测试了。


为了使用mysql的安装符合系统使用规范,并将其开发组件导出给系统使用,这里还需要进行如下步骤:
7、输出mysql的man手册至man命令的查找路径:

编辑/etc/man.config,添加如下行即可:
MANPATH  /usr/local/mysql/man


8、输出mysql的头文件至系统头文件路径/usr/include:

这可以通过简单的创建链接实现:
# ln -sv /usr/local/mysql/include  /usr/include/mysql


9、输出mysql的库文件给系统库查找路径:

# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf

而后让系统重新载入系统库:
# ldconfig


9、修改PATH环境变量,让系统可以直接使用mysql的相关命令

可以在/etc/profile.d/目录下创建以*.sh结尾的文件

#vim  /etc/profile.d/mysqld.sh

#添加如下行:

export  PATH=$PATH:/usr/local/mysql/bin

这样mysql就可以直接使用它的相关命令了,不需要输入绝对路径来使用



三、安装配置postfix
1、安装postfix
# groupadd -g 2525 postfix
# useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
# groupadd -g 2526 postdrop
# useradd -g postdrop -u 2526 -s /sbin/nologin -M postdrop


# tar zxvf postfix-2.9.9.tar.gz
# cd postfix-2.9.9

# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/local/mysql/lib -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'

# make
# make install



按照以下的提示输入相关的路径([]号中的是缺省值,”]”后的是输入值,省略的表示采用默认值)
  install_root: [/] /
  tempdir: [/root/postfix-2.9.3] /tmp/postfix
  config_directory: [/etc/postfix] /etc/postfix
  daemon_directory: [/usr/libexec/postfix]
  command_directory: [/usr/sbin]
  queue_directory: [/var/spool/postfix]
  sendmail_path: [/usr/sbin/sendmail]
  newaliases_path: [/usr/bin/newaliases]
  mailq_path: [/usr/bin/mailq]
  mail_owner: [postfix]
  setgid_group: [postdrop]   
    html_directory: [no]/var/www/html/postfix
    manpages: [/usr/local/man]
    readme_directory: [no]


#  newaliases
#这个目录主要是将/etc/aliases转换成/etc/aliases.db,这样MTA读取数据库格式的文件效率更高
#在postfix-2.9.9.tar.gz版本中,不需要执行该命令
#只要每次修改了/etc/aliases文件就需要执行该命令


2、配置postfix的主配置文件

# vim /etc/postfix/main.cf
修改以下几项为您需要的配置
myhostname = mail.xsl.com
myorigin = xsl.com
mydomain = xsl.com
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.108.0/24, 127.0.0.0/8
说明:
myorigin参数用来指明发件人所在的域名,即做发件地址伪装;
mydestination参数指定postfix接收邮件时收件人的域名,即您的postfix系统要接收到哪个域名的邮件;
myhostname 参数指定运行postfix邮件系统的主机的主机名,默认情况下,其值被设定为本地机器名;
#如果在此处将myhostname修改了,在/etc/sysconfig/network文件中也要相应的修改hostname值。
mydomain 参数指定您的域名,默认情况下,postfix将myhostname的第一部分删除而作为mydomain的值;
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问;如果不是本地,则不允许中继
inet_interfaces 参数指定postfix系统监听的网络接口;
relay_domains:表示对哪些些目标主机开发中继功能。默认该值为$mydestinations
注意:
1、在postfix的配置文件中,参数行和注释行是不能处在同一行中的;
2、任何一个参数的值都不需要加引号,否则,引号将会被当作参数值的一部分来使用;
3、每修改参数及其值后执行 postfix reload 即可令其生效;但若修改了inet_interfaces,则需重新启动postfix;
4、如果一个参数的值有多个,可以将它们放在不同的行中,只需要在其后的每个行前多置一个空格即可;postfix会把第一个字符为空格或tab的文本行视为上一行的延续;

四、为postfix提供SysV服务脚本/etc/rc.d/init.d/postfix,内容如下(#END 之前):
#!/bin/bash
#
# postfix      Postfix Mail Transfer Agent
#
# chkconfig: 2345 80 30
# description: Postfix is a Mail Transport Agent, which is the program \
#              that moves mail from one machine to another.
# processname: master
# pidfile: /var/spool/postfix/pid/master.pid
# config: /etc/postfix/main.cf
# config: /etc/postfix/master.cf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ $NETWORKING = "no" ] && exit 3
[ -x /usr/sbin/postfix ] || exit 4
[ -d /etc/postfix ] || exit 5
[ -d /var/spool/postfix ] || exit 6
RETVAL=0
prog="postfix"
start() {
# Start daemons.
echo -n $"Starting postfix: "
        /usr/bin/newaliases >/dev/null 2>&1
/usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
RETVAL=$?
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/postfix
        echo
return $RETVAL
}
stop() {
  # Stop daemons.
echo -n $"Shutting down postfix: "
/usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"
RETVAL=$?
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/postfix
echo
return $RETVAL
}
reload() {
echo -n $"Reloading postfix: "
/usr/sbin/postfix reload 2>/dev/null 1>&2 && success || failure $"$prog reload"
RETVAL=$?
echo
return $RETVAL
}
abort() {
/usr/sbin/postfix abort 2>/dev/null 1>&2 && success || failure $"$prog abort"
return $?
}
flush() {
/usr/sbin/postfix flush 2>/dev/null 1>&2 && success || failure $"$prog flush"
return $?
}
check() {
/usr/sbin/postfix check 2>/dev/null 1>&2 && success || failure $"$prog check"
return $?
}
restart() {
stop
start
}
# See how we were called.
case "$1" in
  start)
start
;;
  stop)
stop
;;
  restart)
stop
start
;;
  reload)
reload
;;
  abort)
abort
;;
  flush)
flush
;;
  check)
check
;;
  status)
   status master
;;
  condrestart)
[ -f /var/lock/subsys/postfix ] && restart || :
;;
  *)
echo $"Usage: $0 {start|stop|restart|reload|abort|flush|check|status|condrestart}"
exit 1
esac
exit $?
# END

为此脚本赋予执行权限:
# chmod +x /etc/rc.d/init.d/postfix
将postfix服务添加至服务列表:
# chkconfig --add postfix
设置其开机自动启动:
# chkconfig postfix on
使用此脚本重新启动服务,以测试其能否正常执行:
# service postfix restart
此时可使用本地用户测试邮件收发了。



五、postfix生成的文件
/etc/postfix/main.cf是postfix的主配置文件
/etc/postfix/master.cf规定了postfix每个程序的运作参数
/etc/postfix/access设定对哪些源和目的主机开发中继功能
/etc/aliases:邮件别名文件
/usr/sbin/postconf:可以用来查看postfix的设定数据的相关信息
                            其中-d:显示主配置文件设定的默认参数
                                     -n:显示主配置文件修改过的参数信息
                                     -m:显示postfix支持的查找表类型
                                     -A:显示支持的SASL客户端插件类型
                                     -a:服务器端支持的SASL插件类型
                                     -e:PARMATER=VALUE,用来更改配置参数,且保存在main.cf文件中
/usr/sbin/postfix:postfix的二进制程序
                            check:用来检查postfix相关文件、权限是否正确
                            start:启动postfix
                            stop:关闭postfix
                            restart:重启postfix
                            reload:重新读取配置文件,即读取/etc/postfix/main.cf
/usr/sbin/postalias:设定数据库别名的指令,因为 MTA 读取数据库格式的档案效能较佳
/usr/sbin/postmap:这个指令的用法与 postalias 类似,不过他主要在转换 /etc/postfix/access 这个档案的数据库啦!

六、为postfix服务开启用户别名支持:
1、在配置文件开启基于hash的别名文件支持
在main.cf中,找到如下指令,而后启用它(即移除前面的#号):
#alias_maps = hash:/etc/aliases
2、在/etc/aliases文件中定义新的别名项,其格式通常为以冒号隔开的两个字段,前一个字段为初始目标邮件地址,后一个字段为实际发往的地址,如:
redhat: xsl
gentoo@126.com:  admin@xsl.com
3、将/etc/aliases转换为hash格式:
# postalias  /etc/aliases
#第三步执行newaliases也行
4、让postfix重新载入配置文件,即可进行测试;

七、实现postfix基于客户端的访问控制
1、基于客户端的访问控制概览
postfix内置了多种反垃圾邮件的机制,其中就包括“客户端”发送邮件限制。客户端判别机制可以设定一系列客户信息的判别条件:
smtpd_client_restrictions    用来限制客户端来源的,允许哪些客户端发送邮件,哪些不能发送
smtpd_data_restrictions      用来限制data的数据内容
smtpd_helo_restrictions        用来限制helo阶段的内容
smtpd_recipient_restrictions    用来限制向rcpt  to阶段的目标地址发送邮件
smtpd_sender_restrictions        用来限制mail from阶段的来源主机发送邮件

上面的每一项参数分别用于检查SMTP会话过程中的特定阶段,即客户端提供相应信息的阶段,如当客户端发起连接请求时,postfix就可以根据配置文件中定义的smtpd_client_restrictions参数来判别此客户端IP的访问权限。相应地,smtpd_helo_restrictions则用于根据用户的helo信息判别客户端的访问能力等等。
如果DATA命令之前的所有内容都被接受,客户端接着就可以开始传送邮件内容了。邮件内容通常由两部分组成,前半部分是标题(header),其可以由header_check过滤,后半部分是邮件正文(body),其可以由check_body过滤。这两项实现的是邮件“内容检查”。
postfix的默认配置如下:
smtpd_client_restrictions =
smtpd_data_restrictions =
smtpd_end_of_data_restrictions =
smtpd_etrn_restrictions =
smtpd_helo_restrictions =
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
smtpd_sender_restrictions =
这限制了只有mynetworks参数中定义的本地网络中的客户端才能通过postfix转发邮件,其它客户端则不被允许,从而关闭了开放式中继(open relay)的功能。
Postfix有多个内置的限制条件,如上面的permit_mynetworks和reject_unauth_destination,但管理员也可以使用访问表(access map)来自定义限制条件。自定义访问表的条件通常使用check_client_access, check_helo_access, check_sender_access, check_recipient_access进行,它们后面通常跟上type:mapname格式的访问表类型和名称。其中,check_sender_access和check_recipient_access用来检查客户端提供的邮件地址,因此,其访问表中可以使用完整的邮件地址,如admin@xsl.com;也可以只使用域名,如xsl.com;还可以只有用户名的部分,如marion@。
访问表可以自行定义,默认的访问表为/etc/postfix/access

2、实现示例1
这里以禁止192.168.108.20这台主机通过工作在192.168.108.251上的postfix服务发送邮件为例演示说明其实现过程。访问表使用hash的格式。
(1)首先,编辑/etc/postfix/access文件,以之做为客户端检查的控制文件,在里面定义如下一行:
172.16.100.200  REJECT
(2)将此文件转换为hash格式
# postmap /etc/postfix/access
(3)配置postfix使用此文件对客户端进行检查
编辑/etc/postfix/main.cf文件,添加如下参数:
smtpd_client_restrictions = check_client_access hash:/etc/postfix/access
(4)让postfix重新载入配置文件即可进行发信控制的效果测试了。


3、实现示例2
这里以禁止通过本服务器向microsoft.com域发送邮件为例演示其实现过程。访问表使用hash的格式。
(1)首先,建立/etc/postfix/denydstdomains文件(文件名任取),在里面定义如下一行:
microsoft.com  REJECT
(2)将此文件转换为hash格式
# postmap /etc/postfix/denydstdomains
(3)配置postfix使用此文件对客户端进行检查
编辑/etc/postfix/main.cf文件,添加如下参数:
smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/denydstdomains, permit_mynetworks, reject_unauth_destination
(4)让postfix重新载入配置文件即可进行发信控制的效果测试了。


4、检查表格式的说明
hash类的检查表都使用类似如下的格式:
pattern   action
检查表文件中,空白行、仅包含空白字符的行和以#开头的行都会被忽略。以空白字符开头后跟其它非空白字符的行会被认为是前一行的延续,是一行的组成部分。
(1)关于pattern
其pattern通常有两类地址:邮件地址和主机名称/地址。
邮件地址的pattern格式如下:
user@domain  用于匹配指定邮件地址;
domain.tld   用于匹配以此域名作为邮件地址中的域名部分的所有邮件地址;
user@     用于匹配以此作为邮件地址中的用户名部分的所有邮件地址;
主机名称/地址的pattern格式如下:
domain.tld   用于匹配指定域及其子域内的所有主机;
.domain.tld   用于匹配指定域的子域内的所有主机;
net.work.addr.ess
net.work.addr
net.work
net        用于匹配特定的IP地址或网络内的所有主机;
network/mask  CIDR格式,匹配指定网络内的所有主机;
(2)关于action
接受类的动作:
OK   接受其pattern匹配的邮件地址或主机名称/地址;
全部由数字组成的action   隐式表示OK;
拒绝类的动作(部分):
4NN text
5NN text
    其中4NN类表示过一会儿重试;5NN类表示严重错误,将停止重试邮件发送;421和521对于postfix来说有特殊意义,尽量不要自定义这两个代码;
REJECT optional text...   拒绝;text为可选信息;
DEFER optional text...    拒绝;text为可选信息;

八、安装dovecot支持pop3、imap4协议来接受邮件
使用rpm  install  dovecot安装dovecot软件
安装完成后,其主配置文件是/etc/dovecot.conf
修改这个文件中的protocol  = pop3, imap4这一行,让其支持pop3和imap4协议
脚本文件是/etc/rc.d/init.d/dovecot
执行chkconfig --add  dovecot
        chkconfig  dovecot  on
        service dovecot  start
在命令行中收取邮件,需要使用如下命令:
telnet  mail.xsl.com  110
USER  hadoop
PASS hadoop
LIST    列出收取的邮件
RETR num  读取哪一封邮件

由于dovecot携带了SASL功能,因此可以使用SASL来对客户端进行认证



九、为postfix开启基于cyrus-sasl的认证功能
使用以下命令验正postfix是否支持cyrus风格的sasl认证,如果您的输出为以下结果,则是支持的:
# /usr/local/postfix/sbin/postconf  -a
cyrus
dovecot

sasl的主配置文件是/etc/sysconfig/saslauthd
脚本文件是/etc/rc.d/init.d/saslauthd
使用saslauthd -v:显示当前主机saslauthd服务所支持的认证机制,默认为pam,在这里我们可以修改一下为shadow认证,那么它就会去查找shadow文件来验证认证是否正确

启动sasl认证
#chkconfig --add sasl
#chkconfig  sasl  on
#service sasl start

#vim /etc/postfix/main.cf
添加以下内容:
############################CYRUS-SASL############################
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
        表示哪些客户端不需要经过sasl认证
smtpd_sasl_security_options = noanonymous
smtpd_sasl_path = smtpd
smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!
        其中permit_sasl_authenticated表示允许通过了sasl认证的用户发送邮件
        说明:postfix默认转发一下邮件:
                    来自$mynetworks中地址发送的邮件
                    去往$relay_domains中的域或子域的邮件,默认值为$destinations

该文件主要是定义postfix是如何使用sasl进行认证的
# vim /usr/lib/sasl2/smtpd.conf
添加如下内容:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN


让postfix重新加载配置文件
#/usr/sbin/postfix reload


最后使用telnet  192.168.108.251 25进行测试时
出现如下两行表示要经过sasl认证
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN

且要使用sasl认证功能需要输入如下命令
auth  login
这一行需要输入账号,且要是base64为编码的
使用echo -n  'hadoop' | openssl base64来生产,密钥也要是base64位编码的,方法类似

因此,一个完整的发送邮件功能是这样的:
# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 Welcome to our mail.magedu.com ESMTP,Warning: Version not Available!
ehlo mail.magedu.com
250-mail.magedu.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN               (请确保您的输出以类似两行)
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login

base64位账号
base64位密码
data
quit(退出)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25754-1-1.html 上篇帖子: 编译安装postfix+sasl+mysql+dovecot+extmail构建完成的邮件系统(二) 下篇帖子: 自动化安装postfix 邮件系统 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表