使用 Postfix 与 Dovecot 部署邮件系统

        电子邮件系统是我们在日常工作、生活中最常用的一个网络服务,本章将首先介绍电子邮件系统的起源, 然后介绍 SMTP、 POP3、 IMAP4 等常见的电子邮件协议, 以及 MUA、 MTA、MDA 这三种服务角色的作用。本章将完整地演示在 Linux 系统中使用 Postfix 和 Dovecot 服务程序配置电子邮件系统服务的方法,并重点讲解常用的配置参数,此外还将结合 BIND 服务程序提供的 DNS 域名解析服务来验证客户端主机与服务器之间的邮件收发功能。 本章最后还介绍了如何在电子邮件系统中设置用户别名,以帮助大家在生产环境中更好地控制、管理电子邮件账户以及信箱地址。

        一、电子邮件系统

        20 世纪 60 年代,美苏两国正处于冷战时期。美国军方认为应该在科学技术上保持其领先的地位,这样有助于在未来的战争中取得优势。美国国防部由此发起了一项名为ARPANET 的科研项目,即大家现在所熟知的阿帕网计划。阿帕网是当今互联网的雏形,它也是世界上第一个运营的封包交换网络。但是很快在 1971 年阿帕网遇到了严峻的问题,如图所示,参与阿帕网科研项目的科学家分布在美国不同的地区,甚至还会因为时差的影响而不能及时分享各自的研究成果,因此科学家们迫切需要一种能够借助于网络在计算机之间传输数据的方法。

