Linux之iptables常用操作

https://blog.csdn.net/hackerain/article/details/8518167

1. 查看網(wǎng)絡(luò)監(jiān)聽的端口:

netstat -tunlp

2. 查看本機的路由規(guī)則:

route

[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.217.99.1     0.0.0.0         UG    0      0        0 eth0
10.217.99.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 vboxnet0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

Destination-->network
Genmask-->netmask
這兩者組成一個完整的網(wǎng)段

Gateway
如果為0.0.0.0戳葵,表示該路由直接由本機傳送出去,即通過局域網(wǎng)的MAC直接傳送,
如果顯示IP的話私植,表示改路由要經(jīng)過路由器才能傳送出去。

Flags:有多個標(biāo)志,代表的意義如下:
U (route is up):該路由是啟動的;
H (target is a host):目標(biāo)是一部主機 (IP) 而非網(wǎng)域;
G (use gateway):需要透過外部的主機 (gateway) 來轉(zhuǎn)遞封包;
R (reinstate route for dynamic routing):使用動態(tài)路由時,恢復(fù)路由信息的標(biāo)志;
D (dynamically installed by daemon or redirect):已經(jīng)由服務(wù)或轉(zhuǎn) port 功能設(shè)定為動態(tài)路由
M (modified from routing daemon or redirect):路由已經(jīng)被修改了;
! (reject route):這個路由將不會被接受(用來抵擋不安全的網(wǎng)域!)

Iface
這個路由傳遞封包的接口。

路由過程是有順序的视乐,從小網(wǎng)絡(luò)傳送到大網(wǎng)絡(luò),當(dāng)最后沒有合適的路由可以匹配時敢茁,就使用default路由佑淀,即destination是0.0.0.0的路由

3. /etc/services文件

每個port和各種service服務(wù)的對應(yīng)關(guān)系

4. 查看本地的網(wǎng)絡(luò)服務(wù)

netstat -tunlp  #列出正在監(jiān)聽的網(wǎng)絡(luò)服務(wù)和端口
netstat -tunp   #列出已聯(lián)機的網(wǎng)絡(luò)聯(lián)機狀態(tài)和端口
kill -9 PID     #殺掉sshd進程,即可關(guān)閉該遠程連接

5. 查看網(wǎng)絡(luò)上的開放的網(wǎng)絡(luò)服務(wù)

nmap IP
nmap localhost

6.iptables

1) 查看防火墻格式化輸出

iptables [-t tables] [-L] [-nv]

選項與參數(shù):
-t :后面接 table ,例如 nat 或 filter ,若省略此項目,則使用默認(rèn)的filter
-L :列出目前的 table 的規(guī)則
-n :不進行 IP 與 HOSTNAME 的反查,顯示訊息的速度會快很多!
-v :列出更多的信息,包括通過該規(guī)則的封包總位數(shù)彰檬、相關(guān)的網(wǎng)絡(luò)接口等

eg:

查看filter表的chain
[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  

說明:
target:代表進行的動作, ACCEPT 是放行,而 REJECT 則是拒絕,此外,尚有 DROP (丟棄) 的項目!
prot:代表使用的封包協(xié)議,主要有 tcp, udp 及 icmp 三種封包格式;
opt:額外的選項說明
source :代表此規(guī)則是針對哪個『來源 IP』進行限制?
destination :代表此規(guī)則是針對哪個『目標(biāo) IP』進行限制?

以上的每個chain中的規(guī)則渣聚,對封包進行過濾的時候是有順序的,按從上到下的順序僧叉,只要有一個規(guī)則符合奕枝,那么就可以通過防火墻,
如果一直不符合瓶堕,就一直向下繼續(xù)匹配隘道,如果都不符合,那么就執(zhí)行預(yù)設(shè)的動作郎笆。
可以看到FORWORD的最后兩個rule的target是REJECT谭梗,這說明,如果前面的rule都不符合宛蚓,那么到這條規(guī)則的時候激捏,就拒絕。

查看nat表的chain
[root@localhost ~]# iptables -t nat -L -n

2) 查看完整的防火墻規(guī)則:

查看所有的表的規(guī)則
[root@localhost ~]# iptables-save

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*nat
:PREROUTING ACCEPT [512:70935]
:INPUT ACCEPT [371:61561]
:OUTPUT ACCEPT [2352:148261]
:POSTROUTING ACCEPT [2343:147796]
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*mangle
:PREROUTING ACCEPT [26824:23528990]
:INPUT ACCEPT [26682:23519288]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22885:4162471]
:POSTROUTING ACCEPT [23023:4179687]
-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:26:06 2013

*filter
:INPUT ACCEPT [26671:23518302]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22874:4161485]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT

# Completed on Fri Jan 18 14:26:06 2013

查看某一個表的規(guī)則
[root@localhost ~]# iptables-save -t filter

# Generated by iptables-save v1.4.12 on Fri Jan 18 14:29:14 2013

*filter
:INPUT ACCEPT [26774:23531129]
:FORWARD ACCEPT [2:656]
:OUTPUT ACCEPT [22956:4173130]
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
COMMIT

# Completed on Fri Jan 18 14:29:14 2013

對比

[root@localhost ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

3) 清除防火墻

iptables [-t tables] [-FXZ]

選項與參數(shù):
-F :清除所有的已訂定的規(guī)則;
-X :殺掉所有使用者 "自定義" 的 chain (應(yīng)該說的是 tables )啰;
-Z :將所有的 chain 的計數(shù)與流量統(tǒng)計都歸零

4) 定義預(yù)設(shè)的政策(policy)

當(dāng)你的封包不在你設(shè)定的規(guī)則之內(nèi)時,則該封包的通過與否,是以 Policy 的設(shè)定為準(zhǔn)凄吏。即封包不符合你定義的所有規(guī)則的話远舅,執(zhí)行什么操作。
有兩個可選:ACCEPT, DROP痕钢。
policy是和chain對應(yīng)的图柏,一個chain對應(yīng)一個policy.

iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]

選項與參數(shù):
-P : 定義鏈( chain )。注意,這個 P 為大寫任连!
ACCEPT : 該封包可接受蚤吹。
DROP : 該封包直接丟棄,不會讓 client 端知道為何被丟棄。

eg:
iptables -P INPUT DROP  #將filter表的INPUT鏈的預(yù)設(shè)政策設(shè)置為DROP

5) 為某個chain增加規(guī)則

iptables [-AI 鏈名] [-io 網(wǎng)絡(luò)接口] [-p 協(xié)議] [-s 來源 IP/網(wǎng)域] [-d 目標(biāo) IP/網(wǎng)域] -j [ACCEPT|DROP|REJECT|LOG]
選項與參數(shù):
-AI 鏈名:針對某的鏈進行規(guī)則的 "插入" 或 "累加"
-A :新增加一條規(guī)則,該規(guī)則增加在原本規(guī)則的最后面。例如原本已經(jīng)有四條規(guī)則,使用 -A 就可以加上第五條規(guī)則!
-I :插入一條規(guī)則裁着。如果沒有指定此規(guī)則的順序,默認(rèn)是插入變成第一條規(guī)則繁涂。例如原本有四條規(guī)則,使用 -I 則該規(guī)則變成第一條,而原本四條變成 2~5 號。
鏈 :有 INPUT, OUTPUT, FORWARD 等,
-io 網(wǎng)絡(luò)接口:設(shè)定封包進出的接口規(guī)范
-i :封包所進入的那個網(wǎng)絡(luò)接口,例如 eth0, lo 等接口二驰。需與 INPUT 鏈配合;
-o :封包所傳出的那個網(wǎng)絡(luò)接口,需與 OUTPUT 鏈配合;
-p 協(xié)議:設(shè)定此規(guī)則適用于哪種封包格式,主要的封包格式有: tcp, udp, icmp 及 all 扔罪。
-s 來源 IP/網(wǎng)域:設(shè)定此規(guī)則之封包的來源項目,可指定單純的 IP 或包括網(wǎng)域,
   例如: IP:192.168.0.100,網(wǎng)域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可诸蚕。
   若規(guī)范為『不許』時,則加上 ! 即可,例如:
   -s ! 192.168.100.0/24 表示不許 192.168.100.0/24 之封包來源;
