chrony、rsyslog、sudo、nginx模塊

1、搭建時間服務器,日志服務器并簡述sudo安全切換

  • 搭建時間服務器

Linux操作系統中大家熟悉的時期服務器有兩個:

ntp
chrony
  • 這里我們以chrony來搭建時間服務器
    chrony是一個ntp協議的實現程序,既可以當做服務端,也可以充當客戶端;它專為間歇性互聯網連接的系統而設計,當然也能良好應用于持久互聯網連接的環境;chrony有三個時間參考:硬件時鐘、實時時鐘以及手動同步。
    • chrony的程序安裝
      [root@node01 ~]# yum -y install chrony
    
    • chrony的程序環境
    [root@node01 ~]# rpm -ql chrony
    ...
    /etc/chrony.conf        #主配置文件
    /usr/bin/chronyc        #客戶端程序
    /usr/sbin/chronyd       #服務端程序
    
    • chrony配置服務端
    [root@node01 ~]# vim /etc/chrony.conf
    兩個主要配置:
    server cn.pool.ntp.org iburst    #1、格式為:server  時間服務器域名  iburst
    allow 10.192.0.0/16  #允許指定網段的客戶端進行時間同步
    [root@node01 ~]# systemctl  enable chronyd
    [root@node01 ~]# systemctl  start chronyd
    
    • chrony客戶端配置
    [root@ceph_deploy ~]# yum -y install chrony
    [root@ceph_deploy ~]# vim /etc/chrony.conf
    一個主要配置
    server 10.192.2.222 iburst   #server指向時間服務器ip地址或域名
    [root@ceph_deploy ~]# systemctl  enable chronyd
    [root@ceph_deploy ~]# systemctl  start chronyd
    
    • 客戶端測試
    [root@ceph_deploy ~]# chronyc sources
    210 Number of sources = 1
    MS Name/IP address         Stratum Poll Reach LastRx Last sample               
    ===============================================================================
    ^* ns1.peaoguo.com               3   6   377    40  +4852us[-2383us] +/-  159ms
     或者ntpdate測試
    [root@ceph_deploy ~]# ntpdate 10.192.2.222
    22 Mar 16:04:13 ntpdate[2314700]: adjust time server 10.192.2.222 offset -0.009135 sec
    
  • 搭建日志服務器收集bash命令日志

通常我們想知道某個用戶在服務器上到底執行了那些命令,以備后續做故障分析和審計分析等等,這了我們用rsyslog收集日志,并轉發給mysql服務器,然后通過web頁面進行展示,設計方案如下:


rsyslog日志轉發過程
  • 環境準備
    為了方便,我這里將web和日志轉發放在一臺服務器(10.192.2.222),將Mariadb和客戶端放在一臺服務器(10.192.1.161),
    1、客戶端服務器和日志轉發服務器均安裝rsyslog服務,默認操作系統已經安裝rsyslog服務,如果沒有運行如下命令
    yum -y install rsyslog
    2、數據庫服務器安裝安裝Mariadb,和授權
    yum -y install mariadb-server
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON Syslog.* TO rsyslog@10.192.2.222 IDENTIFIED BY 'rsyslog'
    3、安裝LogAnalyzer及web服務
    LogAnalyzer軟件下載地址http://loganalyzer.adiscon.com/
    上傳 loganalyzer-4.1.7.tar.gz 安裝包至web服務器

    [root@node01 ~]# tar -xzvf  loganalyzer-4.1.7.tar.gz  -C /data/
    [root@node01 ~]# cd /data
    [root@node01 data]# ln -vs loganalyzer-4.1.7  rsyslog
    [root@node01 data]# yum -y install httpd
    [root@node01 data]# vim /etc/httpd/conf.d/rsyslog.conf
    <VirtualHost 10.192.2.222:80>
         ServerName www.rsyslog.com
         DocumentRoot  "/data/rsyslog"
         <Directory "/data/rsyslog">
           Options None
           AllowOverride None
           Require all granted
        </Directory>
    </VirtualHost>
    [root@node01 data]# systemctl start httpd
    
  • 客戶端配置
    思路:將bash命令按照一定格式保存在一個文件中,在通過rsyslog的轉發功能將其轉發給日志收集服務器,

    創建一個任何人都只有追加權限的文件
    [root@ceph_deploy ~]# mkdir -p /var/log/bash/
    [root@ceph_deploy ~]# touch /var/log/bash/bash.log 
    [root@ceph_deploy ~]# chown nobody:nobody /var/log/bash/bash.log
    [root@ceph_deploy ~]# chmod 002 /var/log/bash/bash.log
    [root@ceph_deploy ~]# chattr +a /var/log/bash/bash.log
    
    添加環境變量,將每一條命令日志存入上面創建的文件中
    [root@ceph_deploy ~]# vim /etc/profile
    export HISTORY_FILE=/var/log/bash/bash.log
    export SRC_IP=`who am i |awk '{ print $5}'|sed 's/(//g'|sed 's/)//g'`
    export PROMPT_COMMAND='{ date "+%F %T #### USER:$USER  IP:$SRC_IP PS:$SSH_TTY ppid=$PPID pwd=$PWD #### $(history 1 | { read x cmd; echo "$cmd"; })";} >>$HISTORY_FILE'
    [root@ceph_deploy ~]# source /etc/profile
    
    配置rsyslog
    #load imfile module
    $ModLoad imfile
    $WorkDirectory /etc/rsyslog.d
    $PrivDropTOGroup root
    $InputFilePollInterval 1
    $InputFilePersistStateInterval 1
    
    #bash.log
    $InputFileName /var/log/bash/bash.log
    $InputFileTag bashTag:
    $InputFileStateFile bash_log
    $InputFileSeverity info
    $InputFileFacility local0
    $InputRunFileMonitor
    
    #bash audit
    local0.info     @@10.192.2.222:514
    
    
  • 日志轉發服務器配置
    思路:將收集到的日志轉發給MariaDB服務器保存

    安裝rsyslog寫入mysql數據庫接口工具
    [root@node01 ~]# yum -y install rsyslog-mysql
    
    修改rsyslog配置文件
    [root@node01 ~]# vim /etc/rsyslog.conf 
    $ModLoad imtcp                    
    $InputTCPServerRun 514    設置為rsyslog收集轉發服務器監聽tpc514端口
    $ModLoad ommysql      加載寫入mysql模塊
    
    將特定的日志轉發給mysql服務器
    local0.info                                              :ommysql:10.192.1.161,Syslog,rsyslog,rsyslog
    [root@node01 ~]# systemctl restart rsyslog
    
  • web服務器查看bash日志
    在客戶端服務器輸入兩條bash命令

    [root@ceph_deploy ~]# pwd
    /root
    [root@ceph_deploy ~]# ifconfig
    

    瀏覽器查看


    查看bash命令記錄
  • sudo安全切換

    • 功能簡介:
      sudo是linux系統管理指令,是允許系統管理員讓普通用戶執行一些或者全部的root命令的一個工具,如halt,reboot,su等等。這樣不僅減少了root用戶的登錄和管理時間,同樣也提高了安全性。
    • sudo運行流程
      1、當用戶運行sudo時,系統于/etc/sudoers文件里查找該用戶是否有運行sudo的權限
      2、若具有運行sudo的權限,那么用戶輸入自己的password,注意這里輸入的是用戶自己的password
      3、假設password正確,進行sudo后面的命令,root運行sudo是不須要輸入password的,切換到的身份與運行者身份同樣的時候。也不須要輸入password。
    • 修改sudo配置文件
      sudo配置文件有兩個/etc/sudoers和/etc/sudoers.d/*
      使用visudo命令修改配置文件visudo -f /etc/sudoers.d/file
    • 授權格式
      who where=(whom) commands
      users hosts=(runas) commands
      users:username,#uid,%groupname,%#gid,user_ailas
      hosts: ip, hostname,NetAddr,host_alias,ALL
      ruanas:runas_alias,ALL
    • 示例
    別名定義了一個USERADMIN組,包含zhangsan和lisi兩個用戶
    User_Alias   USERADMIN=zhangsan,lisi
    
    別名定義了一組NETADM命令組,可使用ip和route這兩個路徑,這里必須用絕對路徑
    Cmnd_Alias   NETADM=/usr/sbin/ip,/usr/sbin/route
    
    別名定義了一組USERADM命令組,用用于用戶添加和刪除
    Cmnd_Alias   USERADM=/usr/sbin/useradd,/sbin/userdel,/usr/bin/passwd,/sbin/reboot
    
    這里wangwu用戶擁有兩個命令組的權限,前一組不需要輸入密碼,后一組執行時需要輸入用戶
    wangwu  ALL=(ALL)   NOPASSWD:NETADM,PASSWD:USERADM
    
    USERADMIN 用戶組擁有USERADM命令組的命令執行權限
    USERADMIN  ALL=(ALL)  USERADM
    
    xp用戶擁有USERADM中命令組中除了reboot的權限
    xp      ALL=(ALL)       USERADM,!/sbin/reboot
    

2、詳解nginx模塊使用方法

  • nginx簡介
    Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務
    nginx高度模塊化,但其模塊早期不支持DSO機制,近期版本支持動態裝載和卸載
  • 模塊分類:
    • 核心模塊:core module
    • 標準模塊:
      • HTTP modules:
        • Standard HTTP modules
        • Optional HTTP modules
      • Mail modules
      • Stream modules
    • 第三方模塊
  • 核心模塊
    • 正常運行必備的配置:
      • 1、user;指明運行使用的用戶
      • 2、pid /PATH/TO/PID_FIEL;指定存儲nginx主進程進程號的文件路徑
      • 3、include file | mask;指明包含進來的其它配置文件片段
      • 4、load_module file;指明要裝載的動態模塊
    • 性能優化相關配置
      • 1、worker_processes number |auto;
        worker進程的數量,通常應該為當前主機的cpu的物理核心數
        auto:當前主機物理CPU核心數
      • 2、worker_cpu_affinity cpumask ...;
        worker_cpu_affinity auto [cpumask];
        0001:0號CPU
        0010:1號CPU
        例如:
        worker_processes number 2
        worker_cpu_affinity 0100,1000;
        這表示機器有4顆CPU,nginx啟用2個進程,分別綁定在后兩顆CPU上
      • 3、worker_priority number;
        指定worker進程的nice值,設定work進程優先級:[-20到20之間]
      • 4、worker_rlimit_nofile number;
        worker進程所能夠打開的文件數量上限
    • 調試、定位問題
      • 1、daemon on|off; 是否以守護進程方式運行Nginx
      • 2、master_process on|off;是否以master、worker模型運行nginx;默認為on
      • 3、error_log file [level]
    • 事件驅動相關的配置
      events {
      ...
      }
      • 1、worker_connections number;
        每個worker進程所能打開的最大并發連接數量
        nginx最大并發=worker_processes*worker_connections
      • 2、use method;指明并發連接請求的處理方法;
        例如 use epoll;
      • 3、accept_mutex on|off
        處理新的連接請求的方法,on意味著有各worker輪流處理新請求,off意味著每個新請求都會通知所有的worker進程
    • 配置示例
    user nginx ;                             #進程運行使用的用戶和組
    pid logs/nginx.pid;                       #指定存儲nginx主進程號的文件路徑
    include vhost/*.conf;                     #指明包含進來的其他配置文件
    #include mime.type                        #指明包含進來的其他文件類型
    #load module file;                        #指明要裝載的動態模塊
    worker_processes 4 | auto;                #worker進程的數量,應小于等于cpu核心數,auto為當前主                         
                                          #機cpu核心數
    worker_cpu_affinity 0001 0010 0100 1000;  #將worker進程與通過cpumask與指定cpu綁定
    worker_priority -10;                      #指定worker進程的nice值,范圍[-20,20]
    worker_rlimite_nofile 2000;               #指定worker進程能夠打開的最大文件數
    
    #daemon on;                               #是否已守護進程方式運行Nginx
    #master_process on;                       #是否已master-worker模型運行Nginx,默認on
    
    error_log /var/log/nginx-error.log info;  #錯誤日志
    
    events {                                  #事件驅動相關配置
        use epoll;                            #指明并發連接請求的處理方式
        worker_connections 2048;              #每個worker進程能夠打開的最大并發連接數
        #accpet mutex on | off;               #處理新連接的方式,on意味著由每個worker輪流處理新請    
                                          #求,off意味著每個新請求到達都會通知所有worker進程
    }
    
  • 標準模塊-HTTP modules
    • 虛擬主機server{...}

      • listen字段
        listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
        listen address[:port][default_server][ssl][http2|spdy] [backlog=number] [rcvbuf=size] [sndbuf_size]
        default_server設定為默認虛擬主機
        ssl限制僅能通過ssl連接提供服務
        backlog=number后援隊列長度
        rcvbuf=size接收緩沖區大小
        sndbuf=size發送緩沖區大小
      • server_name字段
        server_name name ... ;
        server_name www.peaoguo.com
        指明虛擬主機的主機名稱,后可跟多個由空白字符分隔的字符串
        支持*通配任意長度的任意字符,server_name *.peguo.com www.peguo.*
        支持~起始的字符做正則表達式模式匹配,server_name ~^www\d+\.peguo\.com
        匹配順序:
        1、首先是字符串精確匹配
        2、左側*通配符
        3、右側*通配符
        4、正則表達式
      • tcp_ondelay on|off;
        在keepalived模式下的連接是否啟用TCP_NODELAY選項
        tcp_nopush on|off;
        在sendfile模式下,是否啟用TCP_CORK選項;
      • sendfile on|off;
        是否啟用sendfile功能
    • 定義路徑相關配置

      • root path;
        設置web資源路徑映射,用于指明用戶請求的url所對應的本地文件系統上的文檔所在路徑,可用的位置:http、server、location,if in location
      • location [=|~|~*|^~] url {...}
        在一個server中location配置段可存在多個,用于實際從url到文件系統的路徑映射,
        nginx會根據用戶請求的url來檢查定義的所有location,并找出一個最佳匹配,而后應
        用其配置
        =:對url做精確匹配
        ~:對url做正則表達式模式匹配,區分字符大小寫
        ~*:對url做正則表達式模式匹配,不區分字符大小寫
        ^~:對url左半部分做匹配檢查,不區分字符大小寫
        匹配優先級:=,^~,~,~/~*,不帶符號
        root /vhosts/www/htdocs/
        http://www.peaoguo.com/index.html--->/vhosts/www/htdocs/index.html
      • alias path;
        定義路徑別名,文檔映射的另一種機制,僅能用于location
        注意:location中使用root指令和alias指令的意義不同,
        root,給定的路徑對應于location中/url/左側的/
        alias,給定的路徑對應于location中的/url/右側的/
      • index file ...;
        默認資源,http,server,location
      • error_page code ... [=[response]] url;
      • try_file file ...url;
    • 定義客戶端請求的相關配置

      • keepalive_timeout timeout [header_timeout];
        設定保持連接的超時時長,0表示禁止長連接,默認為75S
      • keepalive_requests number;
        在一次長連接上所允許請求的資源的最大數量,默認為100
      • keepalive_disable none | browser ......;
        對哪種瀏覽器禁用長連接
      • send_timeout time;
        向客戶端發送響應報文的超時時長,此處,是指兩次寫操作之間的間隔時長
      • client_body_buffer_size size;
        用于接收客戶端請求報文的body部分的緩沖區大小,默認為16K,超出此大小時,其將被暫存到磁盤上的由client_body_path指定所定義的位置;
      • client_body_temp_path path [level1 [level2 [level3]]];
        設定用于存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數據
        16進制的數字
        client_body_path /var/tmp/client_body 1 2 2
        1、表示用一位16進制數字表示一級子目錄;0-f 16個
        2、表示用兩位16進制數字表示二級子目錄;00-ff 256個
        2、表示用兩位16進制數字表示三級子目錄;00-ff 256個
    • 對客戶端進行限制的相關配置

      • limit_rate rate;
        限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制
      • limit_excetp method ...{...}
        限制對指定請求方法之外的其它方法的使用客戶端
        limit_rate GET{
        allow 10.192.0.0/16 ;
        deny all;
        }
    • 文件操作優化的配置

      • aio on|off |threads[=pool];
        是否啟用aio功能
      • directio size|off;
        在LInux主機啟用O_DIRECT標記,此處意味文件大小等于給定的大小時使用,例如directio 4m;
      • open_file_cache off;
        open_file_cache max=N [inactive=time];
        nginx可以緩存以下三種信息:
        1、文件的描述符、文件大小和最近一次的修改時間
        2、打開的目錄結構
        3、沒有找到的或者沒有權限訪問的文件的相關信息
        max=N 可緩存的緩存項上限,達到上限后會使用LRU算法實現緩存管理
        lnactive=time;緩存項的非活動時間,在此處指定的時長內未被命中的或命中次數少于open_file_chache_min_uses指令所指定的非活動項
      • open_file_cache_valid time;
        緩存項有效性的檢查頻率,默認為60S
      • open_file_cache_min_uses number;
        在open_file_cache 指令的inactive參數指定的時長內,至少應該被命中多少次方可被歸類為活動項
      • open_file_cache_errors on |off
        是否緩存查找時發送錯誤的文件一類信息;
    • ngx_http_access_module模塊:
      實現基于IP的訪問控制功能

      • allow address |CIDR|unix; all;
      • deny address |CIDR|unxi; all;
        使用范文http,server,location,limit_except
    • ngx_http_auth_basic_module模塊
      實現基于用戶的的訪問控制,使用basic機制進行用戶認證

      • auth_basic_string | off;
      • auth_basic_user_file file;
        location /admin/ {
        alias /web/app/;
        auth_basic "ADMIN AREA";
        auth_basic_user_file /etc/nginx/.ngxpasswd;
        }
        注意:htpasswd命令由httpd-tools所提供
    • ngx_http_stub_status_module模塊
      用于輸出nginx的基本狀態信息

      • stub_status;
        配置示例:
        location /nginx_admin_status {
        stub_status;
        }
        各狀態參數含義:
        Active Connections:活動狀態的連接數
        accepts:已經接受的客戶端請求的總數
        handled:已經處理完成的客戶端請求的總數
        requests:客戶端發來的總的請求數
        Reading:處于讀取客戶端請求報文首部的連接的連接數
        Writing:處于向客戶端發送響應報文過程中的連接數
        Waiting:處于等待客戶端發出請求的空間連接數
    • ngx_http_log_module模塊

      • log_format name string ...;
        string可以使用nginx核心模塊及其它模塊內嵌的變量
      • access_log path [format [buffer=size [gzip[=level]] [flush=time [if=condition]];
        access_log off;
        訪問日志文件路徑,格式及相關的緩沖配置
        buffer=size
        flush=time
        • open_log_file_cache max=N [inacitve=time] [min_uses=N] [valid=time]
          open_log_file_cache off
          緩存各日志文件相關的元數據信息
          max:緩存的最大文件描述符數量
          min_uses:在inactive指定的時長內訪問大于等于此值方可被當做活動項;
          inactive:非活動時長
          valid:驗證緩存中各緩存項是否為活動項的時間間隔
    • ngx_http_gzip_module

      • gzip on|off;
      • gzip_comp_level level; level級別1-9
      • gzip_disable regex ...;
      • gzip_min_length length;
        啟用壓縮功能的響應報文大小閥值
      • gzip_buffers number size;
        支持實現壓縮功能時為其配置的緩沖區數量及每個緩存區大小
      • gzip_proxled off |expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any ...;
        nginx做為代理服務器接收從被代理服務器發送的響應報文,在何種情況下壓縮。
        off:對代理的請求不啟用
        no-cache,no-store,private:表示從被代理服務器收到的響應報文首部的Cache-Control的值為此三者中任何一個,則啟用壓縮功能;
      • gzip_types mime-type ...;
        壓縮過濾器,僅對此處設定的MIME類型的內容啟用壓縮功能
        示例:
        gzip on;
        gzip_comp_level 6;
        gzip_type text/css text/xml text/html application/javascript;
    • ngx_http_ssl_moudle

      • ssl on|off;
      • ssl_certificate file;
        當前虛擬主機使用PEM格式的證書文件;
      • ssl_certificate_key file;
        當前虛擬主機上與其證書匹配的私鑰文件;
      • ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
        支持的ssl協議版本,默認為后三個;
      • ssl_session_cache off |none |[builtin[:size]] [shared:name:size];
        builtin[:size]:使用OpenSSL內建的緩存,此緩存為每個worker進程私有
      • ssl_session_timeout time;
        客戶端一側的連接可以復用ssl session cache中緩存的ssl參數的有效時長
        配置示例:
        server {
        listen 443 ssl;
        server_name www.peaoguo.com;
        root /data/www/ssl;
        ssl on;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
        ssl_session_cache shared:sslcache:20m;
        }
    • nginx_http_rewite_modules
      將用戶請求的URI基于regex所描述的模式進行檢查,而后完成替換

      • rewrite regex replacement [flag]
        將用戶請求的URI基于regex所描述的模式進行檢查,匹配到時將其替換為replacement指定的新的URI
        注意:如果在同一級配置塊中存在多個rewirte規則,那么會自上而下組個檢查,被某條件規則替換完成后,會重啟新一輪的替換檢查,因此,隱含有循環機制;[flag]所表示的標志位用于控制此循環機制;
        [flag]
        last:重寫完成后停止對當前URI在當前的location中后續的其它重新操作,而后對新的URI啟動新一輪重新檢查,提前重 啟新一輪循環。
        break: 重寫完成后停止對當前URI在當前的location中后續的其它重新操作,而后直接跳轉至重寫規則配置塊之后的其它配置,結束循環。
        redirect:重寫完成后以臨時重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求,不能以http:// 或https://開頭。
        permanent:重新完成后以永久重定向方式直接返回重寫后生成的新URI給客戶端,由客戶端重新發起請求。
      • return
        return code [text];
        return code URL;
        return URL;
      • rewrite_log on|off;
        是否開啟重寫日志
      • if (condition) {...}
        引入一個新的配置上下文,條件滿足時,執行配置塊中的配置指令;server,location,condition
        • 比較操作符:
          ==
          !=
          ~:模式匹配區分字符大小寫;
          ~*:模式匹配,不區分大小寫
          !~:模式不匹配,區分大小寫
          !~*:模式不匹配,不區分大小寫
        • 文件及目錄存在性判斷:
          -e,!-e
          -f,!-f
          -d,!-d
          -x,!-x
      • set $variable value;
        用戶自定義變量;
    • ngx_http_referer_module

      • valid_referers none |blocked|server_names|string...;
        定義referer首部的合法可用值;
        none:請求報文首部沒有referer首部
        blocked:請求報文的referer首部沒有值
        server_names:參數,其可以有值作為主機名或主機名模式
        arbitrary_string:直接字符串,但可使用*做通配符
        regular expression:被指定的正則表達式模式匹配到的字符串,要使用~開頭,例如~.*\.peaoguo\.com;
        配置示例:
        valid_referers none blocked server_names *.peaguo.com peaguo.* *.peaoguo.* *~\.peaoguo\.;
        if($invalid_referer) {
        return http://www.peaguo.com/invalid.jpg;
        }
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容