1971 年阿帕网科研项目运营情况历史资料图片

        尽管 Web 服务和 FTP 文件传输服务也能实现数据交换, 但是这些服务的数据传输方式就像“打电话”那样,需要双方同时在线才能完成传输工作。如果对方的主机宕机或者科研人员因故离开,就有可能错过某些科研成果了。好在当时麻省理工学院的 Ray Tomlinson 博士也参与到了阿帕网计划的科研项目中, 他觉得有必要设计一种类似于“信件”的传输服务,并为信件准备一个“信箱” ,这样即便对方临时离线也能完成数据的接收,等上线后再进行处理即可。于是,Ray Tomlinson 博士用了近一年的时间完成了电子邮件(Email)的设计,并在 1971 年秋天使用 SNDMSG 软件向自己的另一台计算机发送出了人类历史上第一封电子邮件 — 电子邮件系统在互联网中由此诞生!

        既然要在互联网中给他人发送电子邮件,那么对方用户用于接收电子邮件的名称必须是唯一的,否则电子邮件可能会同时发给多个重名的用户,也或者干脆大家都收不到邮件了。因此,Ray Tomlinson 博士决定选择使用“姓名@计算机主机名称”的格式来规范电子信箱的名称。选择使用@符号作为间隔符的原因其实也很简单,因为 RayTomlinson 博士觉得人类的名字和计算机主机名称中应该不会有这么一个@符号, 所以就选择了这个符号。

        电子邮件系统基于邮件协议来完成电子邮件的传输,常见的邮件协议有下面这些。

        ➢  简单邮件传输协议(Simple Mail Transfer Protocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的 25/TCP 端口。

        ➢  邮局协议版本3(Post Office Protocol 3):用于将电子邮件存储到本地主机,占用服务器的 110/TCP 端口。

        ➢  Internet消息访问协议版本4(Internet Message Access Protocol 4):用于在本地主机上访问邮件,占用服务器的 143/TCP 端口。

        在电子邮件系统中, 为用户收发邮件的服务器名为邮件用户代理 (Mail User Agent,MUA) 。 另外, 既然电子邮件系统能够让用户在离线的情况下依然可以完成数据的接收,肯定得有一个用于保存用户邮件的“信箱”服务器,这个服务器的名字为邮件投递代理(Mail Delivery Agent, MDA) , 其工作职责是把来自于邮件传输代理 (Mail Transfer Agent,MTA)的邮件保存到本地的收件箱中。其中,这个 MTA 的工作职责是转发处理不同电子邮件服务供应商之间的邮件,把来自于 MUA 的邮件转发到合适的 MTA 服务器。例如,我们从新浪信箱向谷歌信箱发送一封电子邮件,这封电子邮件的传输过程如图所示。

电子邮件的传输过程

        总的来说,一般的网络服务程序在传输信息时就像拨打电话,需要双方同时保持在线,而在电子邮件系统中,当用户发送邮件后不必等待投递工作完成即可下线。如果对方邮件服务器(MTA)宕机或对方临时离线,则发件服务器(MTA)就会把要发送的内容自动的暂时保存到本地,等检测到对方邮件服务器恢复后会立即再次投递,期间一般无需运维人员维护处理,随后收信人(MUA)就能在自己的信箱中找到这封邮件了。

        大家在生产环境中部署企业级的电子邮件系统时,有 4 个注意事项请留意。

        ➢ 添加反垃圾与反病毒模块:它能够很有效地阻止垃圾邮件或病毒邮件对企业信箱的干扰。

        ➢ 对邮件加密:可有效保护邮件内容不被黑客盗取和篡改。

        ➢ 添加邮件监控审核模块:可有效地监控企业全体员工的邮件中是否有敏感词、是否有透露企业资料等违规行为。

        ➢ 保障稳定性:电子邮件系统的稳定性至关重要,运维人员应做到保证电子邮件系统的稳定运行,并及时做好防范分布式拒绝服务(Distributed Denial of Service,DDoS)攻击的准备。

        二、部署基础的电子邮件系统

        一个最基础的电子邮件系统肯定要能提供发件服务和收件服务,为此需要使用基于SMTP 协议的 Postfix 服务程序提供发件服务功能,并使用基于 POP3 协议的 Dovecot 服务程序提供收件服务功能。这样一来,用户就可以使用 Outlook Express 或 Foxmail 等客户端服务程序正常收发邮件了。电子邮件系统的工作流程如图所示。

电子邮件系统的工作流程

        在 RHEL 5、 RHEL 6 以及诸多早期的 Linux 系统中, 默认使用的发件服务是由 Sendmail服务程序提供的,而在 RHEL 7 系统中已经替换为 Postfix 服务程序。相较于 Sendmail 服务程序,Postfix 服务程序减少了很多不必要的配置步骤,而且在稳定性、并发性方面也有很大改进。

        一般而言,我们的信箱地址类似于“root@linuxprobe.com”这样,也就是按照“用户名@主机地址(域名) ”格式来规范的。如果您给我一串“root@192.168.10.10”的信息,我可能猜不到这是一个信箱地址,没准会将它当作 SSH 协议的连接信息。因此,要想更好地检验电子邮件系统的配置效果,需要先部署 bind 服务程序,为电子邮件服务器和客户端提供 DNS 域名解析服务。

        (1)配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致:

# vim /etc/hostname

mail.linuxprobe.com

# hostname

mail.linuxprobe.com

        (2)清空 iptables 防火墙默认策略,并保存策略状态,避免因防火墙中默认存在的策略阻止了客户端 DNS 解析域名及收发邮件:

# iptables -F

# service iptables save

iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

        (3)为电子邮件系统提供域名解析。由于第 13 章已经讲解了 bind-chroot 服务程序的配置方法,因此这里只提供主配置文件、区域配置文件和域名数据文件的配置内容,其余配置步骤请大家自行完成。

# cat /etc/named.conf

//

// named.conf

//

// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS

// server as a caching only nameserver (as a localhost DNS resolver only).

//

// See /usr/share/doc/bind*/sample/ for example named configuration files.

//

// See the BIND Administrator's Reference Manual (ARM) for details about the

// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

include "/etc/transfer.key";

options {

        listen-on port 53 { any; };

        listen-on-v6 port 53 { ::1; };

        directory      "/var/named";

        dump-file      "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

        recursing-file  "/var/named/data/named.recursing";

        secroots-file  "/var/named/data/named.secroots";

        allow-query    { any; };

        forwarders { 210.73.64.1; };

        allow-transfer { key master-slave; };

………………省略部分输出信息………………

# cat /etc/named.rfc1912.zones

zone "linuxprobe.com" IN {

        type master;

        file "linuxprobe.com.zone";

        allow-update { 192.168.1.155; };

        allow-transfer { 192.168.1.155; };

        allow-query { any; };

};

zone "1.168.192.in-addr.arpa" IN {

        type master;

        file "192.168.1.arpa";

        allow-update { 192.168.1.155; };

        allow-transfer { 192.168.1.155; };

        allow-query { any; };

};

# cat /var/named/linuxprobe.com.zone

$TTL 1D

@      IN SOA  linuxprobe.com. root.linuxprobe.com. (

                                        0      ; serial

                                        1D      ; refresh

                                        1H      ; retry

                                        1W      ; expire

                                        3H )    ; minimum

        NS      ns.linuxprobe.com.

ns      IN A    192.168.1.145

        IN MX 10 mail.linuxprobe.com.

mail    IN A    192.168.1.145

www    IN A    192.168.1.145

bbs    IN A    192.168.1.155

# systemctl restart named

# systemctl enable named

Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

        修改好配置文件后记得重启 bind 服务程序,这样电子邮件系统所对应的服务器主机名即为 mail.linuxprobe.com, 而邮件域为@linuxprobe.com。把服务器的 DNS 地址修改成本地 IP 地址,如图所示。

配置服务器的 DNS 地址

        1.配置 Postfix 服务程序

        Postfix 是一款由 IBM 资助研发的免费开源电子邮件服务程序, 能够很好地兼容 Sendmail服务程序, 可以方便 Sendmail 用户迁移到 Postfix 服务上。 Postfix 服务程序的邮件收发能力强于 Sendmail 服务, 而且能自动增加、 减少进程的数量来保证电子邮件系统的高性能与稳定性。另外,Postfix 服务程序由许多小模块组成,每个小模块都可以完成特定的功能,因此可在生产工作环境中根据需求灵活搭配它们。

        (1)安装 Postfix 服务程序。这一步在 RHEL7 系统中是多余的。之所以还要写上这一步骤,其目的是让大家在学完本书之后不但能掌握 RHEL 系统,还能立即上手Fedora、CentOS 等主流 Linux 系统。这样,既然这些系统没有默认安装 Postfix 服务程序,我们也可以自行搞定。在安装完 Postfix 服务程序后,需要禁用 iptables 防火墙,否则外部用户无法访问电子邮件系统。

# yum install postfix

Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos,

              : subscription-manager

Loading mirror speeds from cached hostfile

base                                                  | 3.6 kB    00:00   

centosplus                                            | 3.4 kB    00:00   

extras                                                | 3.4 kB    00:00   

updates                                                | 3.4 kB    00:00   

Package 2:postfix-2.10.1-7.0.1.el7.centos.x86_64 already installed and latest version

Nothing to do

# systemctl disable iptables

        (2) 配置 Postfix 服务程序。 大家如果是首次看到 Postfix 服务程序主配置文件 (/etc/postfix/main.cf) ,估计会被 679 行左右的内容给吓到。其实不用担心,这里面绝大多数的内容依然是注释信息。在翻遍了配置参数的介绍,以及结合多年的运维经验后,最终总结出了 7 个最应该掌握的参数,如表所示。

Postfix 服务程序主配置文件中的重要参数:

参数                                作用

myhostname              邮局系统的主机名

mydomain                  邮局系统的域名

myorigin                      从本机发出邮件的域名名称

inet_interfaces          监听的网卡接口

mydestination          可接收邮件的主机名或域名

mynetworks              设置可转发哪些主机的邮件

relay_domains          设置可转发哪些网域的邮件

        在 Postfix 服务程序的主配置文件中,总计需要修改 5 处。首先是在第 76 行定义一个名为 myhostname 的变量,用来保存服务器的主机名称。请大家记住这个变量的名称,下边的参数需要调用它:

# vim /etc/postfix/main.cf

………………省略部分输出信息………………

68 # INTERNET HOST AND DOMAIN NAMES

69 #

70 # The myhostname parameter specifies the internet hostname of this

71 # mail system. The default is to use the fully-qualified domain name

72 # from gethostname(). $myhostname is used as a default value for many

73 # other configuration parameters.

74 #

75 #myhostname = host.domain.tld

76 myhostname = mail.linuxprobe.com    #定义主机名

………………省略部分输出信息………………

        然后在第 83 行定义一个名为 mydomain 的变量,用来保存邮件域的名称。大家也要记住这个变量名称,下面将调用它:

78 # The mydomain parameter specifies the local internet domain name.

79 # The default is to use $myhostname minus the first component.

80 # $mydomain is used as a default value for many other configuration

81 # parameters.

82 #

83 mydomain = linuxprobe.com    #定义域名

        在第 99 行调用前面的 mydomain 变量,用来定义发出邮件的域。调用变量的好处是避免重复写入信息,以及便于日后统一修改:

85 # SENDING MAIL

86 #

87 # The myorigin parameter specifies the domain that locally-posted

88 # mail appears to come from. The default is to append $myhostname,

89 # which is fine for small sites.  If you run a domain with multiple

90 # machines, you should (1) change this to $mydomain and (2) set up

91 # a domain-wide alias database that aliases each user to

92 # user@that.users.mailhost.

93 #

94 # For the sake of consistency between sender and recipient addresses,

95 # myorigin also specifies the default domain name that is appended

96 # to recipient addresses that have no @domain part.

97 #

98 #myorigin = $myhostname

99 myorigin = $mydomain    #定义组织域

        第 4 处修改是在第 116 行定义网卡监听地址。 可以指定要使用服务器的哪些 IP 地址对外提供电子邮件服务;也可以干脆写成 all,代表所有 IP 地址都能提供电子邮件服务:

101 # RECEIVING MAIL

102

103 # The inet_interfaces parameter specifies the network interface

104 # addresses that this mail system receives mail on.  By default,

105 # the software claims all active interfaces on the machine. The

106 # parameter also controls delivery of mail to user@[ip.address].

107 #

108 # See also the proxy_interfaces parameter, for network addresses that

109 # are forwarded to us via a proxy or network address translator.

110 #

111 # Note: you need to stop/start Postfix when this parameter changes.

112 #

113 #inet_interfaces = all

114 #inet_interfaces = $myhostname

115 #inet_interfaces = $myhostname, localhost

116 inet_interfaces = all    #定义网络区域

119 inet_protocols = all #定义协议

        最后一处修改是在第 164 行定义可接收邮件的主机名或域名列表。这里可以直接调用前面定义好的 myhostname 和 mydomain 变量(如果不想调用变量,也可以直接调用变量中的值) :

160 # Continue long lines by starting the next line with whitespace.

161 #

162 # See also below, section "REJECTING MAIL FOR UNKNOWN LOCAL USERS".

163 #

164 mydestination = $myhostname, localhost$mydomain, localhost, $mydomain

210 local_recipient_maps=

        (3)创建电子邮件系统的登录账户。Postfix 与 vsftpd 服务程序一样,都可以调用本地系统的账户和密码,因此在本地系统创建常规账户即可。最后重启配置妥当的 postfix 服务程序,并将其添加到开机启动项中。大功告成!

# useradd boss

# echo "linuxprobe" | passwd --stdin boss

Changing password for user boss.

passwd: all authentication tokens updated successfully.

# systemctl restart postfix

# systemctl enable postfix

# netstat–anlpt | grep 25  # 查看端口是否开启

        2.配置 Dovecot 服务程序

        Dovecot 是一款能够为 Linux 系统提供 IMAP 和 POP3 电子邮件服务的开源服务程序, 安全性极高,配置简单,执行速度快,而且占用的服务器硬件资源也较少,因此是一款值得推荐的收件服务程序。

        (1)安装 Dovecot 服务程序软件包。大家可自行配置 Yum 软件仓库、挂载光盘镜像到指定目录,然后输入要安装的 dovecot 软件包名称即可:

# yum install dovecot

Loaded plugins: fastestmirror, langpacks, product-id, search-disabled-repos,

              : subscription-manager

………………省略部分输出信息………………

Installing:

dovecot          x86_64          1:2.2.36-3.el7          base          4.4 M

Transaction Summary

==============================================================================

Install  1 Package

Total download size: 4.4 M

Installed size: 14 M

Is this ok [y/d/N]: y

Downloading packages:

dovecot-2.2.36-3.el7.x86_64.rpm                          | 4.4 MB  00:05   

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

  Installing : 1:dovecot-2.2.36-3.el7.x86_64                              1/1

  Verifying  : 1:dovecot-2.2.36-3.el7.x86_64                              1/1

Installed:

  dovecot.x86_64 1:2.2.36-3.el7                                             

Complete!

        (2)配置部署 Dovecot 服务程序。在 Dovecot 服务程序的主配置文件中进行如下修改。首先是第 24 行,把 Dovecot 服务程序支持的电子邮件协议修改为 imap、pop3 和 lmtp。然后在这一行下面添加一行参数,允许用户使用明文进行密码验证。之所以这样操作,是因为 Dovecot 服务程序为了保证电子邮件系统的安全而默认强制用户使用加密方式进行登录,而由于当前还没有加密系统,因此需要添加该参数来允许用户的明文登录。

# vim /etc/dovecot/dovecot.conf

auth_mechanisms = plain login

base_dir = /var/run/dovecot/

debug_log_path = /var/log/dovecot_debug.log

disable_plaintext_auth = no

first_valid_uid = 1000

info_log_path = /var/log/dovecot_info.log

login_trusted_networks = 0.0.0.0/0

mail_location = mbox:~/mail:INBOX=/var/mail/%u #指定邮件的位置

mbox_write_locks = fcntl

namespace inbox {

  inbox = yes

  location = mbox:~/mail:INBOX=/var/mail/%u

  mailbox Drafts {

    special_use = \Drafts

  }

  mailbox Junk {

    special_use = \Junk

  }

  mailbox Sent {

    special_use = \Sent

  }

  mailbox "Sent Messages" {

    special_use = \Trash

  }

  mailbox Trash {

    special_use = \Trash

  }

  prefix =

}

passdb {

  args = dovecot

  driver = pam

}

service auth {

  unix_listener /var/spool/postfix/private/auth {

    mode = 0666

    user = postfix

  }

  unix_listener auth-userdb {

    group = boss

    mode = 0666

    user = boss

  }

}

service imap-login {

  inet_listener imap {

    port = 143

  }

}

service pop3-login {

  inet_listener pop3 {

    port = 110

  }

}

ssl = no

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem

ssl_key = </etc/pki/dovecot/private/dovecot.pem

userdb {

  driver = passwd

}

#查看110端口和143端口是否被监控

# netstat -anlpt | grep 110

# netstat -anlpt | grep 143

        (3)测试邮件

# telnet mail.linuxprobe.com 25

Trying 192.168.1.145...

Connected to mail.linuxprobe.com.

Escape character is '^]'.

220 mail.linuxprobe.com ESMTP

mail from:boss@linuxprobe.com

250 2.1.0 Ok

rcpt to:root@linuxprobe.com

250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

.

250 2.0.0 Ok: queued as 3B3C461E628E

quit

221 2.0.0 Bye

Connection closed by foreign host.

You have new mail in /var/spool/mail/root

# mail

Heirloom Mail version 12.5 7/5/10.  Type ? for help.

"/var/spool/mail/root": 5 messages 1 new 5 unread

U  1 linuxprobe@linuxprob  Fri Aug  2 17:03  17/655  "*** SECURITY inform"

U  2 linuxprobe@linuxprob  Fri Aug  2 17:04  17/655  "*** SECURITY inform"

U  3 linuxprobe@linuxprob  Fri Aug  2 22:10  17/667  "*** SECURITY inform"

U  4 linuxprobe@linuxprob  Fri Aug  2 22:10  17/667  "*** SECURITY inform"

>N  5 boss#linuxprobe.com@  Thu Aug 15 15:10  13/530 

& 5

Message  5:

From boss#linuxprobe.com@linuxprobe.com  Thu Aug 15 15:10:35 2019

Return-Path: <boss#linuxprobe.com@linuxprobe.com>

X-Original-To: root@linuxprobe.com

Delivered-To: root@linuxprobe.com

Date: Thu, 15 Aug 2019 15:09:01 +0800 (CST)

From: boss#linuxprobe.com@linuxprobe.com

Status: R

& q

Held 5 messages in /var/spool/mail/root

You have mail in /var/spool/mail/root

        (4)查看日志

#tail-f/var/log/maillog\

        (5)创建模板

        修改创建用户模板文件,使用户创建时自动生成mail存放目录

        vim /etc/skel/.bash_profile添加一下配置文件,

        if [ !-d ~/mail/.imap/INBOX ] ; then

                mkdir -p ~/mail/.imap/INBOX

        fi

        注:如果是复制的,最好在保存推出前,执行以下编码格式的执行

        :setformat=unix

        或者可以下载附件,替换当前的配置文件即可

保存退出后,执行一下,为其快速生效。

# source .bash_profile

        3.用foxmail配置邮件

        接下来我们需要创建测试用户,创建用户后,使用新用户登录后,会自动创建相关目录,然后就直接可以使用邮箱了;我们也可以使用outlook或者其他方式进行邮件测试,再次就不做测试;

        如果想希望对外及对内邮件有来往的话,需要将服务器的110、25发布到外网,然后再外网的域名商配置MX记录解析及A记录解析,这样邮件才能回来。

        我们最后使用foxmail进行内网测试了;

        我们配置两个账户,zs、ls用户进行邮件收发测试:

        我们再添加一个ls的账户

        使用zs给ls发邮件

        zs收到邮件了

        ls也收到邮件了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容