-d 目標(biāo) IP/網(wǎng)域:同 -s ,只不過這里指的是目標(biāo)的 IP 或網(wǎng)域。
-j :后面接動作,主要的動作有接受(ACCEPT)氧猬、丟棄(DROP)背犯、拒絕(REJECT)及記錄(LOG),
    LOG 這個動作僅在進行記錄而已,并不會影響到這個封包的其他規(guī)則比對的盅抚。

eg:
#1. 給filter表的INPUT鏈加上一條規(guī)則漠魏,設(shè)定 lo 成為受信任的裝置,亦即進出 lo 的封包都予以接受
iptables -A INPUT -i lo -j ACCEPT

#2. 給filter表的INPUT鏈加上一條規(guī)則,設(shè)定來自eth1接口的192.168.100.0/24網(wǎng)段的封包都接受
iptables -A INPUT -i eth1 -s 192.168.100.0/24 -j ACCEPT

#3. 給filter表的INPUT鏈加上一條規(guī)則妄均,設(shè)定來自eth1接口的 192.168.100.230 IP的封包都丟棄
iptables -A INPUT -i eth1 -s 192.168.100.230 -j DROP

#4. 記錄來自192.168.2.200這個IP的請求記錄
iptables -A INPUT -s 192.168.2.200 -j LOG

6) 設(shè)定規(guī)則具體到端口

iptables [-AI 鏈名] [-io 網(wǎng)絡(luò)接口] [-p tcp|udp] \
         [-s 來源 IP/網(wǎng)域] [--sport 端口范圍]  \
         [-d 目標(biāo) IP/網(wǎng)域] [--dport 端口范圍] \
      -j [ACCEPT|DROP|REJECT|LOG]

因為僅有 tcp 與 udp 封包具有端口,因此你想要使用--dport,--sport 時,得要加上 -p tcp 或 -p udp 的參數(shù)才會成功.

eg:

#1. 只要來自 192.168.1.0/24 的 1024:65535 端口的封包,且想要聯(lián)機到本機的 ssh port 就予以抵擋
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --sport 1024:65534 --dport ssh -j DROP

#2. 將來自任何地方來源 port 1:1023 的主動聯(lián)機到本機端的 1:1023 聯(lián)機丟棄
iptables -A INPUT -i eth0 -p tcp --sport 1:1023 --dport 1:1023 --syn -j DROP

7) 外掛模塊

iptables -A INPUT [-m state] [--state 狀態(tài)]
選項與參數(shù):
-m :一些 iptables 的外掛模塊,主要常見的有:
    state :狀態(tài)模塊
    mac:網(wǎng)絡(luò)卡硬件地址 (hardware address)
--state :一些封包的狀態(tài),主要有:
    INVALID:無效的封包,例如數(shù)據(jù)破損的封包狀態(tài)
    ESTABLISHED:已經(jīng)聯(lián)機成功的聯(lián)機狀態(tài);
    NEW:想要新建立聯(lián)機的封包狀態(tài);
    RELATED:這個最常用!表示這個封包是與我們主機發(fā)送出去的封包有關(guān)
--mac-source :就是來源主機的 MAC 啦!

eg:
#1. 只要已建立或相關(guān)封包就予以通過,只要是不合法封包就丟棄
 $ iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 $ iptables -A INPUT -m state --state INVALID -j DROP

#2. 針對局域網(wǎng)絡(luò)內(nèi)的 aa:bb:cc:dd:ee:ff 主機開放其聯(lián)機
$ iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT

#3. 接受ssh聯(lián)機
$ iptables -A INPUT -m state --state NEW -j ACCEPT

8) icmp封包規(guī)則

iptables -A INPUT [-p icmp] [--icmp-type 類型] -j ACCEPT
選項與參數(shù):
--icmp-type :后面必須要接 ICMP 的封包類型,也可以使用代號,例如 8 代表 echo request 的意思

0   Echo Reply (代表一個回應(yīng)信息)
3   Destination Unreachable (表示目的地不可到達)
4   Source Quench (當(dāng) router 的負載過高時柱锹,此類別碼可用來讓發(fā)送端停止發(fā)送訊息)
5   Redirect (用來重新導(dǎo)向路由路徑的資訊)
8   Echo Request (請求回應(yīng)訊息)
11  Time Exceeded for a Datagram (當(dāng)資料封包在某些路由傳送的現(xiàn)象中造成逾時狀態(tài),此類別碼可告知來源該封包已被忽略的訊息)
12  Parameter Problem on a Datagram (當(dāng)一個 ICMP 封包重複之前的錯誤時丰包,會回覆來源主機關(guān)于參數(shù)錯誤的訊息)
13  Timestamp Request (要求對方送出時間訊息禁熏,用以計算路由時間的差異,以滿足同步性協(xié)定的要求)
14  Timestamp Reply (此訊息純粹是回應(yīng) Timestamp Request 用的)
15  Information Request (在 RARP 協(xié)定應(yīng)用之前邑彪,此訊息是用來在開機時取得網(wǎng)路信息)
16  Information Reply (用以回應(yīng) Infromation Request 訊息)
17  Address Mask Request (這訊息是用來查詢子網(wǎng)路 mask 設(shè)定信息)
18  Address Mask Reply (回應(yīng)子網(wǎng)路 mask 查詢訊息的)

eg:
#接受所有的icmp請求
$ iptables -A INPUT -p icmp -j ACCEPT

9) 刪除某一個規(guī)則

我們可以用兩種辦法中的任一種刪除規(guī)則瞧毙。
首先,因為知道這是INPUT鏈中唯一的規(guī)則寄症,我們用編號刪除:
#刪除INPUT鏈中的編號為1的規(guī)則
$ iptables -D INPUT 1

第二種辦法是 -A 命令的映射宙彪,不過用-D替換-A。
當(dāng)你的鏈中規(guī)則很復(fù)雜有巧,而你不想計算它們的編號的時候這就十分有用了释漆。這樣的話,我們可以使用:
$ iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
-D的語法必須和-A(或者-I或者-R)一樣精確篮迎。如果鏈中有多個相同的規(guī)則男图,只會刪除第一個。

10) 將iptables規(guī)則導(dǎo)出設(shè)置開機自啟動

iptables-save >/etc/iptables.rules 

vim /etc/network/if-pre-up.d/iptables
#!/bin/bash
iptables-restore < /etc/iptables.rules

chmod  +x /etc/network/if-pre-up.d/iptables
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甜橱,一起剝皮案震驚了整個濱河市享言,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渗鬼,老刑警劉巖览露,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異譬胎,居然都是意外死亡差牛,警方通過查閱死者的電腦和手機命锄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來偏化,“玉大人脐恩,你說我怎么就攤上這事≌焯郑” “怎么了驶冒?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長韵卤。 經(jīng)常有香客問我骗污,道長,這世上最難降的妖魔是什么沈条? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任需忿,我火速辦了婚禮,結(jié)果婚禮上蜡歹,老公的妹妹穿的比我還像新娘屋厘。我一直安慰自己,他們只是感情好月而,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布汗洒。 她就那樣靜靜地躺著,像睡著了一般父款。 火紅的嫁衣襯著肌膚如雪仲翎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天铛漓,我揣著相機與錄音溯香,去河邊找鬼。 笑死浓恶,一個胖子當(dāng)著我的面吹牛玫坛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播包晰,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼湿镀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了伐憾?” 一聲冷哼從身側(cè)響起勉痴,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎树肃,沒想到半個月后蒸矛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年雏掠,在試婚紗的時候發(fā)現(xiàn)自己被綠了斩祭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡乡话,死狀恐怖摧玫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绑青,我是刑警寧澤诬像,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站闸婴,受9級特大地震影響坏挠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掠拳,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一癞揉、第九天 我趴在偏房一處隱蔽的房頂上張望纸肉。 院中可真熱鬧溺欧,春花似錦、人聲如沸柏肪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烦味。三九已至聂使,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谬俄,已是汗流浹背柏靶。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溃论,地道東北人屎蜓。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像钥勋,于是被迫代替她去往敵國和親炬转。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354